You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by oc...@apache.org on 2021/02/03 20:15:55 UTC

[trafficcontrol] branch master updated: apache/trafficcontrol is a Go module (#5229)

This is an automated email from the ASF dual-hosted git repository.

ocket8888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 09e2501  apache/trafficcontrol is a Go module (#5229)
09e2501 is described below

commit 09e25013fd20a7936f68e857a6b2a38aaefd2f9f
Author: Zach Hoffman <zr...@apache.org>
AuthorDate: Wed Feb 3 13:15:42 2021 -0700

    apache/trafficcontrol is a Go module (#5229)
    
    * Move packages from grove/vendor to main vendor directory
    
    * Move packages from traffic_monitor/vendor to main vendor directory
    
    * Move packages from traffic_ops_ort/vendor to main vendor directory
    
    * Move packages from traffic_ops/traffic_ops_golang/vendor to main vendor directory
    
    * Move packages from traffic_ops/vendor to main vendor directory
    
    * Move packages from traffic_stats/vendor to main vendor directory
    
    * gopkg.in/fsnotify.v1 -> github.com/fsnotify/fsnotify
    
    * Make apache/trafficcontrol a Go module
    
    * Use our older module versions
    
    * Remove unused packages
    
    * `go mod` excludes test files, removing them
    
    * Remove non-go files, also excluded by `go mod`
    
    * Remove other go sources that `go mod` has deemed unnecessary
    
    * Track changes and additions to existing modules
    
    * Track and license new modules
    
    * "Run API tests" action: Move repository into the GOPATH
    
    Also, make Traffic Vault start as soon as possible since it no longer
    has enough time to build and start before it is needed using the
    previous execution method
    
    * Make Go Unit Tests a JavaScript action to move the repository into the
    GOPATH
    
    * Revert "Make Go Unit Tests a JavaScript action to move the repository into the GOPATH"
    
    * Go unit tests: Checkout the project in the GOPATH
    
    * "TP E2E Tests" action: Move repository into the GOPATH
---
 .dependency_license                                |     6 +-
 .github/actions/go-test/entrypoint.sh              |    21 +-
 .github/actions/to-integration-tests/entrypoint.sh |    34 +-
 .github/actions/tp-e2e-tests/entrypoint.sh         |    17 +-
 .github/workflows/go.unit.tests.yaml               |    23 +-
 .github/workflows/traffic ops.yml                  |    12 +-
 .gitignore                                         |     7 +
 CHANGELOG.md                                       |     1 +
 LICENSE                                            |   324 +-
 docs/source/development/traffic_ops.rst            |     6 +-
 docs/source/development/traffic_stats.rst          |     4 +-
 go.mod                                             |    73 +
 go.sum                                             |   130 +
 grove/README.md                                    |    13 +-
 grove/build/build_rpm.sh                           |     2 +-
 grove/grovetccfg/build/build_rpm.sh                |     2 +-
 grove/integration_test/setup-and-run.sh            |     6 +-
 grove/vendor/code.cloudfoundry.org/bytefmt/LICENSE |   201 -
 .../code.cloudfoundry.org/bytefmt/bytes_test.go    |   271 -
 .../bytefmt/formatters_suite_test.go               |    13 -
 .../github.com/dchest/siphash/siphash_test.go      |   591 -
 grove/vendor/go.etcd.io/bbolt/allocate_test.go     |    31 -
 grove/vendor/go.etcd.io/bbolt/bucket_test.go       |  1959 --
 grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main.go    |  2136 --
 grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main_test  |   455 -
 grove/vendor/go.etcd.io/bbolt/cursor_test.go       |   817 -
 grove/vendor/go.etcd.io/bbolt/db_test.go           |  1783 --
 grove/vendor/go.etcd.io/bbolt/freelist_test.go     |   434 -
 grove/vendor/go.etcd.io/bbolt/manydbs_test.go      |    67 -
 grove/vendor/go.etcd.io/bbolt/node_test.go         |   156 -
 grove/vendor/go.etcd.io/bbolt/page_test.go         |    72 -
 grove/vendor/go.etcd.io/bbolt/quick_test.go        |    90 -
 .../bbolt/simulation_no_freelist_sync_test.go      |    47 -
 grove/vendor/go.etcd.io/bbolt/simulation_test.go   |   361 -
 grove/vendor/go.etcd.io/bbolt/tx_test.go           |   924 -
 infrastructure/cdn-in-a-box/enroller/Dockerfile    |     4 +-
 infrastructure/cdn-in-a-box/enroller/enroller.go   |     2 +-
 .../traffic_ops_integration_test/Dockerfile        |     8 +-
 pkg                                                |     2 +-
 tools/golang/Dockerfile                            |    19 +-
 tools/golang/unit-tests.sh                         |     1 +
 traffic_monitor/build/build_rpm.sh                 |     4 +-
 traffic_monitor/poller/file.go                     |     2 +-
 traffic_monitor/tests/Dockerfile-golangtest        |     2 +-
 .../stoppableListener/example/example.go           |    52 -
 traffic_ops/app/bin/tests/Dockerfile-golangtest    |     2 +-
 traffic_ops/build/build_rpm.sh                     |    11 +-
 traffic_ops/testing/compare/Dockerfile             |     4 +-
 traffic_ops/traffic_ops_golang/README.md           |     2 +-
 .../exporter/ocagent/LICENSE                       |   201 -
 .../exporter/ocagent/common.go                     |    38 -
 .../exporter/ocagent/connection.go                 |    97 -
 .../exporter/ocagent/nodeinfo.go                   |    46 -
 .../exporter/ocagent/ocagent.go                    |   496 -
 .../exporter/ocagent/options.go                    |   128 -
 .../exporter/ocagent/transform_spans.go            |   248 -
 .../exporter/ocagent/transform_stats_to_metrics.go |   274 -
 .../exporter/ocagent/version.go                    |    17 -
 .../github.com/Azure/azure-sdk-for-go/LICENSE      |   202 -
 .../github.com/Azure/azure-sdk-for-go/NOTICE       |     5 -
 .../services/dns/mgmt/2017-09-01/dns/client.go     |    51 -
 .../services/dns/mgmt/2017-09-01/dns/models.go     |   833 -
 .../services/dns/mgmt/2017-09-01/dns/recordsets.go |   715 -
 .../services/dns/mgmt/2017-09-01/dns/version.go    |    30 -
 .../services/dns/mgmt/2017-09-01/dns/zones.go      |   572 -
 .../Azure/azure-sdk-for-go/version/version.go      |    21 -
 .../vendor/github.com/Azure/go-autorest/LICENSE    |   191 -
 .../Azure/go-autorest/autorest/adal/config.go      |    91 -
 .../Azure/go-autorest/autorest/adal/devicetoken.go |   242 -
 .../Azure/go-autorest/autorest/adal/persist.go     |    73 -
 .../Azure/go-autorest/autorest/adal/sender.go      |    60 -
 .../Azure/go-autorest/autorest/adal/token.go       |   985 -
 .../Azure/go-autorest/autorest/adal/version.go     |    45 -
 .../Azure/go-autorest/autorest/authorization.go    |   287 -
 .../Azure/go-autorest/autorest/autorest.go         |   150 -
 .../Azure/go-autorest/autorest/azure/async.go      |   919 -
 .../Azure/go-autorest/autorest/azure/auth/auth.go  |   712 -
 .../Azure/go-autorest/autorest/azure/azure.go      |   326 -
 .../go-autorest/autorest/azure/cli/profile.go      |    79 -
 .../Azure/go-autorest/autorest/azure/cli/token.go  |   170 -
 .../go-autorest/autorest/azure/environments.go     |   244 -
 .../autorest/azure/metadata_environment.go         |   245 -
 .../Azure/go-autorest/autorest/azure/rp.go         |   200 -
 .../Azure/go-autorest/autorest/client.go           |   324 -
 .../Azure/go-autorest/autorest/date/date.go        |    96 -
 .../Azure/go-autorest/autorest/date/time.go        |   103 -
 .../Azure/go-autorest/autorest/date/timerfc1123.go |   100 -
 .../Azure/go-autorest/autorest/date/unixtime.go    |   123 -
 .../Azure/go-autorest/autorest/date/utility.go     |    25 -
 .../github.com/Azure/go-autorest/autorest/error.go |    98 -
 .../Azure/go-autorest/autorest/preparer.go         |   525 -
 .../Azure/go-autorest/autorest/responder.go        |   269 -
 .../Azure/go-autorest/autorest/retriablerequest.go |    52 -
 .../go-autorest/autorest/retriablerequest_1.7.go   |    54 -
 .../go-autorest/autorest/retriablerequest_1.8.go   |    66 -
 .../Azure/go-autorest/autorest/sender.go           |   334 -
 .../Azure/go-autorest/autorest/to/convert.go       |   152 -
 .../Azure/go-autorest/autorest/utility.go          |   228 -
 .../Azure/go-autorest/autorest/validation/error.go |    48 -
 .../go-autorest/autorest/validation/validation.go  |   400 -
 .../Azure/go-autorest/autorest/version.go          |    41 -
 .../github.com/Azure/go-autorest/logger/logger.go  |   328 -
 .../Azure/go-autorest/tracing/tracing.go           |   195 -
 .../vendor/github.com/BurntSushi/toml/COPYING      |    21 -
 .../vendor/github.com/BurntSushi/toml/LICENSE      |    21 -
 .../BurntSushi/toml/cmd/toml-test-decoder/COPYING  |    21 -
 .../BurntSushi/toml/cmd/toml-test-encoder/COPYING  |    21 -
 .../github.com/BurntSushi/toml/cmd/tomlv/COPYING   |    21 -
 .../vendor/github.com/BurntSushi/toml/decode.go    |   509 -
 .../github.com/BurntSushi/toml/decode_meta.go      |   121 -
 .../vendor/github.com/BurntSushi/toml/doc.go       |    27 -
 .../vendor/github.com/BurntSushi/toml/encode.go    |   568 -
 .../github.com/BurntSushi/toml/encoding_types.go   |    19 -
 .../BurntSushi/toml/encoding_types_1.1.go          |    18 -
 .../vendor/github.com/BurntSushi/toml/lex.go       |   953 -
 .../vendor/github.com/BurntSushi/toml/parse.go     |   592 -
 .../github.com/BurntSushi/toml/type_check.go       |    91 -
 .../github.com/BurntSushi/toml/type_fields.go      |   242 -
 .../GehirnInc/crypt/apr1_crypt/apr1_crypt.go       |    39 -
 .../GehirnInc/crypt/apr1_crypt/apr1_crypt_test.go  |    85 -
 .../github.com/GehirnInc/crypt/common/salt_test.go |    49 -
 .../GehirnInc/crypt/md5_crypt/md5_crypt_test.go    |    85 -
 .../GehirnInc/crypt/sha256_crypt/sha256_crypt.go   |   173 -
 .../crypt/sha256_crypt/sha256_crypt_test.go        |   106 -
 .../GehirnInc/crypt/sha512_crypt/sha512_crypt.go   |   188 -
 .../crypt/sha512_crypt/sha512_crypt_test.go        |   108 -
 .../github.com/OpenDNS/vegadns2client/LICENSE      |    13 -
 .../github.com/OpenDNS/vegadns2client/client.go    |    71 -
 .../github.com/OpenDNS/vegadns2client/domains.go   |    80 -
 .../github.com/OpenDNS/vegadns2client/main.go      |    19 -
 .../github.com/OpenDNS/vegadns2client/records.go   |   113 -
 .../github.com/OpenDNS/vegadns2client/tokens.go    |    74 -
 .../akamai/AkamaiOPEN-edgegrid-golang/LICENSE      |   201 -
 .../AkamaiOPEN-edgegrid-golang/client-v1/api.go    |    36 -
 .../AkamaiOPEN-edgegrid-golang/client-v1/client.go |   152 -
 .../AkamaiOPEN-edgegrid-golang/client-v1/errors.go |   107 -
 .../configdns-v1/errors.go                         |   125 -
 .../configdns-v1/record.go                         |  1739 --
 .../configdns-v1/service.go                        |    16 -
 .../configdns-v1/zone.go                           |  1567 --
 .../AkamaiOPEN-edgegrid-golang/edgegrid/config.go  |   181 -
 .../AkamaiOPEN-edgegrid-golang/edgegrid/errors.go  |    22 -
 .../AkamaiOPEN-edgegrid-golang/edgegrid/signer.go  |   216 -
 .../jsonhooks-v1/errors.go                         |     1 -
 .../jsonhooks-v1/jsonhooks.go                      |    69 -
 .../github.com/aliyun/alibaba-cloud-sdk-go/LICENSE |   201 -
 .../alibaba-cloud-sdk-go/sdk/auth/credential.go    |    18 -
 .../sdk/auth/credentials/access_key_credential.go  |    34 -
 .../auth/credentials/bearer_token_credential.go    |    12 -
 .../sdk/auth/credentials/ecs_ram_role.go           |    29 -
 .../sdk/auth/credentials/provider/env.go           |    30 -
 .../credentials/provider/instance_credentials.go   |    92 -
 .../credentials/provider/profile_credentials.go    |   158 -
 .../sdk/auth/credentials/provider/provider.go      |    19 -
 .../auth/credentials/provider/provider_chain.go    |    34 -
 .../auth/credentials/rsa_key_pair_credential.go    |    15 -
 .../sdk/auth/credentials/sts_credential.go         |    15 -
 .../auth/credentials/sts_role_arn_credential.go    |    61 -
 .../sdk/auth/roa_signature_composer.go             |   136 -
 .../sdk/auth/rpc_signature_composer.go             |    94 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/auth/signer.go |    98 -
 .../sdk/auth/signers/algorithms.go                 |    57 -
 .../sdk/auth/signers/credential_updater.go         |    54 -
 .../sdk/auth/signers/session_credential.go         |     7 -
 .../sdk/auth/signers/signer_access_key.go          |    54 -
 .../sdk/auth/signers/signer_bearer_token.go        |    35 -
 .../sdk/auth/signers/signer_ecs_ram_role.go        |   167 -
 .../sdk/auth/signers/signer_key_pair.go            |   148 -
 .../sdk/auth/signers/signer_ram_role_arn.go        |   175 -
 .../sdk/auth/signers/signer_sts_token.go           |    54 -
 .../sdk/auth/signers/signer_v2.go                  |    54 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/client.go      |   725 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/config.go      |    91 -
 .../sdk/endpoints/endpoints_config.go              |  1670 --
 .../sdk/endpoints/local_global_resolver.go         |    43 -
 .../sdk/endpoints/local_regional_resolver.go       |    48 -
 .../sdk/endpoints/location_resolver.go             |   176 -
 .../sdk/endpoints/mapping_resolver.go              |    48 -
 .../alibaba-cloud-sdk-go/sdk/endpoints/resolver.go |    98 -
 .../sdk/endpoints/simple_host_resolver.go          |    33 -
 .../sdk/errors/client_error.go                     |    92 -
 .../alibaba-cloud-sdk-go/sdk/errors/error.go       |    23 -
 .../sdk/errors/server_error.go                     |   123 -
 .../sdk/errors/signature_does_not_match_wrapper.go |    45 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/logger.go      |   116 -
 .../sdk/requests/acs_request.go                    |   378 -
 .../sdk/requests/common_request.go                 |   108 -
 .../sdk/requests/roa_request.go                    |   152 -
 .../sdk/requests/rpc_request.go                    |    79 -
 .../alibaba-cloud-sdk-go/sdk/requests/types.go     |    53 -
 .../sdk/responses/json_parser.go                   |   328 -
 .../alibaba-cloud-sdk-go/sdk/responses/response.go |   152 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/utils/debug.go |    36 -
 .../aliyun/alibaba-cloud-sdk-go/sdk/utils/utils.go |   141 -
 .../services/alidns/add_domain.go                  |   111 -
 .../services/alidns/add_domain_group.go            |   107 -
 .../services/alidns/add_domain_record.go           |   112 -
 .../services/alidns/add_gtm_access_strategy.go     |   110 -
 .../services/alidns/add_gtm_address_pool.go        |   117 -
 .../services/alidns/add_gtm_monitor.go             |   119 -
 .../services/alidns/change_domain_group.go         |   108 -
 .../alidns/change_domain_of_dns_product.go         |   108 -
 .../services/alidns/check_domain_record.go         |   109 -
 .../alibaba-cloud-sdk-go/services/alidns/client.go |    81 -
 .../services/alidns/create_instance.go             |   111 -
 .../services/alidns/delete_domain.go               |   106 -
 .../services/alidns/delete_domain_group.go         |   106 -
 .../services/alidns/delete_domain_record.go        |   106 -
 .../services/alidns/delete_gtm_access_strategy.go  |   105 -
 .../services/alidns/delete_gtm_address_pool.go     |   105 -
 .../services/alidns/delete_sub_domain_records.go   |   109 -
 .../services/alidns/describe_batch_result_count.go |   113 -
 .../alidns/describe_batch_result_detail.go         |   112 -
 .../alidns/describe_dns_product_instance.go        |   137 -
 .../alidns/describe_dns_product_instances.go       |   111 -
 .../services/alidns/describe_dnsslb_sub_domains.go |   111 -
 .../services/alidns/describe_domain_groups.go      |   111 -
 .../services/alidns/describe_domain_info.go        |   126 -
 .../services/alidns/describe_domain_logs.go        |   115 -
 .../services/alidns/describe_domain_ns.go          |   109 -
 .../services/alidns/describe_domain_record_info.go |   119 -
 .../services/alidns/describe_domain_records.go     |   119 -
 .../services/alidns/describe_domains.go            |   113 -
 .../alidns/describe_gtm_access_strategies.go       |   112 -
 .../alidns/describe_gtm_access_strategy.go         |   116 -
 ...escribe_gtm_access_strategy_available_config.go |   107 -
 .../alidns/describe_gtm_available_alert_group.go   |   105 -
 .../services/alidns/describe_gtm_instance.go       |   117 -
 .../alidns/describe_gtm_instance_address_pool.go   |   118 -
 .../alidns/describe_gtm_instance_address_pools.go  |   112 -
 .../alidns/describe_gtm_instance_status.go         |   107 -
 .../services/alidns/describe_gtm_instances.go      |   112 -
 .../services/alidns/describe_gtm_logs.go           |   115 -
 .../describe_gtm_monitor_available_config.go       |   105 -
 .../services/alidns/describe_gtm_monitor_config.go |   117 -
 .../services/alidns/describe_record_logs.go        |   114 -
 .../services/alidns/describe_sub_domain_records.go |   113 -
 .../services/alidns/describe_support_lines.go      |   106 -
 .../services/alidns/get_main_domain_name.go        |   108 -
 .../services/alidns/modify_hichina_domain_dns.go   |   107 -
 .../services/alidns/operate_batch_domain.go        |   118 -
 .../services/alidns/query_create_instance_price.go |   112 -
 .../services/alidns/set_dnsslb_status.go           |   108 -
 .../services/alidns/set_domain_record_status.go    |   108 -
 .../services/alidns/set_gtm_access_mode.go         |   106 -
 .../services/alidns/set_gtm_monitor_status.go      |   106 -
 .../services/alidns/struct_addr.go                 |    29 -
 .../services/alidns/struct_addr_pool.go            |    33 -
 ...escribe_gtm_access_strategy_available_config.go |    21 -
 ...pools_in_describe_gtm_instance_address_pools.go |    21 -
 .../services/alidns/struct_addrs.go                |    21 -
 .../services/alidns/struct_available_ttls.go       |    21 -
 .../services/alidns/struct_batch_result_detail.go  |    36 -
 .../services/alidns/struct_batch_result_details.go |    21 -
 .../services/alidns/struct_dns_product.go          |    51 -
 .../services/alidns/struct_dns_products.go         |    21 -
 .../alidns/struct_dns_servers_in_add_domain.go     |    21 -
 ...dns_servers_in_describe_dns_product_instance.go |    21 -
 .../struct_dns_servers_in_describe_domain_info.go  |    21 -
 .../struct_dns_servers_in_describe_domain_ns.go    |    21 -
 .../struct_dns_servers_in_describe_domains.go      |    21 -
 .../services/alidns/struct_domain.go               |    35 -
 .../services/alidns/struct_domain_group.go         |    23 -
 .../services/alidns/struct_domain_groups.go        |    21 -
 .../services/alidns/struct_domain_log.go           |    26 -
 .../services/alidns/struct_domain_logs.go          |    21 -
 ...ct_domain_records_in_describe_domain_records.go |    21 -
 ...omain_records_in_describe_sub_domain_records.go |    21 -
 .../services/alidns/struct_domains.go              |    21 -
 .../services/alidns/struct_expect_dns_servers.go   |    21 -
 .../services/alidns/struct_gtm_instance.go         |    32 -
 .../services/alidns/struct_gtm_instances.go        |    21 -
 .../services/alidns/struct_isp_city_node.go        |    28 -
 ...des_in_describe_gtm_monitor_available_config.go |    21 -
 ...sp_city_nodes_in_describe_gtm_monitor_config.go |    21 -
 .../services/alidns/struct_line.go                 |    25 -
 ...ruct_lines_in_describe_gtm_access_strategies.go |    21 -
 ...struct_lines_in_describe_gtm_access_strategy.go |    21 -
 ...escribe_gtm_access_strategy_available_config.go |    21 -
 .../services/alidns/struct_log.go                  |    29 -
 .../services/alidns/struct_logs.go                 |    21 -
 .../services/alidns/struct_new_dns_servers.go      |    21 -
 .../services/alidns/struct_original_dns_servers.go |    21 -
 .../services/alidns/struct_record.go               |    32 -
 .../services/alidns/struct_record_line.go          |    24 -
 .../struct_record_lines_in_describe_domain_info.go |    21 -
 ...truct_record_lines_in_describe_support_lines.go |    21 -
 .../services/alidns/struct_record_log.go           |    25 -
 .../services/alidns/struct_record_logs.go          |    21 -
 .../services/alidns/struct_rule.go                 |    23 -
 .../services/alidns/struct_rules.go                |    21 -
 .../services/alidns/struct_slb_sub_domain.go       |    24 -
 .../services/alidns/struct_slb_sub_domains.go      |    21 -
 .../services/alidns/struct_strategies.go           |    21 -
 .../services/alidns/struct_strategy.go             |    33 -
 .../services/alidns/update_dnsslb_weight.go        |   108 -
 .../services/alidns/update_domain_group.go         |   108 -
 .../services/alidns/update_domain_record.go        |   112 -
 .../services/alidns/update_gtm_access_strategy.go  |   109 -
 .../services/alidns/update_gtm_address_pool.go     |   116 -
 .../alidns/update_gtm_instance_global_config.go    |   110 -
 .../services/alidns/update_gtm_monitor.go          |   118 -
 .../vendor/github.com/aws/aws-sdk-go/LICENSE.txt   |   202 -
 .../vendor/github.com/aws/aws-sdk-go/NOTICE.txt    |     3 -
 .../github.com/aws/aws-sdk-go/aws/awserr/error.go  |   164 -
 .../github.com/aws/aws-sdk-go/aws/awserr/types.go  |   221 -
 .../github.com/aws/aws-sdk-go/aws/awsutil/copy.go  |   108 -
 .../github.com/aws/aws-sdk-go/aws/awsutil/equal.go |    27 -
 .../aws/aws-sdk-go/aws/awsutil/path_value.go       |   222 -
 .../aws/aws-sdk-go/aws/awsutil/prettify.go         |   113 -
 .../aws/aws-sdk-go/aws/awsutil/string_value.go     |    88 -
 .../github.com/aws/aws-sdk-go/aws/client/client.go |    96 -
 .../aws/aws-sdk-go/aws/client/default_retryer.go   |   116 -
 .../github.com/aws/aws-sdk-go/aws/client/logger.go |   190 -
 .../aws-sdk-go/aws/client/metadata/client_info.go  |    13 -
 .../vendor/github.com/aws/aws-sdk-go/aws/config.go |   536 -
 .../github.com/aws/aws-sdk-go/aws/context_1_5.go   |    37 -
 .../github.com/aws/aws-sdk-go/aws/context_1_9.go   |    11 -
 .../aws/aws-sdk-go/aws/context_background_1_5.go   |    56 -
 .../aws/aws-sdk-go/aws/context_background_1_7.go   |    20 -
 .../github.com/aws/aws-sdk-go/aws/context_sleep.go |    24 -
 .../github.com/aws/aws-sdk-go/aws/convert_types.go |   387 -
 .../aws/aws-sdk-go/aws/corehandlers/handlers.go    |   228 -
 .../aws-sdk-go/aws/corehandlers/param_validator.go |    17 -
 .../aws/aws-sdk-go/aws/corehandlers/user_agent.go  |    37 -
 .../aws-sdk-go/aws/credentials/chain_provider.go   |   100 -
 .../aws/aws-sdk-go/aws/credentials/credentials.go  |   293 -
 .../credentials/ec2rolecreds/ec2_role_provider.go  |   180 -
 .../aws/credentials/endpointcreds/provider.go      |   203 -
 .../aws/aws-sdk-go/aws/credentials/env_provider.go |    74 -
 .../aws/credentials/processcreds/provider.go       |   425 -
 .../aws/credentials/shared_credentials_provider.go |   150 -
 .../aws-sdk-go/aws/credentials/static_provider.go  |    55 -
 .../credentials/stscreds/assume_role_provider.go   |   312 -
 .../github.com/aws/aws-sdk-go/aws/csm/doc.go       |    46 -
 .../github.com/aws/aws-sdk-go/aws/csm/enable.go    |    67 -
 .../github.com/aws/aws-sdk-go/aws/csm/metric.go    |   109 -
 .../aws/aws-sdk-go/aws/csm/metric_chan.go          |    54 -
 .../aws/aws-sdk-go/aws/csm/metric_exception.go     |    26 -
 .../github.com/aws/aws-sdk-go/aws/csm/reporter.go  |   260 -
 .../aws/aws-sdk-go/aws/defaults/defaults.go        |   207 -
 .../aws/aws-sdk-go/aws/defaults/shared_config.go   |    27 -
 .../vendor/github.com/aws/aws-sdk-go/aws/doc.go    |    56 -
 .../aws/aws-sdk-go/aws/ec2metadata/api.go          |   169 -
 .../aws/aws-sdk-go/aws/ec2metadata/service.go      |   152 -
 .../aws/aws-sdk-go/aws/endpoints/decode.go         |   188 -
 .../aws/aws-sdk-go/aws/endpoints/defaults.go       |  4638 ----
 .../aws-sdk-go/aws/endpoints/dep_service_ids.go    |   141 -
 .../github.com/aws/aws-sdk-go/aws/endpoints/doc.go |    66 -
 .../aws/aws-sdk-go/aws/endpoints/endpoints.go      |   449 -
 .../aws/aws-sdk-go/aws/endpoints/v3model.go        |   307 -
 .../aws-sdk-go/aws/endpoints/v3model_codegen.go    |   351 -
 .../vendor/github.com/aws/aws-sdk-go/aws/errors.go |    13 -
 .../github.com/aws/aws-sdk-go/aws/jsonvalue.go     |    12 -
 .../vendor/github.com/aws/aws-sdk-go/aws/logger.go |   118 -
 .../aws/request/connection_reset_error.go          |    18 -
 .../aws/aws-sdk-go/aws/request/handlers.go         |   322 -
 .../aws/aws-sdk-go/aws/request/http_request.go     |    24 -
 .../aws/aws-sdk-go/aws/request/offset_reader.go    |    60 -
 .../aws/aws-sdk-go/aws/request/request.go          |   684 -
 .../aws/aws-sdk-go/aws/request/request_1_7.go      |    39 -
 .../aws/aws-sdk-go/aws/request/request_1_8.go      |    33 -
 .../aws/aws-sdk-go/aws/request/request_context.go  |    14 -
 .../aws-sdk-go/aws/request/request_context_1_6.go  |    14 -
 .../aws-sdk-go/aws/request/request_pagination.go   |   264 -
 .../aws/aws-sdk-go/aws/request/retryer.go          |   163 -
 .../aws-sdk-go/aws/request/timeout_read_closer.go  |    94 -
 .../aws/aws-sdk-go/aws/request/validation.go       |   286 -
 .../aws/aws-sdk-go/aws/request/waiter.go           |   295 -
 .../aws-sdk-go/aws/session/cabundle_transport.go   |    26 -
 .../aws/session/cabundle_transport_1_5.go          |    22 -
 .../aws/session/cabundle_transport_1_6.go          |    23 -
 .../aws/aws-sdk-go/aws/session/credentials.go      |   203 -
 .../github.com/aws/aws-sdk-go/aws/session/doc.go   |   273 -
 .../aws/aws-sdk-go/aws/session/env_config.go       |   236 -
 .../aws/aws-sdk-go/aws/session/session.go          |   591 -
 .../aws/aws-sdk-go/aws/session/shared_config.go    |   339 -
 .../aws/aws-sdk-go/aws/signer/v4/header_rules.go   |    82 -
 .../aws/aws-sdk-go/aws/signer/v4/options.go        |     7 -
 .../aws/aws-sdk-go/aws/signer/v4/uri_path.go       |    24 -
 .../github.com/aws/aws-sdk-go/aws/signer/v4/v4.go  |   796 -
 .../vendor/github.com/aws/aws-sdk-go/aws/types.go  |   207 -
 .../vendor/github.com/aws/aws-sdk-go/aws/url.go    |    12 -
 .../github.com/aws/aws-sdk-go/aws/url_1_7.go       |    29 -
 .../github.com/aws/aws-sdk-go/aws/version.go       |     8 -
 .../github.com/aws/aws-sdk-go/internal/ini/ast.go  |   120 -
 .../aws/aws-sdk-go/internal/ini/comma_token.go     |    11 -
 .../aws/aws-sdk-go/internal/ini/comment_token.go   |    35 -
 .../github.com/aws/aws-sdk-go/internal/ini/doc.go  |    29 -
 .../aws/aws-sdk-go/internal/ini/empty_token.go     |     4 -
 .../aws/aws-sdk-go/internal/ini/expression.go      |    24 -
 .../github.com/aws/aws-sdk-go/internal/ini/fuzz.go |    17 -
 .../github.com/aws/aws-sdk-go/internal/ini/ini.go  |    51 -
 .../aws/aws-sdk-go/internal/ini/ini_lexer.go       |   165 -
 .../aws/aws-sdk-go/internal/ini/ini_parser.go      |   349 -
 .../aws/aws-sdk-go/internal/ini/literal_tokens.go  |   324 -
 .../aws/aws-sdk-go/internal/ini/newline_token.go   |    30 -
 .../aws/aws-sdk-go/internal/ini/number_helper.go   |   152 -
 .../aws/aws-sdk-go/internal/ini/op_tokens.go       |    39 -
 .../aws/aws-sdk-go/internal/ini/parse_error.go     |    43 -
 .../aws/aws-sdk-go/internal/ini/parse_stack.go     |    60 -
 .../aws/aws-sdk-go/internal/ini/sep_tokens.go      |    41 -
 .../aws/aws-sdk-go/internal/ini/skipper.go         |    45 -
 .../aws/aws-sdk-go/internal/ini/statement.go       |    35 -
 .../aws/aws-sdk-go/internal/ini/value_util.go      |   284 -
 .../aws/aws-sdk-go/internal/ini/visitor.go         |   166 -
 .../aws/aws-sdk-go/internal/ini/walker.go          |    25 -
 .../aws/aws-sdk-go/internal/ini/ws_token.go        |    24 -
 .../aws/aws-sdk-go/internal/sdkio/io_go1.6.go      |    10 -
 .../aws/aws-sdk-go/internal/sdkio/io_go1.7.go      |    12 -
 .../aws-sdk-go/internal/sdkrand/locked_source.go   |    29 -
 .../aws/aws-sdk-go/internal/sdkuri/path.go         |    23 -
 .../internal/shareddefaults/ecs_container.go       |    12 -
 .../internal/shareddefaults/shared_config.go       |    40 -
 .../aws/aws-sdk-go/private/protocol/host.go        |    68 -
 .../aws/aws-sdk-go/private/protocol/host_prefix.go |    54 -
 .../aws/aws-sdk-go/private/protocol/idempotency.go |    75 -
 .../private/protocol/json/jsonutil/build.go        |   296 -
 .../private/protocol/json/jsonutil/unmarshal.go    |   250 -
 .../aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go |   110 -
 .../aws/aws-sdk-go/private/protocol/jsonvalue.go   |    76 -
 .../aws/aws-sdk-go/private/protocol/payload.go     |    81 -
 .../aws/aws-sdk-go/private/protocol/query/build.go |    36 -
 .../private/protocol/query/queryutil/queryutil.go  |   246 -
 .../aws-sdk-go/private/protocol/query/unmarshal.go |    39 -
 .../private/protocol/query/unmarshal_error.go      |    69 -
 .../aws/aws-sdk-go/private/protocol/rest/build.go  |   310 -
 .../aws-sdk-go/private/protocol/rest/payload.go    |    45 -
 .../aws-sdk-go/private/protocol/rest/unmarshal.go  |   225 -
 .../aws-sdk-go/private/protocol/restxml/restxml.go |    79 -
 .../aws/aws-sdk-go/private/protocol/timestamp.go   |    72 -
 .../aws/aws-sdk-go/private/protocol/unmarshal.go   |    21 -
 .../private/protocol/xml/xmlutil/build.go          |   306 -
 .../private/protocol/xml/xmlutil/unmarshal.go      |   291 -
 .../private/protocol/xml/xmlutil/xml_to_struct.go  |   148 -
 .../aws/aws-sdk-go/service/lightsail/api.go        | 24271 -------------------
 .../aws/aws-sdk-go/service/lightsail/doc.go        |    40 -
 .../aws/aws-sdk-go/service/lightsail/errors.go     |    55 -
 .../aws/aws-sdk-go/service/lightsail/service.go    |    97 -
 .../aws/aws-sdk-go/service/route53/api.go          | 15351 ------------
 .../aws-sdk-go/service/route53/customizations.go   |    42 -
 .../aws/aws-sdk-go/service/route53/doc.go          |    29 -
 .../aws/aws-sdk-go/service/route53/errors.go       |   438 -
 .../aws/aws-sdk-go/service/route53/service.go      |    95 -
 .../aws-sdk-go/service/route53/unmarshal_error.go  |   106 -
 .../aws/aws-sdk-go/service/route53/waiters.go      |    56 -
 .../github.com/aws/aws-sdk-go/service/sts/api.go   |  2580 --
 .../github.com/aws/aws-sdk-go/service/sts/doc.go   |   108 -
 .../aws/aws-sdk-go/service/sts/errors.go           |    73 -
 .../aws/aws-sdk-go/service/sts/service.go          |    95 -
 .../opencensus-proto/AUTHORS                       |     1 -
 .../opencensus-proto/LICENSE                       |   202 -
 .../gen-go/agent/common/v1/common.pb.go            |   356 -
 .../gen-go/agent/metrics/v1/metrics_service.pb.go  |   264 -
 .../gen-go/agent/trace/v1/trace_service.pb.go      |   443 -
 .../gen-go/agent/trace/v1/trace_service.pb.gw.go   |   154 -
 .../gen-go/metrics/v1/metrics.pb.go                |  1126 -
 .../gen-go/resource/v1/resource.pb.go              |    99 -
 .../opencensus-proto/gen-go/trace/v1/trace.pb.go   |  1543 --
 .../gen-go/trace/v1/trace_config.pb.go             |   358 -
 .../github.com/cloudflare/cloudflare-go/LICENSE    |    26 -
 .../cloudflare/cloudflare-go/access_application.go |   180 -
 .../cloudflare/cloudflare-go/access_policy.go      |   221 -
 .../cloudflare/cloudflare-go/account_members.go    |   186 -
 .../cloudflare/cloudflare-go/account_roles.go      |    80 -
 .../cloudflare/cloudflare-go/accounts.go           |   114 -
 .../github.com/cloudflare/cloudflare-go/argo.go    |   120 -
 .../cloudflare/cloudflare-go/auditlogs.go          |   143 -
 .../cloudflare/cloudflare-go/cloudflare.go         |   408 -
 .../cloudflare/cloudflare-go/custom_hostname.go    |   160 -
 .../cloudflare/cloudflare-go/custom_pages.go       |   176 -
 .../github.com/cloudflare/cloudflare-go/dns.go     |   174 -
 .../cloudflare/cloudflare-go/duration.go           |    40 -
 .../github.com/cloudflare/cloudflare-go/errors.go  |    49 -
 .../github.com/cloudflare/cloudflare-go/filter.go  |   241 -
 .../cloudflare/cloudflare-go/firewall.go           |   280 -
 .../cloudflare/cloudflare-go/firewall_rules.go     |   196 -
 .../github.com/cloudflare/cloudflare-go/ips.go     |    44 -
 .../github.com/cloudflare/cloudflare-go/keyless.go |    52 -
 .../cloudflare/cloudflare-go/load_balancing.go     |   387 -
 .../cloudflare/cloudflare-go/lockdown.go           |   151 -
 .../github.com/cloudflare/cloudflare-go/logpush.go |   224 -
 .../github.com/cloudflare/cloudflare-go/options.go |   101 -
 .../cloudflare/cloudflare-go/organizations.go      |   186 -
 .../cloudflare/cloudflare-go/origin_ca.go          |   169 -
 .../cloudflare/cloudflare-go/page_rules.go         |   235 -
 .../github.com/cloudflare/cloudflare-go/railgun.go |   297 -
 .../cloudflare/cloudflare-go/rate_limiting.go      |   210 -
 .../cloudflare/cloudflare-go/registrar.go          |   175 -
 .../cloudflare/cloudflare-go/spectrum.go           |   158 -
 .../github.com/cloudflare/cloudflare-go/ssl.go     |   148 -
 .../cloudflare/cloudflare-go/universal_ssl.go      |    50 -
 .../github.com/cloudflare/cloudflare-go/user.go    |   113 -
 .../cloudflare/cloudflare-go/user_agent.go         |   149 -
 .../cloudflare/cloudflare-go/virtualdns.go         |   192 -
 .../github.com/cloudflare/cloudflare-go/waf.go     |   155 -
 .../github.com/cloudflare/cloudflare-go/workers.go |   312 -
 .../cloudflare/cloudflare-go/workers_kv.go         |   192 -
 .../github.com/cloudflare/cloudflare-go/zone.go    |   690 -
 .../vendor/github.com/cpu/goacmedns/LICENSE        |    21 -
 .../vendor/github.com/cpu/goacmedns/account.go     |    11 -
 .../vendor/github.com/cpu/goacmedns/client.go      |   191 -
 .../vendor/github.com/cpu/goacmedns/storage.go     |    89 -
 .../vendor/github.com/davecgh/go-spew/LICENSE      |    15 -
 .../github.com/davecgh/go-spew/spew/bypass.go      |   145 -
 .../github.com/davecgh/go-spew/spew/bypasssafe.go  |    38 -
 .../github.com/davecgh/go-spew/spew/common.go      |   341 -
 .../github.com/davecgh/go-spew/spew/config.go      |   306 -
 .../vendor/github.com/davecgh/go-spew/spew/doc.go  |   211 -
 .../vendor/github.com/davecgh/go-spew/spew/dump.go |   509 -
 .../github.com/davecgh/go-spew/spew/format.go      |   419 -
 .../vendor/github.com/davecgh/go-spew/spew/spew.go |   148 -
 .../vendor/github.com/decker502/dnspod-go/LICENSE  |    21 -
 .../github.com/decker502/dnspod-go/dnspod.go       |   233 -
 .../decker502/dnspod-go/domain_records.go          |   237 -
 .../github.com/decker502/dnspod-go/domains.go      |   162 -
 .../vendor/github.com/dimchansky/utfbom/LICENSE    |   201 -
 .../vendor/github.com/dimchansky/utfbom/utfbom.go  |   192 -
 .../github.com/dnsimple/dnsimple-go/LICENSE.txt    |    21 -
 .../dnsimple/dnsimple-go/dnsimple/accounts.go      |    41 -
 .../dnsimple-go/dnsimple/authentication.go         |    52 -
 .../dnsimple/dnsimple-go/dnsimple/certificates.go  |   249 -
 .../dnsimple/dnsimple-go/dnsimple/contacts.go      |   140 -
 .../dnsimple/dnsimple-go/dnsimple/dnsimple.go      |   338 -
 .../dnsimple/dnsimple-go/dnsimple/domains.go       |   138 -
 .../dnsimple-go/dnsimple/domains_collaborators.go  |    96 -
 .../dnsimple/domains_delegation_signer_records.go  |   105 -
 .../dnsimple-go/dnsimple/domains_dnssec.go         |    70 -
 .../dnsimple-go/dnsimple/domains_email_forwards.go |   104 -
 .../dnsimple-go/dnsimple/domains_pushes.go         |   111 -
 .../dnsimple/dnsimple-go/dnsimple/identity.go      |    48 -
 .../dnsimple/dnsimple-go/dnsimple/oauth.go         |   113 -
 .../dnsimple/dnsimple-go/dnsimple/registrar.go     |   261 -
 .../dnsimple-go/dnsimple/registrar_auto_renewal.go |    37 -
 .../dnsimple-go/dnsimple/registrar_delegation.go   |    84 -
 .../dnsimple/registrar_whois_privacy.go            |   103 -
 .../dnsimple/dnsimple-go/dnsimple/services.go      |    94 -
 .../dnsimple-go/dnsimple/services_domains.go       |    70 -
 .../dnsimple/dnsimple-go/dnsimple/templates.go     |   129 -
 .../dnsimple-go/dnsimple/templates_domains.go      |    21 -
 .../dnsimple-go/dnsimple/templates_records.go      |   107 -
 .../dnsimple/dnsimple-go/dnsimple/tlds.go          |   117 -
 .../dnsimple/dnsimple-go/dnsimple/users.go         |     7 -
 .../dnsimple-go/dnsimple/vanity_name_server.go     |    65 -
 .../dnsimple/dnsimple-go/dnsimple/webhooks.go      |   103 -
 .../dnsimple-go/dnsimple/zone_distributions.go     |    46 -
 .../dnsimple/dnsimple-go/dnsimple/zones.go         |   108 -
 .../dnsimple/dnsimple-go/dnsimple/zones_records.go |   142 -
 .../vendor/github.com/exoscale/egoscale/AUTHORS    |     9 -
 .../vendor/github.com/exoscale/egoscale/LICENSE    |   201 -
 .../github.com/exoscale/egoscale/accounts.go       |    80 -
 .../exoscale/egoscale/accounts_response.go         |    43 -
 .../github.com/exoscale/egoscale/addresses.go      |   179 -
 .../exoscale/egoscale/affinity_groups.go           |   158 -
 .../exoscale/egoscale/affinitygroups_response.go   |    43 -
 .../vendor/github.com/exoscale/egoscale/apis.go    |    48 -
 .../github.com/exoscale/egoscale/async_jobs.go     |   138 -
 .../exoscale/egoscale/asyncjobs_response.go        |    43 -
 .../vendor/github.com/exoscale/egoscale/cidr.go    |    62 -
 .../vendor/github.com/exoscale/egoscale/client.go  |   418 -
 .../exoscale/egoscale/cserrorcode_string.go        |    47 -
 .../vendor/github.com/exoscale/egoscale/dns.go     |   364 -
 .../vendor/github.com/exoscale/egoscale/doc.go     |   180 -
 .../exoscale/egoscale/errorcode_string.go          |    37 -
 .../vendor/github.com/exoscale/egoscale/events.go  |    76 -
 .../exoscale/egoscale/events_response.go           |    43 -
 .../exoscale/egoscale/eventtypes_response.go       |    43 -
 .../exoscale/egoscale/instance_groups.go           |    71 -
 .../exoscale/egoscale/instancegroups_response.go   |    43 -
 .../vendor/github.com/exoscale/egoscale/isos.go    |    94 -
 .../github.com/exoscale/egoscale/isos_response.go  |    43 -
 .../exoscale/egoscale/jobstatustype_string.go      |    16 -
 .../github.com/exoscale/egoscale/macaddress.go     |    63 -
 .../exoscale/egoscale/network_offerings.go         |    91 -
 .../exoscale/egoscale/networkofferings_response.go |    43 -
 .../github.com/exoscale/egoscale/networks.go       |   229 -
 .../exoscale/egoscale/networks_response.go         |    43 -
 .../vendor/github.com/exoscale/egoscale/nics.go    |   120 -
 .../github.com/exoscale/egoscale/nics_response.go  |    43 -
 .../exoscale/egoscale/oscategories_response.go     |    43 -
 .../egoscale/publicipaddresses_response.go         |    43 -
 .../github.com/exoscale/egoscale/record_string.go  |    16 -
 .../vendor/github.com/exoscale/egoscale/request.go |   405 -
 .../github.com/exoscale/egoscale/request_type.go   |   184 -
 .../exoscale/egoscale/resource_limits.go           |   100 -
 .../exoscale/egoscale/resource_metadata.go         |    41 -
 .../exoscale/egoscale/resourcedetails_response.go  |    43 -
 .../exoscale/egoscale/resourcelimits_response.go   |    43 -
 .../github.com/exoscale/egoscale/reversedns.go     |    83 -
 .../github.com/exoscale/egoscale/runstatus.go      |   131 -
 .../exoscale/egoscale/runstatus_event.go           |    37 -
 .../exoscale/egoscale/runstatus_incident.go        |   175 -
 .../exoscale/egoscale/runstatus_maintenance.go     |   208 -
 .../github.com/exoscale/egoscale/runstatus_page.go |   168 -
 .../exoscale/egoscale/runstatus_service.go         |   201 -
 .../exoscale/egoscale/security_groups.go           |   226 -
 .../exoscale/egoscale/securitygroups_response.go   |    43 -
 .../github.com/exoscale/egoscale/serialization.go  |   402 -
 .../exoscale/egoscale/service_offerings.go         |    77 -
 .../exoscale/egoscale/serviceofferings_response.go |    43 -
 .../github.com/exoscale/egoscale/snapshots.go      |   139 -
 .../exoscale/egoscale/snapshots_response.go        |    43 -
 .../github.com/exoscale/egoscale/ssh_keypairs.go   |   105 -
 .../exoscale/egoscale/sshkeypairs_response.go      |    43 -
 .../vendor/github.com/exoscale/egoscale/tags.go    |    84 -
 .../github.com/exoscale/egoscale/tags_response.go  |    43 -
 .../github.com/exoscale/egoscale/templates.go      |   163 -
 .../exoscale/egoscale/templates_response.go        |    43 -
 .../vendor/github.com/exoscale/egoscale/users.go   |    63 -
 .../github.com/exoscale/egoscale/users_response.go |    43 -
 .../vendor/github.com/exoscale/egoscale/uuid.go    |    79 -
 .../vendor/github.com/exoscale/egoscale/version.go |     4 -
 .../exoscale/egoscale/virtual_machines.go          |   613 -
 .../exoscale/egoscale/virtualmachines_response.go  |    43 -
 .../vendor/github.com/exoscale/egoscale/volumes.go |   113 -
 .../exoscale/egoscale/volumes_response.go          |    43 -
 .../vendor/github.com/exoscale/egoscale/zones.go   |    62 -
 .../github.com/exoscale/egoscale/zones_response.go |    43 -
 .../vendor/github.com/fatih/structs/LICENSE        |    21 -
 .../vendor/github.com/fatih/structs/field.go       |   141 -
 .../vendor/github.com/fatih/structs/structs.go     |   584 -
 .../vendor/github.com/fatih/structs/tags.go        |    32 -
 .../vendor/github.com/go-acme/lego/.dockerignore   |     8 -
 .../vendor/github.com/go-acme/lego/.golangci.toml  |    84 -
 .../vendor/github.com/go-acme/lego/.goreleaser.yml |    43 -
 .../vendor/github.com/go-acme/lego/.travis.yml     |    83 -
 .../vendor/github.com/go-acme/lego/CHANGELOG.md    |   416 -
 .../vendor/github.com/go-acme/lego/CONTRIBUTING.md |    75 -
 .../vendor/github.com/go-acme/lego/Dockerfile      |    16 -
 .../vendor/github.com/go-acme/lego/Gopkg.lock      |   944 -
 .../vendor/github.com/go-acme/lego/Gopkg.toml      |   138 -
 .../vendor/github.com/go-acme/lego/Makefile        |    85 -
 .../vendor/github.com/go-acme/lego/README.md       |    60 -
 .../go-acme/lego/acme/api/certificate_test.go      |   129 -
 .../acme/api/internal/nonces/nonce_manager_test.go |    55 -
 .../lego/acme/api/internal/secure/jws_test.go      |    56 -
 .../lego/acme/api/internal/sender/sender_test.go   |    68 -
 .../github.com/go-acme/lego/acme/api/order_test.go |    89 -
 .../go-acme/lego/acme/api/service_test.go          |    56 -
 .../go-acme/lego/certcrypto/crypto_test.go         |   149 -
 .../go-acme/lego/certificate/certificates_test.go  |   243 -
 .../challenge/dns01/dns_challenge_manual_test.go   |    61 -
 .../lego/challenge/dns01/dns_challenge_test.go     |   289 -
 .../lego/challenge/dns01/fixtures/resolv.conf.1    |     5 -
 .../go-acme/lego/challenge/dns01/fqdn_test.go      |    66 -
 .../lego/challenge/dns01/nameserver_test.go        |   177 -
 .../go-acme/lego/challenge/dns01/precheck_test.go  |   117 -
 .../lego/challenge/http01/http_challenge_test.go   |    98 -
 .../lego/challenge/resolver/prober_mock_test.go    |    42 -
 .../go-acme/lego/challenge/resolver/prober_test.go |   118 -
 .../lego/challenge/resolver/solver_manager_test.go |   179 -
 .../challenge/tlsalpn01/tls_alpn_challenge_test.go |   120 -
 .../vendor/github.com/go-acme/lego/cmd/account.go  |    33 -
 .../go-acme/lego/cmd/accounts_storage.go           |   243 -
 .../github.com/go-acme/lego/cmd/certs_storage.go   |   204 -
 .../vendor/github.com/go-acme/lego/cmd/cmd.go      |    14 -
 .../github.com/go-acme/lego/cmd/cmd_before.go      |    23 -
 .../github.com/go-acme/lego/cmd/cmd_dnshelp.go     |    73 -
 .../vendor/github.com/go-acme/lego/cmd/cmd_list.go |   121 -
 .../github.com/go-acme/lego/cmd/cmd_renew.go       |   226 -
 .../github.com/go-acme/lego/cmd/cmd_renew_test.go  |   119 -
 .../github.com/go-acme/lego/cmd/cmd_revoke.go      |    62 -
 .../vendor/github.com/go-acme/lego/cmd/cmd_run.go  |   163 -
 .../vendor/github.com/go-acme/lego/cmd/flags.go    |   114 -
 .../github.com/go-acme/lego/cmd/lego/main.go       |    47 -
 .../vendor/github.com/go-acme/lego/cmd/setup.go    |   129 -
 .../go-acme/lego/cmd/setup_challenges.go           |   118 -
 .../go-acme/lego/cmd/zz_gen_cmd_dnshelp.go         |  1343 -
 .../vendor/github.com/go-acme/lego/docs/.gitignore |     2 -
 .../vendor/github.com/go-acme/lego/docs/Makefile   |    20 -
 .../go-acme/lego/docs/archetypes/default.md        |     6 -
 .../github.com/go-acme/lego/docs/config.toml       |    67 -
 .../github.com/go-acme/lego/docs/content/_index.md |    30 -
 .../go-acme/lego/docs/content/dns/_index.md        |    55 -
 .../go-acme/lego/docs/content/dns/manual.md        |    59 -
 .../lego/docs/content/dns/zz_gen_acme-dns.md       |    50 -
 .../go-acme/lego/docs/content/dns/zz_gen_alidns.md |    61 -
 .../lego/docs/content/dns/zz_gen_auroradns.md      |    61 -
 .../go-acme/lego/docs/content/dns/zz_gen_azure.md  |    65 -
 .../lego/docs/content/dns/zz_gen_bindman.md        |    62 -
 .../lego/docs/content/dns/zz_gen_bluecat.md        |    60 -
 .../lego/docs/content/dns/zz_gen_cloudflare.md     |    68 -
 .../lego/docs/content/dns/zz_gen_cloudns.md        |    60 -
 .../lego/docs/content/dns/zz_gen_cloudxns.md       |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_conoha.md |    62 -
 .../lego/docs/content/dns/zz_gen_designate.md      |    63 -
 .../lego/docs/content/dns/zz_gen_digitalocean.md   |    59 -
 .../lego/docs/content/dns/zz_gen_dnsimple.md       |    60 -
 .../lego/docs/content/dns/zz_gen_dnsmadeeasy.md    |    61 -
 .../go-acme/lego/docs/content/dns/zz_gen_dnspod.md |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_dode.md   |    60 -
 .../lego/docs/content/dns/zz_gen_dreamhost.md      |    59 -
 .../lego/docs/content/dns/zz_gen_duckdns.md        |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_dyn.md    |    61 -
 .../lego/docs/content/dns/zz_gen_easydns.md        |    67 -
 .../go-acme/lego/docs/content/dns/zz_gen_exec.md   |   134 -
 .../lego/docs/content/dns/zz_gen_exoscale.md       |    62 -
 .../lego/docs/content/dns/zz_gen_fastdns.md        |    62 -
 .../go-acme/lego/docs/content/dns/zz_gen_gandi.md  |    59 -
 .../lego/docs/content/dns/zz_gen_gandiv5.md        |    59 -
 .../go-acme/lego/docs/content/dns/zz_gen_gcloud.md |    62 -
 .../go-acme/lego/docs/content/dns/zz_gen_glesys.md |    60 -
 .../lego/docs/content/dns/zz_gen_godaddy.md        |    61 -
 .../lego/docs/content/dns/zz_gen_hostingde.md      |    60 -
 .../lego/docs/content/dns/zz_gen_httpreq.md        |    98 -
 .../go-acme/lego/docs/content/dns/zz_gen_iij.md    |    61 -
 .../go-acme/lego/docs/content/dns/zz_gen_inwx.md   |    61 -
 .../go-acme/lego/docs/content/dns/zz_gen_joker.md  |    68 -
 .../lego/docs/content/dns/zz_gen_lightsail.md      |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_linode.md |    59 -
 .../lego/docs/content/dns/zz_gen_linodev4.md       |    59 -
 .../lego/docs/content/dns/zz_gen_mydnsjp.md        |    60 -
 .../lego/docs/content/dns/zz_gen_namecheap.md      |    60 -
 .../lego/docs/content/dns/zz_gen_namedotcom.md     |    61 -
 .../lego/docs/content/dns/zz_gen_namesilo.md       |    62 -
 .../go-acme/lego/docs/content/dns/zz_gen_netcup.md |    61 -
 .../lego/docs/content/dns/zz_gen_nifcloud.md       |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_ns1.md    |    60 -
 .../lego/docs/content/dns/zz_gen_oraclecloud.md    |    74 -
 .../go-acme/lego/docs/content/dns/zz_gen_otc.md    |    63 -
 .../go-acme/lego/docs/content/dns/zz_gen_ovh.md    |    63 -
 .../go-acme/lego/docs/content/dns/zz_gen_pdns.md   |    67 -
 .../lego/docs/content/dns/zz_gen_rackspace.md      |    60 -
 .../lego/docs/content/dns/zz_gen_rfc2136.md        |    63 -
 .../lego/docs/content/dns/zz_gen_route53.md        |   106 -
 .../lego/docs/content/dns/zz_gen_sakuracloud.md    |    61 -
 .../lego/docs/content/dns/zz_gen_selectel.md       |    60 -
 .../lego/docs/content/dns/zz_gen_stackpath.md      |    60 -
 .../lego/docs/content/dns/zz_gen_transip.md        |    60 -
 .../lego/docs/content/dns/zz_gen_vegadns.md        |    61 -
 .../go-acme/lego/docs/content/dns/zz_gen_versio.md |    67 -
 .../go-acme/lego/docs/content/dns/zz_gen_vscale.md |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_vultr.md  |    60 -
 .../go-acme/lego/docs/content/dns/zz_gen_zoneee.md |    61 -
 .../lego/docs/content/installation/_index.md       |    47 -
 .../go-acme/lego/docs/content/usage/_index.md      |     8 -
 .../go-acme/lego/docs/content/usage/cli/_index.md  |    94 -
 .../lego/docs/content/usage/cli/examples.md        |    56 -
 .../usage/library/Writing-a-Challenge-Solver.md    |   103 -
 .../lego/docs/content/usage/library/_index.md      |   115 -
 .../go-acme/lego/docs/layouts/partials/logo.html   |     1 -
 .../go-acme/lego/docs/static/images/logo-white.png |   Bin 15331 -> 0 bytes
 .../go-acme/lego/docs/static/images/logo.png       |   Bin 9997 -> 0 bytes
 .../github.com/go-acme/lego/e2e/challenges_test.go |   326 -
 .../lego/e2e/dnschallenge/dns_challenges_test.go   |   131 -
 .../go-acme/lego/e2e/fixtures/certs/README.md      |    25 -
 .../lego/e2e/fixtures/certs/localhost/README.md    |     5 -
 .../lego/e2e/fixtures/certs/localhost/cert.pem     |    19 -
 .../lego/e2e/fixtures/certs/localhost/key.pem      |    27 -
 .../lego/e2e/fixtures/certs/pebble.minica.key.pem  |    27 -
 .../lego/e2e/fixtures/certs/pebble.minica.pem      |    19 -
 .../github.com/go-acme/lego/e2e/fixtures/csr.cert  |    16 -
 .../github.com/go-acme/lego/e2e/fixtures/csr.raw   |   Bin 642 -> 0 bytes
 .../lego/e2e/fixtures/pebble-config-dns.json       |     9 -
 .../go-acme/lego/e2e/fixtures/pebble-config.json   |     9 -
 .../go-acme/lego/e2e/fixtures/update-dns.sh        |    23 -
 .../github.com/go-acme/lego/e2e/loader/loader.go   |   304 -
 .../vendor/github.com/go-acme/lego/e2e/readme.md   |    22 -
 .../go-acme/lego/internal/dnsdocs/dns.go.tmpl      |    63 -
 .../go-acme/lego/internal/dnsdocs/dns.md.tmpl      |    78 -
 .../go-acme/lego/internal/dnsdocs/generator.go     |   136 -
 .../github.com/go-acme/lego/internal/release.go    |   223 -
 .../github.com/go-acme/lego/lego/client_test.go    |    46 -
 .../go-acme/lego/platform/config/env/env.go        |   163 -
 .../go-acme/lego/platform/config/env/env_test.go   |   358 -
 .../github.com/go-acme/lego/platform/tester/api.go |    62 -
 .../github.com/go-acme/lego/platform/tester/env.go |   147 -
 .../go-acme/lego/platform/tester/env_test.go       |   347 -
 .../go-acme/lego/platform/wait/wait_test.go        |    26 -
 .../go-acme/lego/providers/dns/acmedns/acmedns.go  |   162 -
 .../lego/providers/dns/acmedns/acmedns.toml        |    16 -
 .../lego/providers/dns/acmedns/acmedns_test.go     |   278 -
 .../go-acme/lego/providers/dns/alidns/alidns.go    |   220 -
 .../go-acme/lego/providers/dns/alidns/alidns.toml  |    21 -
 .../lego/providers/dns/alidns/alidns_test.go       |   150 -
 .../lego/providers/dns/auroradns/auroradns.go      |   191 -
 .../lego/providers/dns/auroradns/auroradns.toml    |    21 -
 .../lego/providers/dns/auroradns/auroradns_test.go |   224 -
 .../go-acme/lego/providers/dns/azure/azure.go      |   274 -
 .../go-acme/lego/providers/dns/azure/azure.toml    |    25 -
 .../go-acme/lego/providers/dns/azure/azure_test.go |   181 -
 .../go-acme/lego/providers/dns/bindman/bindman.go  |    99 -
 .../lego/providers/dns/bindman/bindman.toml        |    22 -
 .../lego/providers/dns/bindman/bindman_test.go     |   238 -
 .../go-acme/lego/providers/dns/bluecat/bluecat.go  |   201 -
 .../lego/providers/dns/bluecat/bluecat.toml        |    20 -
 .../lego/providers/dns/bluecat/bluecat_test.go     |   240 -
 .../go-acme/lego/providers/dns/bluecat/client.go   |   249 -
 .../lego/providers/dns/cloudflare/cloudflare.go    |   157 -
 .../lego/providers/dns/cloudflare/cloudflare.toml  |    31 -
 .../providers/dns/cloudflare/cloudflare_test.go    |   151 -
 .../go-acme/lego/providers/dns/cloudns/cloudns.go  |   121 -
 .../lego/providers/dns/cloudns/cloudns.toml        |    20 -
 .../lego/providers/dns/cloudns/cloudns_test.go     |   150 -
 .../lego/providers/dns/cloudns/internal/client.go  |   271 -
 .../providers/dns/cloudns/internal/client_test.go  |   247 -
 .../lego/providers/dns/cloudxns/cloudxns.go        |   108 -
 .../lego/providers/dns/cloudxns/cloudxns.toml      |    20 -
 .../lego/providers/dns/cloudxns/cloudxns_test.go   |   150 -
 .../lego/providers/dns/cloudxns/internal/client.go |   208 -
 .../providers/dns/cloudxns/internal/client_test.go |   287 -
 .../go-acme/lego/providers/dns/conoha/conoha.go    |   148 -
 .../go-acme/lego/providers/dns/conoha/conoha.toml  |    22 -
 .../lego/providers/dns/conoha/conoha_test.go       |   176 -
 .../lego/providers/dns/conoha/internal/client.go   |   205 -
 .../providers/dns/conoha/internal/client_test.go   |   210 -
 .../lego/providers/dns/designate/designate.go      |   249 -
 .../lego/providers/dns/designate/designate.toml    |    23 -
 .../lego/providers/dns/designate/designate_test.go |   241 -
 .../lego/providers/dns/digitalocean/client.go      |   132 -
 .../providers/dns/digitalocean/digitalocean.go     |   131 -
 .../providers/dns/digitalocean/digitalocean.toml   |    19 -
 .../dns/digitalocean/digitalocean_test.go          |   171 -
 .../go-acme/lego/providers/dns/dns_providers.go    |   195 -
 .../lego/providers/dns/dns_providers_test.go       |    40 -
 .../lego/providers/dns/dnsimple/dnsimple.go        |   211 -
 .../lego/providers/dns/dnsimple/dnsimple.toml      |    20 -
 .../lego/providers/dns/dnsimple/dnsimple_test.go   |   159 -
 .../lego/providers/dns/dnsmadeeasy/dnsmadeeasy.go  |   163 -
 .../providers/dns/dnsmadeeasy/dnsmadeeasy.toml     |    21 -
 .../providers/dns/dnsmadeeasy/dnsmadeeasy_test.go  |   144 -
 .../providers/dns/dnsmadeeasy/internal/client.go   |   173 -
 .../go-acme/lego/providers/dns/dnspod/dnspod.go    |   188 -
 .../go-acme/lego/providers/dns/dnspod/dnspod.toml  |    20 -
 .../lego/providers/dns/dnspod/dnspod_test.go       |   117 -
 .../go-acme/lego/providers/dns/dode/client.go      |    57 -
 .../go-acme/lego/providers/dns/dode/dode.go        |    89 -
 .../go-acme/lego/providers/dns/dode/dode.toml      |    20 -
 .../go-acme/lego/providers/dns/dode/dode_test.go   |   115 -
 .../go-acme/lego/providers/dns/dreamhost/client.go |    73 -
 .../lego/providers/dns/dreamhost/client_test.go    |    63 -
 .../lego/providers/dns/dreamhost/dreamhost.go      |   111 -
 .../lego/providers/dns/dreamhost/dreamhost.toml    |    19 -
 .../lego/providers/dns/dreamhost/dreamhost_test.go |   196 -
 .../go-acme/lego/providers/dns/duckdns/client.go   |    68 -
 .../go-acme/lego/providers/dns/duckdns/duckdns.go  |    89 -
 .../lego/providers/dns/duckdns/duckdns.toml        |    20 -
 .../lego/providers/dns/duckdns/duckdns_test.go     |   175 -
 .../go-acme/lego/providers/dns/dyn/client.go       |   146 -
 .../go-acme/lego/providers/dns/dyn/dyn.go          |   157 -
 .../go-acme/lego/providers/dns/dyn/dyn.toml        |    21 -
 .../go-acme/lego/providers/dns/dyn/dyn_test.go     |   176 -
 .../go-acme/lego/providers/dns/easydns/client.go   |    97 -
 .../go-acme/lego/providers/dns/easydns/easydns.go  |   165 -
 .../lego/providers/dns/easydns/easydns.toml        |    30 -
 .../lego/providers/dns/easydns/easydns_test.go     |   315 -
 .../go-acme/lego/providers/dns/exec/exec.go        |   113 -
 .../go-acme/lego/providers/dns/exec/exec.toml      |   111 -
 .../go-acme/lego/providers/dns/exec/exec_test.go   |   158 -
 .../lego/providers/dns/exec/log_mock_test.go       |    31 -
 .../lego/providers/dns/exoscale/exoscale.go        |   184 -
 .../lego/providers/dns/exoscale/exoscale.toml      |    22 -
 .../lego/providers/dns/exoscale/exoscale_test.go   |   207 -
 .../go-acme/lego/providers/dns/fastdns/fastdns.go  |   158 -
 .../lego/providers/dns/fastdns/fastdns.toml        |    24 -
 .../lego/providers/dns/fastdns/fastdns_test.go     |   265 -
 .../go-acme/lego/providers/dns/gandi/client.go     |   316 -
 .../go-acme/lego/providers/dns/gandi/gandi.go      |   214 -
 .../go-acme/lego/providers/dns/gandi/gandi.toml    |    19 -
 .../lego/providers/dns/gandi/gandi_mock_test.go    |   817 -
 .../go-acme/lego/providers/dns/gandi/gandi_test.go |   169 -
 .../go-acme/lego/providers/dns/gandiv5/client.go   |   199 -
 .../go-acme/lego/providers/dns/gandiv5/gandiv5.go  |   167 -
 .../lego/providers/dns/gandiv5/gandiv5.toml        |    19 -
 .../lego/providers/dns/gandiv5/gandiv5_test.go     |   187 -
 .../gcloud/fixtures/gce_account_service_file.json  |    11 -
 .../go-acme/lego/providers/dns/gcloud/gcloud.toml  |    22 -
 .../lego/providers/dns/gcloud/googlecloud.go       |   337 -
 .../lego/providers/dns/gcloud/googlecloud_test.go  |   419 -
 .../go-acme/lego/providers/dns/glesys/client.go    |    91 -
 .../go-acme/lego/providers/dns/glesys/glesys.go    |   146 -
 .../go-acme/lego/providers/dns/glesys/glesys.toml  |    20 -
 .../lego/providers/dns/glesys/glesys_test.go       |   149 -
 .../go-acme/lego/providers/dns/godaddy/client.go   |    53 -
 .../go-acme/lego/providers/dns/godaddy/godaddy.go  |   151 -
 .../lego/providers/dns/godaddy/godaddy.toml        |    19 -
 .../lego/providers/dns/godaddy/godaddy_test.go     |   145 -
 .../go-acme/lego/providers/dns/hostingde/client.go |   127 -
 .../lego/providers/dns/hostingde/hostingde.go      |   183 -
 .../lego/providers/dns/hostingde/hostingde.toml    |    20 -
 .../lego/providers/dns/hostingde/hostingde_test.go |   150 -
 .../go-acme/lego/providers/dns/hostingde/model.go  |   139 -
 .../go-acme/lego/providers/dns/httpreq/httpreq.go  |   195 -
 .../lego/providers/dns/httpreq/httpreq.toml        |    61 -
 .../lego/providers/dns/httpreq/httpreq_test.go     |   295 -
 .../go-acme/lego/providers/dns/iij/iij.go          |   239 -
 .../go-acme/lego/providers/dns/iij/iij.toml        |    21 -
 .../go-acme/lego/providers/dns/iij/iij_test.go     |   229 -
 .../go-acme/lego/providers/dns/inwx/inwx.go        |   166 -
 .../go-acme/lego/providers/dns/inwx/inwx.toml      |    21 -
 .../go-acme/lego/providers/dns/inwx/inwx_test.go   |   140 -
 .../go-acme/lego/providers/dns/joker/client.go     |   210 -
 .../lego/providers/dns/joker/client_test.go        |   535 -
 .../go-acme/lego/providers/dns/joker/joker.go      |   184 -
 .../go-acme/lego/providers/dns/joker/joker.toml    |    28 -
 .../go-acme/lego/providers/dns/joker/joker_test.go |   186 -
 .../lego/providers/dns/lightsail/lightsail.go      |   153 -
 .../lego/providers/dns/lightsail/lightsail.toml    |    19 -
 .../dns/lightsail/lightsail_integration_test.go    |    58 -
 .../lego/providers/dns/lightsail/lightsail_test.go |    78 -
 .../providers/dns/lightsail/mock_server_test.go    |    39 -
 .../go-acme/lego/providers/dns/linode/linode.go    |   164 -
 .../go-acme/lego/providers/dns/linode/linode.toml  |    19 -
 .../lego/providers/dns/linode/linode_test.go       |   358 -
 .../lego/providers/dns/linodev4/linodev4.go        |   190 -
 .../lego/providers/dns/linodev4/linodev4.toml      |    19 -
 .../lego/providers/dns/linodev4/linodev4_test.go   |   356 -
 .../go-acme/lego/providers/dns/mydnsjp/client.go   |    52 -
 .../go-acme/lego/providers/dns/mydnsjp/mydnsjp.go  |    93 -
 .../lego/providers/dns/mydnsjp/mydnsjp.toml        |    20 -
 .../lego/providers/dns/mydnsjp/mydnsjp_test.go     |   145 -
 .../go-acme/lego/providers/dns/namecheap/client.go |   225 -
 .../lego/providers/dns/namecheap/namecheap.go      |   260 -
 .../lego/providers/dns/namecheap/namecheap.toml    |    20 -
 .../lego/providers/dns/namecheap/namecheap_test.go |   390 -
 .../lego/providers/dns/namedotcom/namedotcom.go    |   170 -
 .../lego/providers/dns/namedotcom/namedotcom.toml  |    22 -
 .../providers/dns/namedotcom/namedotcom_test.go    |   152 -
 .../lego/providers/dns/namesilo/namesilo.go        |   142 -
 .../lego/providers/dns/namesilo/namesilo.toml      |    22 -
 .../lego/providers/dns/namesilo/namesilo_test.go   |   135 -
 .../lego/providers/dns/netcup/internal/client.go   |   327 -
 .../providers/dns/netcup/internal/client_test.go   |   611 -
 .../go-acme/lego/providers/dns/netcup/netcup.go    |   182 -
 .../go-acme/lego/providers/dns/netcup/netcup.toml  |    21 -
 .../lego/providers/dns/netcup/netcup_test.go       |   185 -
 .../lego/providers/dns/nifcloud/internal/client.go |   234 -
 .../providers/dns/nifcloud/internal/client_test.go |   179 -
 .../lego/providers/dns/nifcloud/nifcloud.go        |   156 -
 .../lego/providers/dns/nifcloud/nifcloud.toml      |    20 -
 .../lego/providers/dns/nifcloud/nifcloud_test.go   |   150 -
 .../go-acme/lego/providers/dns/ns1/ns1.go          |   162 -
 .../go-acme/lego/providers/dns/ns1/ns1.toml        |    20 -
 .../go-acme/lego/providers/dns/ns1/ns1_test.go     |   169 -
 .../providers/dns/oraclecloud/configprovider.go    |   101 -
 .../lego/providers/dns/oraclecloud/oraclecloud.go  |   175 -
 .../providers/dns/oraclecloud/oraclecloud.toml     |    35 -
 .../providers/dns/oraclecloud/oraclecloud_test.go  |   317 -
 .../go-acme/lego/providers/dns/otc/client.go       |   267 -
 .../go-acme/lego/providers/dns/otc/mock_test.go    |   162 -
 .../go-acme/lego/providers/dns/otc/otc.go          |   179 -
 .../go-acme/lego/providers/dns/otc/otc.toml        |    24 -
 .../go-acme/lego/providers/dns/otc/otc_test.go     |   139 -
 .../go-acme/lego/providers/dns/ovh/ovh.go          |   203 -
 .../go-acme/lego/providers/dns/ovh/ovh.toml        |    23 -
 .../go-acme/lego/providers/dns/ovh/ovh_test.go     |   228 -
 .../go-acme/lego/providers/dns/pdns/client.go      |   220 -
 .../go-acme/lego/providers/dns/pdns/pdns.go        |   198 -
 .../go-acme/lego/providers/dns/pdns/pdns.toml      |    30 -
 .../go-acme/lego/providers/dns/pdns/pdns_test.go   |   143 -
 .../go-acme/lego/providers/dns/rackspace/client.go |   205 -
 .../lego/providers/dns/rackspace/rackspace.go      |   159 -
 .../lego/providers/dns/rackspace/rackspace.toml    |    20 -
 .../providers/dns/rackspace/rackspace_mock_test.go |    87 -
 .../lego/providers/dns/rackspace/rackspace_test.go |   198 -
 .../go-acme/lego/providers/dns/rfc2136/rfc2136.go  |   183 -
 .../lego/providers/dns/rfc2136/rfc2136.toml        |    23 -
 .../lego/providers/dns/rfc2136/rfc2136_test.go     |   251 -
 .../lego/providers/dns/route53/fixtures_test.go    |    39 -
 .../lego/providers/dns/route53/mock_test.go        |    45 -
 .../go-acme/lego/providers/dns/route53/route53.go  |   279 -
 .../lego/providers/dns/route53/route53.toml        |    69 -
 .../dns/route53/route53_integration_test.go        |    56 -
 .../lego/providers/dns/route53/route53_test.go     |   177 -
 .../lego/providers/dns/sakuracloud/client.go       |   106 -
 .../lego/providers/dns/sakuracloud/client_test.go  |   320 -
 .../lego/providers/dns/sakuracloud/sakuracloud.go  |   101 -
 .../providers/dns/sakuracloud/sakuracloud.toml     |    21 -
 .../providers/dns/sakuracloud/sakuracloud_test.go  |   150 -
 .../lego/providers/dns/selectel/internal/client.go |   221 -
 .../lego/providers/dns/selectel/selectel.go        |   154 -
 .../lego/providers/dns/selectel/selectel.toml      |    20 -
 .../lego/providers/dns/selectel/selectel_test.go   |   129 -
 .../go-acme/lego/providers/dns/stackpath/client.go |   217 -
 .../lego/providers/dns/stackpath/stackpath.go      |   150 -
 .../lego/providers/dns/stackpath/stackpath.toml    |    20 -
 .../lego/providers/dns/stackpath/stackpath_test.go |   290 -
 .../providers/dns/transip/fixtures/private.key     |     0
 .../go-acme/lego/providers/dns/transip/transip.go  |   160 -
 .../lego/providers/dns/transip/transip.toml        |    21 -
 .../lego/providers/dns/transip/transip_test.go     |   337 -
 .../go-acme/lego/providers/dns/vegadns/vegadns.go  |   113 -
 .../lego/providers/dns/vegadns/vegadns.toml        |    22 -
 .../providers/dns/vegadns/vegadns_mock_test.go     |    85 -
 .../lego/providers/dns/vegadns/vegadns_test.go     |   288 -
 .../go-acme/lego/providers/dns/versio/client.go    |   127 -
 .../go-acme/lego/providers/dns/versio/versio.go    |   155 -
 .../go-acme/lego/providers/dns/versio/versio.toml  |    30 -
 .../lego/providers/dns/versio/versio_mock_test.go  |    13 -
 .../lego/providers/dns/versio/versio_test.go       |   304 -
 .../lego/providers/dns/vscale/internal/client.go   |   221 -
 .../go-acme/lego/providers/dns/vscale/vscale.go    |   155 -
 .../go-acme/lego/providers/dns/vscale/vscale.toml  |    20 -
 .../lego/providers/dns/vscale/vscale_test.go       |   129 -
 .../go-acme/lego/providers/dns/vultr/vultr.go      |   182 -
 .../go-acme/lego/providers/dns/vultr/vultr.toml    |    20 -
 .../go-acme/lego/providers/dns/vultr/vultr_test.go |   117 -
 .../go-acme/lego/providers/dns/zoneee/client.go    |   132 -
 .../go-acme/lego/providers/dns/zoneee/zoneee.go    |   134 -
 .../go-acme/lego/providers/dns/zoneee/zoneee.toml  |    21 -
 .../lego/providers/dns/zoneee/zoneee_test.go       |   412 -
 .../lego/providers/http/memcached/README.md        |    15 -
 .../lego/providers/http/memcached/memcached.go     |    60 -
 .../providers/http/memcached/memcached_test.go     |   111 -
 .../go-acme/lego/providers/http/webroot/webroot.go |    53 -
 .../lego/providers/http/webroot/webroot_test.go    |    41 -
 .../go-acme/lego/registration/registar_test.go     |    56 -
 .../go-acme/lego/registration/user_test.go         |    16 -
 .../vendor/github.com/go-errors/errors/LICENSE     |     7 -
 .../vendor/github.com/go-errors/errors/LICENSE.MIT |     7 -
 .../vendor/github.com/go-errors/errors/error.go    |   217 -
 .../github.com/go-errors/errors/parse_panic.go     |   127 -
 .../github.com/go-errors/errors/stackframe.go      |   102 -
 .../vendor/github.com/go-ini/ini/LICENSE           |   191 -
 .../vendor/github.com/go-ini/ini/error.go          |    32 -
 .../vendor/github.com/go-ini/ini/file.go           |   414 -
 .../vendor/github.com/go-ini/ini/ini.go            |   211 -
 .../vendor/github.com/go-ini/ini/key.go            |   751 -
 .../vendor/github.com/go-ini/ini/parser.go         |   494 -
 .../vendor/github.com/go-ini/ini/section.go        |   258 -
 .../vendor/github.com/go-ini/ini/struct.go         |   512 -
 .../vendor/github.com/gofrs/uuid/LICENSE           |    20 -
 .../vendor/github.com/gofrs/uuid/codec.go          |   212 -
 .../vendor/github.com/gofrs/uuid/fuzz.go           |    47 -
 .../vendor/github.com/gofrs/uuid/generator.go      |   299 -
 .../vendor/github.com/gofrs/uuid/sql.go            |   109 -
 .../vendor/github.com/gofrs/uuid/uuid.go           |   189 -
 .../github.com/google/go-querystring/LICENSE       |    27 -
 .../google/go-querystring/query/encode.go          |   320 -
 .../vendor/github.com/google/uuid/CONTRIBUTING.md  |    10 -
 .../vendor/github.com/google/uuid/json_test.go     |    62 -
 .../vendor/github.com/google/uuid/seq_test.go      |    66 -
 .../vendor/github.com/google/uuid/sql_test.go      |   113 -
 .../vendor/github.com/google/uuid/uuid_test.go     |   597 -
 .../github.com/gophercloud/gophercloud/LICENSE     |   191 -
 .../gophercloud/gophercloud/auth_options.go        |   437 -
 .../github.com/gophercloud/gophercloud/doc.go      |    93 -
 .../gophercloud/gophercloud/endpoint_search.go     |    76 -
 .../github.com/gophercloud/gophercloud/errors.go   |   460 -
 .../gophercloud/gophercloud/openstack/auth_env.go  |   114 -
 .../gophercloud/gophercloud/openstack/client.go    |   429 -
 .../gophercloud/openstack/dns/v2/recordsets/doc.go |    54 -
 .../openstack/dns/v2/recordsets/requests.go        |   166 -
 .../openstack/dns/v2/recordsets/results.go         |   147 -
 .../openstack/dns/v2/recordsets/urls.go            |    11 -
 .../gophercloud/openstack/dns/v2/zones/doc.go      |    48 -
 .../gophercloud/openstack/dns/v2/zones/requests.go |   174 -
 .../gophercloud/openstack/dns/v2/zones/results.go  |   166 -
 .../gophercloud/openstack/dns/v2/zones/urls.go     |    11 -
 .../gophercloud/gophercloud/openstack/doc.go       |    14 -
 .../gophercloud/openstack/endpoint_location.go     |   107 -
 .../gophercloud/gophercloud/openstack/errors.go    |    71 -
 .../openstack/identity/v2/tenants/doc.go           |    65 -
 .../openstack/identity/v2/tenants/requests.go      |   116 -
 .../openstack/identity/v2/tenants/results.go       |    91 -
 .../openstack/identity/v2/tenants/urls.go          |    23 -
 .../openstack/identity/v2/tokens/doc.go            |    46 -
 .../openstack/identity/v2/tokens/requests.go       |   103 -
 .../openstack/identity/v2/tokens/results.go        |   159 -
 .../openstack/identity/v2/tokens/urls.go           |    13 -
 .../openstack/identity/v3/tokens/doc.go            |   108 -
 .../openstack/identity/v3/tokens/requests.go       |   162 -
 .../openstack/identity/v3/tokens/results.go        |   171 -
 .../openstack/identity/v3/tokens/urls.go           |     7 -
 .../gophercloud/openstack/utils/base_endpoint.go   |    28 -
 .../gophercloud/openstack/utils/choose_version.go  |   111 -
 .../gophercloud/gophercloud/pagination/http.go     |    60 -
 .../gophercloud/gophercloud/pagination/linked.go   |    92 -
 .../gophercloud/gophercloud/pagination/marker.go   |    58 -
 .../gophercloud/gophercloud/pagination/pager.go    |   251 -
 .../gophercloud/gophercloud/pagination/pkg.go      |     4 -
 .../gophercloud/gophercloud/pagination/single.go   |    33 -
 .../github.com/gophercloud/gophercloud/params.go   |   491 -
 .../gophercloud/gophercloud/provider_client.go     |   431 -
 .../github.com/gophercloud/gophercloud/results.go  |   448 -
 .../gophercloud/gophercloud/service_client.go      |   150 -
 .../github.com/gophercloud/gophercloud/util.go     |   102 -
 .../grpc-ecosystem/grpc-gateway/LICENSE.txt        |    27 -
 .../grpc-gateway/internal/stream_chunk.pb.go       |   118 -
 .../grpc-ecosystem/grpc-gateway/runtime/context.go |   210 -
 .../grpc-ecosystem/grpc-gateway/runtime/convert.go |   312 -
 .../grpc-ecosystem/grpc-gateway/runtime/doc.go     |     5 -
 .../grpc-ecosystem/grpc-gateway/runtime/errors.go  |   145 -
 .../grpc-gateway/runtime/fieldmask.go              |    70 -
 .../grpc-ecosystem/grpc-gateway/runtime/handler.go |   209 -
 .../grpc-gateway/runtime/marshal_httpbodyproto.go  |    43 -
 .../grpc-gateway/runtime/marshal_json.go           |    45 -
 .../grpc-gateway/runtime/marshal_jsonpb.go         |   262 -
 .../grpc-gateway/runtime/marshal_proto.go          |    62 -
 .../grpc-gateway/runtime/marshaler.go              |    48 -
 .../grpc-gateway/runtime/marshaler_registry.go     |    91 -
 .../grpc-ecosystem/grpc-gateway/runtime/mux.go     |   303 -
 .../grpc-ecosystem/grpc-gateway/runtime/pattern.go |   262 -
 .../grpc-gateway/runtime/proto2_convert.go         |    80 -
 .../grpc-gateway/runtime/proto_errors.go           |   106 -
 .../grpc-ecosystem/grpc-gateway/runtime/query.go   |   392 -
 .../grpc-gateway/third_party/googleapis/LICENSE    |   201 -
 .../grpc-ecosystem/grpc-gateway/utilities/doc.go   |     2 -
 .../grpc-gateway/utilities/pattern.go              |    22 -
 .../grpc-gateway/utilities/readerfactory.go        |    20 -
 .../grpc-ecosystem/grpc-gateway/utilities/trie.go  |   177 -
 .../vendor/github.com/hashicorp/golang-lru/LICENSE |   362 -
 .../hashicorp/golang-lru/simplelru/lru.go          |   161 -
 .../golang-lru/simplelru/lru_interface.go          |    36 -
 .../vendor/github.com/iij/doapi/LICENSE.md         |   201 -
 .../vendor/github.com/iij/doapi/api.go             |   170 -
 .../vendor/github.com/iij/doapi/parse.go           |   267 -
 .../vendor/github.com/iij/doapi/protocol/Commit.go |    44 -
 .../github.com/iij/doapi/protocol/RecordAdd.go     |    51 -
 .../github.com/iij/doapi/protocol/RecordDelete.go  |    47 -
 .../github.com/iij/doapi/protocol/RecordGet.go     |    48 -
 .../github.com/iij/doapi/protocol/RecordListGet.go |    47 -
 .../vendor/github.com/iij/doapi/protocol/Reset.go  |    45 -
 .../github.com/iij/doapi/protocol/ZoneListGet.go   |    45 -
 .../vendor/github.com/iij/doapi/protocol/common.go |    53 -
 .../vendor/github.com/jmespath/go-jmespath/LICENSE |    13 -
 .../vendor/github.com/jmespath/go-jmespath/api.go  |    49 -
 .../jmespath/go-jmespath/astnodetype_string.go     |    16 -
 .../github.com/jmespath/go-jmespath/functions.go   |   842 -
 .../github.com/jmespath/go-jmespath/interpreter.go |   418 -
 .../github.com/jmespath/go-jmespath/lexer.go       |   420 -
 .../github.com/jmespath/go-jmespath/parser.go      |   603 -
 .../jmespath/go-jmespath/toktype_string.go         |    16 -
 .../vendor/github.com/jmespath/go-jmespath/util.go |   185 -
 .../vendor/github.com/kolo/xmlrpc/LICENSE          |    19 -
 .../vendor/github.com/kolo/xmlrpc/client.go        |   169 -
 .../vendor/github.com/kolo/xmlrpc/decoder.go       |   463 -
 .../vendor/github.com/kolo/xmlrpc/encoder.go       |   164 -
 .../vendor/github.com/kolo/xmlrpc/request.go       |    57 -
 .../vendor/github.com/kolo/xmlrpc/response.go      |    52 -
 .../vendor/github.com/kolo/xmlrpc/xmlrpc.go        |    19 -
 .../labbsr0x/bindman-dns-webhook/LICENSE           |    21 -
 .../bindman-dns-webhook/src/client/client.go       |   113 -
 .../bindman-dns-webhook/src/types/dnsmanager.go    |    20 -
 .../bindman-dns-webhook/src/types/dnsrecord.go     |    40 -
 .../bindman-dns-webhook/src/types/error.go         |    51 -
 .../vendor/github.com/labbsr0x/goh/LICENSE         |    21 -
 .../github.com/labbsr0x/goh/gohclient/gohclient.go |   114 -
 .../vendor/github.com/lestrrat-go/jwx/.travis.yml  |    12 -
 .../vendor/github.com/lestrrat-go/jwx/Changes      |     5 -
 .../vendor/github.com/lestrrat-go/jwx/Makefile     |    16 -
 .../vendor/github.com/lestrrat-go/jwx/README.md    |   295 -
 .../github.com/lestrrat-go/jwx/buffer/buffer.go    |   118 -
 .../lestrrat-go/jwx/buffer/buffer_test.go          |    93 -
 .../github.com/lestrrat-go/jwx/cmd/jwx/jwx.go      |   152 -
 .../jwx/internal/concatkdf/concatkdf.go            |    55 -
 .../jwx/internal/concatkdf/concatkdf_test.go       |    42 -
 .../lestrrat-go/jwx/internal/debug/debug_off.go    |     8 -
 .../lestrrat-go/jwx/internal/debug/debug_on.go     |    16 -
 .../jwx/internal/ecdsautil/ecdsautil.go            |    94 -
 .../jwx/internal/ecdsautil/ecdsautil_test.go       |    38 -
 .../lestrrat-go/jwx/internal/padbuf/padbuf.go      |    61 -
 .../lestrrat-go/jwx/internal/padbuf/padbuf_test.go |    29 -
 .../lestrrat-go/jwx/internal/rsautil/rsautil.go    |    98 -
 .../jwx/internal/rsautil/rsautil_test.go           |    59 -
 .../jwx/jwa/internal/cmd/gentypes/main.go          |   399 -
 .../lestrrat-go/jwx/jwe/aescbc/aescbc.go           |   183 -
 .../lestrrat-go/jwx/jwe/aescbc/aescbc_test.go      |    60 -
 .../github.com/lestrrat-go/jwx/jwe/cipher.go       |   188 -
 .../github.com/lestrrat-go/jwx/jwe/cipher_test.go  |    26 -
 .../lestrrat-go/jwx/jwe/content_crypt.go           |    59 -
 .../github.com/lestrrat-go/jwx/jwe/doc_test.go     |    36 -
 .../github.com/lestrrat-go/jwx/jwe/encrypt.go      |   105 -
 .../github.com/lestrrat-go/jwx/jwe/interface.go    |   280 -
 .../vendor/github.com/lestrrat-go/jwx/jwe/jwe.go   |   285 -
 .../github.com/lestrrat-go/jwx/jwe/jwe_test.go     |   327 -
 .../github.com/lestrrat-go/jwx/jwe/key_encrypt.go  |   435 -
 .../github.com/lestrrat-go/jwx/jwe/key_generate.go |   109 -
 .../github.com/lestrrat-go/jwx/jwe/keywrap_test.go |    75 -
 .../lestrrat-go/jwx/jwe/lowlevel_test.go           |   122 -
 .../github.com/lestrrat-go/jwx/jwe/message.go      |   559 -
 .../vendor/github.com/lestrrat-go/jwx/jwe/out      |    27 -
 .../vendor/github.com/lestrrat-go/jwx/jwe/out.256  |    28 -
 .../github.com/lestrrat-go/jwx/jwe/serializer.go   |    73 -
 .../github.com/lestrrat-go/jwx/jwe/speed_test.go   |    50 -
 .../github.com/lestrrat-go/jwx/jwk/doc_test.go     |    31 -
 .../github.com/lestrrat-go/jwx/jwk/ecdsa_test.go   |   228 -
 .../github.com/lestrrat-go/jwx/jwk/headers_test.go |   161 -
 .../jwx/jwk/internal/cmd/genheader/main.go         |   368 -
 .../github.com/lestrrat-go/jwx/jwk/jwk_test.go     |   563 -
 .../github.com/lestrrat-go/jwx/jwk/rsa_test.go     |   184 -
 .../github.com/lestrrat-go/jwx/jws/doc_test.go     |    63 -
 .../github.com/lestrrat-go/jwx/jws/headers.go      |   198 -
 .../github.com/lestrrat-go/jwx/jws/headers_test.go |   128 -
 .../github.com/lestrrat-go/jwx/jws/interface.go    |    91 -
 .../jwx/jws/internal/cmd/genheader/main.go         |   268 -
 .../vendor/github.com/lestrrat-go/jwx/jws/jws.go   |   567 -
 .../github.com/lestrrat-go/jwx/jws/jws_test.go     |   925 -
 .../github.com/lestrrat-go/jwx/jws/message.go      |    45 -
 .../github.com/lestrrat-go/jwx/jws/option.go       |    26 -
 .../github.com/lestrrat-go/jwx/jws/sign/ecdsa.go   |    81 -
 .../lestrrat-go/jwx/jws/sign/ecdsa_test.go         |    34 -
 .../github.com/lestrrat-go/jwx/jws/sign/hmac.go    |    63 -
 .../lestrrat-go/jwx/jws/sign/hmac_test.go          |    34 -
 .../lestrrat-go/jwx/jws/sign/interface.go          |    44 -
 .../github.com/lestrrat-go/jwx/jws/sign/rsa.go     |    95 -
 .../github.com/lestrrat-go/jwx/jws/sign/sign.go    |    20 -
 .../github.com/lestrrat-go/jwx/jws/signer.go       |     1 -
 .../github.com/lestrrat-go/jwx/jws/signer_test.go  |   100 -
 .../github.com/lestrrat-go/jwx/jws/verify/ecdsa.go |    65 -
 .../lestrrat-go/jwx/jws/verify/ecdsa_test.go       |    34 -
 .../github.com/lestrrat-go/jwx/jws/verify/hmac.go  |    33 -
 .../lestrrat-go/jwx/jws/verify/hmac_test.go        |    31 -
 .../lestrrat-go/jwx/jws/verify/interface.go        |    35 -
 .../github.com/lestrrat-go/jwx/jws/verify/rsa.go   |    86 -
 .../lestrrat-go/jwx/jws/verify/rsa_test.go         |    34 -
 .../lestrrat-go/jwx/jws/verify/verify.go           |    21 -
 .../github.com/lestrrat-go/jwx/jwt/README.md       |    78 -
 .../github.com/lestrrat-go/jwx/jwt/example_test.go |    88 -
 .../github.com/lestrrat-go/jwx/jwt/interface.go    |     3 -
 .../jwx/jwt/internal/cmd/gentoken/main.go          |   370 -
 .../lestrrat-go/jwx/jwt/internal/types/date.go     |    83 -
 .../jwx/jwt/internal/types/date_test.go            |    37 -
 .../vendor/github.com/lestrrat-go/jwx/jwt/jwt.go   |   106 -
 .../github.com/lestrrat-go/jwx/jwt/jwt_test.go     |   253 -
 .../github.com/lestrrat-go/jwx/jwt/options.go      |    37 -
 .../github.com/lestrrat-go/jwx/jwt/string.go       |    37 -
 .../github.com/lestrrat-go/jwx/jwt/string_test.go  |    18 -
 .../github.com/lestrrat-go/jwx/jwt/token_gen.go    |   322 -
 .../lestrrat-go/jwx/jwt/token_gen_test.go          |   157 -
 .../github.com/lestrrat-go/jwx/jwt/verify.go       |   157 -
 .../github.com/lestrrat-go/jwx/jwt/verify_test.go  |   128 -
 .../vendor/github.com/lestrrat-go/jwx/jwx.go       |    26 -
 .../github.com/lestrrat-go/jwx/jwx_example_test.go |   116 -
 .../lestrrat-go/jwx/scripts/check-diff.sh          |    31 -
 .../vendor/github.com/linode/linodego/LICENSE      |    21 -
 .../vendor/github.com/linode/linodego/account.go   |    45 -
 .../github.com/linode/linodego/account_events.go   |   300 -
 .../github.com/linode/linodego/account_invoices.go |   125 -
 .../linode/linodego/account_notifications.go       |   101 -
 .../linode/linodego/account_oauth_client.go        |   190 -
 .../github.com/linode/linodego/account_payments.go |   115 -
 .../github.com/linode/linodego/account_settings.go |    72 -
 .../github.com/linode/linodego/account_users.go    |   164 -
 .../vendor/github.com/linode/linodego/client.go    |   304 -
 .../github.com/linode/linodego/domain_records.go   |   195 -
 .../vendor/github.com/linode/linodego/domains.go   |   295 -
 .../vendor/github.com/linode/linodego/errors.go    |   109 -
 .../vendor/github.com/linode/linodego/images.go    |   168 -
 .../github.com/linode/linodego/instance_configs.go |   246 -
 .../github.com/linode/linodego/instance_disks.go   |   251 -
 .../github.com/linode/linodego/instance_ips.go     |   146 -
 .../linode/linodego/instance_snapshots.go          |   188 -
 .../github.com/linode/linodego/instance_stats.go   |    68 -
 .../github.com/linode/linodego/instance_volumes.go |    38 -
 .../vendor/github.com/linode/linodego/instances.go |   493 -
 .../vendor/github.com/linode/linodego/kernels.go   |    61 -
 .../vendor/github.com/linode/linodego/longview.go  |    67 -
 .../linode/linodego/longview_subscriptions.go      |    70 -
 .../vendor/github.com/linode/linodego/managed.go   |     1 -
 .../github.com/linode/linodego/network_ips.go      |    90 -
 .../github.com/linode/linodego/network_pools.go    |    50 -
 .../github.com/linode/linodego/network_ranges.go   |    50 -
 .../github.com/linode/linodego/nodebalancer.go     |   199 -
 .../linode/linodego/nodebalancer_config_nodes.go   |   186 -
 .../linode/linodego/nodebalancer_configs.go        |   334 -
 .../github.com/linode/linodego/pagination.go       |   440 -
 .../vendor/github.com/linode/linodego/profile.go   |   117 -
 .../github.com/linode/linodego/profile_sshkeys.go  |   160 -
 .../github.com/linode/linodego/profile_tokens.go   |   195 -
 .../vendor/github.com/linode/linodego/regions.go   |    64 -
 .../vendor/github.com/linode/linodego/resources.go |   170 -
 .../github.com/linode/linodego/stackscripts.go     |   210 -
 .../vendor/github.com/linode/linodego/support.go   |    88 -
 .../vendor/github.com/linode/linodego/tags.go      |   219 -
 .../vendor/github.com/linode/linodego/template.go  |   167 -
 .../vendor/github.com/linode/linodego/types.go     |    90 -
 .../vendor/github.com/linode/linodego/util.go      |    15 -
 .../vendor/github.com/linode/linodego/volumes.go   |   301 -
 .../vendor/github.com/linode/linodego/waitfor.go   |   312 -
 .../vendor/github.com/miekg/dns/client_test.go     |   590 -
 .../github.com/miekg/dns/clientconfig_test.go      |   181 -
 .../github.com/miekg/dns/compress_generate.go      |   188 -
 .../vendor/github.com/miekg/dns/dns_bench_test.go  |   230 -
 .../vendor/github.com/miekg/dns/dns_test.go        |   320 -
 .../vendor/github.com/miekg/dns/dnssec_test.go     |   841 -
 .../vendor/github.com/miekg/dns/dnsutil/util.go    |    83 -
 .../github.com/miekg/dns/dnsutil/util_test.go      |   130 -
 .../vendor/github.com/miekg/dns/dyn_test.go        |     3 -
 .../vendor/github.com/miekg/dns/edns_test.go       |    68 -
 .../vendor/github.com/miekg/dns/example_test.go    |   146 -
 .../vendor/github.com/miekg/dns/issue_test.go      |    62 -
 .../vendor/github.com/miekg/dns/labels_test.go     |   201 -
 .../vendor/github.com/miekg/dns/leak_test.go       |    71 -
 .../vendor/github.com/miekg/dns/length_test.go     |   174 -
 .../vendor/github.com/miekg/dns/msg_generate.go    |   348 -
 .../vendor/github.com/miekg/dns/msg_test.go        |   124 -
 .../vendor/github.com/miekg/dns/nsecx_test.go      |   133 -
 .../vendor/github.com/miekg/dns/parse_test.go      |  1465 --
 .../vendor/github.com/miekg/dns/privaterr_test.go  |   166 -
 .../vendor/github.com/miekg/dns/remote_test.go     |    19 -
 .../vendor/github.com/miekg/dns/rr_test.go         |     7 -
 .../vendor/github.com/miekg/dns/sanitize_test.go   |    75 -
 .../vendor/github.com/miekg/dns/scan_test.go       |    48 -
 .../vendor/github.com/miekg/dns/server_test.go     |   792 -
 .../vendor/github.com/miekg/dns/sig0_test.go       |    89 -
 .../vendor/github.com/miekg/dns/tsig_test.go       |    52 -
 .../vendor/github.com/miekg/dns/types_generate.go  |   272 -
 .../vendor/github.com/miekg/dns/types_test.go      |    74 -
 .../vendor/github.com/miekg/dns/udp_test.go        |   140 -
 .../vendor/github.com/miekg/dns/update_test.go     |   139 -
 .../vendor/github.com/miekg/dns/version_test.go    |    10 -
 .../vendor/github.com/mitchellh/go-homedir/LICENSE |    21 -
 .../github.com/mitchellh/go-homedir/homedir.go     |   157 -
 .../github.com/mitchellh/mapstructure/LICENSE      |    21 -
 .../mitchellh/mapstructure/decode_hooks.go         |   217 -
 .../github.com/mitchellh/mapstructure/error.go     |    50 -
 .../mitchellh/mapstructure/mapstructure.go         |  1149 -
 .../vendor/github.com/namedotcom/go/LICENSE        |    21 -
 .../vendor/github.com/namedotcom/go/namecom/dns.go |   133 -
 .../github.com/namedotcom/go/namecom/dnssecs.go    |   102 -
 .../github.com/namedotcom/go/namecom/domains.go    |   382 -
 .../namedotcom/go/namecom/emailforwardings.go      |   133 -
 .../github.com/namedotcom/go/namecom/hello.go      |    31 -
 .../github.com/namedotcom/go/namecom/namecom.go    |   729 -
 .../github.com/namedotcom/go/namecom/transfers.go  |   108 -
 .../namedotcom/go/namecom/urlforwardings.go        |   133 -
 .../namedotcom/go/namecom/vanitynameservers.go     |   133 -
 .../vendor/github.com/nrdcg/auroradns/LICENSE      |   373 -
 .../vendor/github.com/nrdcg/auroradns/auth.go      |    98 -
 .../vendor/github.com/nrdcg/auroradns/client.go    |   144 -
 .../vendor/github.com/nrdcg/auroradns/records.go   |    91 -
 .../vendor/github.com/nrdcg/auroradns/zones.go     |    69 -
 .../vendor/github.com/nrdcg/goinwx/LICENSE         |    21 -
 .../vendor/github.com/nrdcg/goinwx/account.go      |    48 -
 .../vendor/github.com/nrdcg/goinwx/contact.go      |   148 -
 .../vendor/github.com/nrdcg/goinwx/domain.go       |   307 -
 .../vendor/github.com/nrdcg/goinwx/goinwx.go       |   112 -
 .../vendor/github.com/nrdcg/goinwx/nameserver.go   |   283 -
 .../vendor/github.com/nrdcg/goinwx/response.go     |    28 -
 .../vendor/github.com/nrdcg/namesilo/LICENSE       |   373 -
 .../vendor/github.com/nrdcg/namesilo/auth.go       |    57 -
 .../vendor/github.com/nrdcg/namesilo/model.go      |   768 -
 .../vendor/github.com/nrdcg/namesilo/namesilo.go   |    60 -
 .../vendor/github.com/nrdcg/namesilo/params.go     |   520 -
 .../github.com/nrdcg/namesilo/zz_gen_client.go     |  2192 --
 .../github.com/oracle/oci-go-sdk/LICENSE.txt       |    82 -
 .../github.com/oracle/oci-go-sdk/common/client.go  |   339 -
 .../github.com/oracle/oci-go-sdk/common/common.go  |   146 -
 .../oracle/oci-go-sdk/common/configuration.go      |   535 -
 .../github.com/oracle/oci-go-sdk/common/errors.go  |    98 -
 .../github.com/oracle/oci-go-sdk/common/helpers.go |   245 -
 .../github.com/oracle/oci-go-sdk/common/http.go    |   971 -
 .../oracle/oci-go-sdk/common/http_signer.go        |   269 -
 .../github.com/oracle/oci-go-sdk/common/log.go     |   170 -
 .../github.com/oracle/oci-go-sdk/common/retry.go   |   159 -
 .../github.com/oracle/oci-go-sdk/common/version.go |    36 -
 .../create_steering_policy_attachment_details.go   |    38 -
 ..._steering_policy_attachment_request_response.go |    75 -
 .../dns/create_steering_policy_details.go          |   176 -
 .../dns/create_steering_policy_request_response.go |    75 -
 .../oracle/oci-go-sdk/dns/create_zone_details.go   |    71 -
 .../oci-go-sdk/dns/create_zone_request_response.go |    69 -
 .../dns/delete_domain_records_request_response.go  |    79 -
 .../dns/delete_r_r_set_request_response.go         |    82 -
 ..._steering_policy_attachment_request_response.go |    73 -
 .../dns/delete_steering_policy_request_response.go |    73 -
 .../oci-go-sdk/dns/delete_zone_request_response.go |    76 -
 .../github.com/oracle/oci-go-sdk/dns/dns_client.go |  1198 -
 .../oracle/oci-go-sdk/dns/external_master.go       |    31 -
 .../dns/get_domain_records_request_response.go     |   158 -
 .../oci-go-sdk/dns/get_r_r_set_request_response.go |   105 -
 ..._steering_policy_attachment_request_response.go |    85 -
 .../dns/get_steering_policy_request_response.go    |    85 -
 .../dns/get_zone_records_request_response.go       |   165 -
 .../oci-go-sdk/dns/get_zone_request_response.go    |    81 -
 .../dns/list_steering_policies_request_response.go |   159 -
 ...steering_policy_attachments_request_response.go |   163 -
 .../oci-go-sdk/dns/list_zones_request_response.go  |   205 -
 .../github.com/oracle/oci-go-sdk/dns/nameserver.go |    25 -
 .../oci-go-sdk/dns/patch_domain_records_details.go |    23 -
 .../dns/patch_domain_records_request_response.go   |    98 -
 .../dns/patch_r_r_set_request_response.go          |   101 -
 .../oracle/oci-go-sdk/dns/patch_rr_set_details.go  |    23 -
 .../oci-go-sdk/dns/patch_zone_records_details.go   |    23 -
 .../dns/patch_zone_records_request_response.go     |    95 -
 .../github.com/oracle/oci-go-sdk/dns/record.go     |    50 -
 .../oracle/oci-go-sdk/dns/record_collection.go     |    23 -
 .../oracle/oci-go-sdk/dns/record_details.go        |    49 -
 .../oracle/oci-go-sdk/dns/record_operation.go      |    96 -
 .../github.com/oracle/oci-go-sdk/dns/rr_set.go     |    24 -
 .../github.com/oracle/oci-go-sdk/dns/sort_order.go |    22 -
 .../oracle/oci-go-sdk/dns/steering_policy.go       |   224 -
 .../oci-go-sdk/dns/steering_policy_answer.go       |    84 -
 .../oci-go-sdk/dns/steering_policy_attachment.go   |    86 -
 .../dns/steering_policy_attachment_summary.go      |    82 -
 .../dns/steering_policy_filter_answer_data.go      |    28 -
 .../oci-go-sdk/dns/steering_policy_filter_rule.go  |    61 -
 .../dns/steering_policy_filter_rule_case.go        |    33 -
 .../oci-go-sdk/dns/steering_policy_health_rule.go  |    55 -
 .../dns/steering_policy_health_rule_case.go        |    30 -
 .../oci-go-sdk/dns/steering_policy_limit_rule.go   |    61 -
 .../dns/steering_policy_limit_rule_case.go         |    36 -
 .../dns/steering_policy_priority_answer_data.go    |    30 -
 .../dns/steering_policy_priority_rule.go           |    61 -
 .../dns/steering_policy_priority_rule_case.go      |    33 -
 .../oracle/oci-go-sdk/dns/steering_policy_rule.go  |    96 -
 .../oci-go-sdk/dns/steering_policy_summary.go      |   160 -
 .../dns/steering_policy_weighted_answer_data.go    |    29 -
 .../dns/steering_policy_weighted_rule.go           |    61 -
 .../dns/steering_policy_weighted_rule_case.go      |    33 -
 .../github.com/oracle/oci-go-sdk/dns/tsig.go       |    34 -
 .../dns/update_domain_records_details.go           |    23 -
 .../dns/update_domain_records_request_response.go  |    98 -
 .../dns/update_r_r_set_request_response.go         |   101 -
 .../oracle/oci-go-sdk/dns/update_rr_set_details.go |    23 -
 .../update_steering_policy_attachment_details.go   |    29 -
 ..._steering_policy_attachment_request_response.go |    84 -
 .../dns/update_steering_policy_details.go          |   173 -
 .../dns/update_steering_policy_request_response.go |    84 -
 .../oracle/oci-go-sdk/dns/update_zone_details.go   |    39 -
 .../oci-go-sdk/dns/update_zone_records_details.go  |    23 -
 .../dns/update_zone_records_request_response.go    |    95 -
 .../oci-go-sdk/dns/update_zone_request_response.go |    86 -
 .../github.com/oracle/oci-go-sdk/dns/zone.go       |   125 -
 .../oracle/oci-go-sdk/dns/zone_summary.go          |   118 -
 .../vendor/github.com/ovh/go-ovh/LICENSE           |    26 -
 .../github.com/ovh/go-ovh/ovh/configuration.go     |   130 -
 .../github.com/ovh/go-ovh/ovh/consumer_key.go      |   113 -
 .../vendor/github.com/ovh/go-ovh/ovh/error.go      |    17 -
 .../vendor/github.com/ovh/go-ovh/ovh/logger.go     |    15 -
 .../vendor/github.com/ovh/go-ovh/ovh/ovh.go        |   423 -
 .../vendor/github.com/pmezard/go-difflib/LICENSE   |    27 -
 .../pmezard/go-difflib/difflib/difflib.go          |   772 -
 .../vendor/github.com/rainycape/memcache/LICENSE   |   201 -
 .../vendor/github.com/rainycape/memcache/addr.go   |    23 -
 .../vendor/github.com/rainycape/memcache/io.go     |    33 -
 .../github.com/rainycape/memcache/memcache.go      |   789 -
 .../vendor/github.com/rainycape/memcache/server.go |    67 -
 .../github.com/rainycape/memcache/util_safe.go     |     7 -
 .../github.com/rainycape/memcache/util_unsafe.go   |    11 -
 .../github.com/sacloud/libsacloud/LICENSE.txt      |   207 -
 .../github.com/sacloud/libsacloud/api/archive.go   |   374 -
 .../sacloud/libsacloud/api/archive_gen.go          |   251 -
 .../sacloud/libsacloud/api/auth_status.go          |    43 -
 .../sacloud/libsacloud/api/auto_backup.go          |   116 -
 .../sacloud/libsacloud/api/auto_backup_gen.go      |   239 -
 .../github.com/sacloud/libsacloud/api/base_api.go  |   278 -
 .../github.com/sacloud/libsacloud/api/bill.go      |   186 -
 .../github.com/sacloud/libsacloud/api/bridge.go    |    18 -
 .../sacloud/libsacloud/api/bridge_gen.go           |   243 -
 .../github.com/sacloud/libsacloud/api/cdrom.go     |    81 -
 .../github.com/sacloud/libsacloud/api/cdrom_gen.go |   250 -
 .../github.com/sacloud/libsacloud/api/client.go    |   633 -
 .../github.com/sacloud/libsacloud/api/coupon.go    |    59 -
 .../github.com/sacloud/libsacloud/api/database.go  |   430 -
 .../sacloud/libsacloud/api/database_gen.go         |   238 -
 .../github.com/sacloud/libsacloud/api/disk.go      |   350 -
 .../github.com/sacloud/libsacloud/api/disk_gen.go  |   228 -
 .../github.com/sacloud/libsacloud/api/dns.go       |   207 -
 .../github.com/sacloud/libsacloud/api/dns_gen.go   |   238 -
 .../github.com/sacloud/libsacloud/api/doc.go       |   176 -
 .../github.com/sacloud/libsacloud/api/error.go     |    80 -
 .../github.com/sacloud/libsacloud/api/gslb.go      |   202 -
 .../github.com/sacloud/libsacloud/api/gslb_gen.go  |   238 -
 .../github.com/sacloud/libsacloud/api/icon.go      |    31 -
 .../github.com/sacloud/libsacloud/api/icon_gen.go  |   247 -
 .../github.com/sacloud/libsacloud/api/interface.go |   107 -
 .../sacloud/libsacloud/api/interface_gen.go        |   243 -
 .../github.com/sacloud/libsacloud/api/internet.go  |   144 -
 .../sacloud/libsacloud/api/internet_gen.go         |   243 -
 .../github.com/sacloud/libsacloud/api/ipaddress.go |    57 -
 .../sacloud/libsacloud/api/ipaddress_gen.go        |   231 -
 .../github.com/sacloud/libsacloud/api/ipv6addr.go  |    97 -
 .../sacloud/libsacloud/api/ipv6addr_gen.go         |   232 -
 .../github.com/sacloud/libsacloud/api/ipv6net.go   |    18 -
 .../sacloud/libsacloud/api/ipv6net_gen.go          |   229 -
 .../github.com/sacloud/libsacloud/api/license.go   |    18 -
 .../sacloud/libsacloud/api/license_gen.go          |   243 -
 .../sacloud/libsacloud/api/load_balancer.go        |   256 -
 .../sacloud/libsacloud/api/load_balancer_gen.go    |   238 -
 .../sacloud/libsacloud/api/mobile_gateway.go       |   480 -
 .../sacloud/libsacloud/api/mobile_gateway_gen.go   |   238 -
 .../github.com/sacloud/libsacloud/api/newsfeed.go  |    51 -
 .../github.com/sacloud/libsacloud/api/nfs.go       |   288 -
 .../github.com/sacloud/libsacloud/api/nfs_gen.go   |   238 -
 .../github.com/sacloud/libsacloud/api/note.go      |    18 -
 .../github.com/sacloud/libsacloud/api/note_gen.go  |   247 -
 .../sacloud/libsacloud/api/packet_filter.go        |    18 -
 .../sacloud/libsacloud/api/packet_filter_gen.go    |   243 -
 .../github.com/sacloud/libsacloud/api/polling.go   |   156 -
 .../sacloud/libsacloud/api/private_host.go         |    18 -
 .../sacloud/libsacloud/api/private_host_gen.go     |   243 -
 .../sacloud/libsacloud/api/product_disk.go         |    18 -
 .../sacloud/libsacloud/api/product_disk_gen.go     |   239 -
 .../sacloud/libsacloud/api/product_internet.go     |    18 -
 .../sacloud/libsacloud/api/product_internet_gen.go |   239 -
 .../sacloud/libsacloud/api/product_license.go      |    18 -
 .../sacloud/libsacloud/api/product_license_gen.go  |   235 -
 .../sacloud/libsacloud/api/product_private_host.go |    19 -
 .../libsacloud/api/product_private_host_gen.go     |   239 -
 .../sacloud/libsacloud/api/product_server.go       |    78 -
 .../sacloud/libsacloud/api/product_server_gen.go   |   239 -
 .../github.com/sacloud/libsacloud/api/proxylb.go   |   233 -
 .../sacloud/libsacloud/api/proxylb_gen.go          |   238 -
 .../sacloud/libsacloud/api/public_price.go         |    18 -
 .../sacloud/libsacloud/api/public_price_gen.go     |   236 -
 .../sacloud/libsacloud/api/rate_limit_transport.go |    32 -
 .../github.com/sacloud/libsacloud/api/region.go    |    18 -
 .../sacloud/libsacloud/api/region_gen.go           |   239 -
 .../github.com/sacloud/libsacloud/api/server.go    |   293 -
 .../sacloud/libsacloud/api/server_gen.go           |   243 -
 .../github.com/sacloud/libsacloud/api/sim.go       |   250 -
 .../github.com/sacloud/libsacloud/api/sim_gen.go   |   238 -
 .../sacloud/libsacloud/api/simple_monitor.go       |   152 -
 .../sacloud/libsacloud/api/simple_monitor_gen.go   |   238 -
 .../github.com/sacloud/libsacloud/api/ssh_key.go   |    65 -
 .../sacloud/libsacloud/api/ssh_key_gen.go          |   243 -
 .../github.com/sacloud/libsacloud/api/subnet.go    |    18 -
 .../sacloud/libsacloud/api/subnet_gen.go           |   229 -
 .../github.com/sacloud/libsacloud/api/switch.go    |    56 -
 .../sacloud/libsacloud/api/switch_gen.go           |   243 -
 .../sacloud/libsacloud/api/vpc_router.go           |   438 -
 .../sacloud/libsacloud/api/vpc_router_gen.go       |   238 -
 .../github.com/sacloud/libsacloud/api/webaccel.go  |   115 -
 .../sacloud/libsacloud/api/webaccel_search.go      |    86 -
 .../github.com/sacloud/libsacloud/api/zone.go      |    19 -
 .../github.com/sacloud/libsacloud/api/zone_gen.go  |   239 -
 .../github.com/sacloud/libsacloud/libsacloud.go    |     5 -
 .../sacloud/libsacloud/sacloud/account.go          |     9 -
 .../sacloud/libsacloud/sacloud/appliance.go        |    57 -
 .../sacloud/libsacloud/sacloud/archive.go          |    27 -
 .../sacloud/libsacloud/sacloud/auth_status.go      |    79 -
 .../sacloud/libsacloud/sacloud/auto_backup.go      |    88 -
 .../github.com/sacloud/libsacloud/sacloud/bill.go  |    32 -
 .../sacloud/libsacloud/sacloud/bridge.go           |    30 -
 .../github.com/sacloud/libsacloud/sacloud/cdrom.go |    17 -
 .../sacloud/libsacloud/sacloud/common_types.go     |   378 -
 .../sacloud/libsacloud/sacloud/coupon.go           |    14 -
 .../sacloud/libsacloud/sacloud/database.go         |   573 -
 .../sacloud/libsacloud/sacloud/database_status.go  |   128 -
 .../libsacloud/sacloud/delete_cache_result.go      |     8 -
 .../github.com/sacloud/libsacloud/sacloud/disk.go  |   203 -
 .../github.com/sacloud/libsacloud/sacloud/dns.go   |   193 -
 .../github.com/sacloud/libsacloud/sacloud/doc.go   |     3 -
 .../github.com/sacloud/libsacloud/sacloud/feed.go  |    36 -
 .../sacloud/libsacloud/sacloud/ftp_server.go       |    15 -
 .../github.com/sacloud/libsacloud/sacloud/gslb.go  |   216 -
 .../github.com/sacloud/libsacloud/sacloud/host.go  |     6 -
 .../github.com/sacloud/libsacloud/sacloud/icon.go  |    33 -
 .../sacloud/libsacloud/sacloud/instance.go         |    35 -
 .../sacloud/libsacloud/sacloud/interface.go        |    61 -
 .../sacloud/libsacloud/sacloud/internet.go         |    50 -
 .../sacloud/libsacloud/sacloud/ipaddress.go        |    10 -
 .../sacloud/libsacloud/sacloud/ipv6addr.go         |    35 -
 .../sacloud/libsacloud/sacloud/ipv6net.go          |    18 -
 .../sacloud/libsacloud/sacloud/license.go          |    27 -
 .../sacloud/libsacloud/sacloud/loadbalancer.go     |   291 -
 .../github.com/sacloud/libsacloud/sacloud/lock.go  |    29 -
 .../sacloud/libsacloud/sacloud/member.go           |     9 -
 .../sacloud/libsacloud/sacloud/mobile_gateway.go   |   412 -
 .../sacloud/libsacloud/sacloud/monitor.go          |   356 -
 .../github.com/sacloud/libsacloud/sacloud/nfs.go   |   248 -
 .../github.com/sacloud/libsacloud/sacloud/note.go  |    16 -
 .../libsacloud/sacloud/ostype/archive_ostype.go    |   138 -
 .../sacloud/ostype/archiveostypes_string.go        |    44 -
 .../sacloud/libsacloud/sacloud/packet_filter.go    |   248 -
 .../sacloud/libsacloud/sacloud/private_host.go     |    18 -
 .../sacloud/libsacloud/sacloud/product_disk.go     |    20 -
 .../sacloud/libsacloud/sacloud/product_internet.go |    12 -
 .../sacloud/libsacloud/sacloud/product_license.go  |    11 -
 .../libsacloud/sacloud/product_privatehost.go      |    13 -
 .../sacloud/libsacloud/sacloud/product_server.go   |    14 -
 .../libsacloud/sacloud/prop_assigned_cpu.go        |    11 -
 .../libsacloud/sacloud/prop_assigned_memory.go     |    19 -
 .../libsacloud/sacloud/prop_availability.go        |    26 -
 .../sacloud/libsacloud/sacloud/prop_bundle_info.go |    27 -
 .../sacloud/libsacloud/sacloud/prop_class.go       |    11 -
 .../libsacloud/sacloud/prop_connected_switches.go  |    45 -
 .../sacloud/libsacloud/sacloud/prop_copy_source.go |    56 -
 .../sacloud/libsacloud/sacloud/prop_cpu.go         |    11 -
 .../sacloud/libsacloud/sacloud/prop_description.go |    16 -
 .../libsacloud/sacloud/prop_disk_connection.go     |    33 -
 .../sacloud/libsacloud/sacloud/prop_disk_size.go   |    65 -
 .../sacloud/libsacloud/sacloud/prop_disks.go       |    22 -
 .../libsacloud/sacloud/prop_distant_from.go        |    26 -
 .../sacloud/libsacloud/sacloud/prop_host.go        |    19 -
 .../sacloud/libsacloud/sacloud/prop_host_name.go   |    11 -
 .../sacloud/libsacloud/sacloud/prop_icon.go        |    47 -
 .../sacloud/libsacloud/sacloud/prop_instance.go    |    59 -
 .../libsacloud/sacloud/prop_interface_driver.go    |    26 -
 .../sacloud/libsacloud/sacloud/prop_interfaces.go  |    19 -
 .../sacloud/libsacloud/sacloud/prop_job_status.go  |    11 -
 .../sacloud/libsacloud/sacloud/prop_memory.go      |    24 -
 .../sacloud/libsacloud/sacloud/prop_name.go        |    16 -
 .../sacloud/libsacloud/sacloud/prop_note_class.go  |    39 -
 .../libsacloud/sacloud/prop_original_archive_id.go |    22 -
 .../sacloud/libsacloud/sacloud/prop_plan_id.go     |    22 -
 .../libsacloud/sacloud/prop_private_host.go        |    21 -
 .../libsacloud/sacloud/prop_private_host_plan.go   |    51 -
 .../sacloud/libsacloud/sacloud/prop_region.go      |    44 -
 .../sacloud/libsacloud/sacloud/prop_scope.go       |    42 -
 .../sacloud/libsacloud/sacloud/prop_server.go      |    21 -
 .../sacloud/libsacloud/sacloud/prop_server_plan.go |    64 -
 .../libsacloud/sacloud/prop_service_class.go       |    11 -
 .../sacloud/libsacloud/sacloud/prop_storage.go     |    11 -
 .../libsacloud/sacloud/prop_storage_class.go       |    11 -
 .../sacloud/libsacloud/sacloud/prop_switch.go      |    21 -
 .../sacloud/libsacloud/sacloud/prop_tags.go        |    57 -
 .../sacloud/libsacloud/sacloud/prop_timestamp.go   |    35 -
 .../libsacloud/sacloud/prop_wait_disk_migration.go |    16 -
 .../sacloud/libsacloud/sacloud/prop_zone.go        |   118 -
 .../sacloud/libsacloud/sacloud/proxylb.go          |   546 -
 .../sacloud/libsacloud/sacloud/public_price.go     |    18 -
 .../sacloud/libsacloud/sacloud/region.go           |    18 -
 .../sacloud/libsacloud/sacloud/server.go           |   265 -
 .../github.com/sacloud/libsacloud/sacloud/sim.go   |   140 -
 .../sacloud/libsacloud/sacloud/simple_monitor.go   |   289 -
 .../sacloud/sitetosite_connection_detail.go        |    38 -
 .../sacloud/libsacloud/sacloud/ssh_key.go          |    38 -
 .../sacloud/libsacloud/sacloud/storage.go          |    18 -
 .../sacloud/libsacloud/sacloud/subnet.go           |    18 -
 .../sacloud/libsacloud/sacloud/switch.go           |    85 -
 .../sacloud/libsacloud/sacloud/vpc_router.go       |   369 -
 .../libsacloud/sacloud/vpc_router_setting.go       |  1178 -
 .../libsacloud/sacloud/vpc_router_status.go        |    27 -
 .../sacloud/libsacloud/sacloud/webaccel.go         |   201 -
 .../github.com/sacloud/libsacloud/sacloud/zone.go  |    46 -
 .../sacloud/libsacloud/utils/mutexkv/mutexkv.go    |    43 -
 .../vendor/github.com/sirupsen/logrus/LICENSE      |    21 -
 .../vendor/github.com/sirupsen/logrus/alt_exit.go  |    64 -
 .../vendor/github.com/sirupsen/logrus/doc.go       |    26 -
 .../vendor/github.com/sirupsen/logrus/entry.go     |   300 -
 .../vendor/github.com/sirupsen/logrus/exported.go  |   201 -
 .../vendor/github.com/sirupsen/logrus/formatter.go |    51 -
 .../vendor/github.com/sirupsen/logrus/hooks.go     |    34 -
 .../github.com/sirupsen/logrus/json_formatter.go   |    89 -
 .../vendor/github.com/sirupsen/logrus/logger.go    |   337 -
 .../vendor/github.com/sirupsen/logrus/logrus.go    |   143 -
 .../github.com/sirupsen/logrus/terminal_bsd.go     |    10 -
 .../sirupsen/logrus/terminal_check_appengine.go    |    11 -
 .../sirupsen/logrus/terminal_check_notappengine.go |    19 -
 .../github.com/sirupsen/logrus/terminal_linux.go   |    14 -
 .../github.com/sirupsen/logrus/text_formatter.go   |   195 -
 .../vendor/github.com/sirupsen/logrus/writer.go    |    62 -
 .../vendor/github.com/stretchr/objx/LICENSE        |    22 -
 .../vendor/github.com/stretchr/objx/accessors.go   |   148 -
 .../vendor/github.com/stretchr/objx/constants.go   |    13 -
 .../vendor/github.com/stretchr/objx/conversions.go |   108 -
 .../vendor/github.com/stretchr/objx/doc.go         |    66 -
 .../vendor/github.com/stretchr/objx/map.go         |   190 -
 .../vendor/github.com/stretchr/objx/mutations.go   |    77 -
 .../vendor/github.com/stretchr/objx/security.go    |    12 -
 .../vendor/github.com/stretchr/objx/tests.go       |    17 -
 .../stretchr/objx/type_specific_codegen.go         |  2501 --
 .../vendor/github.com/stretchr/objx/value.go       |    53 -
 .../vendor/github.com/stretchr/testify/LICENSE     |    22 -
 .../stretchr/testify/assert/assertion_format.go    |   484 -
 .../stretchr/testify/assert/assertion_forward.go   |   956 -
 .../stretchr/testify/assert/assertions.go          |  1394 --
 .../github.com/stretchr/testify/assert/doc.go      |    45 -
 .../github.com/stretchr/testify/assert/errors.go   |    10 -
 .../stretchr/testify/assert/forward_assertions.go  |    16 -
 .../stretchr/testify/assert/http_assertions.go     |   143 -
 .../vendor/github.com/stretchr/testify/mock/doc.go |    44 -
 .../github.com/stretchr/testify/mock/mock.go       |   885 -
 .../github.com/stretchr/testify/require/doc.go     |    28 -
 .../testify/require/forward_requirements.go        |    16 -
 .../github.com/stretchr/testify/require/require.go |  1227 -
 .../stretchr/testify/require/require_forward.go    |   957 -
 .../stretchr/testify/require/requirements.go       |    29 -
 .../github.com/stretchr/testify/suite/doc.go       |    65 -
 .../stretchr/testify/suite/interfaces.go           |    46 -
 .../github.com/stretchr/testify/suite/suite.go     |   136 -
 .../vendor/github.com/timewasted/linode/LICENSE    |    22 -
 .../vendor/github.com/timewasted/linode/dns/dns.go |    69 -
 .../github.com/timewasted/linode/dns/domain.go     |    63 -
 .../github.com/timewasted/linode/dns/resource.go   |   228 -
 .../vendor/github.com/timewasted/linode/errors.go  |    73 -
 .../vendor/github.com/timewasted/linode/linode.go  |   197 -
 .../github.com/timewasted/linode/parameters.go     |    54 -
 .../vendor/github.com/transip/gotransip/LICENSE    |    21 -
 .../vendor/github.com/transip/gotransip/api.go     |    12 -
 .../vendor/github.com/transip/gotransip/client.go  |   119 -
 .../github.com/transip/gotransip/domain/api.go     |   403 -
 .../github.com/transip/gotransip/domain/domain.go  |   506 -
 .../vendor/github.com/transip/gotransip/sign.go    |    49 -
 .../vendor/github.com/transip/gotransip/soap.go    |   442 -
 .../github.com/transip/gotransip/util/util.go      |    37 -
 .../vendor/github.com/urfave/cli/LICENSE           |    21 -
 .../vendor/github.com/urfave/cli/app.go            |   497 -
 .../vendor/github.com/urfave/cli/category.go       |    44 -
 .../vendor/github.com/urfave/cli/cli.go            |    22 -
 .../vendor/github.com/urfave/cli/command.go        |   304 -
 .../vendor/github.com/urfave/cli/context.go        |   278 -
 .../vendor/github.com/urfave/cli/errors.go         |   115 -
 .../vendor/github.com/urfave/cli/flag.go           |   799 -
 .../vendor/github.com/urfave/cli/flag_generated.go |   627 -
 .../vendor/github.com/urfave/cli/funcs.go          |    28 -
 .../vendor/github.com/urfave/cli/help.go           |   338 -
 .../vendor/github.com/vultr/govultr/LICENSE        |    21 -
 .../vendor/github.com/vultr/govultr/account.go     |    45 -
 .../vendor/github.com/vultr/govultr/api.go         |    44 -
 .../vendor/github.com/vultr/govultr/application.go |    51 -
 .../vendor/github.com/vultr/govultr/backup.go      |   105 -
 .../github.com/vultr/govultr/bare_metal_server.go  |   790 -
 .../github.com/vultr/govultr/block_storage.go      |   319 -
 .../vendor/github.com/vultr/govultr/dns_domains.go |   209 -
 .../vendor/github.com/vultr/govultr/dns_records.go |   150 -
 .../github.com/vultr/govultr/firewall_group.go     |   163 -
 .../github.com/vultr/govultr/firewall_rule.go      |   265 -
 .../vendor/github.com/vultr/govultr/govultr.go     |   222 -
 .../vendor/github.com/vultr/govultr/iso.go         |   142 -
 .../vendor/github.com/vultr/govultr/network.go     |   120 -
 .../vendor/github.com/vultr/govultr/os.go          |    84 -
 .../vendor/github.com/vultr/govultr/plans.go       |   199 -
 .../vendor/github.com/vultr/govultr/regions.go     |   154 -
 .../vendor/github.com/vultr/govultr/reserved_ip.go |   273 -
 .../vendor/github.com/vultr/govultr/server.go      |  1469 --
 .../vendor/github.com/vultr/govultr/snapshot.go    |   168 -
 .../vendor/github.com/vultr/govultr/ssh_key.go     |   140 -
 .../github.com/vultr/govultr/startup_script.go     |   172 -
 .../vendor/github.com/vultr/govultr/user.go        |   157 -
 .../vendor/go.opencensus.io/AUTHORS                |     1 -
 .../vendor/go.opencensus.io/LICENSE                |   202 -
 .../vendor/go.opencensus.io/internal/internal.go   |    37 -
 .../vendor/go.opencensus.io/internal/sanitize.go   |    50 -
 .../internal/tagencoding/tagencoding.go            |    75 -
 .../go.opencensus.io/internal/traceinternals.go    |    53 -
 .../go.opencensus.io/metric/metricdata/doc.go      |    19 -
 .../go.opencensus.io/metric/metricdata/exemplar.go |    33 -
 .../go.opencensus.io/metric/metricdata/label.go    |    28 -
 .../go.opencensus.io/metric/metricdata/metric.go   |    46 -
 .../go.opencensus.io/metric/metricdata/point.go    |   193 -
 .../metric/metricdata/type_string.go               |    16 -
 .../go.opencensus.io/metric/metricdata/unit.go     |    27 -
 .../metric/metricproducer/manager.go               |    78 -
 .../metric/metricproducer/producer.go              |    28 -
 .../vendor/go.opencensus.io/opencensus.go          |    21 -
 .../go.opencensus.io/plugin/ocgrpc/client.go       |    56 -
 .../plugin/ocgrpc/client_metrics.go                |   107 -
 .../plugin/ocgrpc/client_stats_handler.go          |    49 -
 .../vendor/go.opencensus.io/plugin/ocgrpc/doc.go   |    19 -
 .../go.opencensus.io/plugin/ocgrpc/server.go       |    80 -
 .../plugin/ocgrpc/server_metrics.go                |    97 -
 .../plugin/ocgrpc/server_stats_handler.go          |    63 -
 .../go.opencensus.io/plugin/ocgrpc/stats_common.go |   208 -
 .../go.opencensus.io/plugin/ocgrpc/trace_common.go |   107 -
 .../go.opencensus.io/plugin/ochttp/client.go       |   117 -
 .../go.opencensus.io/plugin/ochttp/client_stats.go |   143 -
 .../vendor/go.opencensus.io/plugin/ochttp/doc.go   |    19 -
 .../plugin/ochttp/propagation/b3/b3.go             |   123 -
 .../ochttp/propagation/tracecontext/propagation.go |   187 -
 .../vendor/go.opencensus.io/plugin/ochttp/route.go |    61 -
 .../go.opencensus.io/plugin/ochttp/server.go       |   440 -
 .../plugin/ochttp/span_annotating_client_trace.go  |   169 -
 .../vendor/go.opencensus.io/plugin/ochttp/stats.go |   292 -
 .../vendor/go.opencensus.io/plugin/ochttp/trace.go |   239 -
 .../go.opencensus.io/plugin/ochttp/wrapped_body.go |    44 -
 .../vendor/go.opencensus.io/resource/resource.go   |   164 -
 .../vendor/go.opencensus.io/stats/doc.go           |    69 -
 .../go.opencensus.io/stats/internal/record.go      |    25 -
 .../vendor/go.opencensus.io/stats/measure.go       |   109 -
 .../go.opencensus.io/stats/measure_float64.go      |    55 -
 .../vendor/go.opencensus.io/stats/measure_int64.go |    55 -
 .../vendor/go.opencensus.io/stats/record.go        |    69 -
 .../vendor/go.opencensus.io/stats/units.go         |    25 -
 .../go.opencensus.io/stats/view/aggregation.go     |   120 -
 .../stats/view/aggregation_data.go                 |   293 -
 .../go.opencensus.io/stats/view/collector.go       |    86 -
 .../vendor/go.opencensus.io/stats/view/doc.go      |    47 -
 .../vendor/go.opencensus.io/stats/view/export.go   |    58 -
 .../vendor/go.opencensus.io/stats/view/view.go     |   221 -
 .../go.opencensus.io/stats/view/view_to_metric.go  |   131 -
 .../vendor/go.opencensus.io/stats/view/worker.go   |   279 -
 .../go.opencensus.io/stats/view/worker_commands.go |   182 -
 .../vendor/go.opencensus.io/tag/context.go         |    43 -
 .../vendor/go.opencensus.io/tag/doc.go             |    26 -
 .../vendor/go.opencensus.io/tag/key.go             |    35 -
 .../vendor/go.opencensus.io/tag/map.go             |   197 -
 .../vendor/go.opencensus.io/tag/map_codec.go       |   237 -
 .../vendor/go.opencensus.io/tag/profile_19.go      |    31 -
 .../vendor/go.opencensus.io/tag/profile_not19.go   |    23 -
 .../vendor/go.opencensus.io/tag/validate.go        |    56 -
 .../vendor/go.opencensus.io/trace/basetypes.go     |   119 -
 .../vendor/go.opencensus.io/trace/config.go        |    86 -
 .../vendor/go.opencensus.io/trace/doc.go           |    53 -
 .../vendor/go.opencensus.io/trace/evictedqueue.go  |    38 -
 .../vendor/go.opencensus.io/trace/export.go        |    97 -
 .../go.opencensus.io/trace/internal/internal.go    |    22 -
 .../vendor/go.opencensus.io/trace/lrumap.go        |    37 -
 .../trace/propagation/propagation.go               |   108 -
 .../vendor/go.opencensus.io/trace/sampling.go      |    75 -
 .../vendor/go.opencensus.io/trace/spanbucket.go    |   130 -
 .../vendor/go.opencensus.io/trace/spanstore.go     |   306 -
 .../vendor/go.opencensus.io/trace/status_codes.go  |    37 -
 .../vendor/go.opencensus.io/trace/trace.go         |   598 -
 .../vendor/go.opencensus.io/trace/trace_go11.go    |    32 -
 .../vendor/go.opencensus.io/trace/trace_nongo11.go |    25 -
 .../trace/tracestate/tracestate.go                 |   147 -
 .../vendor/go.uber.org/ratelimit/LICENSE           |    21 -
 .../go.uber.org/ratelimit/internal/clock/clock.go  |   133 -
 .../ratelimit/internal/clock/interface.go          |    34 -
 .../go.uber.org/ratelimit/internal/clock/real.go   |    42 -
 .../go.uber.org/ratelimit/internal/clock/timers.go |    44 -
 .../vendor/go.uber.org/ratelimit/ratelimit.go      |   140 -
 .../vendor/google.golang.org/api/AUTHORS           |    10 -
 .../vendor/google.golang.org/api/CONTRIBUTORS      |    55 -
 .../vendor/google.golang.org/api/LICENSE           |    27 -
 .../vendor/google.golang.org/api/dns/v1/dns-gen.go |  3626 ---
 .../google.golang.org/api/gensupport/backoff.go    |    51 -
 .../google.golang.org/api/gensupport/buffer.go     |    79 -
 .../vendor/google.golang.org/api/gensupport/doc.go |    10 -
 .../google.golang.org/api/gensupport/header.go     |    22 -
 .../google.golang.org/api/gensupport/json.go       |   211 -
 .../google.golang.org/api/gensupport/jsonfloat.go  |    57 -
 .../google.golang.org/api/gensupport/media.go      |   363 -
 .../google.golang.org/api/gensupport/params.go     |    51 -
 .../google.golang.org/api/gensupport/resumable.go  |   216 -
 .../google.golang.org/api/gensupport/retry.go      |    84 -
 .../google.golang.org/api/gensupport/send.go       |    87 -
 .../google.golang.org/api/googleapi/googleapi.go   |   403 -
 .../api/googleapi/internal/uritemplates/LICENSE    |    18 -
 .../internal/uritemplates/uritemplates.go          |   248 -
 .../api/googleapi/internal/uritemplates/utils.go   |    17 -
 .../api/googleapi/transport/apikey.go              |    38 -
 .../google.golang.org/api/googleapi/types.go       |   202 -
 .../vendor/google.golang.org/api/internal/creds.go |   102 -
 .../vendor/google.golang.org/api/internal/pool.go  |    61 -
 .../google.golang.org/api/internal/settings.go     |    96 -
 .../api/option/credentials_go19.go                 |    33 -
 .../api/option/credentials_notgo19.go              |    32 -
 .../vendor/google.golang.org/api/option/option.go  |   235 -
 .../api/support/bundler/bundler.go                 |   349 -
 .../google.golang.org/api/transport/http/dial.go   |   161 -
 .../api/transport/http/dial_appengine.go           |    30 -
 .../transport/http/internal/propagation/http.go    |    96 -
 .../vendor/google.golang.org/appengine/LICENSE     |   202 -
 .../google.golang.org/appengine/appengine.go       |   113 -
 .../google.golang.org/appengine/appengine_vm.go    |    20 -
 .../vendor/google.golang.org/appengine/errors.go   |    46 -
 .../vendor/google.golang.org/appengine/identity.go |   142 -
 .../google.golang.org/appengine/internal/api.go    |   660 -
 .../appengine/internal/api_classic.go              |   169 -
 .../appengine/internal/api_common.go               |   123 -
 .../appengine/internal/api_pre17.go                |   682 -
 .../google.golang.org/appengine/internal/app_id.go |    28 -
 .../app_identity/app_identity_service.pb.go        |   385 -
 .../appengine/internal/base/api_base.pb.go         |   176 -
 .../internal/datastore/datastore_v3.pb.go          |  3244 ---
 .../appengine/internal/identity.go                 |    14 -
 .../appengine/internal/identity_classic.go         |    57 -
 .../appengine/internal/identity_vm.go              |   101 -
 .../appengine/internal/internal.go                 |   110 -
 .../appengine/internal/log/log_service.pb.go       |  1039 -
 .../google.golang.org/appengine/internal/main.go   |    15 -
 .../appengine/internal/main_vm.go                  |    48 -
 .../appengine/internal/metadata.go                 |    61 -
 .../internal/modules/modules_service.pb.go         |   454 -
 .../google.golang.org/appengine/internal/net.go    |    56 -
 .../appengine/internal/remote_api/remote_api.pb.go |   287 -
 .../appengine/internal/transaction.go              |   115 -
 .../internal/urlfetch/urlfetch_service.pb.go       |   433 -
 .../google.golang.org/appengine/namespace.go       |    25 -
 .../vendor/google.golang.org/appengine/timeout.go  |    20 -
 .../appengine/urlfetch/urlfetch.go                 |   210 -
 .../vendor/google.golang.org/genproto/LICENSE      |   202 -
 .../googleapis/api/httpbody/httpbody.pb.go         |   142 -
 .../genproto/googleapis/rpc/status/status.pb.go    |   159 -
 .../genproto/protobuf/field_mask/field_mask.pb.go  |   280 -
 .../vendor/google.golang.org/grpc/AUTHORS          |     1 -
 .../vendor/google.golang.org/grpc/LICENSE          |   202 -
 .../vendor/google.golang.org/grpc/backoff.go       |    38 -
 .../vendor/google.golang.org/grpc/balancer.go      |   391 -
 .../google.golang.org/grpc/balancer/balancer.go    |   304 -
 .../grpc/balancer/base/balancer.go                 |   171 -
 .../google.golang.org/grpc/balancer/base/base.go   |    64 -
 .../grpc/balancer/roundrobin/roundrobin.go         |    83 -
 .../grpc/balancer_conn_wrappers.go                 |   328 -
 .../google.golang.org/grpc/balancer_v1_wrapper.go  |   341 -
 .../binarylog/grpc_binarylog_v1/binarylog.pb.go    |   900 -
 .../vendor/google.golang.org/grpc/call.go          |    74 -
 .../vendor/google.golang.org/grpc/clientconn.go    |  1446 --
 .../vendor/google.golang.org/grpc/codec.go         |    50 -
 .../google.golang.org/grpc/codes/code_string.go    |    62 -
 .../vendor/google.golang.org/grpc/codes/codes.go   |   197 -
 .../grpc/connectivity/connectivity.go              |    73 -
 .../grpc/credentials/credentials.go                |   328 -
 .../grpc/credentials/internal/syscallconn.go       |    61 -
 .../credentials/internal/syscallconn_appengine.go  |    30 -
 .../google.golang.org/grpc/credentials/tls13.go    |    30 -
 .../vendor/google.golang.org/grpc/dialoptions.go   |   502 -
 .../vendor/google.golang.org/grpc/doc.go           |    24 -
 .../google.golang.org/grpc/encoding/encoding.go    |   118 -
 .../google.golang.org/grpc/encoding/proto/proto.go |   110 -
 .../google.golang.org/grpc/grpclog/grpclog.go      |   126 -
 .../google.golang.org/grpc/grpclog/logger.go       |    85 -
 .../google.golang.org/grpc/grpclog/loggerv2.go     |   195 -
 .../vendor/google.golang.org/grpc/interceptor.go   |    77 -
 .../grpc/internal/backoff/backoff.go               |    78 -
 .../grpc/internal/binarylog/binarylog.go           |   167 -
 .../grpc/internal/binarylog/binarylog_testutil.go  |    42 -
 .../grpc/internal/binarylog/env_config.go          |   210 -
 .../grpc/internal/binarylog/method_logger.go       |   423 -
 .../grpc/internal/binarylog/sink.go                |   162 -
 .../grpc/internal/binarylog/util.go                |    41 -
 .../grpc/internal/channelz/funcs.go                |   699 -
 .../grpc/internal/channelz/types.go                |   702 -
 .../grpc/internal/channelz/types_linux.go          |    53 -
 .../grpc/internal/channelz/types_nonlinux.go       |    44 -
 .../grpc/internal/channelz/util_linux.go           |    39 -
 .../grpc/internal/channelz/util_nonlinux.go        |    26 -
 .../grpc/internal/envconfig/envconfig.go           |    71 -
 .../grpc/internal/grpcrand/grpcrand.go             |    56 -
 .../grpc/internal/grpcsync/event.go                |    61 -
 .../google.golang.org/grpc/internal/internal.go    |    54 -
 .../grpc/internal/syscall/syscall_linux.go         |   114 -
 .../grpc/internal/syscall/syscall_nonlinux.go      |    63 -
 .../grpc/internal/transport/bdp_estimator.go       |   141 -
 .../grpc/internal/transport/controlbuf.go          |   852 -
 .../grpc/internal/transport/defaults.go            |    49 -
 .../grpc/internal/transport/flowcontrol.go         |   218 -
 .../grpc/internal/transport/handler_server.go      |   449 -
 .../grpc/internal/transport/http2_client.go        |  1382 --
 .../grpc/internal/transport/http2_server.go        |  1209 -
 .../grpc/internal/transport/http_util.go           |   623 -
 .../grpc/internal/transport/log.go                 |    44 -
 .../grpc/internal/transport/transport.go           |   758 -
 .../google.golang.org/grpc/keepalive/keepalive.go  |    85 -
 .../google.golang.org/grpc/metadata/metadata.go    |   209 -
 .../google.golang.org/grpc/naming/dns_resolver.go  |   293 -
 .../vendor/google.golang.org/grpc/naming/naming.go |    69 -
 .../vendor/google.golang.org/grpc/peer/peer.go     |    51 -
 .../google.golang.org/grpc/picker_wrapper.go       |   184 -
 .../vendor/google.golang.org/grpc/pickfirst.go     |   110 -
 .../vendor/google.golang.org/grpc/proxy.go         |   152 -
 .../grpc/resolver/dns/dns_resolver.go              |   436 -
 .../grpc/resolver/passthrough/passthrough.go       |    57 -
 .../google.golang.org/grpc/resolver/resolver.go    |   158 -
 .../grpc/resolver_conn_wrapper.go                  |   155 -
 .../vendor/google.golang.org/grpc/rpc_util.go      |   843 -
 .../vendor/google.golang.org/grpc/server.go        |  1491 --
 .../google.golang.org/grpc/service_config.go       |   372 -
 .../google.golang.org/grpc/stats/handlers.go       |    63 -
 .../vendor/google.golang.org/grpc/stats/stats.go   |   295 -
 .../vendor/google.golang.org/grpc/status/status.go |   210 -
 .../vendor/google.golang.org/grpc/stream.go        |  1485 --
 .../vendor/google.golang.org/grpc/tap/tap.go       |    51 -
 .../vendor/google.golang.org/grpc/trace.go         |   113 -
 .../vendor/google.golang.org/grpc/version.go       |    22 -
 .../vendor/gopkg.in/ini.v1/LICENSE                 |   191 -
 .../vendor/gopkg.in/ini.v1/error.go                |    32 -
 .../vendor/gopkg.in/ini.v1/file.go                 |   414 -
 .../vendor/gopkg.in/ini.v1/ini.go                  |   211 -
 .../vendor/gopkg.in/ini.v1/key.go                  |   751 -
 .../vendor/gopkg.in/ini.v1/parser.go               |   494 -
 .../vendor/gopkg.in/ini.v1/section.go              |   258 -
 .../vendor/gopkg.in/ini.v1/struct.go               |   512 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/LICENSE.txt      |   678 -
 .../gopkg.in/ns1/ns1-go.v2/rest/account_apikey.go  |   140 -
 .../gopkg.in/ns1/ns1-go.v2/rest/account_setting.go |    46 -
 .../gopkg.in/ns1/ns1-go.v2/rest/account_team.go    |   138 -
 .../gopkg.in/ns1/ns1-go.v2/rest/account_user.go    |   138 -
 .../gopkg.in/ns1/ns1-go.v2/rest/account_warning.go |    47 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/client.go   |   293 -
 .../gopkg.in/ns1/ns1-go.v2/rest/data_feed.go       |   116 -
 .../gopkg.in/ns1/ns1-go.v2/rest/data_source.go     |   126 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/doc.go      |     2 -
 .../ns1/ns1-go.v2/rest/model/account/apikey.go     |    13 -
 .../ns1/ns1-go.v2/rest/model/account/doc.go        |     2 -
 .../ns1-go.v2/rest/model/account/permissions.go    |    44 -
 .../ns1/ns1-go.v2/rest/model/account/settings.go   |    21 -
 .../ns1/ns1-go.v2/rest/model/account/team.go       |     8 -
 .../ns1/ns1-go.v2/rest/model/account/user.go       |    19 -
 .../ns1/ns1-go.v2/rest/model/account/warning.go    |    17 -
 .../gopkg.in/ns1/ns1-go.v2/rest/model/data/doc.go  |     2 -
 .../gopkg.in/ns1/ns1-go.v2/rest/model/data/feed.go |    38 -
 .../gopkg.in/ns1/ns1-go.v2/rest/model/data/meta.go |   514 -
 .../ns1/ns1-go.v2/rest/model/data/region.go        |    10 -
 .../ns1/ns1-go.v2/rest/model/data/source.go        |    28 -
 .../ns1/ns1-go.v2/rest/model/data/string.go        |    48 -
 .../ns1/ns1-go.v2/rest/model/dns/answer.go         |   103 -
 .../gopkg.in/ns1/ns1-go.v2/rest/model/dns/doc.go   |     2 -
 .../ns1/ns1-go.v2/rest/model/dns/record.go         |    77 -
 .../gopkg.in/ns1/ns1-go.v2/rest/model/dns/zone.go  |   158 -
 .../ns1/ns1-go.v2/rest/model/filter/doc.go         |     2 -
 .../ns1/ns1-go.v2/rest/model/filter/filter.go      |   182 -
 .../ns1/ns1-go.v2/rest/model/monitor/config.go     |     4 -
 .../ns1/ns1-go.v2/rest/model/monitor/doc.go        |     2 -
 .../ns1/ns1-go.v2/rest/model/monitor/job.go        |   181 -
 .../ns1/ns1-go.v2/rest/model/monitor/notify.go     |    72 -
 .../gopkg.in/ns1/ns1-go.v2/rest/monitor_job.go     |   134 -
 .../gopkg.in/ns1/ns1-go.v2/rest/monitor_notify.go  |   126 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/record.go   |   132 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/stat.go     |    15 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/util.go     |    42 -
 .../vendor/gopkg.in/ns1/ns1-go.v2/rest/zone.go     |   140 -
 .../vendor/gopkg.in/resty.v1/LICENSE               |    21 -
 .../vendor/gopkg.in/resty.v1/client.go             |   926 -
 .../vendor/gopkg.in/resty.v1/default.go            |   327 -
 .../vendor/gopkg.in/resty.v1/middleware.go         |   469 -
 .../vendor/gopkg.in/resty.v1/redirect.go           |    99 -
 .../vendor/gopkg.in/resty.v1/request.go            |   586 -
 .../vendor/gopkg.in/resty.v1/request16.go          |    63 -
 .../vendor/gopkg.in/resty.v1/request17.go          |    96 -
 .../vendor/gopkg.in/resty.v1/response.go           |   150 -
 .../vendor/gopkg.in/resty.v1/resty.go              |     9 -
 .../vendor/gopkg.in/resty.v1/retry.go              |   118 -
 .../vendor/gopkg.in/resty.v1/util.go               |   281 -
 .../vendor/github.com/lestrrat/go-jwx/Makefile     |     7 -
 .../vendor/github.com/lestrrat/go-jwx/README.md    |   297 -
 .../lestrrat/go-jwx/buffer/buffer_test.go          |    93 -
 .../github.com/lestrrat/go-jwx/cmd/jwx/jwx.go      |   166 -
 .../go-jwx/internal/concatkdf/concatkdf.go         |    55 -
 .../go-jwx/internal/concatkdf/concatkdf_test.go    |    42 -
 .../lestrrat/go-jwx/internal/debug/debug_off.go    |     8 -
 .../lestrrat/go-jwx/internal/debug/debug_on.go     |    16 -
 .../go-jwx/internal/ecdsautil/ecdsautil.go         |   107 -
 .../lestrrat/go-jwx/internal/emap/emap_test.go     |    85 -
 .../lestrrat/go-jwx/internal/padbuf/padbuf.go      |    61 -
 .../lestrrat/go-jwx/internal/padbuf/padbuf_test.go |    29 -
 .../lestrrat/go-jwx/internal/rsautil/rsautil.go    |    91 -
 .../lestrrat/go-jwx/jwe/aescbc/aescbc.go           |   183 -
 .../lestrrat/go-jwx/jwe/aescbc/aescbc_test.go      |    60 -
 .../github.com/lestrrat/go-jwx/jwe/cipher.go       |   188 -
 .../github.com/lestrrat/go-jwx/jwe/cipher_test.go  |    26 -
 .../lestrrat/go-jwx/jwe/content_crypt.go           |    58 -
 .../github.com/lestrrat/go-jwx/jwe/doc_test.go     |    36 -
 .../github.com/lestrrat/go-jwx/jwe/encrypt.go      |   105 -
 .../github.com/lestrrat/go-jwx/jwe/interface.go    |   284 -
 .../vendor/github.com/lestrrat/go-jwx/jwe/jwe.go   |   285 -
 .../github.com/lestrrat/go-jwx/jwe/jwe_test.go     |   369 -
 .../github.com/lestrrat/go-jwx/jwe/key_encrypt.go  |   435 -
 .../github.com/lestrrat/go-jwx/jwe/key_generate.go |   106 -
 .../github.com/lestrrat/go-jwx/jwe/keywrap_test.go |    75 -
 .../github.com/lestrrat/go-jwx/jwe/message.go      |   534 -
 .../github.com/lestrrat/go-jwx/jwe/serializer.go   |    73 -
 .../github.com/lestrrat/go-jwx/jwk/doc_test.go     |    27 -
 .../github.com/lestrrat/go-jwx/jwk/ecdhes_test.go  |    54 -
 .../github.com/lestrrat/go-jwx/jwk/ecdsa_test.go   |   116 -
 .../github.com/lestrrat/go-jwx/jwk/header_test.go  |   119 -
 .../github.com/lestrrat/go-jwx/jwk/jwk_test.go     |   285 -
 .../github.com/lestrrat/go-jwx/jwk/rsa_test.go     |   123 -
 .../github.com/lestrrat/go-jwx/jws/doc_test.go     |    76 -
 .../github.com/lestrrat/go-jwx/jws/interface.go    |   184 -
 .../vendor/github.com/lestrrat/go-jwx/jws/jws.go   |   365 -
 .../github.com/lestrrat/go-jwx/jws/jws_test.go     |   589 -
 .../github.com/lestrrat/go-jwx/jws/message.go      |   372 -
 .../github.com/lestrrat/go-jwx/jws/serializer.go   |    51 -
 .../github.com/lestrrat/go-jwx/jws/signer.go       |   364 -
 .../github.com/lestrrat/go-jwx/jws/signer_test.go  |   109 -
 .../github.com/lestrrat/go-jwx/jws/verifier.go     |   184 -
 .../github.com/lestrrat/go-jwx/jwt/doc_test.go     |    24 -
 .../github.com/lestrrat/go-jwx/jwt/interface.go    |    34 -
 .../vendor/github.com/lestrrat/go-jwx/jwt/jwt.go   |   187 -
 .../github.com/lestrrat/go-jwx/jwt/jwt_test.go     |   176 -
 .../github.com/lestrrat/go-jwx/jwt/verify.go       |   191 -
 .../vendor/github.com/lestrrat/go-jwx/jwx.go       |    26 -
 .../github.com/lestrrat/go-jwx/jwx_example_test.go |   116 -
 .../DATA-DOG/go-sqlmock.v1/argument_test.go        |    58 -
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/driver_test.go |   112 -
 .../DATA-DOG/go-sqlmock.v1/examples/basic/basic.go |    40 -
 .../go-sqlmock.v1/examples/basic/basic_test.go     |    58 -
 .../DATA-DOG/go-sqlmock.v1/examples/blog/blog.go   |    81 -
 .../go-sqlmock.v1/examples/blog/blog_test.go       |   102 -
 .../DATA-DOG/go-sqlmock.v1/examples/doc.go         |     1 -
 .../go-sqlmock.v1/examples/orders/orders.go        |   121 -
 .../go-sqlmock.v1/examples/orders/orders_test.go   |   108 -
 .../go-sqlmock.v1/expectations_go18_test.go        |    64 -
 .../DATA-DOG/go-sqlmock.v1/expectations_test.go    |   154 -
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/result_test.go |    62 -
 .../DATA-DOG/go-sqlmock.v1/rows_go18_test.go       |    92 -
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/rows_test.go   |   285 -
 .../DATA-DOG/go-sqlmock.v1/sqlmock_go18_test.go    |   426 -
 .../DATA-DOG/go-sqlmock.v1/sqlmock_test.go         |  1065 -
 .../DATA-DOG/go-sqlmock.v1/statement_test.go       |    33 -
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/stubs_test.go  |    76 -
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/util_test.go   |    21 -
 .../vendor/gopkg.in/asn1-ber.v1/ber_test.go        |   168 -
 .../vendor/gopkg.in/asn1-ber.v1/header_test.go     |   135 -
 .../vendor/gopkg.in/asn1-ber.v1/identifier_test.go |   344 -
 .../vendor/gopkg.in/asn1-ber.v1/length_test.go     |   191 -
 .../vendor/gopkg.in/asn1-ber.v1/suite_test.go      |   182 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc1.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc10.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc11.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc12.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc13.ber     |   Bin 11 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc14.ber     |   Bin 7 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc15.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc16.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc17.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc18.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc19.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc2.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc20.ber     |   Bin 11 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc21.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc22.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc23.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc24.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc25.ber     |   Bin 5 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc26.ber     |   Bin 5 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc27.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc28.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc29.ber     |   Bin 3 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc3.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc30.ber     |   Bin 5 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc31.ber     |   Bin 4 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc32.ber     |   Bin 2 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc33.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc34.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc35.ber     |   Bin 16 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc36.ber     |   Bin 20 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc37.ber     |   Bin 14 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc38.ber     |   Bin 16 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc39.ber     |   Bin 2 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc4.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc40.ber     |   Bin 2 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc41.ber     |   Bin 16 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc42.ber     |   Bin 14 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc43.ber     |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc44.ber     |   Bin 2 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc45.ber     |   Bin 2 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc46.ber     |   Bin 11 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc47.ber     |   Bin 16 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc48.ber     |   Bin 16 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc5.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc6.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc7.ber      |     1 -
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc8.ber      |   Bin 5 -> 0 bytes
 .../vendor/gopkg.in/asn1-ber.v1/tests/tc9.ber      |     1 -
 traffic_ops/vendor/gopkg.in/ldap.v2/conn_test.go   |   336 -
 .../vendor/gopkg.in/ldap.v2/control_test.go        |    97 -
 traffic_ops/vendor/gopkg.in/ldap.v2/dn_test.go     |   211 -
 traffic_ops/vendor/gopkg.in/ldap.v2/error_test.go  |   102 -
 .../vendor/gopkg.in/ldap.v2/example_test.go        |   305 -
 traffic_ops/vendor/gopkg.in/ldap.v2/filter_test.go |   254 -
 traffic_ops/vendor/gopkg.in/ldap.v2/ldap_test.go   |   275 -
 traffic_ops/vendor/gopkg.in/ldap.v2/search_test.go |    31 -
 traffic_ops/vendor/vendor.json                     |   277 -
 traffic_ops_ort/build/build_rpm.sh                 |     2 +-
 .../github.com/gofrs/flock/flock_example_test.go   |    72 -
 .../vendor/github.com/gofrs/flock/flock_test.go    |   290 -
 traffic_stats/build/build_rpm.sh                   |     4 +-
 .../cihub/seelog/archive/archive_test.go           |   178 -
 .../cihub/seelog/archive/tar/tar_test.go           |   104 -
 .../cihub/seelog/archive/zip/zip_test.go           |    99 -
 .../cihub/seelog/behavior_adaptive_test.go         |   124 -
 .../cihub/seelog/behavior_asyncloop_test.go        |   133 -
 .../cihub/seelog/behavior_asynctimer_test.go       |    83 -
 .../cihub/seelog/behavior_synclogger_test.go       |    81 -
 .../github.com/cihub/seelog/cfg_logconfig_test.go  |    99 -
 .../github.com/cihub/seelog/cfg_parser_test.go     |  1150 -
 .../cihub/seelog/common_constraints_test.go        |   196 -
 .../github.com/cihub/seelog/common_context_test.go |   127 -
 .../cihub/seelog/common_exception_test.go          |    98 -
 .../cihub/seelog/dispatch_customdispatcher_test.go |   177 -
 .../cihub/seelog/dispatch_filterdispatcher_test.go |    67 -
 .../cihub/seelog/dispatch_splitdispatcher_test.go  |    64 -
 .../vendor/github.com/cihub/seelog/format_test.go  |   237 -
 .../cihub/seelog/internals_byteverifiers_test.go   |   118 -
 .../cihub/seelog/internals_xmlnode_test.go         |   196 -
 .../github.com/cihub/seelog/io/iotest/iotest.go    |    38 -
 .../cihub/seelog/io/iotest/iotest_test.go          |    43 -
 .../cihub/seelog/writers_bufferedwriter_test.go    |    78 -
 .../cihub/seelog/writers_filewriter_test.go        |   257 -
 .../cihub/seelog/writers_formattedwriter_test.go   |    65 -
 .../cihub/seelog/writers_rollingfilewriter_test.go |   116 -
 vendor/code.cloudfoundry.org/bytefmt/LICENSE       |   201 +
 .../code.cloudfoundry.org/bytefmt/NOTICE           |     0
 .../code.cloudfoundry.org/bytefmt/README.md        |     0
 .../code.cloudfoundry.org/bytefmt/bytes.go         |     0
 .../code.cloudfoundry.org/bytefmt/package.go       |     0
 .../github.com/GehirnInc/crypt/.travis.yml         |     0
 .../github.com/GehirnInc/crypt/AUTHORS.md          |     0
 .../github.com/GehirnInc/crypt/LICENSE             |     0
 .../github.com/GehirnInc/crypt/README.rst          |     0
 .../github.com/GehirnInc/crypt/common/base64.go    |     0
 .../github.com/GehirnInc/crypt/common/doc.go       |     0
 .../github.com/GehirnInc/crypt/common/salt.go      |     0
 .../github.com/GehirnInc/crypt/crypt.go            |     0
 .../github.com/GehirnInc/crypt/internal/utils.go   |     0
 .../GehirnInc/crypt/md5_crypt/md5_crypt.go         |     0
 .../asaskevich/govalidator/arrays_test.go          |   116 -
 .../asaskevich/govalidator/converter_test.go       |    78 -
 .../asaskevich/govalidator/error_test.go           |    29 -
 .../asaskevich/govalidator/numerics_test.go        |   549 -
 .../asaskevich/govalidator/utils_benchmark_test.go |    17 -
 .../asaskevich/govalidator/utils_test.go           |   502 -
 .../asaskevich/govalidator/validator_test.go       |  3249 ---
 vendor/github.com/basho/backoff/backoff_test.go    |    81 -
 .../basho/riak-go-client/.github/CONTRIBUTING.md   |    33 -
 .../basho/riak-go-client/.github/ISSUE_TEMPLATE.md |    11 -
 .../.github/PULL_REQUEST_TEMPLATE.md               |     8 -
 .../basho/riak-go-client/benchmark_test.go         |    48 -
 .../github.com/basho/riak-go-client/build/protogen |    49 -
 .../basho/riak-go-client/client_i_test.go          |    72 -
 .../github.com/basho/riak-go-client/client_test.go |    52 -
 .../basho/riak-go-client/cluster_i_test.go         |   527 -
 .../basho/riak-go-client/cluster_test.go           |   193 -
 .../basho/riak-go-client/command_i_test.go         |    56 -
 .../basho/riak-go-client/command_rpb_test.go       |   368 -
 .../basho/riak-go-client/command_test.go           |    81 -
 .../basho/riak-go-client/connection_i_test.go      |   164 -
 .../riak-go-client/connection_manager_i_test.go    |    67 -
 .../riak-go-client/connection_manager_test.go      |    26 -
 .../basho/riak-go-client/connection_test.go        |   103 -
 .../basho/riak-go-client/crdt_commands_i_test.go   |   477 -
 .../basho/riak-go-client/crdt_commands_test.go     |  1741 --
 .../github.com/basho/riak-go-client/error_test.go  |    45 -
 .../riak-go-client/examples/cm-client/main.go      |   217 -
 .../riak-go-client/examples/dev/using/2i/main.go   |   440 -
 .../examples/dev/using/basics/main.go              |   423 -
 .../examples/dev/using/conflict-resolution/main.go |   224 -
 .../examples/dev/using/data-types/hyperloglog.go   |   168 -
 .../examples/dev/using/search/main.go              |   323 -
 .../examples/dev/using/updates/main.go             |   147 -
 .../basho/riak-go-client/examples/gh-47/main.go    |   284 -
 .../basho/riak-go-client/gh_issues_i_test.go       |    96 -
 .../basho/riak-go-client/globals_i_test.go         |   298 -
 .../basho/riak-go-client/globals_test.go           |   146 -
 .../basho/riak-go-client/kv_commands_i_test.go     |   735 -
 .../basho/riak-go-client/kv_commands_test.go       |  1785 --
 .../basho/riak-go-client/logging_test.go           |   106 -
 .../basho/riak-go-client/misc_commands_i_test.go   |   208 -
 .../basho/riak-go-client/misc_commands_test.go     |   625 -
 .../github.com/basho/riak-go-client/node_i_test.go |   312 -
 .../github.com/basho/riak-go-client/node_test.go   |   167 -
 .../github.com/basho/riak-go-client/object_test.go |    42 -
 .../github.com/basho/riak-go-client/queue_test.go  |    94 -
 .../basho/riak-go-client/security_test.go          |   138 -
 .../github.com/basho/riak-go-client/states_test.go |   102 -
 .../basho/riak-go-client/ts_commands_i_test.go     |   509 -
 .../basho/riak-go-client/ts_commands_test.go       |   338 -
 .../basho/riak-go-client/yz_commands_i_test.go     |   237 -
 .../basho/riak-go-client/yz_commands_test.go       |   463 -
 .../github.com/cenkalti/backoff/LICENSE            |     0
 vendor/github.com/cenkalti/backoff/README.md       |    30 +
 .../github.com/cenkalti/backoff/backoff.go         |     0
 .../github.com/cenkalti/backoff/context.go         |     0
 .../github.com/cenkalti/backoff/exponential.go     |     0
 .../github.com/cenkalti/backoff/retry.go           |     0
 .../github.com/cenkalti/backoff/ticker.go          |     0
 .../github.com/cenkalti/backoff/tries.go           |     0
 .../github.com/cihub/seelog/LICENSE.txt            |     0
 .../github.com/cihub/seelog/README.markdown        |     0
 .../github.com/cihub/seelog/archive/archive.go     |     0
 .../github.com/cihub/seelog/archive/gzip/gzip.go   |     0
 .../github.com/cihub/seelog/archive/tar/tar.go     |     0
 .../github.com/cihub/seelog/archive/zip/zip.go     |     0
 .../cihub/seelog/behavior_adaptivelogger.go        |     0
 .../cihub/seelog/behavior_asynclogger.go           |     0
 .../cihub/seelog/behavior_asynclooplogger.go       |     0
 .../cihub/seelog/behavior_asynctimerlogger.go      |     0
 .../github.com/cihub/seelog/behavior_synclogger.go |     0
 .../github.com/cihub/seelog/cfg_config.go          |     0
 .../github.com/cihub/seelog/cfg_errors.go          |     0
 .../github.com/cihub/seelog/cfg_logconfig.go       |     0
 .../github.com/cihub/seelog/cfg_parser.go          |     0
 .../github.com/cihub/seelog/common_closer.go       |     0
 .../github.com/cihub/seelog/common_constraints.go  |     0
 .../github.com/cihub/seelog/common_context.go      |     0
 .../github.com/cihub/seelog/common_exception.go    |     0
 .../github.com/cihub/seelog/common_flusher.go      |     0
 .../github.com/cihub/seelog/common_loglevel.go     |     0
 .../github.com/cihub/seelog/dispatch_custom.go     |     0
 .../github.com/cihub/seelog/dispatch_dispatcher.go |     0
 .../cihub/seelog/dispatch_filterdispatcher.go      |     0
 .../cihub/seelog/dispatch_splitdispatcher.go       |     0
 .../github.com/cihub/seelog/doc.go                 |     0
 .../github.com/cihub/seelog/format.go              |     0
 .../github.com/cihub/seelog/internals_baseerror.go |     0
 .../github.com/cihub/seelog/internals_fsutils.go   |     0
 .../github.com/cihub/seelog/internals_xmlnode.go   |     0
 .../github.com/cihub/seelog/log.go                 |     0
 .../github.com/cihub/seelog/logger.go              |     0
 .../cihub/seelog/writers_bufferedwriter.go         |     0
 .../github.com/cihub/seelog/writers_connwriter.go  |     0
 .../cihub/seelog/writers_consolewriter.go          |     0
 .../github.com/cihub/seelog/writers_filewriter.go  |     0
 .../cihub/seelog/writers_formattedwriter.go        |     0
 .../cihub/seelog/writers_rollingfilewriter.go      |     0
 .../github.com/cihub/seelog/writers_smtpwriter.go  |     0
 .../github.com/dchest/siphash/.travis.yml          |     0
 .../github.com/dchest/siphash/README.md            |     0
 .../github.com/dchest/siphash/blocks.go            |     0
 .../github.com/dchest/siphash/blocks_amd64.s       |     0
 .../github.com/dchest/siphash/blocks_arm.s         |     0
 .../github.com/dchest/siphash/hash.go              |     0
 .../github.com/dchest/siphash/hash128.go           |     0
 .../github.com/dchest/siphash/hash128_amd64.s      |     0
 .../github.com/dchest/siphash/hash128_arm.s        |     0
 .../github.com/dchest/siphash/hash_amd64.s         |     0
 .../github.com/dchest/siphash/hash_arm.s           |     0
 .../github.com/dchest/siphash/hash_asm.go          |     0
 .../github.com/dchest/siphash/siphash.go           |     0
 .../github.com/dgrijalva/jwt-go/cmd/jwt/README.md  |    18 -
 vendor/github.com/dgrijalva/jwt-go/cmd/jwt/app.go  |   282 -
 vendor/github.com/dgrijalva/jwt-go/cmd/jwt/args.go |    23 -
 vendor/github.com/dgrijalva/jwt-go/ecdsa_test.go   |   100 -
 vendor/github.com/dgrijalva/jwt-go/example_test.go |   114 -
 .../dgrijalva/jwt-go/hmac_example_test.go          |    66 -
 vendor/github.com/dgrijalva/jwt-go/hmac_test.go    |    91 -
 .../dgrijalva/jwt-go/http_example_test.go          |   216 -
 vendor/github.com/dgrijalva/jwt-go/none_test.go    |    72 -
 vendor/github.com/dgrijalva/jwt-go/parser_test.go  |   301 -
 vendor/github.com/dgrijalva/jwt-go/request/doc.go  |     7 -
 .../dgrijalva/jwt-go/request/extractor.go          |    81 -
 .../jwt-go/request/extractor_example_test.go       |    32 -
 .../dgrijalva/jwt-go/request/extractor_test.go     |    91 -
 .../github.com/dgrijalva/jwt-go/request/oauth2.go  |    28 -
 .../github.com/dgrijalva/jwt-go/request/request.go |    68 -
 .../dgrijalva/jwt-go/request/request_test.go       |   103 -
 vendor/github.com/dgrijalva/jwt-go/rsa_pss_test.go |    96 -
 vendor/github.com/dgrijalva/jwt-go/rsa_test.go     |   185 -
 .../dgrijalva/jwt-go/test/ec256-private.pem        |     5 -
 .../dgrijalva/jwt-go/test/ec256-public.pem         |     4 -
 .../dgrijalva/jwt-go/test/ec384-private.pem        |     6 -
 .../dgrijalva/jwt-go/test/ec384-public.pem         |     5 -
 .../dgrijalva/jwt-go/test/ec512-private.pem        |     7 -
 .../dgrijalva/jwt-go/test/ec512-public.pem         |     6 -
 vendor/github.com/dgrijalva/jwt-go/test/helpers.go |    42 -
 .../github.com/dgrijalva/jwt-go/test/hmacTestKey   |     1 -
 .../dgrijalva/jwt-go/test/privateSecure.pem        |    30 -
 vendor/github.com/dgrijalva/jwt-go/test/sample_key |    27 -
 .../dgrijalva/jwt-go/test/sample_key.pub           |     9 -
 .../fsnotify/fsnotify}/.gitignore                  |     0
 .../fsnotify/fsnotify}/.travis.yml                 |     0
 .../fsnotify/fsnotify}/AUTHORS                     |     0
 .../fsnotify/fsnotify}/CHANGELOG.md                |     0
 .../fsnotify/fsnotify}/CONTRIBUTING.md             |     0
 .../fsnotify/fsnotify}/LICENSE                     |     0
 .../fsnotify/fsnotify}/README.md                   |     0
 .../fsnotify/fsnotify}/fen.go                      |     0
 .../fsnotify/fsnotify}/fsnotify.go                 |     0
 .../fsnotify/fsnotify}/inotify.go                  |     0
 .../fsnotify/fsnotify}/inotify_poller.go           |     0
 .../fsnotify/fsnotify}/kqueue.go                   |     0
 .../fsnotify/fsnotify}/open_mode_bsd.go            |     0
 .../fsnotify/fsnotify}/open_mode_darwin.go         |     0
 .../fsnotify/fsnotify}/windows.go                  |     0
 .../github.com/go-acme/lego/LICENSE                |     0
 .../github.com/go-acme/lego/acme/api/account.go    |     0
 .../github.com/go-acme/lego/acme/api/api.go        |     0
 .../go-acme/lego/acme/api/authorization.go         |     0
 .../go-acme/lego/acme/api/certificate.go           |     0
 .../github.com/go-acme/lego/acme/api/challenge.go  |     0
 .../lego/acme/api/internal/nonces/nonce_manager.go |     0
 .../go-acme/lego/acme/api/internal/secure/jws.go   |     0
 .../lego/acme/api/internal/sender/sender.go        |     0
 .../lego/acme/api/internal/sender/useragent.go     |     0
 .../github.com/go-acme/lego/acme/api/order.go      |     0
 .../github.com/go-acme/lego/acme/api/service.go    |     0
 .../github.com/go-acme/lego/acme/commons.go        |     0
 .../github.com/go-acme/lego/acme/errors.go         |     0
 .../github.com/go-acme/lego/certcrypto/crypto.go   |     0
 .../go-acme/lego/certificate/authorization.go      |     0
 .../go-acme/lego/certificate/certificates.go       |     0
 .../github.com/go-acme/lego/certificate/errors.go  |     0
 .../go-acme/lego/challenge/challenges.go           |     0
 .../go-acme/lego/challenge/dns01/cname.go          |     0
 .../go-acme/lego/challenge/dns01/dns_challenge.go  |     0
 .../lego/challenge/dns01/dns_challenge_manual.go   |     0
 .../go-acme/lego/challenge/dns01/fqdn.go           |     0
 .../go-acme/lego/challenge/dns01/nameserver.go     |     0
 .../go-acme/lego/challenge/dns01/precheck.go       |     0
 .../lego/challenge/http01/http_challenge.go        |     0
 .../lego/challenge/http01/http_challenge_server.go |     0
 .../github.com/go-acme/lego/challenge/provider.go  |     0
 .../go-acme/lego/challenge/resolver/errors.go      |     0
 .../go-acme/lego/challenge/resolver/prober.go      |     0
 .../lego/challenge/resolver/solver_manager.go      |     0
 .../lego/challenge/tlsalpn01/tls_alpn_challenge.go |     0
 .../tlsalpn01/tls_alpn_challenge_server.go         |     0
 .../github.com/go-acme/lego/lego/client.go         |     0
 .../github.com/go-acme/lego/lego/client_config.go  |     0
 .../github.com/go-acme/lego/log/logger.go          |     0
 .../github.com/go-acme/lego/platform/wait/wait.go  |     0
 .../go-acme/lego/registration/registar.go          |     0
 .../github.com/go-acme/lego/registration/user.go   |     0
 .../github.com/go-ozzo/ozzo-validation/README.md   |     2 -
 .../go-ozzo/ozzo-validation/date_test.go           |    69 -
 .../go-ozzo/ozzo-validation/error_test.go          |    70 -
 .../go-ozzo/ozzo-validation/example_test.go        |   130 -
 .../github.com/go-ozzo/ozzo-validation/in_test.go  |    44 -
 .../go-ozzo/ozzo-validation/is/rules_test.go       |    94 -
 .../go-ozzo/ozzo-validation/length_test.go         |    90 -
 .../go-ozzo/ozzo-validation/match_test.go          |    44 -
 .../go-ozzo/ozzo-validation/minmax_test.go         |   137 -
 .../github.com/go-ozzo/ozzo-validation/not_in.go   |    45 -
 .../go-ozzo/ozzo-validation/not_in_test.go         |    44 -
 .../go-ozzo/ozzo-validation/not_nil_test.go        |    50 -
 .../go-ozzo/ozzo-validation/required_test.go       |    75 -
 .../go-ozzo/ozzo-validation/string_test.go         |   106 -
 .../go-ozzo/ozzo-validation/struct_test.go         |   137 -
 .../go-ozzo/ozzo-validation/util_test.go           |   293 -
 .../go-ozzo/ozzo-validation/validation_test.go     |   145 -
 .../github.com/gofrs/flock/.gitignore              |     0
 .../github.com/gofrs/flock/.travis.yml             |     0
 .../github.com/gofrs/flock/LICENSE                 |     0
 .../github.com/gofrs/flock/README.md               |     0
 .../github.com/gofrs/flock/appveyor.yml            |     0
 .../github.com/gofrs/flock/flock.go                |     0
 .../github.com/gofrs/flock/flock_unix.go           |     0
 .../github.com/gofrs/flock/flock_winapi.go         |     0
 .../github.com/gofrs/flock/flock_windows.go        |     0
 vendor/github.com/golang/protobuf/Make.protobuf    |    40 -
 vendor/github.com/golang/protobuf/Makefile         |    55 -
 vendor/github.com/golang/protobuf/README.md        |   243 -
 .../golang/protobuf/_conformance/Makefile          |    33 -
 .../golang/protobuf/_conformance/conformance.go    |   161 -
 .../conformance_proto/conformance.pb.go            |  1885 --
 .../conformance_proto/conformance.proto            |   285 -
 .../golang/protobuf/descriptor/descriptor.go       |    93 -
 .../golang/protobuf/descriptor/descriptor_test.go  |    32 -
 vendor/github.com/golang/protobuf/jsonpb/jsonpb.go |  1083 -
 .../golang/protobuf/jsonpb/jsonpb_test.go          |   896 -
 .../protobuf/jsonpb/jsonpb_test_proto/Makefile     |    33 -
 .../jsonpb_test_proto/more_test_objects.pb.go      |   266 -
 .../jsonpb_test_proto/more_test_objects.proto      |    69 -
 .../jsonpb/jsonpb_test_proto/test_objects.pb.go    |   852 -
 .../jsonpb/jsonpb_test_proto/test_objects.proto    |   147 -
 .../github.com/golang/protobuf/proto/all_test.go   |  2278 --
 .../github.com/golang/protobuf/proto/any_test.go   |   300 -
 .../github.com/golang/protobuf/proto/clone_test.go |   300 -
 .../golang/protobuf/proto/decode_test.go           |   258 -
 .../golang/protobuf/proto/encode_test.go           |    85 -
 .../github.com/golang/protobuf/proto/equal_test.go |   224 -
 .../golang/protobuf/proto/extensions_test.go       |   536 -
 .../github.com/golang/protobuf/proto/map_test.go   |    46 -
 .../golang/protobuf/proto/message_set_test.go      |    66 -
 .../protobuf/proto/proto3_proto/proto3.pb.go       |   347 -
 .../protobuf/proto/proto3_proto/proto3.proto       |    87 -
 .../golang/protobuf/proto/proto3_test.go           |   135 -
 .../github.com/golang/protobuf/proto/size2_test.go |    63 -
 .../github.com/golang/protobuf/proto/size_test.go  |   164 -
 .../golang/protobuf/proto/testdata/Makefile        |    50 -
 .../golang/protobuf/proto/testdata/golden_test.go  |    86 -
 .../golang/protobuf/proto/testdata/test.pb.go      |  4147 ----
 .../golang/protobuf/proto/testdata/test.proto      |   548 -
 .../golang/protobuf/proto/text_parser_test.go      |   673 -
 .../github.com/golang/protobuf/proto/text_test.go  |   474 -
 .../golang/protobuf/protoc-gen-go/Makefile         |    33 -
 .../protobuf/protoc-gen-go/descriptor/Makefile     |    37 -
 .../protoc-gen-go/descriptor/descriptor.pb.go      |  2215 --
 .../protoc-gen-go/descriptor/descriptor.proto      |   849 -
 .../golang/protobuf/protoc-gen-go/doc.go           |    51 -
 .../protobuf/protoc-gen-go/generator/Makefile      |    40 -
 .../protobuf/protoc-gen-go/generator/generator.go  |  2866 ---
 .../protobuf/protoc-gen-go/generator/name_test.go  |   114 -
 .../golang/protobuf/protoc-gen-go/grpc/grpc.go     |   463 -
 .../golang/protobuf/protoc-gen-go/link_grpc.go     |    34 -
 .../golang/protobuf/protoc-gen-go/main.go          |    98 -
 .../golang/protobuf/protoc-gen-go/plugin/Makefile  |    45 -
 .../protobuf/protoc-gen-go/plugin/plugin.pb.go     |   293 -
 .../protobuf/protoc-gen-go/plugin/plugin.pb.golden |    83 -
 .../protobuf/protoc-gen-go/plugin/plugin.proto     |   167 -
 .../protobuf/protoc-gen-go/testdata/Makefile       |    73 -
 .../protoc-gen-go/testdata/extension_base.proto    |    46 -
 .../protoc-gen-go/testdata/extension_extra.proto   |    38 -
 .../protoc-gen-go/testdata/extension_test.go       |   210 -
 .../protoc-gen-go/testdata/extension_user.proto    |   100 -
 .../protobuf/protoc-gen-go/testdata/grpc.proto     |    59 -
 .../protoc-gen-go/testdata/imp.pb.go.golden        |   113 -
 .../protobuf/protoc-gen-go/testdata/imp.proto      |    70 -
 .../protobuf/protoc-gen-go/testdata/imp2.proto     |    43 -
 .../protobuf/protoc-gen-go/testdata/imp3.proto     |    38 -
 .../protobuf/protoc-gen-go/testdata/main_test.go   |    46 -
 .../protoc-gen-go/testdata/multi/multi1.proto      |    44 -
 .../protoc-gen-go/testdata/multi/multi2.proto      |    46 -
 .../protoc-gen-go/testdata/multi/multi3.proto      |    43 -
 .../protoc-gen-go/testdata/my_test/test.pb.go      |   870 -
 .../testdata/my_test/test.pb.go.golden             |   870 -
 .../protoc-gen-go/testdata/my_test/test.proto      |   156 -
 .../protobuf/protoc-gen-go/testdata/proto3.proto   |    53 -
 vendor/github.com/golang/protobuf/ptypes/any.go    |   139 -
 .../golang/protobuf/ptypes/any/any.pb.go           |   178 -
 .../golang/protobuf/ptypes/any/any.proto           |   149 -
 .../github.com/golang/protobuf/ptypes/any_test.go  |   113 -
 vendor/github.com/golang/protobuf/ptypes/doc.go    |    35 -
 .../github.com/golang/protobuf/ptypes/duration.go  |   102 -
 .../golang/protobuf/ptypes/duration/duration.pb.go |   144 -
 .../golang/protobuf/ptypes/duration/duration.proto |   117 -
 .../golang/protobuf/ptypes/duration_test.go        |   121 -
 .../golang/protobuf/ptypes/empty/empty.pb.go       |    66 -
 .../golang/protobuf/ptypes/empty/empty.proto       |    52 -
 vendor/github.com/golang/protobuf/ptypes/regen.sh  |    43 -
 .../golang/protobuf/ptypes/struct/struct.pb.go     |   380 -
 .../golang/protobuf/ptypes/struct/struct.proto     |    96 -
 .../github.com/golang/protobuf/ptypes/timestamp.go |   134 -
 .../protobuf/ptypes/timestamp/timestamp.pb.go      |   160 -
 .../protobuf/ptypes/timestamp/timestamp.proto      |   133 -
 .../golang/protobuf/ptypes/timestamp_test.go       |   153 -
 .../golang/protobuf/ptypes/wrappers/wrappers.pb.go |   260 -
 .../golang/protobuf/ptypes/wrappers/wrappers.proto |   118 -
 .../github.com/google/uuid/.travis.yml             |     0
 .../getopt => google/uuid}/CONTRIBUTING.md         |     0
 .../github.com/google/uuid/CONTRIBUTORS            |     0
 .../github.com/google/uuid/LICENSE                 |     0
 .../github.com/google/uuid/README.md               |     0
 .../github.com/google/uuid/dce.go                  |     0
 .../github.com/google/uuid/doc.go                  |     0
 .../github.com/google/uuid/go.mod                  |     0
 .../github.com/google/uuid/hash.go                 |     0
 .../github.com/google/uuid/marshal.go              |     0
 .../github.com/google/uuid/node.go                 |     0
 .../github.com/google/uuid/node_js.go              |     0
 .../github.com/google/uuid/node_net.go             |     0
 .../github.com/google/uuid/sql.go                  |     0
 .../github.com/google/uuid/time.go                 |     0
 .../github.com/google/uuid/util.go                 |     0
 .../github.com/google/uuid/uuid.go                 |     0
 .../github.com/google/uuid/version1.go             |     0
 .../github.com/google/uuid/version4.go             |     0
 .../hydrogen18/stoppableListener/LICENSE           |     0
 .../hydrogen18/stoppableListener/README.md         |     0
 .../hydrogen18/stoppableListener/listener.go       |     0
 .../influxdata/influxdb/client/v2/client.go        |     2 +-
 .../influxdata/influxdb/models/inline_fnv.go       |     2 +-
 .../influxdb/models/inline_strconv_parse.go        |     2 +-
 .../influxdata/influxdb/models/points.go           |     2 +-
 .../influxdata/influxdb/pkg/escape/bytes.go        |     2 +-
 .../github.com/jmoiron/sqlx/named_context_test.go  |   136 -
 vendor/github.com/jmoiron/sqlx/named_test.go       |   227 -
 .../jmoiron/sqlx/reflectx/reflect_test.go          |   905 -
 .../github.com/jmoiron/sqlx/sqlx_context_test.go   |  1344 -
 vendor/github.com/jmoiron/sqlx/sqlx_test.go        |  1792 --
 vendor/github.com/jmoiron/sqlx/types/README.md     |     5 -
 vendor/github.com/jmoiron/sqlx/types/types.go      |   172 -
 vendor/github.com/jmoiron/sqlx/types/types_test.go |   127 -
 .../go/any_tests/jsoniter_any_array_test.go        |   123 -
 .../go/any_tests/jsoniter_any_bool_test.go         |    65 -
 .../go/any_tests/jsoniter_any_float_test.go        |   101 -
 .../go/any_tests/jsoniter_any_int_test.go          |   198 -
 .../go/any_tests/jsoniter_any_map_test.go          |    28 -
 .../go/any_tests/jsoniter_any_null_test.go         |    16 -
 .../go/any_tests/jsoniter_any_object_test.go       |   121 -
 .../go/any_tests/jsoniter_any_string_test.go       |    58 -
 .../go/any_tests/jsoniter_must_be_valid_test.go    |    72 -
 .../go/any_tests/jsoniter_wrap_test.go             |   119 -
 .../json-iterator/go/api_tests/config_test.go      |   174 -
 .../json-iterator/go/api_tests/decoder_test.go     |    64 -
 .../json-iterator/go/api_tests/encoder_18_test.go  |    46 -
 .../json-iterator/go/api_tests/encoder_test.go     |    20 -
 .../go/api_tests/marshal_indent_test.go            |    36 -
 .../go/benchmarks/encode_string_test.go            |    25 -
 .../go/benchmarks/jsoniter_large_file_test.go      |   158 -
 vendor/github.com/json-iterator/go/build.sh        |    12 -
 vendor/github.com/json-iterator/go/example_test.go |   121 -
 .../go/extension_tests/decoder_test.go             |   190 -
 .../go/extension_tests/extension_test.go           |   120 -
 .../go/extra/binary_as_string_codec.go             |   238 -
 .../go/extra/binary_as_string_codec_test.go        |    32 -
 .../json-iterator/go/extra/fuzzy_decoder.go        |   294 -
 .../json-iterator/go/extra/fuzzy_decoder_test.go   |   393 -
 .../json-iterator/go/extra/naming_strategy.go      |    52 -
 .../json-iterator/go/extra/naming_strategy_test.go |    50 -
 .../json-iterator/go/extra/privat_fields.go        |    54 -
 .../json-iterator/go/extra/private_fields_test.go  |    18 -
 .../json-iterator/go/extra/time_as_int64_codec.go  |    31 -
 .../go/extra/time_as_int64_codec_test.go           |    31 -
 .../json-iterator/go/iter_skip_sloppy_test.go      |   162 -
 .../go/misc_tests/jsoniter_array_test.go           |   226 -
 .../go/misc_tests/jsoniter_bool_test.go            |    47 -
 .../go/misc_tests/jsoniter_float_test.go           |    95 -
 .../go/misc_tests/jsoniter_int_test.go             |   101 -
 .../go/misc_tests/jsoniter_interface_test.go       |   178 -
 .../go/misc_tests/jsoniter_iterator_test.go        |    67 -
 .../go/misc_tests/jsoniter_map_test.go             |    44 -
 .../go/misc_tests/jsoniter_nested_test.go          |    89 -
 .../go/misc_tests/jsoniter_null_test.go            |    81 -
 .../go/misc_tests/jsoniter_object_test.go          |   149 -
 .../go/misc_tests/jsoniter_raw_message_test.go     |    68 -
 .../json-iterator/go/skip_tests/array_test.go      |    15 -
 .../json-iterator/go/skip_tests/float64_test.go    |    20 -
 .../go/skip_tests/jsoniter_skip_test.go            |   185 -
 .../json-iterator/go/skip_tests/skip_test.go       |    45 -
 .../json-iterator/go/skip_tests/string_test.go     |    17 -
 .../json-iterator/go/skip_tests/struct_test.go     |    19 -
 vendor/github.com/json-iterator/go/stream_test.go  |    69 -
 vendor/github.com/json-iterator/go/test.sh         |    12 -
 .../json-iterator/go/type_tests/array_test.go      |    63 -
 .../json-iterator/go/type_tests/builtin_test.go    |    69 -
 .../json-iterator/go/type_tests/map_key_test.go    |    43 -
 .../json-iterator/go/type_tests/map_test.go        |    60 -
 .../go/type_tests/marshaler_string_test.go         |    52 -
 .../go/type_tests/marshaler_struct_test.go         |    69 -
 .../json-iterator/go/type_tests/slice_test.go      |   125 -
 .../go/type_tests/struct_embedded_test.go          |   233 -
 .../go/type_tests/struct_field_case_test.go        |    30 -
 .../go/type_tests/struct_tags_test.go              |   285 -
 .../json-iterator/go/type_tests/struct_test.go     |   404 -
 .../go/type_tests/text_marshaler_string_test.go    |    57 -
 .../go/type_tests/text_marshaler_struct_test.go    |    69 -
 .../json-iterator/go/type_tests/type_test.go       |   162 -
 .../json-iterator/go/value_tests/array_test.go     |    20 -
 .../json-iterator/go/value_tests/bool_test.go      |    10 -
 .../json-iterator/go/value_tests/eface_test.go     |    78 -
 .../json-iterator/go/value_tests/error_test.go     |    36 -
 .../json-iterator/go/value_tests/float_test.go     |   129 -
 .../json-iterator/go/value_tests/iface_test.go     |    45 -
 .../json-iterator/go/value_tests/int_test.go       |   419 -
 .../json-iterator/go/value_tests/invalid_test.go   |   236 -
 .../json-iterator/go/value_tests/map_test.go       |   117 -
 .../json-iterator/go/value_tests/marshaler_test.go |    84 -
 .../json-iterator/go/value_tests/number_test.go    |    17 -
 .../json-iterator/go/value_tests/ptr_test.go       |    39 -
 .../go/value_tests/raw_message_test.go             |    21 -
 .../json-iterator/go/value_tests/slice_test.go     |    27 -
 .../json-iterator/go/value_tests/string_test.go    |    88 -
 .../json-iterator/go/value_tests/struct_test.go    |   237 -
 .../json-iterator/go/value_tests/value_test.go     |    80 -
 vendor/github.com/kylelemons/godebug/.travis.yml   |    10 -
 vendor/github.com/kylelemons/godebug/README.md     |    65 -
 .../kylelemons/godebug/diff/diff_test.go           |   228 -
 vendor/github.com/kylelemons/godebug/go.mod        |     3 -
 vendor/github.com/kylelemons/godebug/pretty/doc.go |    22 -
 .../kylelemons/godebug/pretty/examples_test.go     |   373 -
 .../github.com/kylelemons/godebug/pretty/public.go |   188 -
 .../kylelemons/godebug/pretty/public_test.go       |   155 -
 .../kylelemons/godebug/pretty/reflect.go           |   255 -
 .../kylelemons/godebug/pretty/reflect_test.go      |   456 -
 .../kylelemons/godebug/pretty/structure.go         |   223 -
 .../kylelemons/godebug/pretty/structure_test.go    |   371 -
 .../github.com/lestrrat-go/jwx}/LICENSE            |     0
 .../lestrrat-go/jwx/internal/base64/base64.go      |     0
 .../lestrrat-go/jwx/internal/option/option.go      |     0
 .../github.com/lestrrat-go/jwx/jwa/compression.go  |     0
 .../lestrrat-go/jwx/jwa/content_encryption.go      |     0
 .../github.com/lestrrat-go/jwx/jwa/elliptic.go     |     0
 .../github.com/lestrrat-go/jwx/jwa/jwa.go          |     0
 .../lestrrat-go/jwx/jwa/key_encryption.go          |     0
 .../github.com/lestrrat-go/jwx/jwa/key_type.go     |     0
 .../github.com/lestrrat-go/jwx/jwa/signature.go    |     0
 .../github.com/lestrrat-go/jwx/jwk/certchain.go    |     0
 .../github.com/lestrrat-go/jwx/jwk/ecdsa.go        |     0
 .../github.com/lestrrat-go/jwx/jwk/headers_gen.go  |     0
 .../github.com/lestrrat-go/jwx/jwk/interface.go    |     0
 .../github.com/lestrrat-go/jwx/jwk/jwk.go          |     0
 .../github.com/lestrrat-go/jwx/jwk/key_ops.go      |     0
 .../github.com/lestrrat-go/jwx/jwk/option.go       |     0
 .../github.com/lestrrat-go/jwx/jwk/rsa.go          |     0
 .../github.com/lestrrat-go/jwx/jwk/symmetric.go    |     0
 .../github.com/lestrrat/go-jwx}/LICENSE            |     0
 .../github.com/lestrrat/go-jwx/buffer/buffer.go    |     0
 .../lestrrat/go-jwx/internal/emap/emap.go          |     0
 .../github.com/lestrrat/go-jwx/jwa/interface.go    |     0
 .../github.com/lestrrat/go-jwx/jwa/jwa.go          |     0
 .../github.com/lestrrat/go-jwx/jwk/ecdhes.go       |     0
 .../github.com/lestrrat/go-jwx/jwk/ecdsa.go        |     0
 .../github.com/lestrrat/go-jwx/jwk/header.go       |     0
 .../github.com/lestrrat/go-jwx/jwk/interface.go    |     0
 .../github.com/lestrrat/go-jwx/jwk/jwk.go          |     0
 .../github.com/lestrrat/go-jwx/jwk/rsa.go          |     0
 .../github.com/lestrrat/go-jwx/jwk/set.go          |     0
 .../github.com/lestrrat/go-jwx/jwk/symmetric.go    |     0
 vendor/github.com/lib/pq/array_test.go             |  1317 -
 vendor/github.com/lib/pq/bench_test.go             |   435 -
 vendor/github.com/lib/pq/certs/README              |     3 -
 vendor/github.com/lib/pq/certs/bogus_root.crt      |    19 -
 vendor/github.com/lib/pq/certs/postgresql.crt      |    69 -
 vendor/github.com/lib/pq/certs/postgresql.key      |    15 -
 vendor/github.com/lib/pq/certs/root.crt            |    24 -
 vendor/github.com/lib/pq/certs/server.crt          |    81 -
 vendor/github.com/lib/pq/certs/server.key          |    27 -
 vendor/github.com/lib/pq/conn_test.go              |  1614 --
 vendor/github.com/lib/pq/copy_test.go              |   465 -
 vendor/github.com/lib/pq/encode_test.go            |   758 -
 vendor/github.com/lib/pq/go18_test.go              |   319 -
 vendor/github.com/lib/pq/hstore/hstore.go          |   118 -
 vendor/github.com/lib/pq/hstore/hstore_test.go     |   148 -
 vendor/github.com/lib/pq/issues_test.go            |    26 -
 vendor/github.com/lib/pq/listen_example/doc.go     |    96 -
 vendor/github.com/lib/pq/notify_test.go            |   564 -
 vendor/github.com/lib/pq/oid/gen.go                |    74 -
 vendor/github.com/lib/pq/ssl_test.go               |   279 -
 vendor/github.com/lib/pq/url_test.go               |    66 -
 vendor/github.com/lib/pq/uuid_test.go              |    46 -
 .../github.com/miekg/dns/.codecov.yml              |     0
 .../github.com/miekg/dns/.travis.yml               |     0
 .../vendor => vendor}/github.com/miekg/dns/AUTHORS |     0
 .../github.com/miekg/dns/CONTRIBUTORS              |     0
 .../github.com/miekg/dns/COPYRIGHT                 |     0
 .../github.com/miekg/dns/Gopkg.lock                |     0
 .../github.com/miekg/dns/Gopkg.toml                |     0
 .../vendor => vendor}/github.com/miekg/dns/LICENSE |     0
 .../github.com/miekg/dns/Makefile.fuzz             |     0
 .../github.com/miekg/dns/Makefile.release          |     0
 .../github.com/miekg/dns/README.md                 |     0
 .../github.com/miekg/dns/client.go                 |     0
 .../github.com/miekg/dns/clientconfig.go           |     0
 .../vendor => vendor}/github.com/miekg/dns/dane.go |     0
 .../github.com/miekg/dns/defaults.go               |     0
 .../vendor => vendor}/github.com/miekg/dns/dns.go  |     0
 .../github.com/miekg/dns/dnssec.go                 |     0
 .../github.com/miekg/dns/dnssec_keygen.go          |     0
 .../github.com/miekg/dns/dnssec_keyscan.go         |     0
 .../github.com/miekg/dns/dnssec_privkey.go         |     0
 .../vendor => vendor}/github.com/miekg/dns/doc.go  |     0
 .../vendor => vendor}/github.com/miekg/dns/edns.go |     0
 .../github.com/miekg/dns/format.go                 |     0
 .../vendor => vendor}/github.com/miekg/dns/fuzz.go |     0
 .../github.com/miekg/dns/generate.go               |     0
 .../github.com/miekg/dns/labels.go                 |     0
 .../vendor => vendor}/github.com/miekg/dns/msg.go  |     0
 .../github.com/miekg/dns/msg_helpers.go            |     0
 .../github.com/miekg/dns/nsecx.go                  |     0
 .../github.com/miekg/dns/privaterr.go              |     0
 .../github.com/miekg/dns/rawmsg.go                 |     0
 .../github.com/miekg/dns/reverse.go                |     0
 .../github.com/miekg/dns/sanitize.go               |     0
 .../vendor => vendor}/github.com/miekg/dns/scan.go |     0
 .../github.com/miekg/dns/scan_rr.go                |     0
 .../github.com/miekg/dns/scanner.go                |     0
 .../github.com/miekg/dns/server.go                 |     0
 .../vendor => vendor}/github.com/miekg/dns/sig0.go |     0
 .../github.com/miekg/dns/singleinflight.go         |     0
 .../github.com/miekg/dns/smimea.go                 |     0
 .../vendor => vendor}/github.com/miekg/dns/tlsa.go |     0
 .../vendor => vendor}/github.com/miekg/dns/tsig.go |     0
 .../github.com/miekg/dns/types.go                  |     0
 .../vendor => vendor}/github.com/miekg/dns/udp.go  |     0
 .../github.com/miekg/dns/udp_windows.go            |     0
 .../github.com/miekg/dns/update.go                 |     0
 .../github.com/miekg/dns/version.go                |     0
 .../vendor => vendor}/github.com/miekg/dns/xfr.go  |     0
 .../github.com/miekg/dns/zcompress.go              |     0
 .../vendor => vendor}/github.com/miekg/dns/zmsg.go |     0
 .../github.com/miekg/dns/ztypes.go                 |     0
 vendor/github.com/modern-go/concurrent/map_test.go |    18 -
 vendor/github.com/modern-go/concurrent/test.sh     |    12 -
 .../concurrent/unbounded_executor_test.go          |    54 -
 vendor/github.com/modern-go/reflect2/test.sh       |    12 -
 vendor/github.com/nxadm/tail/CHANGES.md            |    46 +
 vendor/github.com/nxadm/tail/Dockerfile            |    19 +
 vendor/github.com/nxadm/tail/LICENSE               |    21 +
 vendor/github.com/nxadm/tail/README.md             |    36 +
 vendor/github.com/nxadm/tail/go.mod                |     9 +
 vendor/github.com/nxadm/tail/go.sum                |     6 +
 vendor/github.com/nxadm/tail/ratelimiter/Licence   |     7 +
 .../nxadm/tail/ratelimiter/leakybucket.go          |    97 +
 vendor/github.com/nxadm/tail/ratelimiter/memory.go |    60 +
 .../github.com/nxadm/tail/ratelimiter/storage.go   |     6 +
 vendor/github.com/nxadm/tail/tail.go               |   440 +
 vendor/github.com/nxadm/tail/tail_posix.go         |    11 +
 vendor/github.com/nxadm/tail/tail_windows.go       |    12 +
 vendor/github.com/nxadm/tail/util/util.go          |    48 +
 vendor/github.com/nxadm/tail/watch/filechanges.go  |    36 +
 vendor/github.com/nxadm/tail/watch/inotify.go      |   135 +
 .../github.com/nxadm/tail/watch/inotify_tracker.go |   248 +
 vendor/github.com/nxadm/tail/watch/polling.go      |   118 +
 vendor/github.com/nxadm/tail/watch/watch.go        |    20 +
 vendor/github.com/nxadm/tail/winfile/winfile.go    |    92 +
 vendor/github.com/ogier/pflag/.travis.yml          |     3 +
 vendor/github.com/ogier/pflag/bool_test.go         |   164 -
 vendor/github.com/ogier/pflag/example_test.go      |    73 -
 vendor/github.com/ogier/pflag/export_test.go       |    29 -
 vendor/github.com/ogier/pflag/flag_test.go         |   350 -
 vendor/github.com/ogier/pflag/revision.txt         |     1 -
 vendor/github.com/onsi/ginkgo/CHANGELOG.md         |   332 +
 vendor/github.com/onsi/ginkgo/CONTRIBUTING.md      |    33 +
 vendor/github.com/onsi/ginkgo/LICENSE              |    20 +
 vendor/github.com/onsi/ginkgo/README.md            |   159 +
 vendor/github.com/onsi/ginkgo/RELEASING.md         |    14 +
 vendor/github.com/onsi/ginkgo/config/config.go     |   213 +
 vendor/github.com/onsi/ginkgo/ginkgo_dsl.go        |   627 +
 vendor/github.com/onsi/ginkgo/go.mod               |    11 +
 vendor/github.com/onsi/ginkgo/go.sum               |    67 +
 .../ginkgo/internal/codelocation/code_location.go  |    48 +
 .../internal/containernode/container_node.go       |   151 +
 .../onsi/ginkgo/internal/failer/failer.go          |    92 +
 .../github.com/onsi/ginkgo/internal/global/init.go |    22 +
 .../onsi/ginkgo/internal/leafnodes/benchmarker.go  |   103 +
 .../onsi/ginkgo/internal/leafnodes/interfaces.go   |    19 +
 .../onsi/ginkgo/internal/leafnodes/it_node.go      |    47 +
 .../onsi/ginkgo/internal/leafnodes/measure_node.go |    62 +
 .../onsi/ginkgo/internal/leafnodes/runner.go       |   117 +
 .../onsi/ginkgo/internal/leafnodes/setup_nodes.go  |    48 +
 .../onsi/ginkgo/internal/leafnodes/suite_nodes.go  |    55 +
 .../leafnodes/synchronized_after_suite_node.go     |    90 +
 .../leafnodes/synchronized_before_suite_node.go    |   181 +
 .../onsi/ginkgo/internal/remote/aggregator.go      |   249 +
 .../ginkgo/internal/remote/forwarding_reporter.go  |   147 +
 .../ginkgo/internal/remote/output_interceptor.go   |    13 +
 .../internal/remote/output_interceptor_darwin.go   |    11 +
 .../remote/output_interceptor_dragonfly.go         |    11 +
 .../internal/remote/output_interceptor_freebsd.go  |    11 +
 .../internal/remote/output_interceptor_linux.go    |    12 +
 .../remote/output_interceptor_linux_mips64le.go    |    12 +
 .../internal/remote/output_interceptor_netbsd.go   |    11 +
 .../internal/remote/output_interceptor_openbsd.go  |    11 +
 .../internal/remote/output_interceptor_solaris.go  |    11 +
 .../internal/remote/output_interceptor_unix.go     |    79 +
 .../internal/remote/output_interceptor_win.go      |    36 +
 .../onsi/ginkgo/internal/remote/server.go          |   224 +
 .../github.com/onsi/ginkgo/internal/spec/spec.go   |   247 +
 .../github.com/onsi/ginkgo/internal/spec/specs.go  |   144 +
 .../internal/spec_iterator/index_computer.go       |    55 +
 .../spec_iterator/parallel_spec_iterator.go        |    59 +
 .../internal/spec_iterator/serial_spec_iterator.go |    45 +
 .../sharded_parallel_spec_iterator.go              |    47 +
 .../ginkgo/internal/spec_iterator/spec_iterator.go |    20 +
 .../onsi/ginkgo/internal/specrunner/random_id.go   |    15 +
 .../onsi/ginkgo/internal/specrunner/spec_runner.go |   411 +
 .../github.com/onsi/ginkgo/internal/suite/suite.go |   227 +
 .../internal/testingtproxy/testing_t_proxy.go      |   104 +
 .../onsi/ginkgo/internal/writer/fake_writer.go     |    36 +
 .../onsi/ginkgo/internal/writer/writer.go          |    89 +
 .../onsi/ginkgo/reporters/default_reporter.go      |    87 +
 .../onsi/ginkgo/reporters/fake_reporter.go         |    59 +
 .../onsi/ginkgo/reporters/junit_reporter.go        |   185 +
 .../github.com/onsi/ginkgo/reporters/reporter.go   |    15 +
 .../reporters/stenographer/console_logging.go      |    64 +
 .../reporters/stenographer/fake_stenographer.go    |   142 +
 .../ginkgo/reporters/stenographer/stenographer.go  |   572 +
 .../stenographer/support/go-colorable/LICENSE      |    21 +
 .../stenographer/support/go-colorable/README.md    |    43 +
 .../support/go-colorable/colorable_others.go       |    24 +
 .../support/go-colorable/colorable_windows.go      |   783 +
 .../support/go-colorable/noncolorable.go           |    57 +
 .../stenographer/support/go-isatty/LICENSE         |     9 +
 .../stenographer/support/go-isatty/README.md       |    37 +
 .../stenographer/support/go-isatty/doc.go          |     2 +
 .../support/go-isatty/isatty_appengine.go          |     9 +
 .../stenographer/support/go-isatty/isatty_bsd.go   |    18 +
 .../stenographer/support/go-isatty/isatty_linux.go |    18 +
 .../support/go-isatty/isatty_solaris.go            |    16 +
 .../support/go-isatty/isatty_windows.go            |    19 +
 .../onsi/ginkgo/reporters/teamcity_reporter.go     |   106 +
 .../github.com/onsi/ginkgo/types/code_location.go  |    15 +
 .../onsi/ginkgo/types/synchronization.go           |    30 +
 vendor/github.com/onsi/ginkgo/types/types.go       |   174 +
 vendor/github.com/onsi/gomega/CHANGELOG.md         |   214 +
 vendor/github.com/onsi/gomega/CONTRIBUTING.md      |    14 +
 vendor/github.com/onsi/gomega/LICENSE              |    20 +
 vendor/github.com/onsi/gomega/Makefile             |     6 +
 vendor/github.com/onsi/gomega/README.md            |    21 +
 vendor/github.com/onsi/gomega/RELEASING.md         |    12 +
 vendor/github.com/onsi/gomega/format/format.go     |   397 +
 vendor/github.com/onsi/gomega/go.mod               |    11 +
 vendor/github.com/onsi/gomega/go.sum               |    69 +
 vendor/github.com/onsi/gomega/gomega_dsl.go        |   478 +
 .../onsi/gomega/internal/assertion/assertion.go    |   109 +
 .../internal/asyncassertion/async_assertion.go     |   198 +
 .../internal/oraclematcher/oracle_matcher.go       |    25 +
 .../internal/testingtsupport/testing_t_support.go  |    60 +
 vendor/github.com/onsi/gomega/matchers.go          |   476 +
 vendor/github.com/onsi/gomega/matchers/and.go      |    63 +
 .../matchers/assignable_to_type_of_matcher.go      |    37 +
 .../onsi/gomega/matchers/attributes_slice.go       |    14 +
 .../onsi/gomega/matchers/be_a_directory.go         |    56 +
 .../onsi/gomega/matchers/be_a_regular_file.go      |    56 +
 .../onsi/gomega/matchers/be_an_existing_file.go    |    40 +
 .../onsi/gomega/matchers/be_closed_matcher.go      |    48 +
 .../onsi/gomega/matchers/be_element_of_matcher.go  |    57 +
 .../onsi/gomega/matchers/be_empty_matcher.go       |    29 +
 .../gomega/matchers/be_equivalent_to_matcher.go    |    36 +
 .../onsi/gomega/matchers/be_false_matcher.go       |    28 +
 .../onsi/gomega/matchers/be_identical_to.go        |    39 +
 .../onsi/gomega/matchers/be_nil_matcher.go         |    20 +
 .../onsi/gomega/matchers/be_numerically_matcher.go |   134 +
 .../onsi/gomega/matchers/be_sent_matcher.go        |    73 +
 .../onsi/gomega/matchers/be_temporally_matcher.go  |    68 +
 .../onsi/gomega/matchers/be_true_matcher.go        |    28 +
 .../onsi/gomega/matchers/be_zero_matcher.go        |    28 +
 .../github.com/onsi/gomega/matchers/consist_of.go  |   117 +
 .../gomega/matchers/contain_element_matcher.go     |    60 +
 .../gomega/matchers/contain_elements_matcher.go    |    44 +
 .../gomega/matchers/contain_substring_matcher.go   |    40 +
 .../onsi/gomega/matchers/equal_matcher.go          |    42 +
 .../onsi/gomega/matchers/have_cap_matcher.go       |    30 +
 .../gomega/matchers/have_http_status_matcher.go    |    42 +
 .../onsi/gomega/matchers/have_key_matcher.go       |    56 +
 .../gomega/matchers/have_key_with_value_matcher.go |    76 +
 .../onsi/gomega/matchers/have_len_matcher.go       |    28 +
 .../onsi/gomega/matchers/have_occurred_matcher.go  |    35 +
 .../onsi/gomega/matchers/have_prefix_matcher.go    |    36 +
 .../onsi/gomega/matchers/have_suffix_matcher.go    |    36 +
 .../onsi/gomega/matchers/match_error_matcher.go    |    55 +
 .../onsi/gomega/matchers/match_json_matcher.go     |    65 +
 .../onsi/gomega/matchers/match_regexp_matcher.go   |    43 +
 .../onsi/gomega/matchers/match_xml_matcher.go      |   134 +
 .../onsi/gomega/matchers/match_yaml_matcher.go     |    76 +
 vendor/github.com/onsi/gomega/matchers/not.go      |    30 +
 vendor/github.com/onsi/gomega/matchers/or.go       |    67 +
 .../onsi/gomega/matchers/panic_matcher.go          |   114 +
 .../onsi/gomega/matchers/receive_matcher.go        |   130 +
 .../matchers/semi_structured_data_support.go       |    94 +
 .../onsi/gomega/matchers/succeed_matcher.go        |    33 +
 .../goraph/bipartitegraph/bipartitegraph.go        |    56 +
 .../bipartitegraph/bipartitegraphmatching.go       |   164 +
 .../gomega/matchers/support/goraph/edge/edge.go    |    61 +
 .../gomega/matchers/support/goraph/node/node.go    |     8 +
 .../gomega/matchers/support/goraph/util/util.go    |     7 +
 .../onsi/gomega/matchers/type_support.go           |   182 +
 .../onsi/gomega/matchers/with_transform.go         |    72 +
 vendor/github.com/onsi/gomega/types/types.go       |    26 +
 vendor/github.com/pborman/getopt/.travis.yml       |     9 -
 vendor/github.com/pborman/getopt/AUTHORS           |     1 -
 vendor/github.com/pborman/getopt/README.md         |   226 -
 vendor/github.com/pborman/getopt/bool.go           |    74 -
 vendor/github.com/pborman/getopt/bool_test.go      |   106 -
 vendor/github.com/pborman/getopt/breakup_test.go   |    34 -
 vendor/github.com/pborman/getopt/counter.go        |    81 -
 vendor/github.com/pborman/getopt/counter_test.go   |    91 -
 vendor/github.com/pborman/getopt/duration.go       |    56 -
 vendor/github.com/pborman/getopt/duration_test.go  |    73 -
 vendor/github.com/pborman/getopt/enum.go           |    73 -
 vendor/github.com/pborman/getopt/enum_test.go      |    66 -
 vendor/github.com/pborman/getopt/error.go          |    93 -
 vendor/github.com/pborman/getopt/getopt.go         |   536 -
 vendor/github.com/pborman/getopt/int.go            |    67 -
 vendor/github.com/pborman/getopt/int16.go          |    67 -
 vendor/github.com/pborman/getopt/int16_test.go     |    84 -
 vendor/github.com/pborman/getopt/int32.go          |    67 -
 vendor/github.com/pborman/getopt/int32_test.go     |    84 -
 vendor/github.com/pborman/getopt/int64.go          |    67 -
 vendor/github.com/pborman/getopt/int64_test.go     |    84 -
 vendor/github.com/pborman/getopt/int_test.go       |    84 -
 vendor/github.com/pborman/getopt/list.go           |    69 -
 vendor/github.com/pborman/getopt/list_test.go      |    99 -
 vendor/github.com/pborman/getopt/option.go         |   193 -
 vendor/github.com/pborman/getopt/set.go            |   268 -
 vendor/github.com/pborman/getopt/signed.go         |   110 -
 vendor/github.com/pborman/getopt/signed_test.go    |    97 -
 vendor/github.com/pborman/getopt/string.go         |    53 -
 vendor/github.com/pborman/getopt/string_test.go    |    77 -
 vendor/github.com/pborman/getopt/uint.go           |    67 -
 vendor/github.com/pborman/getopt/uint16.go         |    67 -
 vendor/github.com/pborman/getopt/uint16_test.go    |    84 -
 vendor/github.com/pborman/getopt/uint32.go         |    67 -
 vendor/github.com/pborman/getopt/uint32_test.go    |    84 -
 vendor/github.com/pborman/getopt/uint64.go         |    67 -
 vendor/github.com/pborman/getopt/uint64_test.go    |    84 -
 vendor/github.com/pborman/getopt/uint_test.go      |    84 -
 vendor/github.com/pborman/getopt/unsigned.go       |   111 -
 vendor/github.com/pborman/getopt/unsigned_test.go  |    97 -
 vendor/github.com/pborman/getopt/util_test.go      |    87 -
 vendor/github.com/pborman/getopt/{ => v2}/LICENSE  |     0
 vendor/github.com/pborman/getopt/v2/bool_test.go   |   106 -
 .../github.com/pborman/getopt/v2/breakup_test.go   |    34 -
 .../github.com/pborman/getopt/v2/counter_test.go   |    76 -
 .../github.com/pborman/getopt/v2/duration_test.go  |    73 -
 vendor/github.com/pborman/getopt/v2/enum_test.go   |    79 -
 .../github.com/pborman/getopt/v2/generic_test.go   |   319 -
 vendor/github.com/pborman/getopt/v2/go.mod         |     3 +
 vendor/github.com/pborman/getopt/v2/help_test.go   |   145 -
 vendor/github.com/pborman/getopt/v2/int_test.go    |   595 -
 vendor/github.com/pborman/getopt/v2/list_test.go   |    99 -
 vendor/github.com/pborman/getopt/v2/signed_test.go |    97 -
 vendor/github.com/pborman/getopt/v2/string_test.go |    77 -
 .../github.com/pborman/getopt/v2/unsigned_test.go  |    97 -
 vendor/github.com/pborman/getopt/v2/util_test.go   |    85 -
 vendor/github.com/pborman/getopt/var.go            |    63 -
 vendor/github.com/pkg/errors/bench_test.go         |   110 -
 vendor/github.com/pkg/errors/commit.txt            |     1 -
 vendor/github.com/pkg/errors/errors_test.go        |   251 -
 vendor/github.com/pkg/errors/example_test.go       |   205 -
 vendor/github.com/pkg/errors/format_test.go        |   560 -
 vendor/github.com/pkg/errors/json_test.go          |    51 -
 vendor/github.com/pkg/errors/stack_test.go         |   250 -
 .../vendor => vendor}/go.etcd.io/bbolt/.gitignore  |     0
 .../vendor => vendor}/go.etcd.io/bbolt/.travis.yml |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/LICENSE  |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/Makefile |     0
 .../vendor => vendor}/go.etcd.io/bbolt/README.md   |     0
 .../vendor => vendor}/go.etcd.io/bbolt/bolt_386.go |     0
 .../go.etcd.io/bbolt/bolt_amd64.go                 |     0
 .../vendor => vendor}/go.etcd.io/bbolt/bolt_arm.go |     0
 .../go.etcd.io/bbolt/bolt_arm64.go                 |     0
 .../go.etcd.io/bbolt/bolt_linux.go                 |     0
 .../go.etcd.io/bbolt/bolt_mips64x.go               |     0
 .../go.etcd.io/bbolt/bolt_mipsx.go                 |     0
 .../go.etcd.io/bbolt/bolt_openbsd.go               |     0
 .../vendor => vendor}/go.etcd.io/bbolt/bolt_ppc.go |     0
 .../go.etcd.io/bbolt/bolt_ppc64.go                 |     0
 .../go.etcd.io/bbolt/bolt_ppc64le.go               |     0
 .../go.etcd.io/bbolt/bolt_riscv64.go               |     0
 .../go.etcd.io/bbolt/bolt_s390x.go                 |     0
 .../go.etcd.io/bbolt/bolt_unix.go                  |     0
 .../go.etcd.io/bbolt/bolt_unix_aix.go              |     0
 .../go.etcd.io/bbolt/bolt_unix_solaris.go          |     0
 .../go.etcd.io/bbolt/bolt_windows.go               |     0
 .../go.etcd.io/bbolt/boltsync_unix.go              |     0
 .../vendor => vendor}/go.etcd.io/bbolt/bucket.go   |     0
 .../vendor => vendor}/go.etcd.io/bbolt/cursor.go   |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/db.go    |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/doc.go   |     0
 .../vendor => vendor}/go.etcd.io/bbolt/errors.go   |     0
 .../vendor => vendor}/go.etcd.io/bbolt/freelist.go |     0
 .../go.etcd.io/bbolt/freelist_hmap.go              |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/go.mod   |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/go.sum   |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/node.go  |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/page.go  |     0
 {grove/vendor => vendor}/go.etcd.io/bbolt/tx.go    |     0
 .../vendor => vendor}/go.etcd.io/bbolt/unsafe.go   |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/LICENSE        |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/README.md      |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/argument.go    |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/driver.go      |     0
 .../DATA-DOG/go-sqlmock.v1/expectations.go         |     0
 .../go-sqlmock.v1/expectations_before_go18.go      |     0
 .../DATA-DOG/go-sqlmock.v1/expectations_go18.go    |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/result.go      |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/rows.go        |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/rows_go18.go   |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/sqlmock.go     |     0
 .../DATA-DOG/go-sqlmock.v1/sqlmock_go18.go         |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/statement.go   |     0
 .../gopkg.in/DATA-DOG/go-sqlmock.v1/util.go        |     0
 .../vendor => vendor}/gopkg.in/asn1-ber.v1/LICENSE |     0
 .../gopkg.in/asn1-ber.v1/README.md                 |     0
 .../vendor => vendor}/gopkg.in/asn1-ber.v1/ber.go  |     0
 .../gopkg.in/asn1-ber.v1/content_int.go            |     0
 .../gopkg.in/asn1-ber.v1/header.go                 |     0
 .../gopkg.in/asn1-ber.v1/identifier.go             |     0
 .../gopkg.in/asn1-ber.v1/length.go                 |     0
 .../vendor => vendor}/gopkg.in/asn1-ber.v1/util.go |     0
 vendor/gopkg.in/fsnotify.v1/example_test.go        |    42 -
 vendor/gopkg.in/fsnotify.v1/inotify_poller_test.go |   229 -
 vendor/gopkg.in/fsnotify.v1/inotify_test.go        |   344 -
 .../fsnotify.v1/integration_darwin_test.go         |   147 -
 vendor/gopkg.in/fsnotify.v1/integration_test.go    |  1237 -
 .../vendor => vendor}/gopkg.in/ldap.v2/.travis.yml |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/LICENSE     |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/Makefile    |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/README.md   |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/add.go      |     0
 .../gopkg.in/ldap.v2/atomic_value.go               |     0
 .../gopkg.in/ldap.v2/atomic_value_go13.go          |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/bind.go     |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/client.go   |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/compare.go  |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/conn.go     |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/control.go  |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/debug.go    |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/del.go      |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/dn.go       |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/doc.go      |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/error.go    |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/filter.go   |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/ldap.go     |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/modify.go   |     0
 .../gopkg.in/ldap.v2/passwdmodify.go               |     0
 .../vendor => vendor}/gopkg.in/ldap.v2/search.go   |     0
 .../gopkg.in/square/go-jose.v2/.gitcookies.sh.enc  |     1 +
 vendor/gopkg.in/square/go-jose.v2/BUG-BOUNTY.md    |    10 +
 vendor/gopkg.in/square/go-jose.v2/CONTRIBUTING.md  |    14 +
 .../gopkg.in/square/go-jose.v2/LICENSE             |     0
 vendor/gopkg.in/square/go-jose.v2/README.md        |   118 +
 .../gopkg.in/square/go-jose.v2/asymmetric.go       |     0
 .../gopkg.in/square/go-jose.v2/cipher/cbc_hmac.go  |     0
 .../square/go-jose.v2/cipher/concat_kdf.go         |     0
 .../gopkg.in/square/go-jose.v2/cipher/ecdh_es.go   |     0
 .../gopkg.in/square/go-jose.v2/cipher/key_wrap.go  |     0
 .../gopkg.in/square/go-jose.v2/crypter.go          |     0
 .../gopkg.in/square/go-jose.v2/doc.go              |     0
 .../gopkg.in/square/go-jose.v2/encoding.go         |     0
 .../gopkg.in/square/go-jose.v2/json/LICENSE        |     0
 vendor/gopkg.in/square/go-jose.v2/json/README.md   |    13 +
 .../gopkg.in/square/go-jose.v2/json/decode.go      |     0
 .../gopkg.in/square/go-jose.v2/json/encode.go      |     0
 .../gopkg.in/square/go-jose.v2/json/indent.go      |     0
 .../gopkg.in/square/go-jose.v2/json/scanner.go     |     0
 .../gopkg.in/square/go-jose.v2/json/stream.go      |     0
 .../gopkg.in/square/go-jose.v2/json/tags.go        |     0
 .../gopkg.in/square/go-jose.v2/jwe.go              |     0
 .../gopkg.in/square/go-jose.v2/jwk.go              |     0
 .../gopkg.in/square/go-jose.v2/jws.go              |     0
 .../gopkg.in/square/go-jose.v2/opaque.go           |     0
 .../gopkg.in/square/go-jose.v2/shared.go           |     0
 .../gopkg.in/square/go-jose.v2/signing.go          |     0
 .../gopkg.in/square/go-jose.v2/symmetric.go        |     0
 vendor/gopkg.in/tomb.v1/LICENSE                    |    29 +
 vendor/gopkg.in/tomb.v1/README.md                  |     4 +
 vendor/gopkg.in/tomb.v1/tomb.go                    |   176 +
 vendor/gopkg.in/yaml.v2/decode_test.go             |  1326 -
 vendor/gopkg.in/yaml.v2/encode_test.go             |   595 -
 vendor/gopkg.in/yaml.v2/example_embedded_test.go   |    41 -
 vendor/gopkg.in/yaml.v2/suite_test.go              |    12 -
 vendor/modules.txt                                 |   248 +
 3072 files changed, 15066 insertions(+), 461351 deletions(-)

diff --git a/.dependency_license b/.dependency_license
index 3d7039f..c5bdc01 100644
--- a/.dependency_license
+++ b/.dependency_license
@@ -30,6 +30,8 @@ CHANGELOG$, Docs
 #
 # These files cannot contain comments, so no header can be added.
 # They are nevertheless covered by the Apache license.
+^go\.sum$, Apache-2.0
+^vendor/modules\.txt$, Apache-2.0
 \.project$, Apache-2.0
 \.cfg$, Apache-2.0
 \.json$, Apache-2.0
@@ -123,10 +125,6 @@ traffic_portal/app/src/assets/css/colReorder.dataTables\..*, MIT
 traffic_portal/app/src/assets/js/colReorder.dataTables\..*, MIT
 traffic_portal/app/src/assets/js/dataTables.buttons\..*, MIT
 traffic_portal/app/src/assets/js/buttons.html5\..*, MIT
-traffic_ops/traffic_ops_golang/vendor/github\.com/dgrijalva/.*, MIT
-traffic_ops/traffic_ops_golang/vendor/github\.com/lestrrat-go/.*, MIT
-traffic_ops_ort/vendor/github\.com/gofrs/flock/.*, BSD
-traffic_ops_ort/vendor/github\.com/pborman/getopt/.*, BSD
 
 # Ignored - Do not report.
 \.DS_Store, Ignore # Created automatically OSX.
diff --git a/.github/actions/go-test/entrypoint.sh b/.github/actions/go-test/entrypoint.sh
index 82d5140..e39d4ee 100755
--- a/.github/actions/go-test/entrypoint.sh
+++ b/.github/actions/go-test/entrypoint.sh
@@ -18,8 +18,10 @@
 
 set -e
 
+cd "${GOPATH}/src/github.com/apache/trafficcontrol"
+
 download_go() {
-	go_version="$(cat "${GITHUB_WORKSPACE}/GO_VERSION")"
+	go_version="$(cat GO_VERSION)"
 	wget -O go.tar.gz "https://dl.google.com/go/go${go_version}.linux-amd64.tar.gz"
 	tar -C /usr/local -xzf go.tar.gz
 	rm go.tar.gz
@@ -33,20 +35,7 @@ if [ -z "$INPUT_DIR" ]; then
 	INPUT_DIR="./lib/..."
 fi
 
-export GOPATH="$(mktemp -d)"
-srcdir="$GOPATH/src/github.com/apache"
-mkdir -p "$srcdir"
-ln -s "$PWD" "$srcdir/trafficcontrol"
-cd "$srcdir/trafficcontrol"
-
 # Need to fetch golang.org/x/* dependencies
-/usr/local/go/bin/go get -v golang.org/x/net/publicsuffix\
-	golang.org/x/crypto/ed25519 \
-	golang.org/x/crypto/scrypt \
-	golang.org/x/net/idna \
-	golang.org/x/net/ipv4 \
-	golang.org/x/net/ipv6 \
-	golang.org/x/sys/unix \
-	golang.org/x/text/secure/bidirule
-/usr/local/go/bin/go test -v $INPUT_DIR
+go mod vendor -v
+go test -v $INPUT_DIR
 exit $?
diff --git a/.github/actions/to-integration-tests/entrypoint.sh b/.github/actions/to-integration-tests/entrypoint.sh
index 79e04c2..582232d 100755
--- a/.github/actions/to-integration-tests/entrypoint.sh
+++ b/.github/actions/to-integration-tests/entrypoint.sh
@@ -77,8 +77,8 @@ start_traffic_vault() {
 
 	DOCKER_BUILDKIT=1 docker build "$ciab_dir" -f "${ciab_dir}/traffic_vault/Dockerfile" -t "$trafficvault" 2>&1 |
 		color_and_prefix "$gray_bg" "building Traffic Vault";
-	if [[ "$INPUT_VERSION" -lt 3 ]]; then
-		echo 'Not starting Traffic Vault for API versions less than 3'
+	if [[ -n "$(docker ps -qf "name=^${trafficvault}")" ]]; then
+		echo 'Traffic Vault is already running.'
 		return;
 	fi;
 	echo 'Starting Traffic Vault...';
@@ -94,29 +94,25 @@ start_traffic_vault() {
 	docker logs -f "$trafficvault" 2>&1 |
 		color_and_prefix "$gray_bg" 'Traffic Vault';
 }
-start_traffic_vault &
+start_traffic_vault & disown
 
 sudo apt-get install -y --no-install-recommends gettext
 
 GOROOT=/usr/local/go
 export GOROOT PATH="${PATH}:${GOROOT}/bin"
 download_go
-export GOPATH="$(mktemp -d)"
-srcdir="$GOPATH/src/github.com/apache"
-mkdir -p "$srcdir"
-ln -s "$PWD" "$srcdir/trafficcontrol"
-
-cd "$srcdir/trafficcontrol/traffic_ops/traffic_ops_golang"
-
-
-/usr/local/go/bin/go get -v golang.org/x/net/publicsuffix\
-	golang.org/x/crypto/ed25519 \
-	golang.org/x/crypto/scrypt \
-	golang.org/x/net/idna \
-	golang.org/x/net/ipv4 \
-	golang.org/x/net/ipv6 \
-	golang.org/x/sys/unix \
-	golang.org/x/text/secure/bidirule
+export GOPATH="${HOME}/go"
+org_dir="$GOPATH/src/github.com/apache"
+repo_dir="${org_dir}/trafficcontrol"
+if [[ ! -e "$repo_dir" ]]; then
+	mkdir -p "$org_dir"
+	cd
+	mv "${GITHUB_WORKSPACE}" "${repo_dir}/"
+	ln -s "$repo_dir" "${GITHUB_WORKSPACE}"
+fi
+
+cd "${repo_dir}/traffic_ops/traffic_ops_golang"
+go mod vendor -v
 go build .
 
 echo "
diff --git a/.github/actions/tp-e2e-tests/entrypoint.sh b/.github/actions/tp-e2e-tests/entrypoint.sh
index d68a5ea..f306115 100755
--- a/.github/actions/tp-e2e-tests/entrypoint.sh
+++ b/.github/actions/tp-e2e-tests/entrypoint.sh
@@ -153,14 +153,18 @@ sudo webdriver-manager update --gecko false --versions.chrome "LATEST_RELEASE_$C
 
 GOROOT=/usr/local/go
 export PATH="${PATH}:${GOROOT}/bin"
-export GOPATH="$(mktemp -d)"
 download_go
-SRCDIR="$GOPATH/src/github.com/apache"
-mkdir -p "$SRCDIR"
-ln -s "$PWD" "$SRCDIR/trafficcontrol"
-
-cd "$SRCDIR/trafficcontrol/traffic_ops/traffic_ops_golang"
+export GOPATH="${HOME}/go"
+readonly ORG_DIR="$GOPATH/src/github.com/apache"
+readonly REPO_DIR="${ORG_DIR}/trafficcontrol"
+if [[ ! -e "$REPO_DIR" ]]; then
+	mkdir -p "$ORG_DIR"
+	cd
+	mv "${GITHUB_WORKSPACE}" "${REPO_DIR}/"
+	ln -s "$REPO_DIR" "${GITHUB_WORKSPACE}"
+fi
 
+cd "${REPO_DIR}/traffic_ops/traffic_ops_golang"
 /usr/local/go/bin/go get -v golang.org/x/net/publicsuffix\
 	golang.org/x/crypto/ed25519 \
 	golang.org/x/crypto/scrypt \
@@ -169,6 +173,7 @@ cd "$SRCDIR/trafficcontrol/traffic_ops/traffic_ops_golang"
 	golang.org/x/net/ipv6 \
 	golang.org/x/sys/unix \
 	golang.org/x/text/secure/bidirule > /dev/null
+/usr/local/go/bin/go mod vendor -v > /dev/null
 /usr/local/go/bin/go build . > /dev/null
 
 openssl req -new -x509 -nodes -newkey rsa:4096 -out localhost.crt -keyout localhost.key -subj "/CN=tptests";
diff --git a/.github/workflows/go.unit.tests.yaml b/.github/workflows/go.unit.tests.yaml
index 740eb87..61f358c 100644
--- a/.github/workflows/go.unit.tests.yaml
+++ b/.github/workflows/go.unit.tests.yaml
@@ -20,23 +20,35 @@ name: Go Unit Tests
 on:
   push:
     paths:
+      - .github/actions/go-test/**
+      - .github/workflows/go.unit.tests.yaml
+      - go.mod
+      - go.sum
       - GO_VERSION
       - grove/**.go
       - lib/**.go
       - traffic_monitor/**.go
-      - traffic_ops/traffic_ops_golang/**.go
       - traffic_ops_ort/atstccfg/**.go
+      - traffic_ops/traffic_ops_golang/**.go
       - traffic_stats/**.go
+      - vendor/**.go
+      - vendor/modules.txt
   create:
   pull_request:
     paths:
+      - .github/actions/go-test/**
+      - .github/workflows/go.unit.tests.yaml
+      - go.mod
+      - go.sum
       - GO_VERSION
       - grove/**.go
       - lib/**.go
       - traffic_monitor/**.go
-      - traffic_ops/traffic_ops_golang/**.go
       - traffic_ops_ort/atstccfg/**.go
+      - traffic_ops/traffic_ops_golang/**.go
       - traffic_stats/**.go
+      - vendor/**.go
+      - vendor/modules.txt
     types: [opened, reopened, ready_for_review, synchronize]
 
 jobs:
@@ -47,7 +59,12 @@ jobs:
     steps:
     - name: Checkout
       uses: actions/checkout@master
+      with:
+        fetch-depth: 1
+        path: src/github.com/apache/trafficcontrol
     - name: Run unit tests
-      uses: ./.github/actions/go-test
+      uses: ./src/github.com/apache/trafficcontrol/.github/actions/go-test
       with:
         dir: ./grove/... ./lib/... ./traffic_monitor/... ./traffic_ops/traffic_ops_golang/... ./traffic_ops_ort/atstccfg/... ./traffic_stats/... ./traffic_ops/app/bin/...
+      env:
+        GOPATH: /github/workspace
diff --git a/.github/workflows/traffic ops.yml b/.github/workflows/traffic ops.yml
index 1a51795..c67ea77 100644
--- a/.github/workflows/traffic ops.yml	
+++ b/.github/workflows/traffic ops.yml	
@@ -22,23 +22,31 @@ on:
     paths:
       - .github/actions/todb-init/**
       - .github/actions/to-integration-tests/**
-      - '.github/workflows/traffic ops.yml'
+      - .github/workflows/traffic ops.yml
+      - go.mod
+      - go.sum
       - GO_VERSION
       - infrastructure/cdn-in-a-box/traffic_vault/**
       - traffic_ops/*client/**.go
       - traffic_ops/testing/api/**.go
       - traffic_ops/traffic_ops_golang/**.go
+      - vendor/**.go
+      - vendor/modules.txt
   create:
   pull_request:
     paths:
       - .github/actions/todb-init/**
       - .github/actions/to-integration-tests/**
-      - '.github/workflows/traffic ops.yml'
+      - .github/workflows/traffic ops.yml
+      - go.mod
+      - go.sum
       - GO_VERSION
       - infrastructure/cdn-in-a-box/traffic_vault/**
       - traffic_ops/*client/**.go
       - traffic_ops/testing/api/**.go
       - traffic_ops/traffic_ops_golang/**.go
+      - vendor/**.go
+      - vendor/modules.txt
     types: [opened, reopened, ready_for_review, synchronize]
 
 jobs:
diff --git a/.gitignore b/.gitignore
index f6775d3..bc67ba7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,6 +41,13 @@ traffic_stats/traffic_stats
 misc/traffic-control-cdn/downloads/*.rpm
 traffic_router/*/*.log
 traffic_router/*.log
+vendor/**/appveyor.yml
+vendor/**/.gitattributes
+vendor/**/.gitignore
+vendor/**/.gitmodules
+vendor/golang.org/
+vendor/**/*.sh
+vendor/**/.travis.yml
 .dbInfo
 /dist
 *.pyc
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ba782bf..c13daaa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,6 +52,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 ### Changed
 - Refactored the Traffic Ops Go client internals so that all public methods have a consistent behavior/implementation
 - Pinned external actions used by Documentation Build and TR Unit Tests workflows to commit SHA-1 and the Docker image used by the Weasel workflow to a SHA-256 digest
+- [apache/trafficcontrol](https://github.com/apache/trafficcontrol) is now a Go module
 
 ## [5.0.0] - 2020-10-20
 ### Added
diff --git a/LICENSE b/LICENSE
index 7ae9bb8..1d86ec1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -303,12 +303,16 @@ For the underscore component:
 ./licenses/MIT-underscore
 
 For the stoppableListener component:
-@traffic_monitor/vendor/github.com/hydrogen18/stoppableListener/*
-./traffic_monitor/vendor/github.com/hydrogen18/stoppableListener/LICENSE
+@vendor/github.com/hydrogen18/stoppableListener/*
+./vendor/github.com/hydrogen18/stoppableListener/LICENSE
 
 For the fsnotify component:
-@vendor/gopkg.in/fsnotify.v1/*
-./vendor/gopkg.in/fsnotify.v1/LICENSE
+@vendor/github.com/fsnotify/fsnotify/*
+./vendor/github.com/fsnotify/fsnotify/LICENSE
+
+For the vendor/gopkg.in/tomb.v1 component:
+@vendor/gopkg.in/tomb.v1/*
+@vendor/gopkg.in/tomb.v1/LICENSE
 
 For the yaml component:
 @vendor/gopkg.in/yaml.v2/*
@@ -350,7 +354,7 @@ Several subsections of main.css are under the MIT license, as noted in the file:
     ./licenses/MIT-bootstrap_progressbar
 
 For the seelog component:
-@traffic_stats/vendor/github.com/cihub/seelog/*
+@vendor/github.com/cihub/seelog/*
 ./licenses/BSD-seelog
 
 The invalid_passwords.txt file is from the Projects/OWASP SecLists Project provided under a MIT license:
@@ -358,12 +362,12 @@ The invalid_passwords.txt file is from the Projects/OWASP SecLists Project provi
 ./licenses/MIT-SecLists
 
 For the go-sqlmock component:
-@traffic_ops/vendor/gopkg.in/DATA-DOG/go-sqlmock.v1/*
-./traffic_ops/vendor/gopkg.in/DATA-DOG/go-sqlmock.v1/LICENSE
+@vendor/gopkg.in/DATA-DOG/go-sqlmock.v1/*
+./vendor/gopkg.in/DATA-DOG/go-sqlmock.v1/LICENSE
 
 For the go-jwx component:
-@traffic_ops/vendor/github.com/lestrrat/go-jwx/*
-./traffic_ops/vendor/github.com/lestrrat/go-jwx/LICENSE
+@vendor/github.com/lestrrat/go-jwx/*
+./vendor/github.com/lestrrat/go-jwx/LICENSE
 
 For the protobuf component:
 @vendor/github.com/golang/protobuf/*
@@ -394,28 +398,28 @@ The ozzo-validation component is used under the MIT license:
 ./vendor/github.com/go-ozzo/ozzo-validation/LICENSE
 
 The bytefmt component is used under the Apache 2.0 license:
-@grove/vendor/code.cloudfoundry.org/bytefmt/*
-./grove/vendor/code.cloudfoundry.org/bytefmt/LICENSE
+@vendor/code.cloudfoundry.org/bytefmt/*
+./vendor/code.cloudfoundry.org/bytefmt/LICENSE
 
 The bbolt component is used under the MIT license:
-@grove/vendor/go.etcd.io/bbolt/*
-./grove/vendor/go.etcd.io/bbolt/LICENSE
+@vendor/go.etcd.io/bbolt/*
+./vendor/go.etcd.io/bbolt/LICENSE
 
 For the siphash component:
-@grove/vendor/github.com/dchest/siphash/*
+@vendor/github.com/dchest/siphash/*
 ./licenses/CC0
 
 For the miekg/dns component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/miekg/dns/*
+@vendor/github.com/miekg/dns/*
 ./licenses/BSD-miekg-dns
 
 The asn1-ber.v1 component is used under the MIT license:
-@traffic_ops/vendor/gopkg.in/asn1-ber.v1/*
-./traffic_ops/vendor/gopkg.in/asn1-ber.v1/LICENSE
+@vendor/gopkg.in/asn1-ber.v1/*
+./vendor/gopkg.in/asn1-ber.v1/LICENSE
 
 The ldap.v2 component is used under the MIT license:
-@traffic_ops/vendor/gopkg.in/ldap.v2/*
-./traffic_ops/vendor/gopkg.in/ldap.v2/LICENSE
+@vendor/gopkg.in/ldap.v2/*
+./vendor/gopkg.in/ldap.v2/LICENSE
 
 The fakeOrigin example video is used the Public Domain license:
 @test/fakeOrigin/example/video/*
@@ -433,9 +437,21 @@ The modern-go/reflect2 component is used under the Apache 2.0 license:
 @vendor/github.com/modern-go/reflect2/*
 ./vendor/github.com/modern-go/reflect2/LICENSE
 
+The nxadm/tail component is used under the MIT license:
+@vendor/github.com/nxadm/tail/*
+./vendor/github.com/nxadm/tail/LICENSE
+
+The onsi/gomega component is used under the MIT license:
+@vendor/github.com/onsi/gomega/*
+./vendor/github.com/onsi/gomega/LICENSE
+
+The onsi/ginkgo component is used under the MIT license:
+@vendor/github.com/onsi/ginkgo/*
+./vendor/github.com/onsi/ginkgo/LICENSE
+
 For the lestrrat-go/jwx (commit e35178a) component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/lestrrat-go/jwx/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/lestrrat-go/jwx/LICENSE
+@vendor/github.com/lestrrat-go/jwx/*
+./vendor/github.com/lestrrat-go/jwx/LICENSE
 
 For the dgrijalva/jwt-go component:
 @vendor/github.com/dgrijalva/jwt-go/*
@@ -450,269 +466,37 @@ For the errors (commit 27936f6) component:
 ./vendor/github.com/pkg/errors/LICENSE
 
 For the GehirnInc/crypt (commit 6c0105a) component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/GehirnInc/crypt/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/GehirnInc/crypt/LICENSE
+@vendor/github.com/GehirnInc/crypt/*
+./vendor/github.com/GehirnInc/crypt/LICENSE
 
 For the go-acme/lego (version 2.7.2) component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/go-acme/lego/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/go-acme/lego/LICENSE
+@vendor/github.com/go-acme/lego/*
+./vendor/github.com/go-acme/lego/LICENSE
 
 For the google/uuid (version 1.1.1) component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/google/uuid/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/google/uuid/LICENSE
+@vendor/github.com/google/uuid/*
+./vendor/github.com/google/uuid/LICENSE
 
 For the gofrs/flock component:
-@traffic_ops_ort/vendor/github.com/gofrs/flock/*
-./traffic_ops_ort/vendor/github.com/gofrs/flock/LICENSE
-
-For the pborman/getopt component:
-@vendor/github.com/pborman/getopt/*
-vendor/github.com/pborman/getopt/LICENSE
-
-For the contrib.go.opencensus.io/exporter/ocagent component:
-@traffic_ops/traffic_ops_golang/vendor/contrib.go.opencensus.io/exporter/ocagent/*
-@traffic_ops/traffic_ops_golang/vendor/contrib.go.opencensus.io/exporter/ocagent/LICENSE
-
-For the google.golang.org/api/googleapi/internal/uritemplates component:
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/api/googleapi/internal/uritemplates/*
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/api/googleapi/internal/uritemplates/LICENSE
-
-For the google.golang.org/api component:
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/api/*
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/api/LICENSE
+@vendor/github.com/gofrs/flock/*
+./vendor/github.com/gofrs/flock/LICENSE
 
-For the google.golang.org/appengine component:
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/appengine/*
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/appengine/LICENSE
-
-For the google.golang.org/genproto component:
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/genproto/*
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/genproto/LICENSE
-
-For the google.golang.org/grpc component:
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/grpc/*
-@traffic_ops/traffic_ops_golang/vendor/google.golang.org/grpc/LICENSE
-
-For the go.opencensus.io component:
-@traffic_ops/traffic_ops_golang/vendor/go.opencensus.io/*
-@traffic_ops/traffic_ops_golang/vendor/go.opencensus.io/LICENSE
-
-For the gopkg.in/ini.v1 component:
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/ini.v1/*
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/ini.v1/LICENSE
-
-For the gopkg.in/ns1/ns1-go.v2 component:
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/ns1/ns1-go.v2/*
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/ns1/ns1-go.v2/LICENSE.txt
-
-For the gopkg.in/resty.v1 component:
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/resty.v1/*
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/resty.v1/LICENSE
+For the pborman/getopt/v2 component:
+@vendor/github.com/pborman/getopt/v2/*
+vendor/github.com/pborman/getopt/v2/LICENSE
 
 For the gopkg.in/square/go-jose.v2/json component:
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/square/go-jose.v2/json/*
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/square/go-jose.v2/json/LICENSE
+@vendor/gopkg.in/square/go-jose.v2/json/*
+@vendor/gopkg.in/square/go-jose.v2/json/LICENSE
 
 For the gopkg.in/square/go-jose.v2 component:
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/square/go-jose.v2/*
-@traffic_ops/traffic_ops_golang/vendor/gopkg.in/square/go-jose.v2/LICENSE
-
-For the go.uber.org/ratelimit component:
-@traffic_ops/traffic_ops_golang/vendor/go.uber.org/ratelimit/*
-@traffic_ops/traffic_ops_golang/vendor/go.uber.org/ratelimit/LICENSE
-
-For the akamai/AkamaiOPEN-edgegrid-golang component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/akamai/AkamaiOPEN-edgegrid-golang/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/akamai/AkamaiOPEN-edgegrid-golang/LICENSE
-
-For the aliyun/alibaba-cloud-sdk-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/aliyun/alibaba-cloud-sdk-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/aliyun/alibaba-cloud-sdk-go/LICENSE
-
-For the aws/aws-sdk-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/aws/aws-sdk-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/aws/aws-sdk-go/LICENSE.txt
-
-For the Azure/azure-sdk-for-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/Azure/azure-sdk-for-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/Azure/azure-sdk-for-go/LICENSE
-
-For the Azure/go-autorest component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/Azure/go-autorest/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/Azure/go-autorest/LICENSE
-
-For the  BurntSushi/toml component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/BurntSushi/toml/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/BurntSushi/toml/COPYING
+@vendor/gopkg.in/square/go-jose.v2/*
+@vendor/gopkg.in/square/go-jose.v2/LICENSE
 
 For the cenkalti/backoff component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/cenkalti/backoff/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/cenkalti/backoff/LICENSE
-
-For the census-instrumentation/opencensus-proto component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/census-instrumentation/opencensus-proto/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/census-instrumentation/opencensus-proto/LICENSE
-
-For the cloudflare/cloudflare-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/cloudflare/cloudflare-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/cloudflare/cloudflare-go/LICENSE
-
-For the cpu/goacmedns component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/cpu/goacmedns/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/cpu/goacmedns/LICENSE
-
-For the davecgh/go-spew component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/davecgh/go-spew/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/davecgh/go-spew/LICENSE
-
-For the decker502/dnspod-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/decker502/dnspod-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/decker502/dnspod-go/LICENSE
-
-For the dimchansky/utfbom component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/dimchansky/utfbom/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/dimchansky/utfbom/LICENSE
-
-For the dnsimple/dnsimple-go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/dnsimple/dnsimple-go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/dnsimple/dnsimple-go/LICENSE.txt
-
-For the exoscale/egoscale component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/exoscale/egoscale/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/exoscale/egoscale/LICENSE
-
-For the fatih/structs component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/fatih/structs/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/fatih/structs/LICENSE
-
-For the go-errors/errors component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/go-errors/errors/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/go-errors/errors/LICENSE.MIT
-
-For the gofrs/uuid component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/gofrs/uuid/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/gofrs/uuid/LICENSE
-
-For the go-ini/ini component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/go-ini/ini/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/go-ini/ini/LICENSE
-
-For the google/google component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/google/go-querystring/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/google/go-querystring/LICENSE
-
-For the gophercloud/gophercloud component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/gophercloud/gophercloud/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/gophercloud/gophercloud/LICENSE
-
-For the grpc-ecosystem/grpc-gateway component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/grpc-ecosystem/grpc-gateway/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt
-
-For the hashicorp/golang-lru component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/hashicorp/golang-lru/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/hashicorp/golang-lru/LICENSE
-
-For the iij/doapi component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/iij/doapi/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/iij/doapi/LICENSE.md
-
-For the jmespath/go-jmespath component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/jmespath/go-jmespath/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/jmespath/go-jmespath/LICENSE
-
-For the kolo/xmlrpc component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/kolo/xmlrpc/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/kolo/xmlrpc/LICENSE
+@vendor/github.com/cenkalti/backoff/*
+./vendor/github.com/cenkalti/backoff/LICENSE
 
 For the kylelemons/godebug component:
 @vendor/github.com/kylelemons/godebug/*
 .vendor/github.com/kylelemons/godebug/LICENSE
-
-For the labbsr0x/bindman-dns-webhook component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/labbsr0x/bindman-dns-webhook/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/labbsr0x/bindman-dns-webhook/LICENSE
-
-For the labbsr0x/goh component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/labbsr0x/goh/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/labbsr0x/goh/LICENSE
-
-For the linode/linodego component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/linode/linodego/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/linode/linodego/LICENSE
-
-For the mitchellh/go-homedir component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/mitchellh/go-homedir/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/mitchellh/go-homedir/LICENSE
-
-For the mitchellh/mapstructure component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/mitchellh/mapstructure/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/mitchellh/mapstructure/LICENSE
-
-For the namedotcom/go component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/namedotcom/go/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/namedotcom/go/LICENSE
-
-For the nrdcg/auroradns component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/auroradns/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/auroradns/LICENSE
-
-For the nrdcg/goinwx component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/goinwx/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/goinwx/LICENSE
-
-For the nrdcg/namesilo component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/namesilo/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/nrdcg/namesilo/LICENSE
-
-For the OpenDNS/vegadns2client component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/OpenDNS/vegadns2client/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/OpenDNS/vegadns2client/LICENSE
-
-For the oracle/oci-go-sdk component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/oracle/oci-go-sdk/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/oracle/oci-go-sdk/LICENSE.txt
-
-For the ovh/go-ovh component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/ovh/go-ovh/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/ovh/go-ovh/LICENSE
-
-For the pmezard/go-difflib component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/pmezard/go-difflib/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/pmezard/go-difflib/LICENSE
-
-For the rainycape/memcache component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/rainycape/memcache/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/rainycape/memcache/LICENSE
-
-For the sacloud/libsacloud component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/sacloud/libsacloud/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/sacloud/libsacloud/LICENSE.txt
-
-For the sirupsen/logrus component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/sirupsen/logrus/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/sirupsen/logrus/LICENSE
-
-For the stretchr/objx component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/stretchr/objx/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/stretchr/objx/LICENSE
-
-For the stretchr/testify component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/stretchr/testify/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/stretchr/testify/LICENSE
-
-For the timewasted/linode component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/timewasted/linode/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/timewasted/linode/LICENSE
-
-For the transip/gotransip component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/transip/gotransip/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/transip/gotransip/LICENSE
-
-For the urfave/cli component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/urfave/cli/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/urfave/cli/LICENSE
-
-For the vultr/govultr component:
-@traffic_ops/traffic_ops_golang/vendor/github.com/vultr/govultr/*
-./traffic_ops/traffic_ops_golang/vendor/github.com/vultr/govultr/LICENSE
diff --git a/docs/source/development/traffic_ops.rst b/docs/source/development/traffic_ops.rst
index 97bab2b..0276765 100644
--- a/docs/source/development/traffic_ops.rst
+++ b/docs/source/development/traffic_ops.rst
@@ -81,7 +81,9 @@ Go Implementation Requirements
 .. |install-go-link| replace:: Go :atc-go-version:`_` or later
 .. _install-go-link: http://golang.org/doc/install
 
-All Go code dependencies are managed through the :atc-file:`vendor/` directory and should thus be available without any extra work - and any new dependencies should be properly "vendored" into that same, top-level directory. Some dependencies have been "vendored" into :atc-file:`traffic_ops/vendor` and :atc-file:`traffic_ops/traffic_ops_golang/vendor` but the preferred location for new dependencies is under that top-level :atc-file:`vendor/` directory.
+All Go code dependencies are managed through the :atc-file:`go.mod`, :atc-file:`go.sum`, and :atc-file:`vendor/modules.txt` files. With the exception of ``golang.org/x`` packages (see :ref:`below <dev-traffic-ops-golang-x>`), module dependencies in :atc-file:`vendor/` are tracked in Git and should thus be available without any extra work - and any new dependencies should be properly "vendored" into that same, top-level directory. No other :atc-file:`vendor/` directories exist, as Go modu [...]
+
+.. _dev-traffic-ops-golang-x:
 
 Per the Go language standard's authoritative source's recommendation, all sub-packages of ``golang.org/x`` are treated as a part of the compiler, and so need not ever be "vendored" as though they were an external dependency. These dependencies are not listed explicitly here, so it is strongly advised that they be fetched using :manpage:`go-get(1)` rather than downloaded by hand.
 
@@ -278,7 +280,7 @@ To install the Traffic Ops Developer environment:
 		:caption: Install Go Development Dependencies
 
 		# assuming current working directory is the repository root
-		go get -v ./lib/... ./traffic_ops/traffic_ops_golang/...
+		go mod vendor -v
 
 #. Set up a role (user) in PostgreSQL
 
diff --git a/docs/source/development/traffic_stats.rst b/docs/source/development/traffic_stats.rst
index ea83360..222f603 100644
--- a/docs/source/development/traffic_stats.rst
+++ b/docs/source/development/traffic_stats.rst
@@ -47,7 +47,7 @@ Installing The Developer Environment
 ====================================
 #. Clone the traffic_control repository using Git into a location accessible by your $GOPATH
 #. Navigate to the traffic_ops/client directory of your cloned repository. (This is the directory containing Traffic Ops client code used by Traffic Stats)
-#. From the traffic_ops/client directory run ``go test`` to test the client code. This will run all unit tests for the client and return the results. If there are missing dependencies you will need to run ``go get <dependency name>`` to get the dependency
+#. From the traffic_ops/client directory run ``go test`` to test the client code. This will run all unit tests for the client and return the results. If there are missing dependencies you will need to run ``go mod vendor -v`` to get the dependencies
 #. Once the tests pass, run ``go install`` to build and install the Traffic Ops client package. This makes it accessible to Traffic Stats.
 #. Navigate to your cloned repository under Traffic Stats
-#. Run ``go build traffic_stats.go`` to build traffic_stats.  You will need to run ``go get`` for any missing dependencies.
+#. Run ``go build traffic_stats.go`` to build traffic_stats.  You will need to run ``go mod vendor -v`` for any missing dependencies.
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..eac238a
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,73 @@
+module github.com/apache/trafficcontrol
+
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+go 1.15
+
+replace (
+	github.com/fsnotify/fsnotify v1.4.9 => github.com/fsnotify/fsnotify v1.3.0
+	github.com/golang/protobuf v1.4.2 => github.com/golang/protobuf v0.0.0-20171021043952-1643683e1b54
+	github.com/pborman/getopt/v2 v2.1.0 => github.com/pborman/getopt/v2 v2.0.0-20200816005738-fd0d075bf4de
+	gopkg.in/yaml.v2 v2.3.0 => gopkg.in/yaml.v2 v2.2.1
+)
+
+require (
+	code.cloudfoundry.org/bytefmt v0.0.0-20180108190415-b31f603f5e1e
+	github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46
+	github.com/asaskevich/govalidator v0.0.0-20180319081651-7d2e70ef918f
+	github.com/basho/backoff v0.0.0-20150307023525-2ff7c4694083 // indirect
+	github.com/basho/riak-go-client v1.7.1-0.20170327205844-5587c16e0b8b
+	github.com/cenkalti/backoff v2.2.1+incompatible // indirect
+	github.com/cihub/seelog v0.0.0-20170110094445-7bfb7937d106
+	github.com/dchest/siphash v1.1.0
+	github.com/dgrijalva/jwt-go v3.2.1-0.20190620180102-5e25c22bd5d6+incompatible
+	github.com/fsnotify/fsnotify v1.4.9
+	github.com/go-acme/lego v2.7.2+incompatible
+	github.com/go-ozzo/ozzo-validation v3.0.3-0.20180119232150-44af65fe9adf+incompatible
+	github.com/go-sql-driver/mysql v1.5.0 // indirect
+	github.com/gofrs/flock v0.7.2-0.20190320160742-5135e617513b
+	github.com/google/uuid v1.1.2
+	github.com/hydrogen18/stoppableListener v0.0.0-20151210151943-dadc9ccc400c
+	github.com/influxdata/influxdb v1.1.1-0.20170104212736-6a94d200c826
+	github.com/jmoiron/sqlx v0.0.0-20170430194603-d9bd385d68c0
+	github.com/json-iterator/go v1.1.6-0.20181024152841-05d041de1043
+	github.com/kelseyhightower/envconfig v1.3.1-0.20180308190516-b2c5c876e265
+	github.com/kylelemons/godebug v1.1.1-0.20201107061927-e693023230a4
+	github.com/lestrrat-go/jwx v0.9.1-0.20190702045520-e35178ac2b1f
+	github.com/lestrrat/go-jwx v0.0.0-20171104074836-2857e17763b6
+	github.com/lib/pq v0.0.0-20170707053602-dd1fe2071026
+	github.com/mattn/go-sqlite3 v1.14.5 // indirect
+	github.com/miekg/dns v1.0.6-0.20180406150955-01d59357d468
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.1 // indirect
+	github.com/ogier/pflag v0.0.2-0.20201025181535-73e519546fc0
+	github.com/onsi/ginkgo v1.14.2
+	github.com/onsi/gomega v1.10.3
+	github.com/pborman/getopt/v2 v2.1.0
+	github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9
+	github.com/stretchr/testify v1.6.1 // indirect
+	go.etcd.io/bbolt v1.3.5
+	golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9
+	golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
+	golang.org/x/sys v0.0.0-20201117222635-ba5294a509c7
+	gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0
+	gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225 // indirect
+	gopkg.in/ldap.v2 v2.5.1
+	gopkg.in/square/go-jose.v2 v2.3.1 // indirect
+	gopkg.in/yaml.v2 v2.3.0
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..9677175
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,130 @@
+code.cloudfoundry.org/bytefmt v0.0.0-20180108190415-b31f603f5e1e h1:R3Kkucb2Lbd/gFOKivb+HidzSL5o8eB+eWL2YqoIOss=
+code.cloudfoundry.org/bytefmt v0.0.0-20180108190415-b31f603f5e1e/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
+github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46 h1:rs0kDBt2zF4/CM9rO5/iH+U22jnTygPlqWgX55Ufcxg=
+github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46/go.mod h1:kC29dT1vFpj7py2OvG1khBdQpo3kInWP+6QipLbdngo=
+github.com/asaskevich/govalidator v0.0.0-20180319081651-7d2e70ef918f h1:/8NcnxL60YFll4ehCwibKotx0BR9v2ND40fomga8qDs=
+github.com/asaskevich/govalidator v0.0.0-20180319081651-7d2e70ef918f/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/basho/backoff v0.0.0-20150307023525-2ff7c4694083 h1:GKs410QTI0WKMlVOHG3C5894qNC+iLT0gKd3llmk8Q4=
+github.com/basho/backoff v0.0.0-20150307023525-2ff7c4694083/go.mod h1:LPMmhtk79U7hVIuDjCUSLi5eujsYZhjUYremMNOd7/Y=
+github.com/basho/riak-go-client v1.7.1-0.20170327205844-5587c16e0b8b h1:vSR1g20UzfoT5R+mBYb3msz+alUk68AfG/h52WJ/MrM=
+github.com/basho/riak-go-client v1.7.1-0.20170327205844-5587c16e0b8b/go.mod h1:/kA2cT67OJUBL2iod0m2oK9iIOzp++uogoqJRLWFeCo=
+github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/cihub/seelog v0.0.0-20170110094445-7bfb7937d106 h1:R8zmZtokN18E+ZxOar+w+3mOunajBUV15IUjMUXmLtc=
+github.com/cihub/seelog v0.0.0-20170110094445-7bfb7937d106/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dchest/siphash v1.1.0 h1:1Rs9eTUlZLPBEvV+2sTaM8O0NWn0ppbgqS7p11aWawI=
+github.com/dchest/siphash v1.1.0/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
+github.com/dgrijalva/jwt-go v3.2.1-0.20190620180102-5e25c22bd5d6+incompatible h1:4jGdduO4ceTJFKf0IhgaB8NJapGqKHwC2b4xQ/cXujM=
+github.com/dgrijalva/jwt-go v3.2.1-0.20190620180102-5e25c22bd5d6+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/fsnotify/fsnotify v1.3.0 h1:XyNoRE4PlEAzjaHYBqJuJC18jNWyfDVJ2jwD5kCuwXs=
+github.com/fsnotify/fsnotify v1.3.0/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-acme/lego v2.7.2+incompatible h1:ThhpPBgf6oa9X/vRd0kEmWOsX7+vmYdckmGZSb+FEp0=
+github.com/go-acme/lego v2.7.2+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M=
+github.com/go-ozzo/ozzo-validation v3.0.3-0.20180119232150-44af65fe9adf+incompatible h1:Ew5aKU1f03D3fhlr9oUycwEwAu+/Z6HWVcyuU9vXZjM=
+github.com/go-ozzo/ozzo-validation v3.0.3-0.20180119232150-44af65fe9adf+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/gofrs/flock v0.7.2-0.20190320160742-5135e617513b h1:3QNh5Xo2pmr2nZXENtnztfpjej8XY8EPmvYxF5SzY9M=
+github.com/gofrs/flock v0.7.2-0.20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
+github.com/golang/protobuf v0.0.0-20171021043952-1643683e1b54 h1:nRNJXiJvemchkOTn0V4U11TZkvacB94gTzbTZbSA7Rw=
+github.com/golang/protobuf v0.0.0-20171021043952-1643683e1b54/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/hydrogen18/stoppableListener v0.0.0-20151210151943-dadc9ccc400c h1:vWD+Yc5gToFb7lrP3xQ91DelA80tpcVL6HHElCGskvI=
+github.com/hydrogen18/stoppableListener v0.0.0-20151210151943-dadc9ccc400c/go.mod h1:uO86HRaGBvTVipZR23pFGujEF+fe0Qq6lu/En+RY43Y=
+github.com/influxdata/influxdb v1.1.1-0.20170104212736-6a94d200c826 h1:F/ZGpGV51zWV9cpTGdCikuptiAwG1NK747a80m0yK+s=
+github.com/influxdata/influxdb v1.1.1-0.20170104212736-6a94d200c826/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
+github.com/jmoiron/sqlx v0.0.0-20170430194603-d9bd385d68c0 h1:oZ1oQfWp4h9VX9Fmorc9DrmbHBwiw+mXphFDTVNp1vI=
+github.com/jmoiron/sqlx v0.0.0-20170430194603-d9bd385d68c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
+github.com/json-iterator/go v1.1.6-0.20181024152841-05d041de1043 h1:XWlFVbIXnWhOnWnMMUyVPElTFYoLeuO0TAarw7Jvdco=
+github.com/json-iterator/go v1.1.6-0.20181024152841-05d041de1043/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/kelseyhightower/envconfig v1.3.1-0.20180308190516-b2c5c876e265 h1:LlnLZiXiFBkEqo80pOI1gVpkSvGI4SgRRWa8OfIGbz0=
+github.com/kelseyhightower/envconfig v1.3.1-0.20180308190516-b2c5c876e265/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/kylelemons/godebug v1.1.1-0.20201107061927-e693023230a4 h1:EFGhiCtMc7FHoE+En2UPh3HgvGzWZ0enFfBuu6FtFww=
+github.com/kylelemons/godebug v1.1.1-0.20201107061927-e693023230a4/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/lestrrat-go/jwx v0.9.1-0.20190702045520-e35178ac2b1f h1:mcrFGmpYKjQ8uOye+kWChqy5u+PcXngNAKphYoEIUEM=
+github.com/lestrrat-go/jwx v0.9.1-0.20190702045520-e35178ac2b1f/go.mod h1:iEoxlYfZjvoGpuWwxUz+eR5e6KTJGsaRcy/YNA/UnBk=
+github.com/lestrrat/go-jwx v0.0.0-20171104074836-2857e17763b6 h1:Cs+QtIlpsE/GOhCr/54qhec3cg9a+IjOgqdhNl1yumA=
+github.com/lestrrat/go-jwx v0.0.0-20171104074836-2857e17763b6/go.mod h1:T+yHdCP6MJKtzoVQMHvVCeam5VFwX1+rWzn5zZgKYMI=
+github.com/lib/pq v0.0.0-20170707053602-dd1fe2071026 h1:cibC8wCcGwIOBbP8ney1adouY90dheGj861mBFAuMQk=
+github.com/lib/pq v0.0.0-20170707053602-dd1fe2071026/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
+github.com/miekg/dns v1.0.6-0.20180406150955-01d59357d468 h1:ABwS8bIszuZkM3o4nP3Hw3rz9TGkMW9lV4Ifp1hMEaI=
+github.com/miekg/dns v1.0.6-0.20180406150955-01d59357d468/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/ogier/pflag v0.0.2-0.20201025181535-73e519546fc0 h1:GGuh6ijy3a9BZ8RoAGQZcwTRYyY1Zbnt+YR1uVMV5+U=
+github.com/ogier/pflag v0.0.2-0.20201025181535-73e519546fc0/go.mod h1:zkFki7tvTa0tafRvTBIZTvzYyAu6kQhPZFnshFFPE+g=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
+github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA=
+github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
+github.com/pborman/getopt/v2 v2.0.0-20200816005738-fd0d075bf4de h1:i3rei6KlOqwCd9rxoYKfXEzf9LRN9dQMarOfAvH5Fos=
+github.com/pborman/getopt/v2 v2.0.0-20200816005738-fd0d075bf4de/go.mod h1:4NtW75ny4eBw9fO1bhtNdYTlZKYX5/tBLtsOpwKIKd0=
+github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9 h1:PCj9X21C4pet4sEcElTfAi6LSl5ShkjE8doieLc+cbU=
+github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
+go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 h1:phUcVbl53swtrUN8kQEXFhUxPlIlWyBfKmidCu7P95o=
+golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201117222635-ba5294a509c7 h1:s330+6z/Ko3J0o6rvOcwXe5nzs7UT9tLKHoOXYn6uE0=
+golang.org/x/sys v0.0.0-20201117222635-ba5294a509c7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY=
+gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0/go.mod h1:OdE7CF6DbADk7lN8LIKRzRJTTZXIjtWgA5THM5lhBAw=
+gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225 h1:JBwmEvLfCqgPcIq8MjVMQxsF3LVL4XG/HH0qiG0+IFY=
+gopkg.in/asn1-ber.v1 v1.0.0-20170511165959-379148ca0225/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU=
+gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk=
+gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/grove/README.md b/grove/README.md
index 7fce45e..41724ac 100644
--- a/grove/README.md
+++ b/grove/README.md
@@ -25,18 +25,11 @@ HTTP caching proxy, implementing RFC 7234
 
 1. Install and set up a Golang development environment.
     * See https://golang.org/doc/install
-2. Get the latest necessary golang.org/x packages.
+2. Get the necessary dependencies.
 ```bash
-rm -rf $GOPATH/src/golang.org/x
-rm -rf $GOPATH/pkg/*
-
-go get golang.org/x/text
-go get golang.org/x/sys/unix
-go get golang.org/x/net/http2
-go get golang.org/x/net/ipv4
-go get golang.org/x/net/ipv6
+go mod vendor -v
 ```
-  * golang.org/x must be updated when the Go compiler is, so we treat it as part of the compiler, rather than vendoring it like other dependencies, to avoid breaking updating to newer compilers than we internally work with. If you know what you're doing, feel free to skip this step, or omit `rm` of old `go get` source and packages.
+  * golang.org/x must be updated when the Go compiler is, so we treat it as part of the compiler, rather than vendoring it like other dependencies, to avoid breaking updating to newer compilers than we internally work with. If you know what you're doing, feel free to skip this step.
 3. Clone this repository into your GOPATH.
 ```bash
 mkdir -p $GOPATH/src/github.com/apache/trafficcontrol
diff --git a/grove/build/build_rpm.sh b/grove/build/build_rpm.sh
index a90de85..9e980f2 100755
--- a/grove/build/build_rpm.sh
+++ b/grove/build/build_rpm.sh
@@ -77,7 +77,7 @@ buildRpmGrove() {
 	# build
 	ldflags='-s -w'
 	tags='osusergo netgo'
-	go get -v -d . || { echo "Failed to go get dependencies: $?" >&2; return 1; }
+	go mod vendor -v || { echo "Failed to vendor go dependencies: $?" >&2; return 1; }
 	go build -v -ldflags "${ldflags} -X main.Version=$GROVE_VERSION" -tags "$tags" || { echo "Failed to build grove: $?" >&2; return 1; }
 
 	# tar
diff --git a/grove/grovetccfg/build/build_rpm.sh b/grove/grovetccfg/build/build_rpm.sh
index c16c7a7..759f257 100755
--- a/grove/grovetccfg/build/build_rpm.sh
+++ b/grove/grovetccfg/build/build_rpm.sh
@@ -78,7 +78,7 @@ buildRpmGrove() {
 	# build
 	ldflags='-s -w'
 	tags='osusergo netgo'
-	go get -v -d . || { echo "Failed to go get dependencies: $?" >&2; return 1; }
+	go mod vendor -v || { echo "Failed to vendor go dependencies: $?" >&2; return 1; }
 	go build -v -ldflags "${ldflags} -X main.Version=$GROVE_VERSION" -tags "$tags" || { echo "Failed to build $PACKAGE: $?" >&2; return 1; }
 
 	# tar
diff --git a/grove/integration_test/setup-and-run.sh b/grove/integration_test/setup-and-run.sh
index c9132ba..0d51bea 100644
--- a/grove/integration_test/setup-and-run.sh
+++ b/grove/integration_test/setup-and-run.sh
@@ -27,11 +27,7 @@ httpd
 cd /
 echo Setting up go enviroment...
 export GOPATH=~/go
-go get golang.org/x/text
-go get golang.org/x/sys/unix
-go get golang.org/x/net/http2
-go get golang.org/x/net/ipv4
-go get golang.org/x/net/ipv6
+go mod vendor -v
 
 mkdir -p $GOPATH/src/github.com/apache/
 cd $GOPATH/src/github.com/apache/
diff --git a/grove/vendor/code.cloudfoundry.org/bytefmt/LICENSE b/grove/vendor/code.cloudfoundry.org/bytefmt/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/grove/vendor/code.cloudfoundry.org/bytefmt/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/grove/vendor/code.cloudfoundry.org/bytefmt/bytes_test.go b/grove/vendor/code.cloudfoundry.org/bytefmt/bytes_test.go
deleted file mode 100644
index 1f2185f..0000000
--- a/grove/vendor/code.cloudfoundry.org/bytefmt/bytes_test.go
+++ /dev/null
@@ -1,271 +0,0 @@
-package bytefmt_test
-
-import (
-	. "code.cloudfoundry.org/bytefmt"
-	. "github.com/onsi/ginkgo"
-	. "github.com/onsi/gomega"
-)
-
-var _ = Describe("bytefmt", func() {
-
-	Context("ByteSize", func() {
-		It("Prints in the largest possible unit", func() {
-			Expect(ByteSize(10 * TERABYTE)).To(Equal("10T"))
-			Expect(ByteSize(uint64(10.5 * TERABYTE))).To(Equal("10.5T"))
-
-			Expect(ByteSize(10 * GIGABYTE)).To(Equal("10G"))
-			Expect(ByteSize(uint64(10.5 * GIGABYTE))).To(Equal("10.5G"))
-
-			Expect(ByteSize(100 * MEGABYTE)).To(Equal("100M"))
-			Expect(ByteSize(uint64(100.5 * MEGABYTE))).To(Equal("100.5M"))
-
-			Expect(ByteSize(100 * KILOBYTE)).To(Equal("100K"))
-			Expect(ByteSize(uint64(100.5 * KILOBYTE))).To(Equal("100.5K"))
-
-			Expect(ByteSize(1)).To(Equal("1B"))
-		})
-
-		It("prints '0' for zero bytes", func() {
-			Expect(ByteSize(0)).To(Equal("0"))
-		})
-	})
-
-	Context("ToMegabytes", func() {
-		It("parses byte amounts with short units (e.g. M, G)", func() {
-			var (
-				megabytes uint64
-				err       error
-			)
-
-			megabytes, err = ToMegabytes("5B")
-			Expect(megabytes).To(Equal(uint64(0)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("5K")
-			Expect(megabytes).To(Equal(uint64(0)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("5M")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("5m")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("2G")
-			Expect(megabytes).To(Equal(uint64(2 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("3T")
-			Expect(megabytes).To(Equal(uint64(3 * 1024 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("parses byte amounts with long units (e.g MB, GB)", func() {
-			var (
-				megabytes uint64
-				err       error
-			)
-
-			megabytes, err = ToMegabytes("5MB")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("5mb")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("2GB")
-			Expect(megabytes).To(Equal(uint64(2 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("3TB")
-			Expect(megabytes).To(Equal(uint64(3 * 1024 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("parses byte amounts with long binary units (e.g MiB, GiB)", func() {
-			var (
-				megabytes uint64
-				err       error
-			)
-
-			megabytes, err = ToMegabytes("5MiB")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("5mib")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("2GiB")
-			Expect(megabytes).To(Equal(uint64(2 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-
-			megabytes, err = ToMegabytes("3TiB")
-			Expect(megabytes).To(Equal(uint64(3 * 1024 * 1024)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("returns an error when the unit is missing", func() {
-			_, err := ToMegabytes("5")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-
-		It("returns an error when the unit is unrecognized", func() {
-			_, err := ToMegabytes("5MBB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-
-			_, err = ToMegabytes("5BB")
-			Expect(err).To(HaveOccurred())
-		})
-
-		It("allows whitespace before and after the value", func() {
-			megabytes, err := ToMegabytes("\t\n\r 5MB ")
-			Expect(megabytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("returns an error for negative values", func() {
-			_, err := ToMegabytes("-5MB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-
-		It("returns an error for zero values", func() {
-			_, err := ToMegabytes("0TB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-	})
-
-	Context("ToBytes", func() {
-		It("parses byte amounts with short units (e.g. M, G)", func() {
-			var (
-				bytes uint64
-				err   error
-			)
-
-			bytes, err = ToBytes("5B")
-			Expect(bytes).To(Equal(uint64(5)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("5K")
-			Expect(bytes).To(Equal(uint64(5 * KILOBYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("5M")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("5m")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("2G")
-			Expect(bytes).To(Equal(uint64(2 * GIGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("3T")
-			Expect(bytes).To(Equal(uint64(3 * TERABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("parses byte amounts that are float (e.g. 5.3KB)", func() {
-			var (
-				bytes uint64
-				err   error
-			)
-
-			bytes, err = ToBytes("13.5KB")
-			Expect(bytes).To(Equal(uint64(13824)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("4.5KB")
-			Expect(bytes).To(Equal(uint64(4608)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("parses byte amounts with long units (e.g MB, GB)", func() {
-			var (
-				bytes uint64
-				err   error
-			)
-
-			bytes, err = ToBytes("5MB")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("5mb")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("2GB")
-			Expect(bytes).To(Equal(uint64(2 * GIGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("3TB")
-			Expect(bytes).To(Equal(uint64(3 * TERABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("parses byte amounts with long binary units (e.g MiB, GiB)", func() {
-			var (
-				bytes uint64
-				err   error
-			)
-
-			bytes, err = ToBytes("5MiB")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("5mib")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("2GiB")
-			Expect(bytes).To(Equal(uint64(2 * GIGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-
-			bytes, err = ToBytes("3TiB")
-			Expect(bytes).To(Equal(uint64(3 * TERABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("returns an error when the unit is missing", func() {
-			_, err := ToBytes("5")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-
-		It("returns an error when the unit is unrecognized", func() {
-			_, err := ToBytes("5MBB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-
-			_, err = ToBytes("5BB")
-			Expect(err).To(HaveOccurred())
-		})
-
-		It("allows whitespace before and after the value", func() {
-			bytes, err := ToBytes("\t\n\r 5MB ")
-			Expect(bytes).To(Equal(uint64(5 * MEGABYTE)))
-			Expect(err).NotTo(HaveOccurred())
-		})
-
-		It("returns an error for negative values", func() {
-			_, err := ToBytes("-5MB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-
-		It("returns an error for zero values", func() {
-			_, err := ToBytes("0TB")
-			Expect(err).To(HaveOccurred())
-			Expect(err.Error()).To(ContainSubstring("unit of measurement"))
-		})
-	})
-})
diff --git a/grove/vendor/code.cloudfoundry.org/bytefmt/formatters_suite_test.go b/grove/vendor/code.cloudfoundry.org/bytefmt/formatters_suite_test.go
deleted file mode 100644
index 64af7ca..0000000
--- a/grove/vendor/code.cloudfoundry.org/bytefmt/formatters_suite_test.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package bytefmt_test
-
-import (
-	. "github.com/onsi/ginkgo"
-	. "github.com/onsi/gomega"
-
-	"testing"
-)
-
-func TestFormatters(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Bytefmt Suite")
-}
diff --git a/grove/vendor/github.com/dchest/siphash/siphash_test.go b/grove/vendor/github.com/dchest/siphash/siphash_test.go
deleted file mode 100644
index b7617b8..0000000
--- a/grove/vendor/github.com/dchest/siphash/siphash_test.go
+++ /dev/null
@@ -1,591 +0,0 @@
-// Written in 2012 by Dmitry Chestnykh.
-//
-// To the extent possible under law, the author have dedicated all copyright
-// and related and neighboring rights to this software to the public domain
-// worldwide. This software is distributed without any warranty.
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package siphash
-
-import (
-	"bytes"
-	"encoding/binary"
-	"testing"
-)
-
-var zeroKey = make([]byte, 16)
-
-var golden = []struct {
-	k []byte
-	m []byte
-	r uint64
-}{
-	{
-		[]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f},
-		[]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e},
-		0xa129ca6149be45e5,
-	},
-	{
-		zeroKey,
-		[]byte("Hello world"),
-		0xc9e8a3021f3822d9,
-	},
-	{
-		zeroKey,
-		[]byte{}, // zero-length message
-		0x1e924b9d737700d7,
-	},
-	{
-		zeroKey,
-		[]byte("12345678123"),
-		0xf95d77ccdb0649f,
-	},
-	{
-		zeroKey,
-		make([]byte, 8),
-		0xe849e8bb6ffe2567,
-	},
-	{
-		zeroKey,
-		make([]byte, 1535),
-		0xe74d1c0ab64b2afa,
-	},
-}
-
-// Test vectors from reference implementation.
-//
-// SipHash-2-4 output with
-// k = 00 01 02 ...
-// and
-// in = (empty string)
-// in = 00 (1 byte)
-// in = 00 01 (2 bytes)
-// in = 00 01 02 (3 bytes)
-// ...
-// in = 00 01 02 ... 3e (63 bytes)
-var goldenRef = [][]byte{
-	{0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72},
-	{0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74},
-	{0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d},
-	{0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85},
-	{0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf},
-	{0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18},
-	{0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb},
-	{0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab},
-	{0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93},
-	{0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e},
-	{0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a},
-	{0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4},
-	{0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75},
-	{0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14},
-	{0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7},
-	{0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1},
-	{0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f},
-	{0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69},
-	{0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b},
-	{0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb},
-	{0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe},
-	{0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0},
-	{0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93},
-	{0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8},
-	{0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8},
-	{0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc},
-	{0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17},
-	{0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f},
-	{0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde},
-	{0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6},
-	{0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad},
-	{0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32},
-	{0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71},
-	{0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7},
-	{0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12},
-	{0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15},
-	{0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31},
-	{0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02},
-	{0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca},
-	{0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a},
-	{0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e},
-	{0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad},
-	{0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18},
-	{0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4},
-	{0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9},
-	{0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9},
-	{0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb},
-	{0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0},
-	{0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6},
-	{0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7},
-	{0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee},
-	{0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1},
-	{0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a},
-	{0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81},
-	{0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f},
-	{0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24},
-	{0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7},
-	{0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea},
-	{0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60},
-	{0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66},
-	{0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c},
-	{0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f},
-	{0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5},
-	{0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95},
-}
-
-var goldenRef128 = [][]byte{
-	{0xa3, 0x81, 0x7f, 0x04, 0xba, 0x25, 0xa8, 0xe6, 0x6d, 0xf6, 0x72, 0x14, 0xc7, 0x55, 0x02, 0x93},
-	{0xda, 0x87, 0xc1, 0xd8, 0x6b, 0x99, 0xaf, 0x44, 0x34, 0x76, 0x59, 0x11, 0x9b, 0x22, 0xfc, 0x45},
-	{0x81, 0x77, 0x22, 0x8d, 0xa4, 0xa4, 0x5d, 0xc7, 0xfc, 0xa3, 0x8b, 0xde, 0xf6, 0x0a, 0xff, 0xe4},
-	{0x9c, 0x70, 0xb6, 0x0c, 0x52, 0x67, 0xa9, 0x4e, 0x5f, 0x33, 0xb6, 0xb0, 0x29, 0x85, 0xed, 0x51},
-	{0xf8, 0x81, 0x64, 0xc1, 0x2d, 0x9c, 0x8f, 0xaf, 0x7d, 0x0f, 0x6e, 0x7c, 0x7b, 0xcd, 0x55, 0x79},
-	{0x13, 0x68, 0x87, 0x59, 0x80, 0x77, 0x6f, 0x88, 0x54, 0x52, 0x7a, 0x07, 0x69, 0x0e, 0x96, 0x27},
-	{0x14, 0xee, 0xca, 0x33, 0x8b, 0x20, 0x86, 0x13, 0x48, 0x5e, 0xa0, 0x30, 0x8f, 0xd7, 0xa1, 0x5e},
-	{0xa1, 0xf1, 0xeb, 0xbe, 0xd8, 0xdb, 0xc1, 0x53, 0xc0, 0xb8, 0x4a, 0xa6, 0x1f, 0xf0, 0x82, 0x39},
-	{0x3b, 0x62, 0xa9, 0xba, 0x62, 0x58, 0xf5, 0x61, 0x0f, 0x83, 0xe2, 0x64, 0xf3, 0x14, 0x97, 0xb4},
-	{0x26, 0x44, 0x99, 0x06, 0x0a, 0xd9, 0xba, 0xab, 0xc4, 0x7f, 0x8b, 0x02, 0xbb, 0x6d, 0x71, 0xed},
-	{0x00, 0x11, 0x0d, 0xc3, 0x78, 0x14, 0x69, 0x56, 0xc9, 0x54, 0x47, 0xd3, 0xf3, 0xd0, 0xfb, 0xba},
-	{0x01, 0x51, 0xc5, 0x68, 0x38, 0x6b, 0x66, 0x77, 0xa2, 0xb4, 0xdc, 0x6f, 0x81, 0xe5, 0xdc, 0x18},
-	{0xd6, 0x26, 0xb2, 0x66, 0x90, 0x5e, 0xf3, 0x58, 0x82, 0x63, 0x4d, 0xf6, 0x85, 0x32, 0xc1, 0x25},
-	{0x98, 0x69, 0xe2, 0x47, 0xe9, 0xc0, 0x8b, 0x10, 0xd0, 0x29, 0x93, 0x4f, 0xc4, 0xb9, 0x52, 0xf7},
-	{0x31, 0xfc, 0xef, 0xac, 0x66, 0xd7, 0xde, 0x9c, 0x7e, 0xc7, 0x48, 0x5f, 0xe4, 0x49, 0x49, 0x02},
-	{0x54, 0x93, 0xe9, 0x99, 0x33, 0xb0, 0xa8, 0x11, 0x7e, 0x08, 0xec, 0x0f, 0x97, 0xcf, 0xc3, 0xd9},
-	{0x6e, 0xe2, 0xa4, 0xca, 0x67, 0xb0, 0x54, 0xbb, 0xfd, 0x33, 0x15, 0xbf, 0x85, 0x23, 0x05, 0x77},
-	{0x47, 0x3d, 0x06, 0xe8, 0x73, 0x8d, 0xb8, 0x98, 0x54, 0xc0, 0x66, 0xc4, 0x7a, 0xe4, 0x77, 0x40},
-	{0xa4, 0x26, 0xe5, 0xe4, 0x23, 0xbf, 0x48, 0x85, 0x29, 0x4d, 0xa4, 0x81, 0xfe, 0xae, 0xf7, 0x23},
-	{0x78, 0x01, 0x77, 0x31, 0xcf, 0x65, 0xfa, 0xb0, 0x74, 0xd5, 0x20, 0x89, 0x52, 0x51, 0x2e, 0xb1},
-	{0x9e, 0x25, 0xfc, 0x83, 0x3f, 0x22, 0x90, 0x73, 0x3e, 0x93, 0x44, 0xa5, 0xe8, 0x38, 0x39, 0xeb},
-	{0x56, 0x8e, 0x49, 0x5a, 0xbe, 0x52, 0x5a, 0x21, 0x8a, 0x22, 0x14, 0xcd, 0x3e, 0x07, 0x1d, 0x12},
-	{0x4a, 0x29, 0xb5, 0x45, 0x52, 0xd1, 0x6b, 0x9a, 0x46, 0x9c, 0x10, 0x52, 0x8e, 0xff, 0x0a, 0xae},
-	{0xc9, 0xd1, 0x84, 0xdd, 0xd5, 0xa9, 0xf5, 0xe0, 0xcf, 0x8c, 0xe2, 0x9a, 0x9a, 0xbf, 0x69, 0x1c},
-	{0x2d, 0xb4, 0x79, 0xae, 0x78, 0xbd, 0x50, 0xd8, 0x88, 0x2a, 0x8a, 0x17, 0x8a, 0x61, 0x32, 0xad},
-	{0x8e, 0xce, 0x5f, 0x04, 0x2d, 0x5e, 0x44, 0x7b, 0x50, 0x51, 0xb9, 0xea, 0xcb, 0x8d, 0x8f, 0x6f},
-	{0x9c, 0x0b, 0x53, 0xb4, 0xb3, 0xc3, 0x07, 0xe8, 0x7e, 0xae, 0xe0, 0x86, 0x78, 0x14, 0x1f, 0x66},
-	{0xab, 0xf2, 0x48, 0xaf, 0x69, 0xa6, 0xea, 0xe4, 0xbf, 0xd3, 0xeb, 0x2f, 0x12, 0x9e, 0xeb, 0x94},
-	{0x06, 0x64, 0xda, 0x16, 0x68, 0x57, 0x4b, 0x88, 0xb9, 0x35, 0xf3, 0x02, 0x73, 0x58, 0xae, 0xf4},
-	{0xaa, 0x4b, 0x9d, 0xc4, 0xbf, 0x33, 0x7d, 0xe9, 0x0c, 0xd4, 0xfd, 0x3c, 0x46, 0x7c, 0x6a, 0xb7},
-	{0xea, 0x5c, 0x7f, 0x47, 0x1f, 0xaf, 0x6b, 0xde, 0x2b, 0x1a, 0xd7, 0xd4, 0x68, 0x6d, 0x22, 0x87},
-	{0x29, 0x39, 0xb0, 0x18, 0x32, 0x23, 0xfa, 0xfc, 0x17, 0x23, 0xde, 0x4f, 0x52, 0xc4, 0x3d, 0x35},
-	{0x7c, 0x39, 0x56, 0xca, 0x5e, 0xea, 0xfc, 0x3e, 0x36, 0x3e, 0x9d, 0x55, 0x65, 0x46, 0xeb, 0x68},
-	{0x77, 0xc6, 0x07, 0x71, 0x46, 0xf0, 0x1c, 0x32, 0xb6, 0xb6, 0x9d, 0x5f, 0x4e, 0xa9, 0xff, 0xcf},
-	{0x37, 0xa6, 0x98, 0x6c, 0xb8, 0x84, 0x7e, 0xdf, 0x09, 0x25, 0xf0, 0xf1, 0x30, 0x9b, 0x54, 0xde},
-	{0xa7, 0x05, 0xf0, 0xe6, 0x9d, 0xa9, 0xa8, 0xf9, 0x07, 0x24, 0x1a, 0x2e, 0x92, 0x3c, 0x8c, 0xc8},
-	{0x3d, 0xc4, 0x7d, 0x1f, 0x29, 0xc4, 0x48, 0x46, 0x1e, 0x9e, 0x76, 0xed, 0x90, 0x4f, 0x67, 0x11},
-	{0x0d, 0x62, 0xbf, 0x01, 0xe6, 0xfc, 0x0e, 0x1a, 0x0d, 0x3c, 0x47, 0x51, 0xc5, 0xd3, 0x69, 0x2b},
-	{0x8c, 0x03, 0x46, 0x8b, 0xca, 0x7c, 0x66, 0x9e, 0xe4, 0xfd, 0x5e, 0x08, 0x4b, 0xbe, 0xe7, 0xb5},
-	{0x52, 0x8a, 0x5b, 0xb9, 0x3b, 0xaf, 0x2c, 0x9c, 0x44, 0x73, 0xcc, 0xe5, 0xd0, 0xd2, 0x2b, 0xd9},
-	{0xdf, 0x6a, 0x30, 0x1e, 0x95, 0xc9, 0x5d, 0xad, 0x97, 0xae, 0x0c, 0xc8, 0xc6, 0x91, 0x3b, 0xd8},
-	{0x80, 0x11, 0x89, 0x90, 0x2c, 0x85, 0x7f, 0x39, 0xe7, 0x35, 0x91, 0x28, 0x5e, 0x70, 0xb6, 0xdb},
-	{0xe6, 0x17, 0x34, 0x6a, 0xc9, 0xc2, 0x31, 0xbb, 0x36, 0x50, 0xae, 0x34, 0xcc, 0xca, 0x0c, 0x5b},
-	{0x27, 0xd9, 0x34, 0x37, 0xef, 0xb7, 0x21, 0xaa, 0x40, 0x18, 0x21, 0xdc, 0xec, 0x5a, 0xdf, 0x89},
-	{0x89, 0x23, 0x7d, 0x9d, 0xed, 0x9c, 0x5e, 0x78, 0xd8, 0xb1, 0xc9, 0xb1, 0x66, 0xcc, 0x73, 0x42},
-	{0x4a, 0x6d, 0x80, 0x91, 0xbf, 0x5e, 0x7d, 0x65, 0x11, 0x89, 0xfa, 0x94, 0xa2, 0x50, 0xb1, 0x4c},
-	{0x0e, 0x33, 0xf9, 0x60, 0x55, 0xe7, 0xae, 0x89, 0x3f, 0xfc, 0x0e, 0x3d, 0xcf, 0x49, 0x29, 0x02},
-	{0xe6, 0x1c, 0x43, 0x2b, 0x72, 0x0b, 0x19, 0xd1, 0x8e, 0xc8, 0xd8, 0x4b, 0xdc, 0x63, 0x15, 0x1b},
-	{0xf7, 0xe5, 0xae, 0xf5, 0x49, 0xf7, 0x82, 0xcf, 0x37, 0x90, 0x55, 0xa6, 0x08, 0x26, 0x9b, 0x16},
-	{0x43, 0x8d, 0x03, 0x0f, 0xd0, 0xb7, 0xa5, 0x4f, 0xa8, 0x37, 0xf2, 0xad, 0x20, 0x1a, 0x64, 0x03},
-	{0xa5, 0x90, 0xd3, 0xee, 0x4f, 0xbf, 0x04, 0xe3, 0x24, 0x7e, 0x0d, 0x27, 0xf2, 0x86, 0x42, 0x3f},
-	{0x5f, 0xe2, 0xc1, 0xa1, 0x72, 0xfe, 0x93, 0xc4, 0xb1, 0x5c, 0xd3, 0x7c, 0xae, 0xf9, 0xf5, 0x38},
-	{0x2c, 0x97, 0x32, 0x5c, 0xbd, 0x06, 0xb3, 0x6e, 0xb2, 0x13, 0x3d, 0xd0, 0x8b, 0x3a, 0x01, 0x7c},
-	{0x92, 0xc8, 0x14, 0x22, 0x7a, 0x6b, 0xca, 0x94, 0x9f, 0xf0, 0x65, 0x9f, 0x00, 0x2a, 0xd3, 0x9e},
-	{0xdc, 0xe8, 0x50, 0x11, 0x0b, 0xd8, 0x32, 0x8c, 0xfb, 0xd5, 0x08, 0x41, 0xd6, 0x91, 0x1d, 0x87},
-	{0x67, 0xf1, 0x49, 0x84, 0xc7, 0xda, 0x79, 0x12, 0x48, 0xe3, 0x2b, 0xb5, 0x92, 0x25, 0x83, 0xda},
-	{0x19, 0x38, 0xf2, 0xcf, 0x72, 0xd5, 0x4e, 0xe9, 0x7e, 0x94, 0x16, 0x6f, 0xa9, 0x1d, 0x2a, 0x36},
-	{0x74, 0x48, 0x1e, 0x96, 0x46, 0xed, 0x49, 0xfe, 0x0f, 0x62, 0x24, 0x30, 0x16, 0x04, 0x69, 0x8e},
-	{0x57, 0xfc, 0xa5, 0xde, 0x98, 0xa9, 0xd6, 0xd8, 0x00, 0x64, 0x38, 0xd0, 0x58, 0x3d, 0x8a, 0x1d},
-	{0x9f, 0xec, 0xde, 0x1c, 0xef, 0xdc, 0x1c, 0xbe, 0xd4, 0x76, 0x36, 0x74, 0xd9, 0x57, 0x53, 0x59},
-	{0xe3, 0x04, 0x0c, 0x00, 0xeb, 0x28, 0xf1, 0x53, 0x66, 0xca, 0x73, 0xcb, 0xd8, 0x72, 0xe7, 0x40},
-	{0x76, 0x97, 0x00, 0x9a, 0x6a, 0x83, 0x1d, 0xfe, 0xcc, 0xa9, 0x1c, 0x59, 0x93, 0x67, 0x0f, 0x7a},
-	{0x58, 0x53, 0x54, 0x23, 0x21, 0xf5, 0x67, 0xa0, 0x05, 0xd5, 0x47, 0xa4, 0xf0, 0x47, 0x59, 0xbd},
-	{0x51, 0x50, 0xd1, 0x77, 0x2f, 0x50, 0x83, 0x4a, 0x50, 0x3e, 0x06, 0x9a, 0x97, 0x3f, 0xbd, 0x7c},
-}
-
-func TestSum64(t *testing.T) {
-	for i, v := range golden {
-		h := New(v.k)
-		h.Write(v.m)
-		if sum := h.Sum64(); sum != v.r {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, v.r, sum)
-		}
-	}
-}
-
-func TestSum(t *testing.T) {
-	var r [8]byte
-	for i, v := range golden {
-		binary.LittleEndian.PutUint64(r[:], v.r)
-		h := New(v.k)
-		h.Write(v.m)
-		if sum := h.Sum(nil); !bytes.Equal(sum, r[:]) {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, r, sum)
-		}
-	}
-
-	var k [16]byte
-	var in [64]byte
-	for i := range k {
-		k[i] = byte(i)
-	}
-
-	for i := 0; i < 64; i++ {
-		in[i] = byte(i)
-		h := New(k[:])
-		h.Write(in[:i])
-		if sum := h.Sum(nil); !bytes.Equal(sum, goldenRef[i]) {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, goldenRef[i], sum)
-		}
-	}
-}
-
-func TestSumUnaligned(t *testing.T) {
-	const align = 8
-	var k [16]byte
-	var in [64 + align]byte
-	for i := range k {
-		k[i] = byte(i)
-	}
-
-	for a := 1; a < align; a++ {
-		for i := 0; i < 64; i++ {
-			in[a+i] = byte(i)
-			h := New(k[:])
-			h.Write(in[a : a+i])
-			if sum := h.Sum(nil); !bytes.Equal(sum, goldenRef[i]) {
-				t.Errorf(`%d: expected "%x", got "%x"`, i, goldenRef[i], sum)
-			}
-		}
-	}
-}
-
-func TestSum128(t *testing.T) {
-	var k [16]byte
-	var in [64]byte
-	for i := range k {
-		k[i] = byte(i)
-	}
-
-	for i := 0; i < 64; i++ {
-		in[i] = byte(i)
-		h := New128(k[:])
-		h.Write(in[:i])
-		if sum := h.Sum(nil); !bytes.Equal(sum, goldenRef128[i]) {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, goldenRef128[i], sum)
-		}
-	}
-}
-
-func TestHash(t *testing.T) {
-	var k0, k1 uint64
-	for i, v := range golden {
-		k0 = binary.LittleEndian.Uint64(v.k[0:8])
-		k1 = binary.LittleEndian.Uint64(v.k[8:16])
-		if sum := Hash(k0, k1, v.m); sum != v.r {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, v.r, sum)
-		}
-	}
-
-	var k [16]byte
-	var in [64]byte
-	for i := range k {
-		k[i] = byte(i)
-	}
-	k0 = binary.LittleEndian.Uint64(k[0:8])
-	k1 = binary.LittleEndian.Uint64(k[8:16])
-
-	for i := 0; i < 64; i++ {
-		in[i] = byte(i)
-		ref := binary.LittleEndian.Uint64(goldenRef[i])
-		if sum := Hash(k0, k1, in[:i]); sum != ref {
-			t.Errorf(`%d: expected "%x", got "%x"`, i, ref, sum)
-		}
-	}
-}
-
-func TestHashUnaligned(t *testing.T) {
-	const align = 8
-	var k0, k1 uint64
-	var k [16]byte
-	var in [64 + align]byte
-
-	for i := range k {
-		k[i] = byte(i)
-	}
-	k0 = binary.LittleEndian.Uint64(k[0:8])
-	k1 = binary.LittleEndian.Uint64(k[8:16])
-
-	for a := 1; a < align; a++ {
-		for i := 0; i < 64; i++ {
-			in[a+i] = byte(i)
-			ref := binary.LittleEndian.Uint64(goldenRef[i])
-			if sum := Hash(k0, k1, in[a:a+i]); sum != ref {
-				t.Errorf(`%d: expected "%x", got "%x"`, i, ref, sum)
-			}
-		}
-	}
-}
-
-func TestHash128(t *testing.T) {
-	var k0, k1 uint64
-
-	var k [16]byte
-	var in [64]byte
-	for i := range k {
-		k[i] = byte(i)
-	}
-	k0 = binary.LittleEndian.Uint64(k[0:8])
-	k1 = binary.LittleEndian.Uint64(k[8:16])
-
-	for i := 0; i < 64; i++ {
-		in[i] = byte(i)
-		ref0 := binary.LittleEndian.Uint64(goldenRef128[i][0:])
-		ref1 := binary.LittleEndian.Uint64(goldenRef128[i][8:])
-		if sum0, sum1 := Hash128(k0, k1, in[:i]); sum0 != ref0 || sum1 != ref1 {
-			t.Errorf(`%d: expected "%x, %x", got "%x, %x"`, i, ref0, ref1, sum0, sum1)
-		}
-	}
-}
-
-var (
-	key        = zeroKey
-	key0, key1 uint64
-	bench      = New(key)
-	bench128   = New128(key)
-	buf        = make([]byte, 8<<10)
-)
-
-func BenchmarkHash8(b *testing.B) {
-	b.SetBytes(8)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:8])
-	}
-}
-
-func BenchmarkHash16(b *testing.B) {
-	b.SetBytes(16)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:16])
-	}
-}
-
-func BenchmarkHash40(b *testing.B) {
-	b.SetBytes(40)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:40])
-	}
-}
-
-func BenchmarkHash64(b *testing.B) {
-	b.SetBytes(64)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:64])
-	}
-}
-
-func BenchmarkHash128(b *testing.B) {
-	b.SetBytes(128)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:128])
-	}
-}
-
-func BenchmarkHash1K(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[:1024])
-	}
-}
-
-func BenchmarkHash1Kunaligned(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf[1:1025])
-	}
-}
-
-func BenchmarkHash8K(b *testing.B) {
-	b.SetBytes(int64(len(buf)))
-	for i := 0; i < b.N; i++ {
-		Hash(key0, key1, buf)
-	}
-}
-
-func BenchmarkHash128_8(b *testing.B) {
-	b.SetBytes(8)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:8])
-	}
-}
-
-func BenchmarkHash128_16(b *testing.B) {
-	b.SetBytes(16)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:16])
-	}
-}
-
-func BenchmarkHash128_40(b *testing.B) {
-	b.SetBytes(40)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:40])
-	}
-}
-
-func BenchmarkHash128_64(b *testing.B) {
-	b.SetBytes(64)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:64])
-	}
-}
-
-func BenchmarkHash128_128(b *testing.B) {
-	b.SetBytes(128)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:128])
-	}
-}
-
-func BenchmarkHash128_1K(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf[:1024])
-	}
-}
-
-func BenchmarkHash128_8K(b *testing.B) {
-	b.SetBytes(int64(len(buf)))
-	for i := 0; i < b.N; i++ {
-		Hash128(key0, key1, buf)
-	}
-}
-
-func BenchmarkFull8(b *testing.B) {
-	b.SetBytes(8)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:8])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull16(b *testing.B) {
-	b.SetBytes(16)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:16])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull40(b *testing.B) {
-	b.SetBytes(24)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:16])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull64(b *testing.B) {
-	b.SetBytes(64)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:64])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull128(b *testing.B) {
-	b.SetBytes(128)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:64])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull1K(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[:1024])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull1Kunaligned(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf[1:1025])
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull8K(b *testing.B) {
-	b.SetBytes(int64(len(buf)))
-	for i := 0; i < b.N; i++ {
-		bench.Reset()
-		bench.Write(buf)
-		bench.Sum64()
-	}
-}
-
-func BenchmarkFull128_8(b *testing.B) {
-	b.SetBytes(8)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:8])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_16(b *testing.B) {
-	b.SetBytes(16)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:16])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_40(b *testing.B) {
-	b.SetBytes(24)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:16])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_64(b *testing.B) {
-	b.SetBytes(64)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:64])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_128(b *testing.B) {
-	b.SetBytes(128)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:64])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_1K(b *testing.B) {
-	b.SetBytes(1024)
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf[:1024])
-		bench128.Sum(nil)
-	}
-}
-
-func BenchmarkFull128_8K(b *testing.B) {
-	b.SetBytes(int64(len(buf)))
-	for i := 0; i < b.N; i++ {
-		bench128.Reset()
-		bench128.Write(buf)
-		bench128.Sum(nil)
-	}
-}
diff --git a/grove/vendor/go.etcd.io/bbolt/allocate_test.go b/grove/vendor/go.etcd.io/bbolt/allocate_test.go
deleted file mode 100644
index 98b06b4..0000000
--- a/grove/vendor/go.etcd.io/bbolt/allocate_test.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package bbolt
-
-import (
-	"testing"
-)
-
-func TestTx_allocatePageStats(t *testing.T) {
-	f := newTestFreelist()
-	ids := []pgid{2, 3}
-	f.readIDs(ids)
-
-	tx := &Tx{
-		db: &DB{
-			freelist: f,
-			pageSize: defaultPageSize,
-		},
-		meta:  &meta{},
-		pages: make(map[pgid]*page),
-	}
-
-	prePageCnt := tx.Stats().PageCount
-	allocateCnt := f.free_count()
-
-	if _, err := tx.allocate(allocateCnt); err != nil {
-		t.Fatal(err)
-	}
-
-	if tx.Stats().PageCount != prePageCnt+allocateCnt {
-		t.Errorf("Allocated %d but got %d page in stats", allocateCnt, tx.Stats().PageCount)
-	}
-}
diff --git a/grove/vendor/go.etcd.io/bbolt/bucket_test.go b/grove/vendor/go.etcd.io/bbolt/bucket_test.go
deleted file mode 100644
index e48204b..0000000
--- a/grove/vendor/go.etcd.io/bbolt/bucket_test.go
+++ /dev/null
@@ -1,1959 +0,0 @@
-package bbolt_test
-
-import (
-	"bytes"
-	"encoding/binary"
-	"errors"
-	"fmt"
-	"log"
-	"math/rand"
-	"os"
-	"strconv"
-	"strings"
-	"testing"
-	"testing/quick"
-
-	bolt "go.etcd.io/bbolt"
-)
-
-// Ensure that a bucket that gets a non-existent key returns nil.
-func TestBucket_Get_NonExistent(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if v := b.Get([]byte("foo")); v != nil {
-			t.Fatal("expected nil value")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can read a value that is not flushed yet.
-func TestBucket_Get_FromNode(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if v := b.Get([]byte("foo")); !bytes.Equal(v, []byte("bar")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket retrieved via Get() returns a nil.
-func TestBucket_Get_IncompatibleValue(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		_, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if _, err := tx.Bucket([]byte("widgets")).CreateBucket([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-
-		if tx.Bucket([]byte("widgets")).Get([]byte("foo")) != nil {
-			t.Fatal("expected nil value")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a slice returned from a bucket has a capacity equal to its length.
-// This also allows slices to be appended to since it will require a realloc by Go.
-//
-// https://github.com/boltdb/bolt/issues/544
-func TestBucket_Get_Capacity(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	// Write key to a bucket.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("bucket"))
-		if err != nil {
-			return err
-		}
-		return b.Put([]byte("key"), []byte("val"))
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	// Retrieve value and attempt to append to it.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		k, v := tx.Bucket([]byte("bucket")).Cursor().First()
-
-		// Verify capacity.
-		if len(k) != cap(k) {
-			t.Fatalf("unexpected key slice capacity: %d", cap(k))
-		} else if len(v) != cap(v) {
-			t.Fatalf("unexpected value slice capacity: %d", cap(v))
-		}
-
-		// Ensure slice can be appended to without a segfault.
-		k = append(k, []byte("123")...)
-		v = append(v, []byte("123")...)
-		_, _ = k, v // to pass ineffassign
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can write a key/value.
-func TestBucket_Put(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-
-		v := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
-		if !bytes.Equal([]byte("bar"), v) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can rewrite a key in the same transaction.
-func TestBucket_Put_Repeat(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("baz")); err != nil {
-			t.Fatal(err)
-		}
-
-		value := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
-		if !bytes.Equal([]byte("baz"), value) {
-			t.Fatalf("unexpected value: %v", value)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can write a bunch of large values.
-func TestBucket_Put_Large(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	count, factor := 100, 200
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		for i := 1; i < count; i++ {
-			if err := b.Put([]byte(strings.Repeat("0", i*factor)), []byte(strings.Repeat("X", (count-i)*factor))); err != nil {
-				t.Fatal(err)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		for i := 1; i < count; i++ {
-			value := b.Get([]byte(strings.Repeat("0", i*factor)))
-			if !bytes.Equal(value, []byte(strings.Repeat("X", (count-i)*factor))) {
-				t.Fatalf("unexpected value: %v", value)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a database can perform multiple large appends safely.
-func TestDB_Put_VeryLarge(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	n, batchN := 400000, 200000
-	ksize, vsize := 8, 500
-
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	for i := 0; i < n; i += batchN {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, err := tx.CreateBucketIfNotExists([]byte("widgets"))
-			if err != nil {
-				t.Fatal(err)
-			}
-			for j := 0; j < batchN; j++ {
-				k, v := make([]byte, ksize), make([]byte, vsize)
-				binary.BigEndian.PutUint32(k, uint32(i+j))
-				if err := b.Put(k, v); err != nil {
-					t.Fatal(err)
-				}
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-	}
-}
-
-// Ensure that a setting a value on a key with a bucket value returns an error.
-func TestBucket_Put_IncompatibleValue(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b0, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if _, err := tx.Bucket([]byte("widgets")).CreateBucket([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b0.Put([]byte("foo"), []byte("bar")); err != bolt.ErrIncompatibleValue {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a setting a value while the transaction is closed returns an error.
-func TestBucket_Put_Closed(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	tx, err := db.Begin(true)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	b, err := tx.CreateBucket([]byte("widgets"))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if err := tx.Rollback(); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := b.Put([]byte("foo"), []byte("bar")); err != bolt.ErrTxClosed {
-		t.Fatalf("unexpected error: %s", err)
-	}
-}
-
-// Ensure that setting a value on a read-only bucket returns an error.
-func TestBucket_Put_ReadOnly(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		if err := b.Put([]byte("foo"), []byte("bar")); err != bolt.ErrTxNotWritable {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can delete an existing key.
-func TestBucket_Delete(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Delete([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-		if v := b.Get([]byte("foo")); v != nil {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a large set of keys will work correctly.
-func TestBucket_Delete_Large(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		for i := 0; i < 100; i++ {
-			if err := b.Put([]byte(strconv.Itoa(i)), []byte(strings.Repeat("*", 1024))); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		for i := 0; i < 100; i++ {
-			if err := b.Delete([]byte(strconv.Itoa(i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		for i := 0; i < 100; i++ {
-			if v := b.Get([]byte(strconv.Itoa(i))); v != nil {
-				t.Fatalf("unexpected value: %v, i=%d", v, i)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Deleting a very large list of keys will cause the freelist to use overflow.
-func TestBucket_Delete_FreelistOverflow(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	k := make([]byte, 16)
-	for i := uint64(0); i < 10000; i++ {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, err := tx.CreateBucketIfNotExists([]byte("0"))
-			if err != nil {
-				t.Fatalf("bucket error: %s", err)
-			}
-
-			for j := uint64(0); j < 1000; j++ {
-				binary.BigEndian.PutUint64(k[:8], i)
-				binary.BigEndian.PutUint64(k[8:], j)
-				if err := b.Put(k, nil); err != nil {
-					t.Fatalf("put error: %s", err)
-				}
-			}
-
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-	}
-
-	// Delete all of them in one large transaction
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("0"))
-		c := b.Cursor()
-		for k, _ := c.First(); k != nil; k, _ = c.Next() {
-			if err := c.Delete(); err != nil {
-				t.Fatal(err)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	// Check more than an overflow's worth of pages are freed.
-	stats := db.Stats()
-	freePages := stats.FreePageN + stats.PendingPageN
-	if freePages <= 0xFFFF {
-		t.Fatalf("expected more than 0xFFFF free pages, got %v", freePages)
-	}
-
-	// Free page count should be preserved on reopen.
-	if err := db.DB.Close(); err != nil {
-		t.Fatal(err)
-	}
-	db.MustReopen()
-	if reopenFreePages := db.Stats().FreePageN; freePages != reopenFreePages {
-		t.Fatalf("expected %d free pages, got %+v", freePages, db.Stats())
-	}
-}
-
-// Ensure that deleting of non-existing key is a no-op.
-func TestBucket_Delete_NonExisting(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if _, err = b.CreateBucket([]byte("nested")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		if err := b.Delete([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-		if b.Bucket([]byte("nested")) == nil {
-			t.Fatal("nested bucket has been deleted")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that accessing and updating nested buckets is ok across transactions.
-func TestBucket_Nested(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Create a widgets bucket.
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		// Create a widgets/foo bucket.
-		_, err = b.CreateBucket([]byte("foo"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		// Create a widgets/bar key.
-		if err := b.Put([]byte("bar"), []byte("0000")); err != nil {
-			t.Fatal(err)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.MustCheck()
-
-	// Update widgets/bar.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("widgets"))
-		if err := b.Put([]byte("bar"), []byte("xxxx")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.MustCheck()
-
-	// Cause a split.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		var b = tx.Bucket([]byte("widgets"))
-		for i := 0; i < 10000; i++ {
-			if err := b.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.MustCheck()
-
-	// Insert into widgets/foo/baz.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		var b = tx.Bucket([]byte("widgets"))
-		if err := b.Bucket([]byte("foo")).Put([]byte("baz"), []byte("yyyy")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.MustCheck()
-
-	// Verify.
-	if err := db.View(func(tx *bolt.Tx) error {
-		var b = tx.Bucket([]byte("widgets"))
-		if v := b.Bucket([]byte("foo")).Get([]byte("baz")); !bytes.Equal(v, []byte("yyyy")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		if v := b.Get([]byte("bar")); !bytes.Equal(v, []byte("xxxx")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		for i := 0; i < 10000; i++ {
-			if v := b.Get([]byte(strconv.Itoa(i))); !bytes.Equal(v, []byte(strconv.Itoa(i))) {
-				t.Fatalf("unexpected value: %v", v)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a bucket using Delete() returns an error.
-func TestBucket_Delete_Bucket(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if _, err := b.CreateBucket([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Delete([]byte("foo")); err != bolt.ErrIncompatibleValue {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a key on a read-only bucket returns an error.
-func TestBucket_Delete_ReadOnly(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		if err := tx.Bucket([]byte("widgets")).Delete([]byte("foo")); err != bolt.ErrTxNotWritable {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a deleting value while the transaction is closed returns an error.
-func TestBucket_Delete_Closed(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	tx, err := db.Begin(true)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	b, err := tx.CreateBucket([]byte("widgets"))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if err := tx.Rollback(); err != nil {
-		t.Fatal(err)
-	}
-	if err := b.Delete([]byte("foo")); err != bolt.ErrTxClosed {
-		t.Fatalf("unexpected error: %s", err)
-	}
-}
-
-// Ensure that deleting a bucket causes nested buckets to be deleted.
-func TestBucket_DeleteBucket_Nested(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		foo, err := widgets.CreateBucket([]byte("foo"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		bar, err := foo.CreateBucket([]byte("bar"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := bar.Put([]byte("baz"), []byte("bat")); err != nil {
-			t.Fatal(err)
-		}
-		if err := tx.Bucket([]byte("widgets")).DeleteBucket([]byte("foo")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a bucket causes nested buckets to be deleted after they have been committed.
-func TestBucket_DeleteBucket_Nested2(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		foo, err := widgets.CreateBucket([]byte("foo"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		bar, err := foo.CreateBucket([]byte("bar"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if err := bar.Put([]byte("baz"), []byte("bat")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets := tx.Bucket([]byte("widgets"))
-		if widgets == nil {
-			t.Fatal("expected widgets bucket")
-		}
-
-		foo := widgets.Bucket([]byte("foo"))
-		if foo == nil {
-			t.Fatal("expected foo bucket")
-		}
-
-		bar := foo.Bucket([]byte("bar"))
-		if bar == nil {
-			t.Fatal("expected bar bucket")
-		}
-
-		if v := bar.Get([]byte("baz")); !bytes.Equal(v, []byte("bat")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-		if err := tx.DeleteBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		if tx.Bucket([]byte("widgets")) != nil {
-			t.Fatal("expected bucket to be deleted")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a child bucket with multiple pages causes all pages to get collected.
-// NOTE: Consistency check in bolt_test.DB.Close() will panic if pages not freed properly.
-func TestBucket_DeleteBucket_Large(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		foo, err := widgets.CreateBucket([]byte("foo"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		for i := 0; i < 1000; i++ {
-			if err := foo.Put([]byte(fmt.Sprintf("%d", i)), []byte(fmt.Sprintf("%0100d", i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if err := tx.DeleteBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a simple value retrieved via Bucket() returns a nil.
-func TestBucket_Bucket_IncompatibleValue(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if b := tx.Bucket([]byte("widgets")).Bucket([]byte("foo")); b != nil {
-			t.Fatal("expected nil bucket")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that creating a bucket on an existing non-bucket key returns an error.
-func TestBucket_CreateBucket_IncompatibleValue(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if _, err := widgets.CreateBucket([]byte("foo")); err != bolt.ErrIncompatibleValue {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that deleting a bucket on an existing non-bucket key returns an error.
-func TestBucket_DeleteBucket_IncompatibleValue(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := widgets.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-		if err := tx.Bucket([]byte("widgets")).DeleteBucket([]byte("foo")); err != bolt.ErrIncompatibleValue {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure bucket can set and update its sequence number.
-func TestBucket_Sequence(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		bkt, err := tx.CreateBucket([]byte("0"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		// Retrieve sequence.
-		if v := bkt.Sequence(); v != 0 {
-			t.Fatalf("unexpected sequence: %d", v)
-		}
-
-		// Update sequence.
-		if err := bkt.SetSequence(1000); err != nil {
-			t.Fatal(err)
-		}
-
-		// Read sequence again.
-		if v := bkt.Sequence(); v != 1000 {
-			t.Fatalf("unexpected sequence: %d", v)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	// Verify sequence in separate transaction.
-	if err := db.View(func(tx *bolt.Tx) error {
-		if v := tx.Bucket([]byte("0")).Sequence(); v != 1000 {
-			t.Fatalf("unexpected sequence: %d", v)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can return an autoincrementing sequence.
-func TestBucket_NextSequence(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		widgets, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		woojits, err := tx.CreateBucket([]byte("woojits"))
-		if err != nil {
-			t.Fatal(err)
-		}
-
-		// Make sure sequence increments.
-		if seq, err := widgets.NextSequence(); err != nil {
-			t.Fatal(err)
-		} else if seq != 1 {
-			t.Fatalf("unexpecte sequence: %d", seq)
-		}
-
-		if seq, err := widgets.NextSequence(); err != nil {
-			t.Fatal(err)
-		} else if seq != 2 {
-			t.Fatalf("unexpected sequence: %d", seq)
-		}
-
-		// Buckets should be separate.
-		if seq, err := woojits.NextSequence(); err != nil {
-			t.Fatal(err)
-		} else if seq != 1 {
-			t.Fatalf("unexpected sequence: %d", 1)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket will persist an autoincrementing sequence even if its
-// the only thing updated on the bucket.
-// https://github.com/boltdb/bolt/issues/296
-func TestBucket_NextSequence_Persist(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if _, err := tx.Bucket([]byte("widgets")).NextSequence(); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		seq, err := tx.Bucket([]byte("widgets")).NextSequence()
-		if err != nil {
-			t.Fatalf("unexpected error: %s", err)
-		} else if seq != 2 {
-			t.Fatalf("unexpected sequence: %d", seq)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that retrieving the next sequence on a read-only bucket returns an error.
-func TestBucket_NextSequence_ReadOnly(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		_, err := tx.Bucket([]byte("widgets")).NextSequence()
-		if err != bolt.ErrTxNotWritable {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that retrieving the next sequence for a bucket on a closed database return an error.
-func TestBucket_NextSequence_Closed(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	tx, err := db.Begin(true)
-	if err != nil {
-		t.Fatal(err)
-	}
-	b, err := tx.CreateBucket([]byte("widgets"))
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := tx.Rollback(); err != nil {
-		t.Fatal(err)
-	}
-	if _, err := b.NextSequence(); err != bolt.ErrTxClosed {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a user can loop over all key/value pairs in a bucket.
-func TestBucket_ForEach(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("0000")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("baz"), []byte("0001")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("bar"), []byte("0002")); err != nil {
-			t.Fatal(err)
-		}
-
-		var index int
-		if err := b.ForEach(func(k, v []byte) error {
-			switch index {
-			case 0:
-				if !bytes.Equal(k, []byte("bar")) {
-					t.Fatalf("unexpected key: %v", k)
-				} else if !bytes.Equal(v, []byte("0002")) {
-					t.Fatalf("unexpected value: %v", v)
-				}
-			case 1:
-				if !bytes.Equal(k, []byte("baz")) {
-					t.Fatalf("unexpected key: %v", k)
-				} else if !bytes.Equal(v, []byte("0001")) {
-					t.Fatalf("unexpected value: %v", v)
-				}
-			case 2:
-				if !bytes.Equal(k, []byte("foo")) {
-					t.Fatalf("unexpected key: %v", k)
-				} else if !bytes.Equal(v, []byte("0000")) {
-					t.Fatalf("unexpected value: %v", v)
-				}
-			}
-			index++
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		if index != 3 {
-			t.Fatalf("unexpected index: %d", index)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a database can stop iteration early.
-func TestBucket_ForEach_ShortCircuit(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("bar"), []byte("0000")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("baz"), []byte("0000")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("0000")); err != nil {
-			t.Fatal(err)
-		}
-
-		var index int
-		if err := tx.Bucket([]byte("widgets")).ForEach(func(k, v []byte) error {
-			index++
-			if bytes.Equal(k, []byte("baz")) {
-				return errors.New("marker")
-			}
-			return nil
-		}); err == nil || err.Error() != "marker" {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		if index != 2 {
-			t.Fatalf("unexpected index: %d", index)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that looping over a bucket on a closed database returns an error.
-func TestBucket_ForEach_Closed(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	tx, err := db.Begin(true)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	b, err := tx.CreateBucket([]byte("widgets"))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if err := tx.Rollback(); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := b.ForEach(func(k, v []byte) error { return nil }); err != bolt.ErrTxClosed {
-		t.Fatalf("unexpected error: %s", err)
-	}
-}
-
-// Ensure that an error is returned when inserting with an empty key.
-func TestBucket_Put_EmptyKey(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte(""), []byte("bar")); err != bolt.ErrKeyRequired {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		if err := b.Put(nil, []byte("bar")); err != bolt.ErrKeyRequired {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that an error is returned when inserting with a key that's too large.
-func TestBucket_Put_KeyTooLarge(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put(make([]byte, 32769), []byte("bar")); err != bolt.ErrKeyTooLarge {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that an error is returned when inserting a value that's too large.
-func TestBucket_Put_ValueTooLarge(t *testing.T) {
-	// Skip this test on DroneCI because the machine is resource constrained.
-	if os.Getenv("DRONE") == "true" {
-		t.Skip("not enough RAM for test")
-	}
-
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), make([]byte, bolt.MaxValueSize+1)); err != bolt.ErrValueTooLarge {
-			t.Fatalf("unexpected error: %s", err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a bucket can calculate stats.
-func TestBucket_Stats(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	// Add bucket with fewer keys but one big value.
-	bigKey := []byte("really-big-value")
-	for i := 0; i < 500; i++ {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, err := tx.CreateBucketIfNotExists([]byte("woojits"))
-			if err != nil {
-				t.Fatal(err)
-			}
-
-			if err := b.Put([]byte(fmt.Sprintf("%03d", i)), []byte(strconv.Itoa(i))); err != nil {
-				t.Fatal(err)
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-	}
-	if err := db.Update(func(tx *bolt.Tx) error {
-		if err := tx.Bucket([]byte("woojits")).Put(bigKey, []byte(strings.Repeat("*", 10000))); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		stats := tx.Bucket([]byte("woojits")).Stats()
-		if stats.BranchPageN != 1 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.LeafPageN != 7 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 2 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.KeyN != 501 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		} else if stats.Depth != 2 {
-			t.Fatalf("unexpected Depth: %d", stats.Depth)
-		}
-
-		branchInuse := 16     // branch page header
-		branchInuse += 7 * 16 // branch elements
-		branchInuse += 7 * 3  // branch keys (6 3-byte keys)
-		if stats.BranchInuse != branchInuse {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		}
-
-		leafInuse := 7 * 16                      // leaf page header
-		leafInuse += 501 * 16                    // leaf elements
-		leafInuse += 500*3 + len(bigKey)         // leaf keys
-		leafInuse += 1*10 + 2*90 + 3*400 + 10000 // leaf values
-		if stats.LeafInuse != leafInuse {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		}
-
-		// Only check allocations for 4KB pages.
-		if db.Info().PageSize == 4096 {
-			if stats.BranchAlloc != 4096 {
-				t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-			} else if stats.LeafAlloc != 36864 {
-				t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-			}
-		}
-
-		if stats.BucketN != 1 {
-			t.Fatalf("unexpected BucketN: %d", stats.BucketN)
-		} else if stats.InlineBucketN != 0 {
-			t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN)
-		} else if stats.InlineBucketInuse != 0 {
-			t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a bucket with random insertion utilizes fill percentage correctly.
-func TestBucket_Stats_RandomFill(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	} else if os.Getpagesize() != 4096 {
-		t.Skip("invalid page size for test")
-	}
-
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	// Add a set of values in random order. It will be the same random
-	// order so we can maintain consistency between test runs.
-	var count int
-	rand := rand.New(rand.NewSource(42))
-	for _, i := range rand.Perm(1000) {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, err := tx.CreateBucketIfNotExists([]byte("woojits"))
-			if err != nil {
-				t.Fatal(err)
-			}
-			b.FillPercent = 0.9
-			for _, j := range rand.Perm(100) {
-				index := (j * 10000) + i
-				if err := b.Put([]byte(fmt.Sprintf("%d000000000000000", index)), []byte("0000000000")); err != nil {
-					t.Fatal(err)
-				}
-				count++
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		stats := tx.Bucket([]byte("woojits")).Stats()
-		if stats.KeyN != 100000 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		}
-
-		if stats.BranchPageN != 98 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.BranchInuse != 130984 {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		} else if stats.BranchAlloc != 401408 {
-			t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-		}
-
-		if stats.LeafPageN != 3412 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 0 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.LeafInuse != 4742482 {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		} else if stats.LeafAlloc != 13975552 {
-			t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a bucket can calculate stats.
-func TestBucket_Stats_Small(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Add a bucket that fits on a single root leaf.
-		b, err := tx.CreateBucket([]byte("whozawhats"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			t.Fatal(err)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("whozawhats"))
-		stats := b.Stats()
-		if stats.BranchPageN != 0 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.LeafPageN != 0 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 0 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.KeyN != 1 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		} else if stats.Depth != 1 {
-			t.Fatalf("unexpected Depth: %d", stats.Depth)
-		} else if stats.BranchInuse != 0 {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		} else if stats.LeafInuse != 0 {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		}
-
-		if db.Info().PageSize == 4096 {
-			if stats.BranchAlloc != 0 {
-				t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-			} else if stats.LeafAlloc != 0 {
-				t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-			}
-		}
-
-		if stats.BucketN != 1 {
-			t.Fatalf("unexpected BucketN: %d", stats.BucketN)
-		} else if stats.InlineBucketN != 1 {
-			t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN)
-		} else if stats.InlineBucketInuse != 16+16+6 {
-			t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-func TestBucket_Stats_EmptyBucket(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Add a bucket that fits on a single root leaf.
-		if _, err := tx.CreateBucket([]byte("whozawhats")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("whozawhats"))
-		stats := b.Stats()
-		if stats.BranchPageN != 0 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.LeafPageN != 0 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 0 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.KeyN != 0 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		} else if stats.Depth != 1 {
-			t.Fatalf("unexpected Depth: %d", stats.Depth)
-		} else if stats.BranchInuse != 0 {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		} else if stats.LeafInuse != 0 {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		}
-
-		if db.Info().PageSize == 4096 {
-			if stats.BranchAlloc != 0 {
-				t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-			} else if stats.LeafAlloc != 0 {
-				t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-			}
-		}
-
-		if stats.BucketN != 1 {
-			t.Fatalf("unexpected BucketN: %d", stats.BucketN)
-		} else if stats.InlineBucketN != 1 {
-			t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN)
-		} else if stats.InlineBucketInuse != 16 {
-			t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a bucket can calculate stats.
-func TestBucket_Stats_Nested(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("foo"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		for i := 0; i < 100; i++ {
-			if err := b.Put([]byte(fmt.Sprintf("%02d", i)), []byte(fmt.Sprintf("%02d", i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		bar, err := b.CreateBucket([]byte("bar"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		for i := 0; i < 10; i++ {
-			if err := bar.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		baz, err := bar.CreateBucket([]byte("baz"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		for i := 0; i < 10; i++ {
-			if err := baz.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte("foo"))
-		stats := b.Stats()
-		if stats.BranchPageN != 0 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.LeafPageN != 2 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 0 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.KeyN != 122 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		} else if stats.Depth != 3 {
-			t.Fatalf("unexpected Depth: %d", stats.Depth)
-		} else if stats.BranchInuse != 0 {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		}
-
-		foo := 16            // foo (pghdr)
-		foo += 101 * 16      // foo leaf elements
-		foo += 100*2 + 100*2 // foo leaf key/values
-		foo += 3 + 16        // foo -> bar key/value
-
-		bar := 16      // bar (pghdr)
-		bar += 11 * 16 // bar leaf elements
-		bar += 10 + 10 // bar leaf key/values
-		bar += 3 + 16  // bar -> baz key/value
-
-		baz := 16      // baz (inline) (pghdr)
-		baz += 10 * 16 // baz leaf elements
-		baz += 10 + 10 // baz leaf key/values
-
-		if stats.LeafInuse != foo+bar+baz {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		}
-
-		if db.Info().PageSize == 4096 {
-			if stats.BranchAlloc != 0 {
-				t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-			} else if stats.LeafAlloc != 8192 {
-				t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-			}
-		}
-
-		if stats.BucketN != 3 {
-			t.Fatalf("unexpected BucketN: %d", stats.BucketN)
-		} else if stats.InlineBucketN != 1 {
-			t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN)
-		} else if stats.InlineBucketInuse != baz {
-			t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure a large bucket can calculate stats.
-func TestBucket_Stats_Large(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	var index int
-	for i := 0; i < 100; i++ {
-		// Add bucket with lots of keys.
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, err := tx.CreateBucketIfNotExists([]byte("widgets"))
-			if err != nil {
-				t.Fatal(err)
-			}
-			for i := 0; i < 1000; i++ {
-				if err := b.Put([]byte(strconv.Itoa(index)), []byte(strconv.Itoa(index))); err != nil {
-					t.Fatal(err)
-				}
-				index++
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-	}
-
-	db.MustCheck()
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		stats := tx.Bucket([]byte("widgets")).Stats()
-		if stats.BranchPageN != 13 {
-			t.Fatalf("unexpected BranchPageN: %d", stats.BranchPageN)
-		} else if stats.BranchOverflowN != 0 {
-			t.Fatalf("unexpected BranchOverflowN: %d", stats.BranchOverflowN)
-		} else if stats.LeafPageN != 1196 {
-			t.Fatalf("unexpected LeafPageN: %d", stats.LeafPageN)
-		} else if stats.LeafOverflowN != 0 {
-			t.Fatalf("unexpected LeafOverflowN: %d", stats.LeafOverflowN)
-		} else if stats.KeyN != 100000 {
-			t.Fatalf("unexpected KeyN: %d", stats.KeyN)
-		} else if stats.Depth != 3 {
-			t.Fatalf("unexpected Depth: %d", stats.Depth)
-		} else if stats.BranchInuse != 25257 {
-			t.Fatalf("unexpected BranchInuse: %d", stats.BranchInuse)
-		} else if stats.LeafInuse != 2596916 {
-			t.Fatalf("unexpected LeafInuse: %d", stats.LeafInuse)
-		}
-
-		if db.Info().PageSize == 4096 {
-			if stats.BranchAlloc != 53248 {
-				t.Fatalf("unexpected BranchAlloc: %d", stats.BranchAlloc)
-			} else if stats.LeafAlloc != 4898816 {
-				t.Fatalf("unexpected LeafAlloc: %d", stats.LeafAlloc)
-			}
-		}
-
-		if stats.BucketN != 1 {
-			t.Fatalf("unexpected BucketN: %d", stats.BucketN)
-		} else if stats.InlineBucketN != 0 {
-			t.Fatalf("unexpected InlineBucketN: %d", stats.InlineBucketN)
-		} else if stats.InlineBucketInuse != 0 {
-			t.Fatalf("unexpected InlineBucketInuse: %d", stats.InlineBucketInuse)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a bucket can write random keys and values across multiple transactions.
-func TestBucket_Put_Single(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	index := 0
-	if err := quick.Check(func(items testdata) bool {
-		db := MustOpenDB()
-		defer db.MustClose()
-
-		m := make(map[string][]byte)
-
-		if err := db.Update(func(tx *bolt.Tx) error {
-			if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-				t.Fatal(err)
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		for _, item := range items {
-			if err := db.Update(func(tx *bolt.Tx) error {
-				if err := tx.Bucket([]byte("widgets")).Put(item.Key, item.Value); err != nil {
-					panic("put error: " + err.Error())
-				}
-				m[string(item.Key)] = item.Value
-				return nil
-			}); err != nil {
-				t.Fatal(err)
-			}
-
-			// Verify all key/values so far.
-			if err := db.View(func(tx *bolt.Tx) error {
-				i := 0
-				for k, v := range m {
-					value := tx.Bucket([]byte("widgets")).Get([]byte(k))
-					if !bytes.Equal(value, v) {
-						t.Logf("value mismatch [run %d] (%d of %d):\nkey: %x\ngot: %x\nexp: %x", index, i, len(m), []byte(k), value, v)
-						db.CopyTempFile()
-						t.FailNow()
-					}
-					i++
-				}
-				return nil
-			}); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		index++
-		return true
-	}, qconfig()); err != nil {
-		t.Error(err)
-	}
-}
-
-// Ensure that a transaction can insert multiple key/value pairs at once.
-func TestBucket_Put_Multiple(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	if err := quick.Check(func(items testdata) bool {
-		db := MustOpenDB()
-		defer db.MustClose()
-
-		// Bulk insert all values.
-		if err := db.Update(func(tx *bolt.Tx) error {
-			if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-				t.Fatal(err)
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b := tx.Bucket([]byte("widgets"))
-			for _, item := range items {
-				if err := b.Put(item.Key, item.Value); err != nil {
-					t.Fatal(err)
-				}
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		// Verify all items exist.
-		if err := db.View(func(tx *bolt.Tx) error {
-			b := tx.Bucket([]byte("widgets"))
-			for _, item := range items {
-				value := b.Get(item.Key)
-				if !bytes.Equal(item.Value, value) {
-					db.CopyTempFile()
-					t.Fatalf("exp=%x; got=%x", item.Value, value)
-				}
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		return true
-	}, qconfig()); err != nil {
-		t.Error(err)
-	}
-}
-
-// Ensure that a transaction can delete all key/value pairs and return to a single leaf page.
-func TestBucket_Delete_Quick(t *testing.T) {
-	if testing.Short() {
-		t.Skip("skipping test in short mode.")
-	}
-
-	if err := quick.Check(func(items testdata) bool {
-		db := MustOpenDB()
-		defer db.MustClose()
-
-		// Bulk insert all values.
-		if err := db.Update(func(tx *bolt.Tx) error {
-			if _, err := tx.CreateBucket([]byte("widgets")); err != nil {
-				t.Fatal(err)
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b := tx.Bucket([]byte("widgets"))
-			for _, item := range items {
-				if err := b.Put(item.Key, item.Value); err != nil {
-					t.Fatal(err)
-				}
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		// Remove items one at a time and check consistency.
-		for _, item := range items {
-			if err := db.Update(func(tx *bolt.Tx) error {
-				return tx.Bucket([]byte("widgets")).Delete(item.Key)
-			}); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		// Anything before our deletion index should be nil.
-		if err := db.View(func(tx *bolt.Tx) error {
-			if err := tx.Bucket([]byte("widgets")).ForEach(func(k, v []byte) error {
-				t.Fatalf("bucket should be empty; found: %06x", trunc(k, 3))
-				return nil
-			}); err != nil {
-				t.Fatal(err)
-			}
-			return nil
-		}); err != nil {
-			t.Fatal(err)
-		}
-
-		return true
-	}, qconfig()); err != nil {
-		t.Error(err)
-	}
-}
-
-func ExampleBucket_Put() {
-	// Open the database.
-	db, err := bolt.Open(tempfile(), 0666, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer os.Remove(db.Path())
-
-	// Start a write transaction.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Create a bucket.
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			return err
-		}
-
-		// Set the value "bar" for the key "foo".
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			return err
-		}
-		return nil
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Read value back in a different read-only transaction.
-	if err := db.View(func(tx *bolt.Tx) error {
-		value := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
-		fmt.Printf("The value of 'foo' is: %s\n", value)
-		return nil
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Close database to release file lock.
-	if err := db.Close(); err != nil {
-		log.Fatal(err)
-	}
-
-	// Output:
-	// The value of 'foo' is: bar
-}
-
-func ExampleBucket_Delete() {
-	// Open the database.
-	db, err := bolt.Open(tempfile(), 0666, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer os.Remove(db.Path())
-
-	// Start a write transaction.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Create a bucket.
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			return err
-		}
-
-		// Set the value "bar" for the key "foo".
-		if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
-			return err
-		}
-
-		// Retrieve the key back from the database and verify it.
-		value := b.Get([]byte("foo"))
-		fmt.Printf("The value of 'foo' was: %s\n", value)
-
-		return nil
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Delete the key in a different write transaction.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		return tx.Bucket([]byte("widgets")).Delete([]byte("foo"))
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Retrieve the key again.
-	if err := db.View(func(tx *bolt.Tx) error {
-		value := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
-		if value == nil {
-			fmt.Printf("The value of 'foo' is now: nil\n")
-		}
-		return nil
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Close database to release file lock.
-	if err := db.Close(); err != nil {
-		log.Fatal(err)
-	}
-
-	// Output:
-	// The value of 'foo' was: bar
-	// The value of 'foo' is now: nil
-}
-
-func ExampleBucket_ForEach() {
-	// Open the database.
-	db, err := bolt.Open(tempfile(), 0666, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer os.Remove(db.Path())
-
-	// Insert data into a bucket.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("animals"))
-		if err != nil {
-			return err
-		}
-
-		if err := b.Put([]byte("dog"), []byte("fun")); err != nil {
-			return err
-		}
-		if err := b.Put([]byte("cat"), []byte("lame")); err != nil {
-			return err
-		}
-		if err := b.Put([]byte("liger"), []byte("awesome")); err != nil {
-			return err
-		}
-
-		// Iterate over items in sorted key order.
-		if err := b.ForEach(func(k, v []byte) error {
-			fmt.Printf("A %s is %s.\n", k, v)
-			return nil
-		}); err != nil {
-			return err
-		}
-
-		return nil
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	// Close database to release file lock.
-	if err := db.Close(); err != nil {
-		log.Fatal(err)
-	}
-
-	// Output:
-	// A cat is lame.
-	// A dog is fun.
-	// A liger is awesome.
-}
diff --git a/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main.go b/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main.go
deleted file mode 100644
index 91a13bc..0000000
--- a/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main.go
+++ /dev/null
@@ -1,2136 +0,0 @@
-package main
-
-import (
-	"bytes"
-	"encoding/binary"
-	"errors"
-	"flag"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"math/rand"
-	"os"
-	"runtime"
-	"runtime/pprof"
-	"strconv"
-	"strings"
-	"time"
-	"unicode"
-	"unicode/utf8"
-	"unsafe"
-
-	bolt "go.etcd.io/bbolt"
-)
-
-var (
-	// ErrUsage is returned when a usage message was printed and the process
-	// should simply exit with an error.
-	ErrUsage = errors.New("usage")
-
-	// ErrUnknownCommand is returned when a CLI command is not specified.
-	ErrUnknownCommand = errors.New("unknown command")
-
-	// ErrPathRequired is returned when the path to a Bolt database is not specified.
-	ErrPathRequired = errors.New("path required")
-
-	// ErrFileNotFound is returned when a Bolt database does not exist.
-	ErrFileNotFound = errors.New("file not found")
-
-	// ErrInvalidValue is returned when a benchmark reads an unexpected value.
-	ErrInvalidValue = errors.New("invalid value")
-
-	// ErrCorrupt is returned when a checking a data file finds errors.
-	ErrCorrupt = errors.New("invalid value")
-
-	// ErrNonDivisibleBatchSize is returned when the batch size can't be evenly
-	// divided by the iteration count.
-	ErrNonDivisibleBatchSize = errors.New("number of iterations must be divisible by the batch size")
-
-	// ErrPageIDRequired is returned when a required page id is not specified.
-	ErrPageIDRequired = errors.New("page id required")
-
-	// ErrBucketRequired is returned when a bucket is not specified.
-	ErrBucketRequired = errors.New("bucket required")
-
-	// ErrBucketNotFound is returned when a bucket is not found.
-	ErrBucketNotFound = errors.New("bucket not found")
-
-	// ErrKeyRequired is returned when a key is not specified.
-	ErrKeyRequired = errors.New("key required")
-
-	// ErrKeyNotFound is returned when a key is not found.
-	ErrKeyNotFound = errors.New("key not found")
-)
-
-// PageHeaderSize represents the size of the bolt.page header.
-const PageHeaderSize = 16
-
-func main() {
-	m := NewMain()
-	if err := m.Run(os.Args[1:]...); err == ErrUsage {
-		os.Exit(2)
-	} else if err != nil {
-		fmt.Println(err.Error())
-		os.Exit(1)
-	}
-}
-
-// Main represents the main program execution.
-type Main struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewMain returns a new instance of Main connect to the standard input/output.
-func NewMain() *Main {
-	return &Main{
-		Stdin:  os.Stdin,
-		Stdout: os.Stdout,
-		Stderr: os.Stderr,
-	}
-}
-
-// Run executes the program.
-func (m *Main) Run(args ...string) error {
-	// Require a command at the beginning.
-	if len(args) == 0 || strings.HasPrefix(args[0], "-") {
-		fmt.Fprintln(m.Stderr, m.Usage())
-		return ErrUsage
-	}
-
-	// Execute command.
-	switch args[0] {
-	case "help":
-		fmt.Fprintln(m.Stderr, m.Usage())
-		return ErrUsage
-	case "bench":
-		return newBenchCommand(m).Run(args[1:]...)
-	case "buckets":
-		return newBucketsCommand(m).Run(args[1:]...)
-	case "check":
-		return newCheckCommand(m).Run(args[1:]...)
-	case "compact":
-		return newCompactCommand(m).Run(args[1:]...)
-	case "dump":
-		return newDumpCommand(m).Run(args[1:]...)
-	case "page-item":
-		return newPageItemCommand(m).Run(args[1:]...)
-	case "get":
-		return newGetCommand(m).Run(args[1:]...)
-	case "info":
-		return newInfoCommand(m).Run(args[1:]...)
-	case "keys":
-		return newKeysCommand(m).Run(args[1:]...)
-	case "page":
-		return newPageCommand(m).Run(args[1:]...)
-	case "pages":
-		return newPagesCommand(m).Run(args[1:]...)
-	case "stats":
-		return newStatsCommand(m).Run(args[1:]...)
-	default:
-		return ErrUnknownCommand
-	}
-}
-
-// Usage returns the help message.
-func (m *Main) Usage() string {
-	return strings.TrimLeft(`
-Bolt is a tool for inspecting bolt databases.
-
-Usage:
-
-	bolt command [arguments]
-
-The commands are:
-
-    bench       run synthetic benchmark against bolt
-    buckets     print a list of buckets
-    check       verifies integrity of bolt database
-    compact     copies a bolt database, compacting it in the process
-    dump        print a hexadecimal dump of a single page
-    get         print the value of a key in a bucket
-    info        print basic info
-    keys        print a list of keys in a bucket
-    help        print this screen
-    page        print one or more pages in human readable format
-    pages       print list of pages with their types
-    page-item   print the key and value of a page item.
-    stats       iterate over all pages and generate usage stats
-
-Use "bolt [command] -h" for more information about a command.
-`, "\n")
-}
-
-// CheckCommand represents the "check" command execution.
-type CheckCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewCheckCommand returns a CheckCommand.
-func newCheckCommand(m *Main) *CheckCommand {
-	return &CheckCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *CheckCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	// Perform consistency check.
-	return db.View(func(tx *bolt.Tx) error {
-		var count int
-		for err := range tx.Check() {
-			fmt.Fprintln(cmd.Stdout, err)
-			count++
-		}
-
-		// Print summary of errors.
-		if count > 0 {
-			fmt.Fprintf(cmd.Stdout, "%d errors found\n", count)
-			return ErrCorrupt
-		}
-
-		// Notify user that database is valid.
-		fmt.Fprintln(cmd.Stdout, "OK")
-		return nil
-	})
-}
-
-// Usage returns the help message.
-func (cmd *CheckCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt check PATH
-
-Check opens a database at PATH and runs an exhaustive check to verify that
-all pages are accessible or are marked as freed. It also verifies that no
-pages are double referenced.
-
-Verification errors will stream out as they are found and the process will
-return after all pages have been checked.
-`, "\n")
-}
-
-// InfoCommand represents the "info" command execution.
-type InfoCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewInfoCommand returns a InfoCommand.
-func newInfoCommand(m *Main) *InfoCommand {
-	return &InfoCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *InfoCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Open the database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	// Print basic database info.
-	info := db.Info()
-	fmt.Fprintf(cmd.Stdout, "Page Size: %d\n", info.PageSize)
-
-	return nil
-}
-
-// Usage returns the help message.
-func (cmd *InfoCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt info PATH
-
-Info prints basic information about the Bolt database at PATH.
-`, "\n")
-}
-
-// DumpCommand represents the "dump" command execution.
-type DumpCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// newDumpCommand returns a DumpCommand.
-func newDumpCommand(m *Main) *DumpCommand {
-	return &DumpCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *DumpCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path and page id.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Read page ids.
-	pageIDs, err := atois(fs.Args()[1:])
-	if err != nil {
-		return err
-	} else if len(pageIDs) == 0 {
-		return ErrPageIDRequired
-	}
-
-	// Open database to retrieve page size.
-	pageSize, err := ReadPageSize(path)
-	if err != nil {
-		return err
-	}
-
-	// Open database file handler.
-	f, err := os.Open(path)
-	if err != nil {
-		return err
-	}
-	defer func() { _ = f.Close() }()
-
-	// Print each page listed.
-	for i, pageID := range pageIDs {
-		// Print a separator.
-		if i > 0 {
-			fmt.Fprintln(cmd.Stdout, "===============================================")
-		}
-
-		// Print page to stdout.
-		if err := cmd.PrintPage(cmd.Stdout, f, pageID, pageSize); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-// PrintPage prints a given page as hexadecimal.
-func (cmd *DumpCommand) PrintPage(w io.Writer, r io.ReaderAt, pageID int, pageSize int) error {
-	const bytesPerLineN = 16
-
-	// Read page into buffer.
-	buf := make([]byte, pageSize)
-	addr := pageID * pageSize
-	if n, err := r.ReadAt(buf, int64(addr)); err != nil {
-		return err
-	} else if n != pageSize {
-		return io.ErrUnexpectedEOF
-	}
-
-	// Write out to writer in 16-byte lines.
-	var prev []byte
-	var skipped bool
-	for offset := 0; offset < pageSize; offset += bytesPerLineN {
-		// Retrieve current 16-byte line.
-		line := buf[offset : offset+bytesPerLineN]
-		isLastLine := (offset == (pageSize - bytesPerLineN))
-
-		// If it's the same as the previous line then print a skip.
-		if bytes.Equal(line, prev) && !isLastLine {
-			if !skipped {
-				fmt.Fprintf(w, "%07x *\n", addr+offset)
-				skipped = true
-			}
-		} else {
-			// Print line as hexadecimal in 2-byte groups.
-			fmt.Fprintf(w, "%07x %04x %04x %04x %04x %04x %04x %04x %04x\n", addr+offset,
-				line[0:2], line[2:4], line[4:6], line[6:8],
-				line[8:10], line[10:12], line[12:14], line[14:16],
-			)
-
-			skipped = false
-		}
-
-		// Save the previous line.
-		prev = line
-	}
-	fmt.Fprint(w, "\n")
-
-	return nil
-}
-
-// Usage returns the help message.
-func (cmd *DumpCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt dump PATH pageid [pageid...]
-
-Dump prints a hexadecimal dump of one or more pages.
-`, "\n")
-}
-
-// PageItemCommand represents the "page-item" command execution.
-type PageItemCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// newPageItemCommand returns a PageItemCommand.
-func newPageItemCommand(m *Main) *PageItemCommand {
-	return &PageItemCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-type pageItemOptions struct {
-	help      bool
-	keyOnly   bool
-	valueOnly bool
-	format    string
-}
-
-// Run executes the command.
-func (cmd *PageItemCommand) Run(args ...string) error {
-	// Parse flags.
-	options := &pageItemOptions{}
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	fs.BoolVar(&options.keyOnly, "key-only", false, "Print only the key")
-	fs.BoolVar(&options.valueOnly, "value-only", false, "Print only the value")
-	fs.StringVar(&options.format, "format", "ascii-encoded", "Output format. One of: ascii-encoded|hex|bytes")
-	fs.BoolVar(&options.help, "h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if options.help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	if options.keyOnly && options.valueOnly {
-		return fmt.Errorf("The --key-only or --value-only flag may be set, but not both.")
-	}
-
-	// Require database path and page id.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Read page id.
-	pageID, err := strconv.Atoi(fs.Arg(1))
-	if err != nil {
-		return err
-	}
-
-	// Read item id.
-	itemID, err := strconv.Atoi(fs.Arg(2))
-	if err != nil {
-		return err
-	}
-
-	// Open database file handler.
-	f, err := os.Open(path)
-	if err != nil {
-		return err
-	}
-	defer func() { _ = f.Close() }()
-
-	// Retrieve page info and page size.
-	_, buf, err := ReadPage(path, pageID)
-	if err != nil {
-		return err
-	}
-
-	if !options.valueOnly {
-		err := cmd.PrintLeafItemKey(cmd.Stdout, buf, uint16(itemID), options.format)
-		if err != nil {
-			return err
-		}
-	}
-	if !options.keyOnly {
-		err := cmd.PrintLeafItemValue(cmd.Stdout, buf, uint16(itemID), options.format)
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// leafPageElement retrieves a leaf page element.
-func (cmd *PageItemCommand) leafPageElement(pageBytes []byte, index uint16) (*leafPageElement, error) {
-	p := (*page)(unsafe.Pointer(&pageBytes[0]))
-	if index >= p.count {
-		return nil, fmt.Errorf("leafPageElement: expected item index less than %d, but got %d.", p.count, index)
-	}
-	if p.Type() != "leaf" {
-		return nil, fmt.Errorf("leafPageElement: expected page type of 'leaf', but got '%s'", p.Type())
-	}
-	return p.leafPageElement(index), nil
-}
-
-// writeBytes writes the byte to the writer. Supported formats: ascii-encoded, hex, bytes.
-func (cmd *PageItemCommand) writeBytes(w io.Writer, b []byte, format string) error {
-	switch format {
-	case "ascii-encoded":
-		_, err := fmt.Fprintf(w, "%q", b)
-		if err != nil {
-			return err
-		}
-		_, err = fmt.Fprintf(w, "\n")
-		return err
-	case "hex":
-		_, err := fmt.Fprintf(w, "%x", b)
-		if err != nil {
-			return err
-		}
-		_, err = fmt.Fprintf(w, "\n")
-		return err
-	case "bytes":
-		_, err := w.Write(b)
-		return err
-	default:
-		return fmt.Errorf("writeBytes: unsupported format: %s", format)
-	}
-}
-
-// PrintLeafItemKey writes the bytes of a leaf element's key.
-func (cmd *PageItemCommand) PrintLeafItemKey(w io.Writer, pageBytes []byte, index uint16, format string) error {
-	e, err := cmd.leafPageElement(pageBytes, index)
-	if err != nil {
-		return err
-	}
-	return cmd.writeBytes(w, e.key(), format)
-}
-
-// PrintLeafItemKey writes the bytes of a leaf element's value.
-func (cmd *PageItemCommand) PrintLeafItemValue(w io.Writer, pageBytes []byte, index uint16, format string) error {
-	e, err := cmd.leafPageElement(pageBytes, index)
-	if err != nil {
-		return err
-	}
-	return cmd.writeBytes(w, e.value(), format)
-}
-
-// Usage returns the help message.
-func (cmd *PageItemCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt page-item [options] PATH pageid itemid
-
-Additional options include:
-
-	--key-only
-		Print only the key
-	--value-only
-		Print only the value
-	--format
-		Output format. One of: ascii-encoded|hex|bytes (default=ascii-encoded)
-
-page-item prints a page item key and value.
-`, "\n")
-}
-
-// PageCommand represents the "page" command execution.
-type PageCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// newPageCommand returns a PageCommand.
-func newPageCommand(m *Main) *PageCommand {
-	return &PageCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *PageCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path and page id.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Read page ids.
-	pageIDs, err := atois(fs.Args()[1:])
-	if err != nil {
-		return err
-	} else if len(pageIDs) == 0 {
-		return ErrPageIDRequired
-	}
-
-	// Open database file handler.
-	f, err := os.Open(path)
-	if err != nil {
-		return err
-	}
-	defer func() { _ = f.Close() }()
-
-	// Print each page listed.
-	for i, pageID := range pageIDs {
-		// Print a separator.
-		if i > 0 {
-			fmt.Fprintln(cmd.Stdout, "===============================================")
-		}
-
-		// Retrieve page info and page size.
-		p, buf, err := ReadPage(path, pageID)
-		if err != nil {
-			return err
-		}
-
-		// Print basic page info.
-		fmt.Fprintf(cmd.Stdout, "Page ID:    %d\n", p.id)
-		fmt.Fprintf(cmd.Stdout, "Page Type:  %s\n", p.Type())
-		fmt.Fprintf(cmd.Stdout, "Total Size: %d bytes\n", len(buf))
-
-		// Print type-specific data.
-		switch p.Type() {
-		case "meta":
-			err = cmd.PrintMeta(cmd.Stdout, buf)
-		case "leaf":
-			err = cmd.PrintLeaf(cmd.Stdout, buf)
-		case "branch":
-			err = cmd.PrintBranch(cmd.Stdout, buf)
-		case "freelist":
-			err = cmd.PrintFreelist(cmd.Stdout, buf)
-		}
-		if err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-// PrintMeta prints the data from the meta page.
-func (cmd *PageCommand) PrintMeta(w io.Writer, buf []byte) error {
-	m := (*meta)(unsafe.Pointer(&buf[PageHeaderSize]))
-	fmt.Fprintf(w, "Version:    %d\n", m.version)
-	fmt.Fprintf(w, "Page Size:  %d bytes\n", m.pageSize)
-	fmt.Fprintf(w, "Flags:      %08x\n", m.flags)
-	fmt.Fprintf(w, "Root:       <pgid=%d>\n", m.root.root)
-	fmt.Fprintf(w, "Freelist:   <pgid=%d>\n", m.freelist)
-	fmt.Fprintf(w, "HWM:        <pgid=%d>\n", m.pgid)
-	fmt.Fprintf(w, "Txn ID:     %d\n", m.txid)
-	fmt.Fprintf(w, "Checksum:   %016x\n", m.checksum)
-	fmt.Fprintf(w, "\n")
-	return nil
-}
-
-// PrintLeaf prints the data for a leaf page.
-func (cmd *PageCommand) PrintLeaf(w io.Writer, buf []byte) error {
-	p := (*page)(unsafe.Pointer(&buf[0]))
-
-	// Print number of items.
-	fmt.Fprintf(w, "Item Count: %d\n", p.count)
-	fmt.Fprintf(w, "\n")
-
-	// Print each key/value.
-	for i := uint16(0); i < p.count; i++ {
-		e := p.leafPageElement(i)
-
-		// Format key as string.
-		var k string
-		if isPrintable(string(e.key())) {
-			k = fmt.Sprintf("%q", string(e.key()))
-		} else {
-			k = fmt.Sprintf("%x", string(e.key()))
-		}
-
-		// Format value as string.
-		var v string
-		if (e.flags & uint32(bucketLeafFlag)) != 0 {
-			b := (*bucket)(unsafe.Pointer(&e.value()[0]))
-			v = fmt.Sprintf("<pgid=%d,seq=%d>", b.root, b.sequence)
-		} else if isPrintable(string(e.value())) {
-			v = fmt.Sprintf("%q", string(e.value()))
-		} else {
-			v = fmt.Sprintf("%x", string(e.value()))
-		}
-
-		fmt.Fprintf(w, "%s: %s\n", k, v)
-	}
-	fmt.Fprintf(w, "\n")
-	return nil
-}
-
-// PrintBranch prints the data for a leaf page.
-func (cmd *PageCommand) PrintBranch(w io.Writer, buf []byte) error {
-	p := (*page)(unsafe.Pointer(&buf[0]))
-
-	// Print number of items.
-	fmt.Fprintf(w, "Item Count: %d\n", p.count)
-	fmt.Fprintf(w, "\n")
-
-	// Print each key/value.
-	for i := uint16(0); i < p.count; i++ {
-		e := p.branchPageElement(i)
-
-		// Format key as string.
-		var k string
-		if isPrintable(string(e.key())) {
-			k = fmt.Sprintf("%q", string(e.key()))
-		} else {
-			k = fmt.Sprintf("%x", string(e.key()))
-		}
-
-		fmt.Fprintf(w, "%s: <pgid=%d>\n", k, e.pgid)
-	}
-	fmt.Fprintf(w, "\n")
-	return nil
-}
-
-// PrintFreelist prints the data for a freelist page.
-func (cmd *PageCommand) PrintFreelist(w io.Writer, buf []byte) error {
-	p := (*page)(unsafe.Pointer(&buf[0]))
-
-	// Check for overflow and, if present, adjust starting index and actual element count.
-	idx, count := 0, int(p.count)
-	if p.count == 0xFFFF {
-		idx = 1
-		count = int(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[0])
-	}
-
-	// Print number of items.
-	fmt.Fprintf(w, "Item Count: %d\n", count)
-	fmt.Fprintf(w, "Overflow: %d\n", p.overflow)
-
-	fmt.Fprintf(w, "\n")
-
-	// Print each page in the freelist.
-	ids := (*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr))
-	for i := idx; i < count; i++ {
-		fmt.Fprintf(w, "%d\n", ids[i])
-	}
-	fmt.Fprintf(w, "\n")
-	return nil
-}
-
-// PrintPage prints a given page as hexadecimal.
-func (cmd *PageCommand) PrintPage(w io.Writer, r io.ReaderAt, pageID int, pageSize int) error {
-	const bytesPerLineN = 16
-
-	// Read page into buffer.
-	buf := make([]byte, pageSize)
-	addr := pageID * pageSize
-	if n, err := r.ReadAt(buf, int64(addr)); err != nil {
-		return err
-	} else if n != pageSize {
-		return io.ErrUnexpectedEOF
-	}
-
-	// Write out to writer in 16-byte lines.
-	var prev []byte
-	var skipped bool
-	for offset := 0; offset < pageSize; offset += bytesPerLineN {
-		// Retrieve current 16-byte line.
-		line := buf[offset : offset+bytesPerLineN]
-		isLastLine := (offset == (pageSize - bytesPerLineN))
-
-		// If it's the same as the previous line then print a skip.
-		if bytes.Equal(line, prev) && !isLastLine {
-			if !skipped {
-				fmt.Fprintf(w, "%07x *\n", addr+offset)
-				skipped = true
-			}
-		} else {
-			// Print line as hexadecimal in 2-byte groups.
-			fmt.Fprintf(w, "%07x %04x %04x %04x %04x %04x %04x %04x %04x\n", addr+offset,
-				line[0:2], line[2:4], line[4:6], line[6:8],
-				line[8:10], line[10:12], line[12:14], line[14:16],
-			)
-
-			skipped = false
-		}
-
-		// Save the previous line.
-		prev = line
-	}
-	fmt.Fprint(w, "\n")
-
-	return nil
-}
-
-// Usage returns the help message.
-func (cmd *PageCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt page PATH pageid [pageid...]
-
-Page prints one or more pages in human readable format.
-`, "\n")
-}
-
-// PagesCommand represents the "pages" command execution.
-type PagesCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewPagesCommand returns a PagesCommand.
-func newPagesCommand(m *Main) *PagesCommand {
-	return &PagesCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *PagesCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer func() { _ = db.Close() }()
-
-	// Write header.
-	fmt.Fprintln(cmd.Stdout, "ID       TYPE       ITEMS  OVRFLW")
-	fmt.Fprintln(cmd.Stdout, "======== ========== ====== ======")
-
-	return db.Update(func(tx *bolt.Tx) error {
-		var id int
-		for {
-			p, err := tx.Page(id)
-			if err != nil {
-				return &PageError{ID: id, Err: err}
-			} else if p == nil {
-				break
-			}
-
-			// Only display count and overflow if this is a non-free page.
-			var count, overflow string
-			if p.Type != "free" {
-				count = strconv.Itoa(p.Count)
-				if p.OverflowCount > 0 {
-					overflow = strconv.Itoa(p.OverflowCount)
-				}
-			}
-
-			// Print table row.
-			fmt.Fprintf(cmd.Stdout, "%-8d %-10s %-6s %-6s\n", p.ID, p.Type, count, overflow)
-
-			// Move to the next non-overflow page.
-			id += 1
-			if p.Type != "free" {
-				id += p.OverflowCount
-			}
-		}
-		return nil
-	})
-}
-
-// Usage returns the help message.
-func (cmd *PagesCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt pages PATH
-
-Pages prints a table of pages with their type (meta, leaf, branch, freelist).
-Leaf and branch pages will show a key count in the "items" column while the
-freelist will show the number of free pages in the "items" column.
-
-The "overflow" column shows the number of blocks that the page spills over
-into. Normally there is no overflow but large keys and values can cause
-a single page to take up multiple blocks.
-`, "\n")
-}
-
-// StatsCommand represents the "stats" command execution.
-type StatsCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewStatsCommand returns a StatsCommand.
-func newStatsCommand(m *Main) *StatsCommand {
-	return &StatsCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *StatsCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path.
-	path, prefix := fs.Arg(0), fs.Arg(1)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	return db.View(func(tx *bolt.Tx) error {
-		var s bolt.BucketStats
-		var count int
-		if err := tx.ForEach(func(name []byte, b *bolt.Bucket) error {
-			if bytes.HasPrefix(name, []byte(prefix)) {
-				s.Add(b.Stats())
-				count += 1
-			}
-			return nil
-		}); err != nil {
-			return err
-		}
-
-		fmt.Fprintf(cmd.Stdout, "Aggregate statistics for %d buckets\n\n", count)
-
-		fmt.Fprintln(cmd.Stdout, "Page count statistics")
-		fmt.Fprintf(cmd.Stdout, "\tNumber of logical branch pages: %d\n", s.BranchPageN)
-		fmt.Fprintf(cmd.Stdout, "\tNumber of physical branch overflow pages: %d\n", s.BranchOverflowN)
-		fmt.Fprintf(cmd.Stdout, "\tNumber of logical leaf pages: %d\n", s.LeafPageN)
-		fmt.Fprintf(cmd.Stdout, "\tNumber of physical leaf overflow pages: %d\n", s.LeafOverflowN)
-
-		fmt.Fprintln(cmd.Stdout, "Tree statistics")
-		fmt.Fprintf(cmd.Stdout, "\tNumber of keys/value pairs: %d\n", s.KeyN)
-		fmt.Fprintf(cmd.Stdout, "\tNumber of levels in B+tree: %d\n", s.Depth)
-
-		fmt.Fprintln(cmd.Stdout, "Page size utilization")
-		fmt.Fprintf(cmd.Stdout, "\tBytes allocated for physical branch pages: %d\n", s.BranchAlloc)
-		var percentage int
-		if s.BranchAlloc != 0 {
-			percentage = int(float32(s.BranchInuse) * 100.0 / float32(s.BranchAlloc))
-		}
-		fmt.Fprintf(cmd.Stdout, "\tBytes actually used for branch data: %d (%d%%)\n", s.BranchInuse, percentage)
-		fmt.Fprintf(cmd.Stdout, "\tBytes allocated for physical leaf pages: %d\n", s.LeafAlloc)
-		percentage = 0
-		if s.LeafAlloc != 0 {
-			percentage = int(float32(s.LeafInuse) * 100.0 / float32(s.LeafAlloc))
-		}
-		fmt.Fprintf(cmd.Stdout, "\tBytes actually used for leaf data: %d (%d%%)\n", s.LeafInuse, percentage)
-
-		fmt.Fprintln(cmd.Stdout, "Bucket statistics")
-		fmt.Fprintf(cmd.Stdout, "\tTotal number of buckets: %d\n", s.BucketN)
-		percentage = 0
-		if s.BucketN != 0 {
-			percentage = int(float32(s.InlineBucketN) * 100.0 / float32(s.BucketN))
-		}
-		fmt.Fprintf(cmd.Stdout, "\tTotal number on inlined buckets: %d (%d%%)\n", s.InlineBucketN, percentage)
-		percentage = 0
-		if s.LeafInuse != 0 {
-			percentage = int(float32(s.InlineBucketInuse) * 100.0 / float32(s.LeafInuse))
-		}
-		fmt.Fprintf(cmd.Stdout, "\tBytes used for inlined buckets: %d (%d%%)\n", s.InlineBucketInuse, percentage)
-
-		return nil
-	})
-}
-
-// Usage returns the help message.
-func (cmd *StatsCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt stats PATH
-
-Stats performs an extensive search of the database to track every page
-reference. It starts at the current meta page and recursively iterates
-through every accessible bucket.
-
-The following errors can be reported:
-
-    already freed
-        The page is referenced more than once in the freelist.
-
-    unreachable unfreed
-        The page is not referenced by a bucket or in the freelist.
-
-    reachable freed
-        The page is referenced by a bucket but is also in the freelist.
-
-    out of bounds
-        A page is referenced that is above the high water mark.
-
-    multiple references
-        A page is referenced by more than one other page.
-
-    invalid type
-        The page type is not "meta", "leaf", "branch", or "freelist".
-
-No errors should occur in your database. However, if for some reason you
-experience corruption, please submit a ticket to the Bolt project page:
-
-  https://github.com/boltdb/bolt/issues
-`, "\n")
-}
-
-// BucketsCommand represents the "buckets" command execution.
-type BucketsCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewBucketsCommand returns a BucketsCommand.
-func newBucketsCommand(m *Main) *BucketsCommand {
-	return &BucketsCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *BucketsCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path.
-	path := fs.Arg(0)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	// Print buckets.
-	return db.View(func(tx *bolt.Tx) error {
-		return tx.ForEach(func(name []byte, _ *bolt.Bucket) error {
-			fmt.Fprintln(cmd.Stdout, string(name))
-			return nil
-		})
-	})
-}
-
-// Usage returns the help message.
-func (cmd *BucketsCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt buckets PATH
-
-Print a list of buckets.
-`, "\n")
-}
-
-// KeysCommand represents the "keys" command execution.
-type KeysCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewKeysCommand returns a KeysCommand.
-func newKeysCommand(m *Main) *KeysCommand {
-	return &KeysCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *KeysCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path and bucket.
-	path, bucket := fs.Arg(0), fs.Arg(1)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	} else if bucket == "" {
-		return ErrBucketRequired
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	// Print keys.
-	return db.View(func(tx *bolt.Tx) error {
-		// Find bucket.
-		b := tx.Bucket([]byte(bucket))
-		if b == nil {
-			return ErrBucketNotFound
-		}
-
-		// Iterate over each key.
-		return b.ForEach(func(key, _ []byte) error {
-			fmt.Fprintln(cmd.Stdout, string(key))
-			return nil
-		})
-	})
-}
-
-// Usage returns the help message.
-func (cmd *KeysCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt keys PATH BUCKET
-
-Print a list of keys in the given bucket.
-`, "\n")
-}
-
-// GetCommand represents the "get" command execution.
-type GetCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewGetCommand returns a GetCommand.
-func newGetCommand(m *Main) *GetCommand {
-	return &GetCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *GetCommand) Run(args ...string) error {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	help := fs.Bool("h", false, "")
-	if err := fs.Parse(args); err != nil {
-		return err
-	} else if *help {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	}
-
-	// Require database path, bucket and key.
-	path, bucket, key := fs.Arg(0), fs.Arg(1), fs.Arg(2)
-	if path == "" {
-		return ErrPathRequired
-	} else if _, err := os.Stat(path); os.IsNotExist(err) {
-		return ErrFileNotFound
-	} else if bucket == "" {
-		return ErrBucketRequired
-	} else if key == "" {
-		return ErrKeyRequired
-	}
-
-	// Open database.
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	defer db.Close()
-
-	// Print value.
-	return db.View(func(tx *bolt.Tx) error {
-		// Find bucket.
-		b := tx.Bucket([]byte(bucket))
-		if b == nil {
-			return ErrBucketNotFound
-		}
-
-		// Find value for given key.
-		val := b.Get([]byte(key))
-		if val == nil {
-			return ErrKeyNotFound
-		}
-
-		fmt.Fprintln(cmd.Stdout, string(val))
-		return nil
-	})
-}
-
-// Usage returns the help message.
-func (cmd *GetCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt get PATH BUCKET KEY
-
-Print the value of the given key in the given bucket.
-`, "\n")
-}
-
-var benchBucketName = []byte("bench")
-
-// BenchCommand represents the "bench" command execution.
-type BenchCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-}
-
-// NewBenchCommand returns a BenchCommand using the
-func newBenchCommand(m *Main) *BenchCommand {
-	return &BenchCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the "bench" command.
-func (cmd *BenchCommand) Run(args ...string) error {
-	// Parse CLI arguments.
-	options, err := cmd.ParseFlags(args)
-	if err != nil {
-		return err
-	}
-
-	// Remove path if "-work" is not set. Otherwise keep path.
-	if options.Work {
-		fmt.Fprintf(cmd.Stdout, "work: %s\n", options.Path)
-	} else {
-		defer os.Remove(options.Path)
-	}
-
-	// Create database.
-	db, err := bolt.Open(options.Path, 0666, nil)
-	if err != nil {
-		return err
-	}
-	db.NoSync = options.NoSync
-	defer db.Close()
-
-	// Write to the database.
-	var results BenchResults
-	if err := cmd.runWrites(db, options, &results); err != nil {
-		return fmt.Errorf("write: %v", err)
-	}
-
-	// Read from the database.
-	if err := cmd.runReads(db, options, &results); err != nil {
-		return fmt.Errorf("bench: read: %s", err)
-	}
-
-	// Print results.
-	fmt.Fprintf(os.Stderr, "# Write\t%v\t(%v/op)\t(%v op/sec)\n", results.WriteDuration, results.WriteOpDuration(), results.WriteOpsPerSecond())
-	fmt.Fprintf(os.Stderr, "# Read\t%v\t(%v/op)\t(%v op/sec)\n", results.ReadDuration, results.ReadOpDuration(), results.ReadOpsPerSecond())
-	fmt.Fprintln(os.Stderr, "")
-	return nil
-}
-
-// ParseFlags parses the command line flags.
-func (cmd *BenchCommand) ParseFlags(args []string) (*BenchOptions, error) {
-	var options BenchOptions
-
-	// Parse flagset.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	fs.StringVar(&options.ProfileMode, "profile-mode", "rw", "")
-	fs.StringVar(&options.WriteMode, "write-mode", "seq", "")
-	fs.StringVar(&options.ReadMode, "read-mode", "seq", "")
-	fs.IntVar(&options.Iterations, "count", 1000, "")
-	fs.IntVar(&options.BatchSize, "batch-size", 0, "")
-	fs.IntVar(&options.KeySize, "key-size", 8, "")
-	fs.IntVar(&options.ValueSize, "value-size", 32, "")
-	fs.StringVar(&options.CPUProfile, "cpuprofile", "", "")
-	fs.StringVar(&options.MemProfile, "memprofile", "", "")
-	fs.StringVar(&options.BlockProfile, "blockprofile", "", "")
-	fs.Float64Var(&options.FillPercent, "fill-percent", bolt.DefaultFillPercent, "")
-	fs.BoolVar(&options.NoSync, "no-sync", false, "")
-	fs.BoolVar(&options.Work, "work", false, "")
-	fs.StringVar(&options.Path, "path", "", "")
-	fs.SetOutput(cmd.Stderr)
-	if err := fs.Parse(args); err != nil {
-		return nil, err
-	}
-
-	// Set batch size to iteration size if not set.
-	// Require that batch size can be evenly divided by the iteration count.
-	if options.BatchSize == 0 {
-		options.BatchSize = options.Iterations
-	} else if options.Iterations%options.BatchSize != 0 {
-		return nil, ErrNonDivisibleBatchSize
-	}
-
-	// Generate temp path if one is not passed in.
-	if options.Path == "" {
-		f, err := ioutil.TempFile("", "bolt-bench-")
-		if err != nil {
-			return nil, fmt.Errorf("temp file: %s", err)
-		}
-		f.Close()
-		os.Remove(f.Name())
-		options.Path = f.Name()
-	}
-
-	return &options, nil
-}
-
-// Writes to the database.
-func (cmd *BenchCommand) runWrites(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	// Start profiling for writes.
-	if options.ProfileMode == "rw" || options.ProfileMode == "w" {
-		cmd.startProfiling(options)
-	}
-
-	t := time.Now()
-
-	var err error
-	switch options.WriteMode {
-	case "seq":
-		err = cmd.runWritesSequential(db, options, results)
-	case "rnd":
-		err = cmd.runWritesRandom(db, options, results)
-	case "seq-nest":
-		err = cmd.runWritesSequentialNested(db, options, results)
-	case "rnd-nest":
-		err = cmd.runWritesRandomNested(db, options, results)
-	default:
-		return fmt.Errorf("invalid write mode: %s", options.WriteMode)
-	}
-
-	// Save time to write.
-	results.WriteDuration = time.Since(t)
-
-	// Stop profiling for writes only.
-	if options.ProfileMode == "w" {
-		cmd.stopProfiling()
-	}
-
-	return err
-}
-
-func (cmd *BenchCommand) runWritesSequential(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	var i = uint32(0)
-	return cmd.runWritesWithSource(db, options, results, func() uint32 { i++; return i })
-}
-
-func (cmd *BenchCommand) runWritesRandom(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	r := rand.New(rand.NewSource(time.Now().UnixNano()))
-	return cmd.runWritesWithSource(db, options, results, func() uint32 { return r.Uint32() })
-}
-
-func (cmd *BenchCommand) runWritesSequentialNested(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	var i = uint32(0)
-	return cmd.runWritesNestedWithSource(db, options, results, func() uint32 { i++; return i })
-}
-
-func (cmd *BenchCommand) runWritesRandomNested(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	r := rand.New(rand.NewSource(time.Now().UnixNano()))
-	return cmd.runWritesNestedWithSource(db, options, results, func() uint32 { return r.Uint32() })
-}
-
-func (cmd *BenchCommand) runWritesWithSource(db *bolt.DB, options *BenchOptions, results *BenchResults, keySource func() uint32) error {
-	results.WriteOps = options.Iterations
-
-	for i := 0; i < options.Iterations; i += options.BatchSize {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			b, _ := tx.CreateBucketIfNotExists(benchBucketName)
-			b.FillPercent = options.FillPercent
-
-			for j := 0; j < options.BatchSize; j++ {
-				key := make([]byte, options.KeySize)
-				value := make([]byte, options.ValueSize)
-
-				// Write key as uint32.
-				binary.BigEndian.PutUint32(key, keySource())
-
-				// Insert key/value.
-				if err := b.Put(key, value); err != nil {
-					return err
-				}
-			}
-
-			return nil
-		}); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func (cmd *BenchCommand) runWritesNestedWithSource(db *bolt.DB, options *BenchOptions, results *BenchResults, keySource func() uint32) error {
-	results.WriteOps = options.Iterations
-
-	for i := 0; i < options.Iterations; i += options.BatchSize {
-		if err := db.Update(func(tx *bolt.Tx) error {
-			top, err := tx.CreateBucketIfNotExists(benchBucketName)
-			if err != nil {
-				return err
-			}
-			top.FillPercent = options.FillPercent
-
-			// Create bucket key.
-			name := make([]byte, options.KeySize)
-			binary.BigEndian.PutUint32(name, keySource())
-
-			// Create bucket.
-			b, err := top.CreateBucketIfNotExists(name)
-			if err != nil {
-				return err
-			}
-			b.FillPercent = options.FillPercent
-
-			for j := 0; j < options.BatchSize; j++ {
-				var key = make([]byte, options.KeySize)
-				var value = make([]byte, options.ValueSize)
-
-				// Generate key as uint32.
-				binary.BigEndian.PutUint32(key, keySource())
-
-				// Insert value into subbucket.
-				if err := b.Put(key, value); err != nil {
-					return err
-				}
-			}
-
-			return nil
-		}); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// Reads from the database.
-func (cmd *BenchCommand) runReads(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	// Start profiling for reads.
-	if options.ProfileMode == "r" {
-		cmd.startProfiling(options)
-	}
-
-	t := time.Now()
-
-	var err error
-	switch options.ReadMode {
-	case "seq":
-		switch options.WriteMode {
-		case "seq-nest", "rnd-nest":
-			err = cmd.runReadsSequentialNested(db, options, results)
-		default:
-			err = cmd.runReadsSequential(db, options, results)
-		}
-	default:
-		return fmt.Errorf("invalid read mode: %s", options.ReadMode)
-	}
-
-	// Save read time.
-	results.ReadDuration = time.Since(t)
-
-	// Stop profiling for reads.
-	if options.ProfileMode == "rw" || options.ProfileMode == "r" {
-		cmd.stopProfiling()
-	}
-
-	return err
-}
-
-func (cmd *BenchCommand) runReadsSequential(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	return db.View(func(tx *bolt.Tx) error {
-		t := time.Now()
-
-		for {
-			var count int
-
-			c := tx.Bucket(benchBucketName).Cursor()
-			for k, v := c.First(); k != nil; k, v = c.Next() {
-				if v == nil {
-					return errors.New("invalid value")
-				}
-				count++
-			}
-
-			if options.WriteMode == "seq" && count != options.Iterations {
-				return fmt.Errorf("read seq: iter mismatch: expected %d, got %d", options.Iterations, count)
-			}
-
-			results.ReadOps += count
-
-			// Make sure we do this for at least a second.
-			if time.Since(t) >= time.Second {
-				break
-			}
-		}
-
-		return nil
-	})
-}
-
-func (cmd *BenchCommand) runReadsSequentialNested(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
-	return db.View(func(tx *bolt.Tx) error {
-		t := time.Now()
-
-		for {
-			var count int
-			var top = tx.Bucket(benchBucketName)
-			if err := top.ForEach(func(name, _ []byte) error {
-				if b := top.Bucket(name); b != nil {
-					c := b.Cursor()
-					for k, v := c.First(); k != nil; k, v = c.Next() {
-						if v == nil {
-							return ErrInvalidValue
-						}
-						count++
-					}
-				}
-				return nil
-			}); err != nil {
-				return err
-			}
-
-			if options.WriteMode == "seq-nest" && count != options.Iterations {
-				return fmt.Errorf("read seq-nest: iter mismatch: expected %d, got %d", options.Iterations, count)
-			}
-
-			results.ReadOps += count
-
-			// Make sure we do this for at least a second.
-			if time.Since(t) >= time.Second {
-				break
-			}
-		}
-
-		return nil
-	})
-}
-
-// File handlers for the various profiles.
-var cpuprofile, memprofile, blockprofile *os.File
-
-// Starts all profiles set on the options.
-func (cmd *BenchCommand) startProfiling(options *BenchOptions) {
-	var err error
-
-	// Start CPU profiling.
-	if options.CPUProfile != "" {
-		cpuprofile, err = os.Create(options.CPUProfile)
-		if err != nil {
-			fmt.Fprintf(cmd.Stderr, "bench: could not create cpu profile %q: %v\n", options.CPUProfile, err)
-			os.Exit(1)
-		}
-		pprof.StartCPUProfile(cpuprofile)
-	}
-
-	// Start memory profiling.
-	if options.MemProfile != "" {
-		memprofile, err = os.Create(options.MemProfile)
-		if err != nil {
-			fmt.Fprintf(cmd.Stderr, "bench: could not create memory profile %q: %v\n", options.MemProfile, err)
-			os.Exit(1)
-		}
-		runtime.MemProfileRate = 4096
-	}
-
-	// Start fatal profiling.
-	if options.BlockProfile != "" {
-		blockprofile, err = os.Create(options.BlockProfile)
-		if err != nil {
-			fmt.Fprintf(cmd.Stderr, "bench: could not create block profile %q: %v\n", options.BlockProfile, err)
-			os.Exit(1)
-		}
-		runtime.SetBlockProfileRate(1)
-	}
-}
-
-// Stops all profiles.
-func (cmd *BenchCommand) stopProfiling() {
-	if cpuprofile != nil {
-		pprof.StopCPUProfile()
-		cpuprofile.Close()
-		cpuprofile = nil
-	}
-
-	if memprofile != nil {
-		pprof.Lookup("heap").WriteTo(memprofile, 0)
-		memprofile.Close()
-		memprofile = nil
-	}
-
-	if blockprofile != nil {
-		pprof.Lookup("block").WriteTo(blockprofile, 0)
-		blockprofile.Close()
-		blockprofile = nil
-		runtime.SetBlockProfileRate(0)
-	}
-}
-
-// BenchOptions represents the set of options that can be passed to "bolt bench".
-type BenchOptions struct {
-	ProfileMode   string
-	WriteMode     string
-	ReadMode      string
-	Iterations    int
-	BatchSize     int
-	KeySize       int
-	ValueSize     int
-	CPUProfile    string
-	MemProfile    string
-	BlockProfile  string
-	StatsInterval time.Duration
-	FillPercent   float64
-	NoSync        bool
-	Work          bool
-	Path          string
-}
-
-// BenchResults represents the performance results of the benchmark.
-type BenchResults struct {
-	WriteOps      int
-	WriteDuration time.Duration
-	ReadOps       int
-	ReadDuration  time.Duration
-}
-
-// Returns the duration for a single write operation.
-func (r *BenchResults) WriteOpDuration() time.Duration {
-	if r.WriteOps == 0 {
-		return 0
-	}
-	return r.WriteDuration / time.Duration(r.WriteOps)
-}
-
-// Returns average number of write operations that can be performed per second.
-func (r *BenchResults) WriteOpsPerSecond() int {
-	var op = r.WriteOpDuration()
-	if op == 0 {
-		return 0
-	}
-	return int(time.Second) / int(op)
-}
-
-// Returns the duration for a single read operation.
-func (r *BenchResults) ReadOpDuration() time.Duration {
-	if r.ReadOps == 0 {
-		return 0
-	}
-	return r.ReadDuration / time.Duration(r.ReadOps)
-}
-
-// Returns average number of read operations that can be performed per second.
-func (r *BenchResults) ReadOpsPerSecond() int {
-	var op = r.ReadOpDuration()
-	if op == 0 {
-		return 0
-	}
-	return int(time.Second) / int(op)
-}
-
-type PageError struct {
-	ID  int
-	Err error
-}
-
-func (e *PageError) Error() string {
-	return fmt.Sprintf("page error: id=%d, err=%s", e.ID, e.Err)
-}
-
-// isPrintable returns true if the string is valid unicode and contains only printable runes.
-func isPrintable(s string) bool {
-	if !utf8.ValidString(s) {
-		return false
-	}
-	for _, ch := range s {
-		if !unicode.IsPrint(ch) {
-			return false
-		}
-	}
-	return true
-}
-
-// ReadPage reads page info & full page data from a path.
-// This is not transactionally safe.
-func ReadPage(path string, pageID int) (*page, []byte, error) {
-	// Find page size.
-	pageSize, err := ReadPageSize(path)
-	if err != nil {
-		return nil, nil, fmt.Errorf("read page size: %s", err)
-	}
-
-	// Open database file.
-	f, err := os.Open(path)
-	if err != nil {
-		return nil, nil, err
-	}
-	defer f.Close()
-
-	// Read one block into buffer.
-	buf := make([]byte, pageSize)
-	if n, err := f.ReadAt(buf, int64(pageID*pageSize)); err != nil {
-		return nil, nil, err
-	} else if n != len(buf) {
-		return nil, nil, io.ErrUnexpectedEOF
-	}
-
-	// Determine total number of blocks.
-	p := (*page)(unsafe.Pointer(&buf[0]))
-	overflowN := p.overflow
-
-	// Re-read entire page (with overflow) into buffer.
-	buf = make([]byte, (int(overflowN)+1)*pageSize)
-	if n, err := f.ReadAt(buf, int64(pageID*pageSize)); err != nil {
-		return nil, nil, err
-	} else if n != len(buf) {
-		return nil, nil, io.ErrUnexpectedEOF
-	}
-	p = (*page)(unsafe.Pointer(&buf[0]))
-
-	return p, buf, nil
-}
-
-// ReadPageSize reads page size a path.
-// This is not transactionally safe.
-func ReadPageSize(path string) (int, error) {
-	// Open database file.
-	f, err := os.Open(path)
-	if err != nil {
-		return 0, err
-	}
-	defer f.Close()
-
-	// Read 4KB chunk.
-	buf := make([]byte, 4096)
-	if _, err := io.ReadFull(f, buf); err != nil {
-		return 0, err
-	}
-
-	// Read page size from metadata.
-	m := (*meta)(unsafe.Pointer(&buf[PageHeaderSize]))
-	return int(m.pageSize), nil
-}
-
-// atois parses a slice of strings into integers.
-func atois(strs []string) ([]int, error) {
-	var a []int
-	for _, str := range strs {
-		i, err := strconv.Atoi(str)
-		if err != nil {
-			return nil, err
-		}
-		a = append(a, i)
-	}
-	return a, nil
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-const maxAllocSize = 0xFFFFFFF
-
-// DO NOT EDIT. Copied from the "bolt" package.
-const (
-	branchPageFlag   = 0x01
-	leafPageFlag     = 0x02
-	metaPageFlag     = 0x04
-	freelistPageFlag = 0x10
-)
-
-// DO NOT EDIT. Copied from the "bolt" package.
-const bucketLeafFlag = 0x01
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type pgid uint64
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type txid uint64
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type meta struct {
-	magic    uint32
-	version  uint32
-	pageSize uint32
-	flags    uint32
-	root     bucket
-	freelist pgid
-	pgid     pgid
-	txid     txid
-	checksum uint64
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type bucket struct {
-	root     pgid
-	sequence uint64
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type page struct {
-	id       pgid
-	flags    uint16
-	count    uint16
-	overflow uint32
-	ptr      uintptr
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (p *page) Type() string {
-	if (p.flags & branchPageFlag) != 0 {
-		return "branch"
-	} else if (p.flags & leafPageFlag) != 0 {
-		return "leaf"
-	} else if (p.flags & metaPageFlag) != 0 {
-		return "meta"
-	} else if (p.flags & freelistPageFlag) != 0 {
-		return "freelist"
-	}
-	return fmt.Sprintf("unknown<%02x>", p.flags)
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (p *page) leafPageElement(index uint16) *leafPageElement {
-	n := &((*[0x7FFFFFF]leafPageElement)(unsafe.Pointer(&p.ptr)))[index]
-	return n
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (p *page) branchPageElement(index uint16) *branchPageElement {
-	return &((*[0x7FFFFFF]branchPageElement)(unsafe.Pointer(&p.ptr)))[index]
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type branchPageElement struct {
-	pos   uint32
-	ksize uint32
-	pgid  pgid
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (n *branchPageElement) key() []byte {
-	buf := (*[maxAllocSize]byte)(unsafe.Pointer(n))
-	return buf[n.pos : n.pos+n.ksize]
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-type leafPageElement struct {
-	flags uint32
-	pos   uint32
-	ksize uint32
-	vsize uint32
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (n *leafPageElement) key() []byte {
-	buf := (*[maxAllocSize]byte)(unsafe.Pointer(n))
-	return buf[n.pos : n.pos+n.ksize]
-}
-
-// DO NOT EDIT. Copied from the "bolt" package.
-func (n *leafPageElement) value() []byte {
-	buf := (*[maxAllocSize]byte)(unsafe.Pointer(n))
-	return buf[n.pos+n.ksize : n.pos+n.ksize+n.vsize]
-}
-
-// CompactCommand represents the "compact" command execution.
-type CompactCommand struct {
-	Stdin  io.Reader
-	Stdout io.Writer
-	Stderr io.Writer
-
-	SrcPath   string
-	DstPath   string
-	TxMaxSize int64
-}
-
-// newCompactCommand returns a CompactCommand.
-func newCompactCommand(m *Main) *CompactCommand {
-	return &CompactCommand{
-		Stdin:  m.Stdin,
-		Stdout: m.Stdout,
-		Stderr: m.Stderr,
-	}
-}
-
-// Run executes the command.
-func (cmd *CompactCommand) Run(args ...string) (err error) {
-	// Parse flags.
-	fs := flag.NewFlagSet("", flag.ContinueOnError)
-	fs.SetOutput(ioutil.Discard)
-	fs.StringVar(&cmd.DstPath, "o", "", "")
-	fs.Int64Var(&cmd.TxMaxSize, "tx-max-size", 65536, "")
-	if err := fs.Parse(args); err == flag.ErrHelp {
-		fmt.Fprintln(cmd.Stderr, cmd.Usage())
-		return ErrUsage
-	} else if err != nil {
-		return err
-	} else if cmd.DstPath == "" {
-		return fmt.Errorf("output file required")
-	}
-
-	// Require database paths.
-	cmd.SrcPath = fs.Arg(0)
-	if cmd.SrcPath == "" {
-		return ErrPathRequired
-	}
-
-	// Ensure source file exists.
-	fi, err := os.Stat(cmd.SrcPath)
-	if os.IsNotExist(err) {
-		return ErrFileNotFound
-	} else if err != nil {
-		return err
-	}
-	initialSize := fi.Size()
-
-	// Open source database.
-	src, err := bolt.Open(cmd.SrcPath, 0444, nil)
-	if err != nil {
-		return err
-	}
-	defer src.Close()
-
-	// Open destination database.
-	dst, err := bolt.Open(cmd.DstPath, fi.Mode(), nil)
-	if err != nil {
-		return err
-	}
-	defer dst.Close()
-
-	// Run compaction.
-	if err := cmd.compact(dst, src); err != nil {
-		return err
-	}
-
-	// Report stats on new size.
-	fi, err = os.Stat(cmd.DstPath)
-	if err != nil {
-		return err
-	} else if fi.Size() == 0 {
-		return fmt.Errorf("zero db size")
-	}
-	fmt.Fprintf(cmd.Stdout, "%d -> %d bytes (gain=%.2fx)\n", initialSize, fi.Size(), float64(initialSize)/float64(fi.Size()))
-
-	return nil
-}
-
-func (cmd *CompactCommand) compact(dst, src *bolt.DB) error {
-	// commit regularly, or we'll run out of memory for large datasets if using one transaction.
-	var size int64
-	tx, err := dst.Begin(true)
-	if err != nil {
-		return err
-	}
-	defer tx.Rollback()
-
-	if err := cmd.walk(src, func(keys [][]byte, k, v []byte, seq uint64) error {
-		// On each key/value, check if we have exceeded tx size.
-		sz := int64(len(k) + len(v))
-		if size+sz > cmd.TxMaxSize && cmd.TxMaxSize != 0 {
-			// Commit previous transaction.
-			if err := tx.Commit(); err != nil {
-				return err
-			}
-
-			// Start new transaction.
-			tx, err = dst.Begin(true)
-			if err != nil {
-				return err
-			}
-			size = 0
-		}
-		size += sz
-
-		// Create bucket on the root transaction if this is the first level.
-		nk := len(keys)
-		if nk == 0 {
-			bkt, err := tx.CreateBucket(k)
-			if err != nil {
-				return err
-			}
-			if err := bkt.SetSequence(seq); err != nil {
-				return err
-			}
-			return nil
-		}
-
-		// Create buckets on subsequent levels, if necessary.
-		b := tx.Bucket(keys[0])
-		if nk > 1 {
-			for _, k := range keys[1:] {
-				b = b.Bucket(k)
-			}
-		}
-
-		// Fill the entire page for best compaction.
-		b.FillPercent = 1.0
-
-		// If there is no value then this is a bucket call.
-		if v == nil {
-			bkt, err := b.CreateBucket(k)
-			if err != nil {
-				return err
-			}
-			if err := bkt.SetSequence(seq); err != nil {
-				return err
-			}
-			return nil
-		}
-
-		// Otherwise treat it as a key/value pair.
-		return b.Put(k, v)
-	}); err != nil {
-		return err
-	}
-
-	return tx.Commit()
-}
-
-// walkFunc is the type of the function called for keys (buckets and "normal"
-// values) discovered by Walk. keys is the list of keys to descend to the bucket
-// owning the discovered key/value pair k/v.
-type walkFunc func(keys [][]byte, k, v []byte, seq uint64) error
-
-// walk walks recursively the bolt database db, calling walkFn for each key it finds.
-func (cmd *CompactCommand) walk(db *bolt.DB, walkFn walkFunc) error {
-	return db.View(func(tx *bolt.Tx) error {
-		return tx.ForEach(func(name []byte, b *bolt.Bucket) error {
-			return cmd.walkBucket(b, nil, name, nil, b.Sequence(), walkFn)
-		})
-	})
-}
-
-func (cmd *CompactCommand) walkBucket(b *bolt.Bucket, keypath [][]byte, k, v []byte, seq uint64, fn walkFunc) error {
-	// Execute callback.
-	if err := fn(keypath, k, v, seq); err != nil {
-		return err
-	}
-
-	// If this is not a bucket then stop.
-	if v != nil {
-		return nil
-	}
-
-	// Iterate over each child key/value.
-	keypath = append(keypath, k)
-	return b.ForEach(func(k, v []byte) error {
-		if v == nil {
-			bkt := b.Bucket(k)
-			return cmd.walkBucket(bkt, keypath, k, nil, bkt.Sequence(), fn)
-		}
-		return cmd.walkBucket(b, keypath, k, v, b.Sequence(), fn)
-	})
-}
-
-// Usage returns the help message.
-func (cmd *CompactCommand) Usage() string {
-	return strings.TrimLeft(`
-usage: bolt compact [options] -o DST SRC
-
-Compact opens a database at SRC path and walks it recursively, copying keys
-as they are found from all buckets, to a newly created database at DST path.
-
-The original database is left untouched.
-
-Additional options include:
-
-	-tx-max-size NUM
-		Specifies the maximum size of individual transactions.
-		Defaults to 64KB.
-`, "\n")
-}
diff --git a/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main_test b/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main_test
deleted file mode 100644
index b4871ff..0000000
--- a/grove/vendor/go.etcd.io/bbolt/cmd/bbolt/main_test
+++ /dev/null
@@ -1,455 +0,0 @@
-package main_test
-
-import (
-	"bytes"
-	crypto "crypto/rand"
-	"encoding/binary"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"math/rand"
-	"os"
-	"strconv"
-	"testing"
-
-	bolt "go.etcd.io/bbolt"
-)
-
-// Ensure the "info" command can print information about a database.
-func TestInfoCommand_Run(t *testing.T) {
-	db := MustOpen(0666, nil)
-	db.DB.Close()
-	defer db.Close()
-
-	// Run the info command.
-	m := NewMain()
-	if err := m.Run("info", db.Path); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure the "stats" command executes correctly with an empty database.
-func TestStatsCommand_Run_EmptyDatabase(t *testing.T) {
-	// Ignore
-	if os.Getpagesize() != 4096 {
-		t.Skip("system does not use 4KB page size")
-	}
-
-	db := MustOpen(0666, nil)
-	defer db.Close()
-	db.DB.Close()
-
-	// Generate expected result.
-	exp := "Aggregate statistics for 0 buckets\n\n" +
-		"Page count statistics\n" +
-		"\tNumber of logical branch pages: 0\n" +
-		"\tNumber of physical branch overflow pages: 0\n" +
-		"\tNumber of logical leaf pages: 0\n" +
-		"\tNumber of physical leaf overflow pages: 0\n" +
-		"Tree statistics\n" +
-		"\tNumber of keys/value pairs: 0\n" +
-		"\tNumber of levels in B+tree: 0\n" +
-		"Page size utilization\n" +
-		"\tBytes allocated for physical branch pages: 0\n" +
-		"\tBytes actually used for branch data: 0 (0%)\n" +
-		"\tBytes allocated for physical leaf pages: 0\n" +
-		"\tBytes actually used for leaf data: 0 (0%)\n" +
-		"Bucket statistics\n" +
-		"\tTotal number of buckets: 0\n" +
-		"\tTotal number on inlined buckets: 0 (0%)\n" +
-		"\tBytes used for inlined buckets: 0 (0%)\n"
-
-	// Run the command.
-	m := NewMain()
-	if err := m.Run("stats", db.Path); err != nil {
-		t.Fatal(err)
-	} else if m.Stdout.String() != exp {
-		t.Fatalf("unexpected stdout:\n\n%s", m.Stdout.String())
-	}
-}
-
-// Ensure the "stats" command can execute correctly.
-func TestStatsCommand_Run(t *testing.T) {
-	// Ignore
-	if os.Getpagesize() != 4096 {
-		t.Skip("system does not use 4KB page size")
-	}
-
-	db := MustOpen(0666, nil)
-	defer db.Close()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		// Create "foo" bucket.
-		b, err := tx.CreateBucket([]byte("foo"))
-		if err != nil {
-			return err
-		}
-		for i := 0; i < 10; i++ {
-			if err := b.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
-				return err
-			}
-		}
-
-		// Create "bar" bucket.
-		b, err = tx.CreateBucket([]byte("bar"))
-		if err != nil {
-			return err
-		}
-		for i := 0; i < 100; i++ {
-			if err := b.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
-				return err
-			}
-		}
-
-		// Create "baz" bucket.
-		b, err = tx.CreateBucket([]byte("baz"))
-		if err != nil {
-			return err
-		}
-		if err := b.Put([]byte("key"), []byte("value")); err != nil {
-			return err
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.DB.Close()
-
-	// Generate expected result.
-	exp := "Aggregate statistics for 3 buckets\n\n" +
-		"Page count statistics\n" +
-		"\tNumber of logical branch pages: 0\n" +
-		"\tNumber of physical branch overflow pages: 0\n" +
-		"\tNumber of logical leaf pages: 1\n" +
-		"\tNumber of physical leaf overflow pages: 0\n" +
-		"Tree statistics\n" +
-		"\tNumber of keys/value pairs: 111\n" +
-		"\tNumber of levels in B+tree: 1\n" +
-		"Page size utilization\n" +
-		"\tBytes allocated for physical branch pages: 0\n" +
-		"\tBytes actually used for branch data: 0 (0%)\n" +
-		"\tBytes allocated for physical leaf pages: 4096\n" +
-		"\tBytes actually used for leaf data: 1996 (48%)\n" +
-		"Bucket statistics\n" +
-		"\tTotal number of buckets: 3\n" +
-		"\tTotal number on inlined buckets: 2 (66%)\n" +
-		"\tBytes used for inlined buckets: 236 (11%)\n"
-
-	// Run the command.
-	m := NewMain()
-	if err := m.Run("stats", db.Path); err != nil {
-		t.Fatal(err)
-	} else if m.Stdout.String() != exp {
-		t.Fatalf("unexpected stdout:\n\n%s", m.Stdout.String())
-	}
-}
-
-// Ensure the "buckets" command can print a list of buckets.
-func TestBucketsCommand_Run(t *testing.T) {
-	db := MustOpen(0666, nil)
-	defer db.Close()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		for _, name := range []string{"foo", "bar", "baz"} {
-			_, err := tx.CreateBucket([]byte(name))
-			if err != nil {
-				return err
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.DB.Close()
-
-	expected := "bar\nbaz\nfoo\n"
-
-	// Run the command.
-	m := NewMain()
-	if err := m.Run("buckets", db.Path); err != nil {
-		t.Fatal(err)
-	} else if actual := m.Stdout.String(); actual != expected {
-		t.Fatalf("unexpected stdout:\n\n%s", actual)
-	}
-}
-
-// Ensure the "keys" command can print a list of keys for a bucket.
-func TestKeysCommand_Run(t *testing.T) {
-	db := MustOpen(0666, nil)
-	defer db.Close()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		for _, name := range []string{"foo", "bar"} {
-			b, err := tx.CreateBucket([]byte(name))
-			if err != nil {
-				return err
-			}
-			for i := 0; i < 3; i++ {
-				key := fmt.Sprintf("%s-%d", name, i)
-				if err := b.Put([]byte(key), []byte{0}); err != nil {
-					return err
-				}
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.DB.Close()
-
-	expected := "foo-0\nfoo-1\nfoo-2\n"
-
-	// Run the command.
-	m := NewMain()
-	if err := m.Run("keys", db.Path, "foo"); err != nil {
-		t.Fatal(err)
-	} else if actual := m.Stdout.String(); actual != expected {
-		t.Fatalf("unexpected stdout:\n\n%s", actual)
-	}
-}
-
-// Ensure the "get" command can print the value of a key in a bucket.
-func TestGetCommand_Run(t *testing.T) {
-	db := MustOpen(0666, nil)
-	defer db.Close()
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		for _, name := range []string{"foo", "bar"} {
-			b, err := tx.CreateBucket([]byte(name))
-			if err != nil {
-				return err
-			}
-			for i := 0; i < 3; i++ {
-				key := fmt.Sprintf("%s-%d", name, i)
-				val := fmt.Sprintf("val-%s-%d", name, i)
-				if err := b.Put([]byte(key), []byte(val)); err != nil {
-					return err
-				}
-			}
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-	db.DB.Close()
-
-	expected := "val-foo-1\n"
-
-	// Run the command.
-	m := NewMain()
-	if err := m.Run("get", db.Path, "foo", "foo-1"); err != nil {
-		t.Fatal(err)
-	} else if actual := m.Stdout.String(); actual != expected {
-		t.Fatalf("unexpected stdout:\n\n%s", actual)
-	}
-}
-
-// Main represents a test wrapper for main.Main that records output.
-type Main struct {
-	*main.Main
-	Stdin  bytes.Buffer
-	Stdout bytes.Buffer
-	Stderr bytes.Buffer
-}
-
-// NewMain returns a new instance of Main.
-func NewMain() *Main {
-	m := &Main{Main: main.NewMain()}
-	m.Main.Stdin = &m.Stdin
-	m.Main.Stdout = &m.Stdout
-	m.Main.Stderr = &m.Stderr
-	return m
-}
-
-// MustOpen creates a Bolt database in a temporary location.
-func MustOpen(mode os.FileMode, options *bolt.Options) *DB {
-	// Create temporary path.
-	f, _ := ioutil.TempFile("", "bolt-")
-	f.Close()
-	os.Remove(f.Name())
-
-	db, err := bolt.Open(f.Name(), mode, options)
-	if err != nil {
-		panic(err.Error())
-	}
-	return &DB{DB: db, Path: f.Name()}
-}
-
-// DB is a test wrapper for bolt.DB.
-type DB struct {
-	*bolt.DB
-	Path string
-}
-
-// Close closes and removes the database.
-func (db *DB) Close() error {
-	defer os.Remove(db.Path)
-	return db.DB.Close()
-}
-
-func TestCompactCommand_Run(t *testing.T) {
-	var s int64
-	if err := binary.Read(crypto.Reader, binary.BigEndian, &s); err != nil {
-		t.Fatal(err)
-	}
-	rand.Seed(s)
-
-	dstdb := MustOpen(0666, nil)
-	dstdb.Close()
-
-	// fill the db
-	db := MustOpen(0666, nil)
-	if err := db.Update(func(tx *bolt.Tx) error {
-		n := 2 + rand.Intn(5)
-		for i := 0; i < n; i++ {
-			k := []byte(fmt.Sprintf("b%d", i))
-			b, err := tx.CreateBucketIfNotExists(k)
-			if err != nil {
-				return err
-			}
-			if err := b.SetSequence(uint64(i)); err != nil {
-				return err
-			}
-			if err := fillBucket(b, append(k, '.')); err != nil {
-				return err
-			}
-		}
-		return nil
-	}); err != nil {
-		db.Close()
-		t.Fatal(err)
-	}
-
-	// make the db grow by adding large values, and delete them.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucketIfNotExists([]byte("large_vals"))
-		if err != nil {
-			return err
-		}
-		n := 5 + rand.Intn(5)
-		for i := 0; i < n; i++ {
-			v := make([]byte, 1000*1000*(1+rand.Intn(5)))
-			_, err := crypto.Read(v)
-			if err != nil {
-				return err
-			}
-			if err := b.Put([]byte(fmt.Sprintf("l%d", i)), v); err != nil {
-				return err
-			}
-		}
-		return nil
-	}); err != nil {
-		db.Close()
-		t.Fatal(err)
-	}
-	if err := db.Update(func(tx *bolt.Tx) error {
-		c := tx.Bucket([]byte("large_vals")).Cursor()
-		for k, _ := c.First(); k != nil; k, _ = c.Next() {
-			if err := c.Delete(); err != nil {
-				return err
-			}
-		}
-		return tx.DeleteBucket([]byte("large_vals"))
-	}); err != nil {
-		db.Close()
-		t.Fatal(err)
-	}
-	db.DB.Close()
-	defer db.Close()
-	defer dstdb.Close()
-
-	dbChk, err := chkdb(db.Path)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	m := NewMain()
-	if err := m.Run("compact", "-o", dstdb.Path, db.Path); err != nil {
-		t.Fatal(err)
-	}
-
-	dbChkAfterCompact, err := chkdb(db.Path)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	dstdbChk, err := chkdb(dstdb.Path)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if !bytes.Equal(dbChk, dbChkAfterCompact) {
-		t.Error("the original db has been touched")
-	}
-	if !bytes.Equal(dbChk, dstdbChk) {
-		t.Error("the compacted db data isn't the same than the original db")
-	}
-}
-
-func fillBucket(b *bolt.Bucket, prefix []byte) error {
-	n := 10 + rand.Intn(50)
-	for i := 0; i < n; i++ {
-		v := make([]byte, 10*(1+rand.Intn(4)))
-		_, err := crypto.Read(v)
-		if err != nil {
-			return err
-		}
-		k := append(prefix, []byte(fmt.Sprintf("k%d", i))...)
-		if err := b.Put(k, v); err != nil {
-			return err
-		}
-	}
-	// limit depth of subbuckets
-	s := 2 + rand.Intn(4)
-	if len(prefix) > (2*s + 1) {
-		return nil
-	}
-	n = 1 + rand.Intn(3)
-	for i := 0; i < n; i++ {
-		k := append(prefix, []byte(fmt.Sprintf("b%d", i))...)
-		sb, err := b.CreateBucket(k)
-		if err != nil {
-			return err
-		}
-		if err := fillBucket(sb, append(k, '.')); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func chkdb(path string) ([]byte, error) {
-	db, err := bolt.Open(path, 0666, nil)
-	if err != nil {
-		return nil, err
-	}
-	defer db.Close()
-	var buf bytes.Buffer
-	err = db.View(func(tx *bolt.Tx) error {
-		return tx.ForEach(func(name []byte, b *bolt.Bucket) error {
-			return walkBucket(b, name, nil, &buf)
-		})
-	})
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-
-func walkBucket(parent *bolt.Bucket, k []byte, v []byte, w io.Writer) error {
-	if _, err := fmt.Fprintf(w, "%d:%x=%x\n", parent.Sequence(), k, v); err != nil {
-		return err
-	}
-
-	// not a bucket, exit.
-	if v != nil {
-		return nil
-	}
-	return parent.ForEach(func(k, v []byte) error {
-		if v == nil {
-			return walkBucket(parent.Bucket(k), k, nil, w)
-		}
-		return walkBucket(parent, k, v, w)
-	})
-}
diff --git a/grove/vendor/go.etcd.io/bbolt/cursor_test.go b/grove/vendor/go.etcd.io/bbolt/cursor_test.go
deleted file mode 100644
index d2a8bc7..0000000
--- a/grove/vendor/go.etcd.io/bbolt/cursor_test.go
+++ /dev/null
@@ -1,817 +0,0 @@
-package bbolt_test
-
-import (
-	"bytes"
-	"encoding/binary"
-	"fmt"
-	"log"
-	"os"
-	"reflect"
-	"sort"
-	"testing"
-	"testing/quick"
-
-	bolt "go.etcd.io/bbolt"
-)
-
-// Ensure that a cursor can return a reference to the bucket that created it.
-func TestCursor_Bucket(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if cb := b.Cursor().Bucket(); !reflect.DeepEqual(cb, b) {
-			t.Fatal("cursor bucket mismatch")
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-// Ensure that a Tx cursor can seek to the appropriate keys.
-func TestCursor_Seek(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("foo"), []byte("0001")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("bar"), []byte("0002")); err != nil {
-			t.Fatal(err)
-		}
-		if err := b.Put([]byte("baz"), []byte("0003")); err != nil {
-			t.Fatal(err)
-		}
-
-		if _, err := b.CreateBucket([]byte("bkt")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		c := tx.Bucket([]byte("widgets")).Cursor()
-
-		// Exact match should go to the key.
-		if k, v := c.Seek([]byte("bar")); !bytes.Equal(k, []byte("bar")) {
-			t.Fatalf("unexpected key: %v", k)
-		} else if !bytes.Equal(v, []byte("0002")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-
-		// Inexact match should go to the next key.
-		if k, v := c.Seek([]byte("bas")); !bytes.Equal(k, []byte("baz")) {
-			t.Fatalf("unexpected key: %v", k)
-		} else if !bytes.Equal(v, []byte("0003")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-
-		// Low key should go to the first key.
-		if k, v := c.Seek([]byte("")); !bytes.Equal(k, []byte("bar")) {
-			t.Fatalf("unexpected key: %v", k)
-		} else if !bytes.Equal(v, []byte("0002")) {
-			t.Fatalf("unexpected value: %v", v)
-		}
-
-		// High key should return no key.
-		if k, v := c.Seek([]byte("zzz")); k != nil {
-			t.Fatalf("expected nil key: %v", k)
-		} else if v != nil {
-			t.Fatalf("expected nil value: %v", v)
-		}
-
-		// Buckets should return their key but no value.
-		if k, v := c.Seek([]byte("bkt")); !bytes.Equal(k, []byte("bkt")) {
-			t.Fatalf("unexpected key: %v", k)
-		} else if v != nil {
-			t.Fatalf("expected nil value: %v", v)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-}
-
-func TestCursor_Delete(t *testing.T) {
-	db := MustOpenDB()
-	defer db.MustClose()
-
-	const count = 1000
-
-	// Insert every other key between 0 and $count.
-	if err := db.Update(func(tx *bolt.Tx) error {
-		b, err := tx.CreateBucket([]byte("widgets"))
-		if err != nil {
-			t.Fatal(err)
-		}
-		for i := 0; i < count; i += 1 {
-			k := make([]byte, 8)
-			binary.BigEndian.PutUint64(k, uint64(i))
-			if err := b.Put(k, make([]byte, 100)); err != nil {
-				t.Fatal(err)
-			}
-		}
-		if _, err := b.CreateBucket([]byte("sub")); err != nil {
-			t.Fatal(err)
-		}
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.Update(func(tx *bolt.Tx) error {
-		c := tx.Bucket([]byte("widgets")).Cursor()
-		bound := make([]byte, 8)
-		binary.BigEndian.PutUint64(bound, uint64(count/2))
-		for key, _ := c.First(); bytes.Compare(key, bound) < 0; key, _ = c.Next() {
-			if err := c.Delete(); err != nil {
-				t.Fatal(err)
-			}
-		}
-
-		c.Seek([]byte("sub"))
-		if err := c.Delete(); err != bolt.ErrIncompatibleValue {
-			t.Fatalf("unexpected error: %s", err)
-		}
-
-		return nil
-	}); err != nil {
-		t.Fatal(err)
-	}
-
-	if err := db.View(func(tx *bolt.Tx) error {
-		stats := tx.Bucket([]byte("widgets")).Stats()
-		if stats.KeyN != count/2+1 {
... 487635 lines suppressed ...