Full Code of mozilla/tls-observatory for AI

master eef96233227e cached
2890 files
71.7 MB
7.5M tokens
107676 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (30,011K chars total). Download the full file to get everything.
Repository: mozilla/tls-observatory
Branch: master
Commit: eef96233227e
Files: 2890
Total size: 71.7 MB

Directory structure:
gitextract_augxgva_/

├── .circleci/
│   └── config.yml
├── .gitignore
├── .gitmodules
├── CODE_OF_CONDUCT.md
├── Dockerfile
├── LICENSE
├── Makefile
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── certificate/
│   ├── certificate.go
│   ├── certificate_test.go
│   ├── constraints/
│   │   ├── constraints.go
│   │   └── vendor/
│   │       └── constraintcrypto/
│   │           └── x509/
│   │               ├── cert_pool.go
│   │               ├── example_test.go
│   │               ├── pem_decrypt.go
│   │               ├── pem_decrypt_test.go
│   │               ├── pkcs1.go
│   │               ├── pkcs8.go
│   │               ├── pkcs8_test.go
│   │               ├── pkix/
│   │               │   └── pkix.go
│   │               ├── root.go
│   │               ├── root_bsd.go
│   │               ├── root_cgo_darwin.go
│   │               ├── root_darwin.go
│   │               ├── root_darwin_arm_gen.go
│   │               ├── root_darwin_armx.go
│   │               ├── root_darwin_test.go
│   │               ├── root_linux.go
│   │               ├── root_nacl.go
│   │               ├── root_nocgo_darwin.go
│   │               ├── root_plan9.go
│   │               ├── root_solaris.go
│   │               ├── root_unix.go
│   │               ├── root_windows.go
│   │               ├── sec1.go
│   │               ├── sec1_test.go
│   │               ├── sha2_windows_test.go
│   │               ├── verify.go
│   │               ├── verify_test.go
│   │               ├── x509.go
│   │               ├── x509_test.go
│   │               └── x509_test_import.go
│   └── paths.go
├── conf/
│   ├── alexa-top-1m.csv
│   ├── api.cfg
│   ├── cisco-top-1m.csv
│   ├── runner.yaml
│   ├── runner_env.sh
│   ├── scanner.cfg
│   └── truststores/
│       ├── CA_AOSP.crt
│       ├── CA_apple_10.10.0.crt
│       ├── CA_apple_10.8.5.crt
│       ├── CA_apple_10.9.5.crt
│       ├── CA_apple_latest.crt
│       ├── CA_java.crt
│       ├── CA_microsoft.crt
│       ├── CA_mozilla_nss.crt
│       ├── CA_ubuntu_12.04.crt
│       └── CA_ubuntu_latest.crt
├── config/
│   └── config.go
├── connection/
│   ├── connection.go
│   └── retriever.go
├── constants/
│   ├── ciphersuites.go
│   ├── curves.go
│   └── protocols.go
├── database/
│   ├── certificate.go
│   ├── database.go
│   ├── messaging.go
│   ├── migrations/
│   │   ├── 1.3.3.sql
│   │   └── 1.3.5.sql
│   ├── schema.sql
│   └── stats.go
├── go.mod
├── go.sum
├── kubernetes/
│   ├── README.md
│   ├── deployment.yaml
│   └── setup_db.yaml
├── logger/
│   └── logger.go
├── metrics/
│   └── metrics.go
├── static/
│   ├── .eslintrc.js
│   ├── certsplainer.css
│   ├── certsplainer.html
│   ├── certsplainer.js
│   ├── custom.css
│   ├── ev-checker.html
│   ├── ev-checker.js
│   ├── index.html
│   └── style.css
├── tlsobs/
│   └── main.go
├── tlsobs-api/
│   ├── handlers.go
│   ├── helpers.go
│   ├── insert_test.go
│   ├── main.go
│   ├── middleware.go
│   └── router.go
├── tlsobs-runner/
│   ├── assertions.go
│   ├── main.go
│   ├── main_test.go
│   └── notifications.go
├── tlsobs-scanner/
│   ├── analyser.go
│   ├── main.go
│   ├── retriever.go
│   └── workerconfig.go
├── tools/
│   ├── MakeMarkdownTOC.rb
│   ├── aws_create_env.sh
│   ├── ciphersuites_names.json
│   ├── ebs-api-options.json
│   ├── ebs-worker-options.json
│   ├── extractCiphersuites.go
│   ├── fixDupCerts.go
│   ├── fixExtensions.go
│   ├── fixKeyInfo.go
│   ├── fixSHA256SubjectSPKI.go
│   ├── fixSerial.go
│   ├── fixserialnumber.go
│   ├── fixsubjectNames.go
│   ├── fixvalidity.go
│   ├── getPaths.go
│   ├── initMozPolicy.go
│   ├── monthly_report.sql
│   ├── pullCTLogs.go
│   ├── pullCTLogsIntoDB.go
│   ├── rescanDomains.go
│   ├── retrieveIntermediatesFromCADatabase.go
│   ├── retrieveTruststoreFromCADatabase.go
│   ├── tls-observatory-api-elasticbeanstalk.json
│   ├── tls-observatory-scanner-elasticbeanstalk.json
│   └── updateCertificate.go
├── vendor/
│   ├── github.com/
│   │   ├── BurntSushi/
│   │   │   └── toml/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── COMPATIBLE
│   │   │       ├── COPYING
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── decode.go
│   │   │       ├── decode_meta.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── encoding_types.go
│   │   │       ├── encoding_types_1.1.go
│   │   │       ├── lex.go
│   │   │       ├── parse.go
│   │   │       ├── session.vim
│   │   │       ├── type_check.go
│   │   │       └── type_fields.go
│   │   ├── aws/
│   │   │   └── aws-sdk-go/
│   │   │       ├── LICENSE.txt
│   │   │       ├── NOTICE.txt
│   │   │       ├── aws/
│   │   │       │   ├── awserr/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── types.go
│   │   │       │   ├── awsutil/
│   │   │       │   │   ├── copy.go
│   │   │       │   │   ├── equal.go
│   │   │       │   │   ├── path_value.go
│   │   │       │   │   ├── prettify.go
│   │   │       │   │   └── string_value.go
│   │   │       │   ├── client/
│   │   │       │   │   ├── client.go
│   │   │       │   │   ├── default_retryer.go
│   │   │       │   │   ├── logger.go
│   │   │       │   │   ├── metadata/
│   │   │       │   │   │   └── client_info.go
│   │   │       │   │   └── no_op_retryer.go
│   │   │       │   ├── config.go
│   │   │       │   ├── context_1_5.go
│   │   │       │   ├── context_1_9.go
│   │   │       │   ├── context_background_1_5.go
│   │   │       │   ├── context_background_1_7.go
│   │   │       │   ├── context_sleep.go
│   │   │       │   ├── convert_types.go
│   │   │       │   ├── corehandlers/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── param_validator.go
│   │   │       │   │   └── user_agent.go
│   │   │       │   ├── credentials/
│   │   │       │   │   ├── chain_provider.go
│   │   │       │   │   ├── context_background_go1.5.go
│   │   │       │   │   ├── context_background_go1.7.go
│   │   │       │   │   ├── context_go1.5.go
│   │   │       │   │   ├── context_go1.9.go
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── ec2rolecreds/
│   │   │       │   │   │   └── ec2_role_provider.go
│   │   │       │   │   ├── endpointcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── env_provider.go
│   │   │       │   │   ├── example.ini
│   │   │       │   │   ├── processcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── shared_credentials_provider.go
│   │   │       │   │   ├── static_provider.go
│   │   │       │   │   └── stscreds/
│   │   │       │   │       ├── assume_role_provider.go
│   │   │       │   │       └── web_identity_provider.go
│   │   │       │   ├── csm/
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── enable.go
│   │   │       │   │   ├── metric.go
│   │   │       │   │   ├── metric_chan.go
│   │   │       │   │   ├── metric_exception.go
│   │   │       │   │   └── reporter.go
│   │   │       │   ├── defaults/
│   │   │       │   │   ├── defaults.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── doc.go
│   │   │       │   ├── ec2metadata/
│   │   │       │   │   ├── api.go
│   │   │       │   │   ├── service.go
│   │   │       │   │   └── token_provider.go
│   │   │       │   ├── endpoints/
│   │   │       │   │   ├── decode.go
│   │   │       │   │   ├── defaults.go
│   │   │       │   │   ├── dep_service_ids.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── endpoints.go
│   │   │       │   │   ├── legacy_regions.go
│   │   │       │   │   ├── v3model.go
│   │   │       │   │   └── v3model_codegen.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── jsonvalue.go
│   │   │       │   ├── logger.go
│   │   │       │   ├── request/
│   │   │       │   │   ├── connection_reset_error.go
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── http_request.go
│   │   │       │   │   ├── offset_reader.go
│   │   │       │   │   ├── request.go
│   │   │       │   │   ├── request_1_7.go
│   │   │       │   │   ├── request_1_8.go
│   │   │       │   │   ├── request_context.go
│   │   │       │   │   ├── request_context_1_6.go
│   │   │       │   │   ├── request_pagination.go
│   │   │       │   │   ├── retryer.go
│   │   │       │   │   ├── timeout_read_closer.go
│   │   │       │   │   ├── validation.go
│   │   │       │   │   └── waiter.go
│   │   │       │   ├── session/
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── custom_transport.go
│   │   │       │   │   ├── custom_transport_go1.12.go
│   │   │       │   │   ├── custom_transport_go1.5.go
│   │   │       │   │   ├── custom_transport_go1.6.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── env_config.go
│   │   │       │   │   ├── session.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── signer/
│   │   │       │   │   └── v4/
│   │   │       │   │       ├── header_rules.go
│   │   │       │   │       ├── options.go
│   │   │       │   │       ├── request_context_go1.5.go
│   │   │       │   │       ├── request_context_go1.7.go
│   │   │       │   │       ├── stream.go
│   │   │       │   │       ├── uri_path.go
│   │   │       │   │       └── v4.go
│   │   │       │   ├── types.go
│   │   │       │   ├── url.go
│   │   │       │   ├── url_1_7.go
│   │   │       │   └── version.go
│   │   │       ├── internal/
│   │   │       │   ├── context/
│   │   │       │   │   └── background_go1.5.go
│   │   │       │   ├── ini/
│   │   │       │   │   ├── ast.go
│   │   │       │   │   ├── comma_token.go
│   │   │       │   │   ├── comment_token.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── empty_token.go
│   │   │       │   │   ├── expression.go
│   │   │       │   │   ├── fuzz.go
│   │   │       │   │   ├── ini.go
│   │   │       │   │   ├── ini_lexer.go
│   │   │       │   │   ├── ini_parser.go
│   │   │       │   │   ├── literal_tokens.go
│   │   │       │   │   ├── newline_token.go
│   │   │       │   │   ├── number_helper.go
│   │   │       │   │   ├── op_tokens.go
│   │   │       │   │   ├── parse_error.go
│   │   │       │   │   ├── parse_stack.go
│   │   │       │   │   ├── sep_tokens.go
│   │   │       │   │   ├── skipper.go
│   │   │       │   │   ├── statement.go
│   │   │       │   │   ├── value_util.go
│   │   │       │   │   ├── visitor.go
│   │   │       │   │   ├── walker.go
│   │   │       │   │   └── ws_token.go
│   │   │       │   ├── sdkio/
│   │   │       │   │   ├── byte.go
│   │   │       │   │   ├── io_go1.6.go
│   │   │       │   │   └── io_go1.7.go
│   │   │       │   ├── sdkmath/
│   │   │       │   │   ├── floor.go
│   │   │       │   │   └── floor_go1.9.go
│   │   │       │   ├── sdkrand/
│   │   │       │   │   ├── locked_source.go
│   │   │       │   │   ├── read.go
│   │   │       │   │   └── read_1_5.go
│   │   │       │   ├── sdkuri/
│   │   │       │   │   └── path.go
│   │   │       │   ├── shareddefaults/
│   │   │       │   │   ├── ecs_container.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── strings/
│   │   │       │   │   └── strings.go
│   │   │       │   └── sync/
│   │   │       │       └── singleflight/
│   │   │       │           ├── LICENSE
│   │   │       │           └── singleflight.go
│   │   │       ├── private/
│   │   │       │   └── protocol/
│   │   │       │       ├── host.go
│   │   │       │       ├── host_prefix.go
│   │   │       │       ├── idempotency.go
│   │   │       │       ├── json/
│   │   │       │       │   └── jsonutil/
│   │   │       │       │       ├── build.go
│   │   │       │       │       └── unmarshal.go
│   │   │       │       ├── jsonvalue.go
│   │   │       │       ├── payload.go
│   │   │       │       ├── protocol.go
│   │   │       │       ├── query/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── queryutil/
│   │   │       │       │   │   └── queryutil.go
│   │   │       │       │   ├── unmarshal.go
│   │   │       │       │   └── unmarshal_error.go
│   │   │       │       ├── rest/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── payload.go
│   │   │       │       │   └── unmarshal.go
│   │   │       │       ├── timestamp.go
│   │   │       │       ├── unmarshal.go
│   │   │       │       ├── unmarshal_error.go
│   │   │       │       └── xml/
│   │   │       │           └── xmlutil/
│   │   │       │               ├── build.go
│   │   │       │               ├── sort.go
│   │   │       │               ├── unmarshal.go
│   │   │       │               └── xml_to_struct.go
│   │   │       └── service/
│   │   │           ├── cloudwatch/
│   │   │           │   ├── api.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── service.go
│   │   │           │   └── waiters.go
│   │   │           └── sts/
│   │   │               ├── api.go
│   │   │               ├── customizations.go
│   │   │               ├── doc.go
│   │   │               ├── errors.go
│   │   │               ├── service.go
│   │   │               └── stsiface/
│   │   │                   └── interface.go
│   │   ├── beorn7/
│   │   │   └── perks/
│   │   │       ├── LICENSE
│   │   │       └── quantile/
│   │   │           ├── exampledata.txt
│   │   │           └── stream.go
│   │   ├── bgentry/
│   │   │   └── speakeasy/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── LICENSE_WINDOWS
│   │   │       ├── Readme.md
│   │   │       ├── speakeasy.go
│   │   │       ├── speakeasy_unix.go
│   │   │       └── speakeasy_windows.go
│   │   ├── cespare/
│   │   │   └── xxhash/
│   │   │       └── v2/
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── go.mod
│   │   │           ├── go.sum
│   │   │           ├── xxhash.go
│   │   │           ├── xxhash_amd64.go
│   │   │           ├── xxhash_amd64.s
│   │   │           ├── xxhash_other.go
│   │   │           ├── xxhash_safe.go
│   │   │           └── xxhash_unsafe.go
│   │   ├── coreos/
│   │   │   ├── go-semver/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── semver/
│   │   │   │       ├── semver.go
│   │   │   │       └── sort.go
│   │   │   ├── go-systemd/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── daemon/
│   │   │   │   │   ├── sdnotify.go
│   │   │   │   │   └── watchdog.go
│   │   │   │   └── journal/
│   │   │   │       └── journal.go
│   │   │   └── pkg/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── capnslog/
│   │   │           ├── README.md
│   │   │           ├── formatters.go
│   │   │           ├── glog_formatter.go
│   │   │           ├── init.go
│   │   │           ├── init_windows.go
│   │   │           ├── journald_formatter.go
│   │   │           ├── log_hijack.go
│   │   │           ├── logmap.go
│   │   │           ├── pkg_logger.go
│   │   │           └── syslog_formatter.go
│   │   ├── cpuguy83/
│   │   │   └── go-md2man/
│   │   │       └── v2/
│   │   │           ├── LICENSE.md
│   │   │           └── md2man/
│   │   │               ├── md2man.go
│   │   │               └── roff.go
│   │   ├── dgrijalva/
│   │   │   └── jwt-go/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── MIGRATION_GUIDE.md
│   │   │       ├── README.md
│   │   │       ├── VERSION_HISTORY.md
│   │   │       ├── claims.go
│   │   │       ├── doc.go
│   │   │       ├── ecdsa.go
│   │   │       ├── ecdsa_utils.go
│   │   │       ├── errors.go
│   │   │       ├── hmac.go
│   │   │       ├── map_claims.go
│   │   │       ├── none.go
│   │   │       ├── parser.go
│   │   │       ├── rsa.go
│   │   │       ├── rsa_pss.go
│   │   │       ├── rsa_utils.go
│   │   │       ├── signing_method.go
│   │   │       └── token.go
│   │   ├── dustin/
│   │   │   └── go-humanize/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.markdown
│   │   │       ├── big.go
│   │   │       ├── bigbytes.go
│   │   │       ├── bytes.go
│   │   │       ├── comma.go
│   │   │       ├── commaf.go
│   │   │       ├── ftoa.go
│   │   │       ├── humanize.go
│   │   │       ├── number.go
│   │   │       ├── ordinals.go
│   │   │       ├── si.go
│   │   │       └── times.go
│   │   ├── fatih/
│   │   │   └── color/
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── color.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       └── go.sum
│   │   ├── gogo/
│   │   │   └── protobuf/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── gogoproto/
│   │   │       │   ├── Makefile
│   │   │       │   ├── doc.go
│   │   │       │   ├── gogo.pb.go
│   │   │       │   ├── gogo.pb.golden
│   │   │       │   ├── gogo.proto
│   │   │       │   └── helper.go
│   │   │       ├── proto/
│   │   │       │   ├── Makefile
│   │   │       │   ├── clone.go
│   │   │       │   ├── custom_gogo.go
│   │   │       │   ├── decode.go
│   │   │       │   ├── deprecated.go
│   │   │       │   ├── discard.go
│   │   │       │   ├── duration.go
│   │   │       │   ├── duration_gogo.go
│   │   │       │   ├── encode.go
│   │   │       │   ├── encode_gogo.go
│   │   │       │   ├── equal.go
│   │   │       │   ├── extensions.go
│   │   │       │   ├── extensions_gogo.go
│   │   │       │   ├── lib.go
│   │   │       │   ├── lib_gogo.go
│   │   │       │   ├── message_set.go
│   │   │       │   ├── pointer_reflect.go
│   │   │       │   ├── pointer_reflect_gogo.go
│   │   │       │   ├── pointer_unsafe.go
│   │   │       │   ├── pointer_unsafe_gogo.go
│   │   │       │   ├── properties.go
│   │   │       │   ├── properties_gogo.go
│   │   │       │   ├── skip_gogo.go
│   │   │       │   ├── table_marshal.go
│   │   │       │   ├── table_marshal_gogo.go
│   │   │       │   ├── table_merge.go
│   │   │       │   ├── table_unmarshal.go
│   │   │       │   ├── table_unmarshal_gogo.go
│   │   │       │   ├── text.go
│   │   │       │   ├── text_gogo.go
│   │   │       │   ├── text_parser.go
│   │   │       │   ├── timestamp.go
│   │   │       │   ├── timestamp_gogo.go
│   │   │       │   ├── wrappers.go
│   │   │       │   └── wrappers_gogo.go
│   │   │       └── protoc-gen-gogo/
│   │   │           └── descriptor/
│   │   │               ├── Makefile
│   │   │               ├── descriptor.go
│   │   │               ├── descriptor.pb.go
│   │   │               ├── descriptor_gostring.gen.go
│   │   │               └── helper.go
│   │   ├── golang/
│   │   │   ├── glog/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── glog.go
│   │   │   │   └── glog_file.go
│   │   │   ├── groupcache/
│   │   │   │   ├── LICENSE
│   │   │   │   └── lru/
│   │   │   │       └── lru.go
│   │   │   ├── mock/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   └── mockgen/
│   │   │   │       ├── mockgen.go
│   │   │   │       ├── model/
│   │   │   │       │   └── model.go
│   │   │   │       ├── parse.go
│   │   │   │       ├── reflect.go
│   │   │   │       ├── version.1.11.go
│   │   │   │       └── version.1.12.go
│   │   │   └── protobuf/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── descriptor/
│   │   │       │   └── descriptor.go
│   │   │       ├── internal/
│   │   │       │   └── gengogrpc/
│   │   │       │       └── grpc.go
│   │   │       ├── jsonpb/
│   │   │       │   ├── decode.go
│   │   │       │   ├── encode.go
│   │   │       │   └── json.go
│   │   │       ├── proto/
│   │   │       │   ├── buffer.go
│   │   │       │   ├── defaults.go
│   │   │       │   ├── deprecated.go
│   │   │       │   ├── discard.go
│   │   │       │   ├── extensions.go
│   │   │       │   ├── properties.go
│   │   │       │   ├── proto.go
│   │   │       │   ├── registry.go
│   │   │       │   ├── text_decode.go
│   │   │       │   ├── text_encode.go
│   │   │       │   ├── wire.go
│   │   │       │   └── wrappers.go
│   │   │       ├── protoc-gen-go/
│   │   │       │   ├── descriptor/
│   │   │       │   │   └── descriptor.pb.go
│   │   │       │   └── main.go
│   │   │       └── ptypes/
│   │   │           ├── any/
│   │   │           │   └── any.pb.go
│   │   │           ├── any.go
│   │   │           ├── doc.go
│   │   │           ├── duration/
│   │   │           │   └── duration.pb.go
│   │   │           ├── duration.go
│   │   │           ├── timestamp/
│   │   │           │   └── timestamp.pb.go
│   │   │           ├── timestamp.go
│   │   │           └── wrappers/
│   │   │               └── wrappers.pb.go
│   │   ├── google/
│   │   │   ├── btree/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   └── btree.go
│   │   │   ├── certificate-transparency-go/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .golangci.yaml
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CHANGELOG.md
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   ├── PULL_REQUEST_TEMPLATE.md
│   │   │   │   ├── README.md
│   │   │   │   ├── asn1/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── asn1.go
│   │   │   │   │   ├── common.go
│   │   │   │   │   └── marshal.go
│   │   │   │   ├── client/
│   │   │   │   │   ├── configpb/
│   │   │   │   │   │   ├── gen.go
│   │   │   │   │   │   ├── multilog.pb.go
│   │   │   │   │   │   └── multilog.proto
│   │   │   │   │   ├── getentries.go
│   │   │   │   │   ├── logclient.go
│   │   │   │   │   └── multilog.go
│   │   │   │   ├── cloudbuild.yaml
│   │   │   │   ├── cloudbuild_master.yaml
│   │   │   │   ├── cloudbuild_tag.yaml
│   │   │   │   ├── codecov.yml
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── jsonclient/
│   │   │   │   │   ├── backoff.go
│   │   │   │   │   └── client.go
│   │   │   │   ├── serialization.go
│   │   │   │   ├── signatures.go
│   │   │   │   ├── tls/
│   │   │   │   │   ├── signature.go
│   │   │   │   │   ├── tls.go
│   │   │   │   │   └── types.go
│   │   │   │   ├── tools.go
│   │   │   │   ├── types.go
│   │   │   │   └── x509/
│   │   │   │       ├── README.md
│   │   │   │       ├── cert_pool.go
│   │   │   │       ├── curves.go
│   │   │   │       ├── error.go
│   │   │   │       ├── errors.go
│   │   │   │       ├── names.go
│   │   │   │       ├── pem_decrypt.go
│   │   │   │       ├── pkcs1.go
│   │   │   │       ├── pkcs8.go
│   │   │   │       ├── pkix/
│   │   │   │       │   └── pkix.go
│   │   │   │       ├── ptr_sysptr_windows.go
│   │   │   │       ├── ptr_uint_windows.go
│   │   │   │       ├── revoked.go
│   │   │   │       ├── root.go
│   │   │   │       ├── root_bsd.go
│   │   │   │       ├── root_cgo_darwin.go
│   │   │   │       ├── root_darwin.go
│   │   │   │       ├── root_darwin_armx.go
│   │   │   │       ├── root_js.go
│   │   │   │       ├── root_linux.go
│   │   │   │       ├── root_nocgo_darwin.go
│   │   │   │       ├── root_plan9.go
│   │   │   │       ├── root_solaris.go
│   │   │   │       ├── root_unix.go
│   │   │   │       ├── root_windows.go
│   │   │   │       ├── rpki.go
│   │   │   │       ├── sec1.go
│   │   │   │       ├── test-dir.crt
│   │   │   │       ├── test-file.crt
│   │   │   │       ├── verify.go
│   │   │   │       └── x509.go
│   │   │   └── uuid/
│   │   │       ├── .travis.yml
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── dce.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── hash.go
│   │   │       ├── marshal.go
│   │   │       ├── node.go
│   │   │       ├── node_js.go
│   │   │       ├── node_net.go
│   │   │       ├── sql.go
│   │   │       ├── time.go
│   │   │       ├── util.go
│   │   │       ├── uuid.go
│   │   │       ├── version1.go
│   │   │       └── version4.go
│   │   ├── gorhill/
│   │   │   └── cronexpr/
│   │   │       ├── APLv2
│   │   │       ├── GPLv3
│   │   │       ├── README.md
│   │   │       ├── cronexpr.go
│   │   │       ├── cronexpr_next.go
│   │   │       └── cronexpr_parse.go
│   │   ├── gorilla/
│   │   │   ├── mux/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── middleware.go
│   │   │   │   ├── mux.go
│   │   │   │   ├── regexp.go
│   │   │   │   ├── route.go
│   │   │   │   └── test_helpers.go
│   │   │   └── websocket/
│   │   │       ├── .gitignore
│   │   │       ├── AUTHORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── client.go
│   │   │       ├── client_clone.go
│   │   │       ├── client_clone_legacy.go
│   │   │       ├── compression.go
│   │   │       ├── conn.go
│   │   │       ├── conn_write.go
│   │   │       ├── conn_write_legacy.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── join.go
│   │   │       ├── json.go
│   │   │       ├── mask.go
│   │   │       ├── mask_safe.go
│   │   │       ├── prepared.go
│   │   │       ├── proxy.go
│   │   │       ├── server.go
│   │   │       ├── trace.go
│   │   │       ├── trace_17.go
│   │   │       ├── util.go
│   │   │       └── x_net_proxy.go
│   │   ├── gregjones/
│   │   │   └── httpcache/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.txt
│   │   │       ├── README.md
│   │   │       ├── diskcache/
│   │   │       │   └── diskcache.go
│   │   │       └── httpcache.go
│   │   ├── grpc-ecosystem/
│   │   │   └── grpc-gateway/
│   │   │       ├── LICENSE.txt
│   │   │       ├── internal/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── stream_chunk.pb.go
│   │   │       │   └── stream_chunk.proto
│   │   │       ├── runtime/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── context.go
│   │   │       │   ├── convert.go
│   │   │       │   ├── doc.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── fieldmask.go
│   │   │       │   ├── handler.go
│   │   │       │   ├── marshal_httpbodyproto.go
│   │   │       │   ├── marshal_json.go
│   │   │       │   ├── marshal_jsonpb.go
│   │   │       │   ├── marshal_proto.go
│   │   │       │   ├── marshaler.go
│   │   │       │   ├── marshaler_registry.go
│   │   │       │   ├── mux.go
│   │   │       │   ├── pattern.go
│   │   │       │   ├── proto2_convert.go
│   │   │       │   ├── proto_errors.go
│   │   │       │   └── query.go
│   │   │       └── utilities/
│   │   │           ├── BUILD.bazel
│   │   │           ├── doc.go
│   │   │           ├── pattern.go
│   │   │           ├── readerfactory.go
│   │   │           └── trie.go
│   │   ├── hashicorp/
│   │   │   └── golang-lru/
│   │   │       ├── .gitignore
│   │   │       ├── 2q.go
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── arc.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── lru.go
│   │   │       └── simplelru/
│   │   │           ├── lru.go
│   │   │           └── lru_interface.go
│   │   ├── inconshreveable/
│   │   │   └── mousetrap/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── trap_others.go
│   │   │       ├── trap_windows.go
│   │   │       └── trap_windows_1.4.go
│   │   ├── jmespath/
│   │   │   └── go-jmespath/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── api.go
│   │   │       ├── astnodetype_string.go
│   │   │       ├── functions.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── interpreter.go
│   │   │       ├── lexer.go
│   │   │       ├── parser.go
│   │   │       ├── toktype_string.go
│   │   │       └── util.go
│   │   ├── jonboulle/
│   │   │   └── clockwork/
│   │   │       ├── .editorconfig
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── clockwork.go
│   │   │       ├── go.mod
│   │   │       └── ticker.go
│   │   ├── lib/
│   │   │   └── pq/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.sh
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── TESTS.md
│   │   │       ├── array.go
│   │   │       ├── buf.go
│   │   │       ├── conn.go
│   │   │       ├── conn_go18.go
│   │   │       ├── connector.go
│   │   │       ├── copy.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── error.go
│   │   │       ├── go.mod
│   │   │       ├── krb.go
│   │   │       ├── notice.go
│   │   │       ├── notify.go
│   │   │       ├── oid/
│   │   │       │   ├── doc.go
│   │   │       │   └── types.go
│   │   │       ├── rows.go
│   │   │       ├── scram/
│   │   │       │   └── scram.go
│   │   │       ├── ssl.go
│   │   │       ├── ssl_permissions.go
│   │   │       ├── ssl_windows.go
│   │   │       ├── url.go
│   │   │       ├── user_posix.go
│   │   │       ├── user_windows.go
│   │   │       └── uuid.go
│   │   ├── mattn/
│   │   │   ├── go-colorable/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── colorable_appengine.go
│   │   │   │   ├── colorable_others.go
│   │   │   │   ├── colorable_windows.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── go.test.sh
│   │   │   │   └── noncolorable.go
│   │   │   ├── go-isatty/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── go.test.sh
│   │   │   │   ├── isatty_bsd.go
│   │   │   │   ├── isatty_others.go
│   │   │   │   ├── isatty_plan9.go
│   │   │   │   ├── isatty_solaris.go
│   │   │   │   ├── isatty_tcgets.go
│   │   │   │   ├── isatty_windows.go
│   │   │   │   └── renovate.json
│   │   │   └── go-runewidth/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.mkd
│   │   │       ├── go.mod
│   │   │       ├── runewidth.go
│   │   │       ├── runewidth_appengine.go
│   │   │       ├── runewidth_js.go
│   │   │       ├── runewidth_posix.go
│   │   │       ├── runewidth_table.go
│   │   │       └── runewidth_windows.go
│   │   ├── matttproud/
│   │   │   └── golang_protobuf_extensions/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── pbutil/
│   │   │           ├── .gitignore
│   │   │           ├── Makefile
│   │   │           ├── decode.go
│   │   │           ├── doc.go
│   │   │           └── encode.go
│   │   ├── miekg/
│   │   │   └── dns/
│   │   │       ├── .codecov.yml
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── AUTHORS
│   │   │       ├── CODEOWNERS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── COPYRIGHT
│   │   │       ├── LICENSE
│   │   │       ├── Makefile.fuzz
│   │   │       ├── Makefile.release
│   │   │       ├── README.md
│   │   │       ├── acceptfunc.go
│   │   │       ├── client.go
│   │   │       ├── clientconfig.go
│   │   │       ├── dane.go
│   │   │       ├── defaults.go
│   │   │       ├── dns.go
│   │   │       ├── dnssec.go
│   │   │       ├── dnssec_keygen.go
│   │   │       ├── dnssec_keyscan.go
│   │   │       ├── dnssec_privkey.go
│   │   │       ├── doc.go
│   │   │       ├── duplicate.go
│   │   │       ├── edns.go
│   │   │       ├── format.go
│   │   │       ├── fuzz.go
│   │   │       ├── generate.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── labels.go
│   │   │       ├── listen_go111.go
│   │   │       ├── listen_go_not111.go
│   │   │       ├── msg.go
│   │   │       ├── msg_helpers.go
│   │   │       ├── msg_truncate.go
│   │   │       ├── nsecx.go
│   │   │       ├── privaterr.go
│   │   │       ├── reverse.go
│   │   │       ├── sanitize.go
│   │   │       ├── scan.go
│   │   │       ├── scan_rr.go
│   │   │       ├── serve_mux.go
│   │   │       ├── server.go
│   │   │       ├── sig0.go
│   │   │       ├── singleinflight.go
│   │   │       ├── smimea.go
│   │   │       ├── svcb.go
│   │   │       ├── tlsa.go
│   │   │       ├── tsig.go
│   │   │       ├── types.go
│   │   │       ├── udp.go
│   │   │       ├── udp_windows.go
│   │   │       ├── update.go
│   │   │       ├── version.go
│   │   │       ├── xfr.go
│   │   │       ├── zduplicate.go
│   │   │       ├── zmsg.go
│   │   │       └── ztypes.go
│   │   ├── modern-go/
│   │   │   └── concurrent/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── executor.go
│   │   │       ├── go_above_19.go
│   │   │       ├── go_below_19.go
│   │   │       ├── log.go
│   │   │       ├── test.sh
│   │   │       └── unbounded_executor.go
│   │   ├── mozilla/
│   │   │   └── scribe/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── chain.go
│   │   │       ├── concat.go
│   │   │       ├── document.go
│   │   │       ├── evr.go
│   │   │       ├── evrops.go
│   │   │       ├── exactmatch.go
│   │   │       ├── filecontent.go
│   │   │       ├── filename.go
│   │   │       ├── hasline.go
│   │   │       ├── noop.go
│   │   │       ├── object.go
│   │   │       ├── package.go
│   │   │       ├── parser.go
│   │   │       ├── pkgmgr.go
│   │   │       ├── raw.go
│   │   │       ├── regexp.go
│   │   │       ├── result.go
│   │   │       ├── scribe.go
│   │   │       ├── test.go
│   │   │       └── variable.go
│   │   ├── olekukonko/
│   │   │   └── tablewriter/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── csv.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── table.go
│   │   │       ├── table_with_color.go
│   │   │       ├── util.go
│   │   │       └── wrap.go
│   │   ├── peterbourgon/
│   │   │   └── diskv/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── compression.go
│   │   │       ├── diskv.go
│   │   │       └── index.go
│   │   ├── prometheus/
│   │   │   ├── client_golang/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── prometheus/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── README.md
│   │   │   │       ├── build_info.go
│   │   │   │       ├── build_info_pre_1.12.go
│   │   │   │       ├── collector.go
│   │   │   │       ├── counter.go
│   │   │   │       ├── desc.go
│   │   │   │       ├── doc.go
│   │   │   │       ├── expvar_collector.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── gauge.go
│   │   │   │       ├── go_collector.go
│   │   │   │       ├── histogram.go
│   │   │   │       ├── internal/
│   │   │   │       │   └── metric.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── observer.go
│   │   │   │       ├── process_collector.go
│   │   │   │       ├── process_collector_other.go
│   │   │   │       ├── process_collector_windows.go
│   │   │   │       ├── promhttp/
│   │   │   │       │   ├── delegator.go
│   │   │   │       │   ├── http.go
│   │   │   │       │   ├── instrument_client.go
│   │   │   │       │   └── instrument_server.go
│   │   │   │       ├── registry.go
│   │   │   │       ├── summary.go
│   │   │   │       ├── timer.go
│   │   │   │       ├── untyped.go
│   │   │   │       ├── value.go
│   │   │   │       ├── vec.go
│   │   │   │       └── wrap.go
│   │   │   ├── client_model/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── go/
│   │   │   │       └── metrics.pb.go
│   │   │   ├── common/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── expfmt/
│   │   │   │   │   ├── decode.go
│   │   │   │   │   ├── encode.go
│   │   │   │   │   ├── expfmt.go
│   │   │   │   │   ├── fuzz.go
│   │   │   │   │   ├── openmetrics_create.go
│   │   │   │   │   ├── text_create.go
│   │   │   │   │   └── text_parse.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── bitbucket.org/
│   │   │   │   │       └── ww/
│   │   │   │   │           └── goautoneg/
│   │   │   │   │               ├── README.txt
│   │   │   │   │               └── autoneg.go
│   │   │   │   └── model/
│   │   │   │       ├── alert.go
│   │   │   │       ├── fingerprinting.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── labelset.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── model.go
│   │   │   │       ├── signature.go
│   │   │   │       ├── silence.go
│   │   │   │       ├── time.go
│   │   │   │       └── value.go
│   │   │   └── procfs/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MAINTAINERS.md
│   │   │       ├── Makefile
│   │   │       ├── Makefile.common
│   │   │       ├── NOTICE
│   │   │       ├── README.md
│   │   │       ├── arp.go
│   │   │       ├── buddyinfo.go
│   │   │       ├── cpuinfo.go
│   │   │       ├── cpuinfo_arm.go
│   │   │       ├── cpuinfo_arm64.go
│   │   │       ├── cpuinfo_default.go
│   │   │       ├── cpuinfo_mips.go
│   │   │       ├── cpuinfo_mips64.go
│   │   │       ├── cpuinfo_mips64le.go
│   │   │       ├── cpuinfo_mipsle.go
│   │   │       ├── cpuinfo_ppc64.go
│   │   │       ├── cpuinfo_ppc64le.go
│   │   │       ├── cpuinfo_s390x.go
│   │   │       ├── crypto.go
│   │   │       ├── doc.go
│   │   │       ├── fixtures.ttar
│   │   │       ├── fs.go
│   │   │       ├── fscache.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── internal/
│   │   │       │   ├── fs/
│   │   │       │   │   └── fs.go
│   │   │       │   └── util/
│   │   │       │       ├── parse.go
│   │   │       │       ├── readfile.go
│   │   │       │       ├── sysreadfile.go
│   │   │       │       ├── sysreadfile_compat.go
│   │   │       │       └── valueparser.go
│   │   │       ├── ipvs.go
│   │   │       ├── kernel_random.go
│   │   │       ├── loadavg.go
│   │   │       ├── mdstat.go
│   │   │       ├── meminfo.go
│   │   │       ├── mountinfo.go
│   │   │       ├── mountstats.go
│   │   │       ├── net_conntrackstat.go
│   │   │       ├── net_dev.go
│   │   │       ├── net_sockstat.go
│   │   │       ├── net_softnet.go
│   │   │       ├── net_udp.go
│   │   │       ├── net_unix.go
│   │   │       ├── proc.go
│   │   │       ├── proc_cgroup.go
│   │   │       ├── proc_environ.go
│   │   │       ├── proc_fdinfo.go
│   │   │       ├── proc_io.go
│   │   │       ├── proc_limits.go
│   │   │       ├── proc_maps.go
│   │   │       ├── proc_ns.go
│   │   │       ├── proc_psi.go
│   │   │       ├── proc_smaps.go
│   │   │       ├── proc_stat.go
│   │   │       ├── proc_status.go
│   │   │       ├── schedstat.go
│   │   │       ├── stat.go
│   │   │       ├── swaps.go
│   │   │       ├── ttar
│   │   │       ├── vm.go
│   │   │       ├── xfrm.go
│   │   │       └── zoneinfo.go
│   │   ├── russross/
│   │   │   └── blackfriday/
│   │   │       └── v2/
│   │   │           ├── .gitignore
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── block.go
│   │   │           ├── doc.go
│   │   │           ├── esc.go
│   │   │           ├── go.mod
│   │   │           ├── html.go
│   │   │           ├── inline.go
│   │   │           ├── markdown.go
│   │   │           ├── node.go
│   │   │           └── smartypants.go
│   │   ├── sergi/
│   │   │   └── go-diff/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       └── diffmatchpatch/
│   │   │           ├── diff.go
│   │   │           ├── diffmatchpatch.go
│   │   │           ├── match.go
│   │   │           ├── mathutil.go
│   │   │           ├── operation_string.go
│   │   │           ├── patch.go
│   │   │           └── stringutil.go
│   │   ├── shurcooL/
│   │   │   └── sanitized_anchor_name/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── go.mod
│   │   │       └── main.go
│   │   ├── soheilhy/
│   │   │   └── cmux/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── buffer.go
│   │   │       ├── cmux.go
│   │   │       ├── doc.go
│   │   │       ├── matchers.go
│   │   │       └── patricia.go
│   │   ├── spf13/
│   │   │   ├── cobra/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .mailmap
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE.txt
│   │   │   │   ├── README.md
│   │   │   │   ├── args.go
│   │   │   │   ├── bash_completions.go
│   │   │   │   ├── bash_completions.md
│   │   │   │   ├── cobra.go
│   │   │   │   ├── command.go
│   │   │   │   ├── command_notwin.go
│   │   │   │   ├── command_win.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── powershell_completions.go
│   │   │   │   ├── powershell_completions.md
│   │   │   │   ├── shell_completions.go
│   │   │   │   ├── zsh_completions.go
│   │   │   │   └── zsh_completions.md
│   │   │   └── pflag/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── bool.go
│   │   │       ├── bool_slice.go
│   │   │       ├── bytes.go
│   │   │       ├── count.go
│   │   │       ├── duration.go
│   │   │       ├── duration_slice.go
│   │   │       ├── flag.go
│   │   │       ├── float32.go
│   │   │       ├── float32_slice.go
│   │   │       ├── float64.go
│   │   │       ├── float64_slice.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── golangflag.go
│   │   │       ├── int.go
│   │   │       ├── int16.go
│   │   │       ├── int32.go
│   │   │       ├── int32_slice.go
│   │   │       ├── int64.go
│   │   │       ├── int64_slice.go
│   │   │       ├── int8.go
│   │   │       ├── int_slice.go
│   │   │       ├── ip.go
│   │   │       ├── ip_slice.go
│   │   │       ├── ipmask.go
│   │   │       ├── ipnet.go
│   │   │       ├── string.go
│   │   │       ├── string_array.go
│   │   │       ├── string_slice.go
│   │   │       ├── string_to_int.go
│   │   │       ├── string_to_int64.go
│   │   │       ├── string_to_string.go
│   │   │       ├── uint.go
│   │   │       ├── uint16.go
│   │   │       ├── uint32.go
│   │   │       ├── uint64.go
│   │   │       ├── uint8.go
│   │   │       └── uint_slice.go
│   │   ├── tmc/
│   │   │   └── grpc-websocket-proxy/
│   │   │       ├── LICENSE
│   │   │       └── wsproxy/
│   │   │           ├── doc.go
│   │   │           └── websocket_proxy.go
│   │   ├── viki-org/
│   │   │   └── dnscache/
│   │   │       ├── dnscache.go
│   │   │       ├── license.txt
│   │   │       └── readme.md
│   │   ├── xiang90/
│   │   │   └── probing/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── prober.go
│   │   │       ├── server.go
│   │   │       └── status.go
│   │   └── yudai/
│   │       ├── gojsondiff/
│   │       │   ├── .gitignore
│   │       │   ├── LICENSE
│   │       │   ├── Makefile
│   │       │   ├── README.md
│   │       │   ├── deltas.go
│   │       │   ├── formatter/
│   │       │   │   ├── ascii.go
│   │       │   │   └── delta.go
│   │       │   ├── gojsondiff.go
│   │       │   ├── unmarshaler.go
│   │       │   └── wercker.yml
│   │       └── golcs/
│   │           ├── LICENSE
│   │           ├── README.md
│   │           └── golcs.go
│   ├── go.etcd.io/
│   │   ├── bbolt/
│   │   │   ├── .gitignore
│   │   │   ├── .travis.yml
│   │   │   ├── LICENSE
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── bolt_386.go
│   │   │   ├── bolt_amd64.go
│   │   │   ├── bolt_arm.go
│   │   │   ├── bolt_arm64.go
│   │   │   ├── bolt_linux.go
│   │   │   ├── bolt_mips64x.go
│   │   │   ├── bolt_mipsx.go
│   │   │   ├── bolt_openbsd.go
│   │   │   ├── bolt_ppc.go
│   │   │   ├── bolt_ppc64.go
│   │   │   ├── bolt_ppc64le.go
│   │   │   ├── bolt_riscv64.go
│   │   │   ├── bolt_s390x.go
│   │   │   ├── bolt_unix.go
│   │   │   ├── bolt_unix_aix.go
│   │   │   ├── bolt_unix_solaris.go
│   │   │   ├── bolt_windows.go
│   │   │   ├── boltsync_unix.go
│   │   │   ├── bucket.go
│   │   │   ├── cursor.go
│   │   │   ├── db.go
│   │   │   ├── doc.go
│   │   │   ├── errors.go
│   │   │   ├── freelist.go
│   │   │   ├── freelist_hmap.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── node.go
│   │   │   ├── page.go
│   │   │   └── tx.go
│   │   └── etcd/
│   │       ├── .gitignore
│   │       ├── .header
│   │       ├── .travis.yml
│   │       ├── .words
│   │       ├── CONTRIBUTING.md
│   │       ├── DCO
│   │       ├── Dockerfile-release
│   │       ├── Dockerfile-release.arm64
│   │       ├── Dockerfile-release.ppc64le
│   │       ├── LICENSE
│   │       ├── MAINTAINERS
│   │       ├── MAINTAINERS_RULES.md
│   │       ├── Makefile
│   │       ├── NOTICE
│   │       ├── OWNERS
│   │       ├── Procfile
│   │       ├── Procfile.v2
│   │       ├── README.md
│   │       ├── auth/
│   │       │   ├── authpb/
│   │       │   │   ├── auth.pb.go
│   │       │   │   └── auth.proto
│   │       │   ├── doc.go
│   │       │   ├── jwt.go
│   │       │   ├── metrics.go
│   │       │   ├── nop.go
│   │       │   ├── options.go
│   │       │   ├── range_perm_cache.go
│   │       │   ├── simple_token.go
│   │       │   └── store.go
│   │       ├── bill-of-materials.json
│   │       ├── bill-of-materials.override.json
│   │       ├── build
│   │       ├── build.bat
│   │       ├── build.ps1
│   │       ├── client/
│   │       │   ├── README.md
│   │       │   ├── auth_role.go
│   │       │   ├── auth_user.go
│   │       │   ├── cancelreq.go
│   │       │   ├── client.go
│   │       │   ├── cluster_error.go
│   │       │   ├── curl.go
│   │       │   ├── discover.go
│   │       │   ├── doc.go
│   │       │   ├── json.go
│   │       │   ├── keys.go
│   │       │   ├── members.go
│   │       │   └── util.go
│   │       ├── clientv3/
│   │       │   ├── README.md
│   │       │   ├── auth.go
│   │       │   ├── balancer/
│   │       │   │   ├── balancer.go
│   │       │   │   ├── connectivity/
│   │       │   │   │   └── connectivity.go
│   │       │   │   ├── picker/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── err.go
│   │       │   │   │   ├── picker.go
│   │       │   │   │   └── roundrobin_balanced.go
│   │       │   │   ├── resolver/
│   │       │   │   │   └── endpoint/
│   │       │   │   │       └── endpoint.go
│   │       │   │   └── utils.go
│   │       │   ├── client.go
│   │       │   ├── cluster.go
│   │       │   ├── compact_op.go
│   │       │   ├── compare.go
│   │       │   ├── concurrency/
│   │       │   │   ├── doc.go
│   │       │   │   ├── election.go
│   │       │   │   ├── key.go
│   │       │   │   ├── mutex.go
│   │       │   │   ├── session.go
│   │       │   │   └── stm.go
│   │       │   ├── config.go
│   │       │   ├── credentials/
│   │       │   │   └── credentials.go
│   │       │   ├── ctx.go
│   │       │   ├── doc.go
│   │       │   ├── kv.go
│   │       │   ├── lease.go
│   │       │   ├── leasing/
│   │       │   │   ├── cache.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── txn.go
│   │       │   │   └── util.go
│   │       │   ├── logger.go
│   │       │   ├── maintenance.go
│   │       │   ├── mirror/
│   │       │   │   └── syncer.go
│   │       │   ├── namespace/
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── lease.go
│   │       │   │   ├── util.go
│   │       │   │   └── watch.go
│   │       │   ├── naming/
│   │       │   │   ├── doc.go
│   │       │   │   └── grpc.go
│   │       │   ├── op.go
│   │       │   ├── options.go
│   │       │   ├── ordering/
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   └── util.go
│   │       │   ├── retry.go
│   │       │   ├── retry_interceptor.go
│   │       │   ├── snapshot/
│   │       │   │   ├── doc.go
│   │       │   │   ├── util.go
│   │       │   │   └── v3_snapshot.go
│   │       │   ├── sort.go
│   │       │   ├── txn.go
│   │       │   ├── utils.go
│   │       │   └── watch.go
│   │       ├── code-of-conduct.md
│   │       ├── embed/
│   │       │   ├── config.go
│   │       │   ├── config_logging.go
│   │       │   ├── config_logging_journal_unix.go
│   │       │   ├── config_logging_journal_windows.go
│   │       │   ├── doc.go
│   │       │   ├── etcd.go
│   │       │   ├── serve.go
│   │       │   └── util.go
│   │       ├── etcd.conf.yml.sample
│   │       ├── etcdctl/
│   │       │   ├── README.md
│   │       │   ├── READMEv2.md
│   │       │   ├── ctlv2/
│   │       │   │   ├── command/
│   │       │   │   │   ├── auth_commands.go
│   │       │   │   │   ├── backup_command.go
│   │       │   │   │   ├── cluster_health.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── error.go
│   │       │   │   │   ├── exec_watch_command.go
│   │       │   │   │   ├── format.go
│   │       │   │   │   ├── get_command.go
│   │       │   │   │   ├── ls_command.go
│   │       │   │   │   ├── member_commands.go
│   │       │   │   │   ├── mk_command.go
│   │       │   │   │   ├── mkdir_command.go
│   │       │   │   │   ├── rm_command.go
│   │       │   │   │   ├── rmdir_command.go
│   │       │   │   │   ├── role_commands.go
│   │       │   │   │   ├── set_command.go
│   │       │   │   │   ├── set_dir_command.go
│   │       │   │   │   ├── update_command.go
│   │       │   │   │   ├── update_dir_command.go
│   │       │   │   │   ├── user_commands.go
│   │       │   │   │   ├── util.go
│   │       │   │   │   └── watch_command.go
│   │       │   │   ├── ctl.go
│   │       │   │   ├── ctl_cov.go
│   │       │   │   └── ctl_nocov.go
│   │       │   ├── ctlv3/
│   │       │   │   ├── command/
│   │       │   │   │   ├── alarm_command.go
│   │       │   │   │   ├── auth_command.go
│   │       │   │   │   ├── check.go
│   │       │   │   │   ├── compaction_command.go
│   │       │   │   │   ├── defrag_command.go
│   │       │   │   │   ├── del_command.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── elect_command.go
│   │       │   │   │   ├── ep_command.go
│   │       │   │   │   ├── error.go
│   │       │   │   │   ├── get_command.go
│   │       │   │   │   ├── global.go
│   │       │   │   │   ├── lease_command.go
│   │       │   │   │   ├── lock_command.go
│   │       │   │   │   ├── make_mirror_command.go
│   │       │   │   │   ├── member_command.go
│   │       │   │   │   ├── migrate_command.go
│   │       │   │   │   ├── move_leader_command.go
│   │       │   │   │   ├── printer.go
│   │       │   │   │   ├── printer_fields.go
│   │       │   │   │   ├── printer_json.go
│   │       │   │   │   ├── printer_protobuf.go
│   │       │   │   │   ├── printer_simple.go
│   │       │   │   │   ├── printer_table.go
│   │       │   │   │   ├── put_command.go
│   │       │   │   │   ├── role_command.go
│   │       │   │   │   ├── snapshot_command.go
│   │       │   │   │   ├── txn_command.go
│   │       │   │   │   ├── user_command.go
│   │       │   │   │   ├── util.go
│   │       │   │   │   ├── version_command.go
│   │       │   │   │   └── watch_command.go
│   │       │   │   ├── ctl.go
│   │       │   │   ├── ctl_cov.go
│   │       │   │   ├── ctl_nocov.go
│   │       │   │   └── help.go
│   │       │   └── main.go
│   │       ├── etcdmain/
│   │       │   ├── config.go
│   │       │   ├── doc.go
│   │       │   ├── etcd.go
│   │       │   ├── gateway.go
│   │       │   ├── grpc_proxy.go
│   │       │   ├── help.go
│   │       │   ├── main.go
│   │       │   └── util.go
│   │       ├── etcdserver/
│   │       │   ├── api/
│   │       │   │   ├── capability.go
│   │       │   │   ├── cluster.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── etcdhttp/
│   │       │   │   │   ├── base.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   └── peer.go
│   │       │   │   ├── membership/
│   │       │   │   │   ├── cluster.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── errors.go
│   │       │   │   │   ├── member.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   └── store.go
│   │       │   │   ├── rafthttp/
│   │       │   │   │   ├── coder.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── http.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── msg_codec.go
│   │       │   │   │   ├── msgappv2_codec.go
│   │       │   │   │   ├── peer.go
│   │       │   │   │   ├── peer_status.go
│   │       │   │   │   ├── pipeline.go
│   │       │   │   │   ├── probing_status.go
│   │       │   │   │   ├── remote.go
│   │       │   │   │   ├── snapshot_sender.go
│   │       │   │   │   ├── stream.go
│   │       │   │   │   ├── transport.go
│   │       │   │   │   ├── urlpick.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── snap/
│   │       │   │   │   ├── db.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── message.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── snappb/
│   │       │   │   │   │   ├── snap.pb.go
│   │       │   │   │   │   └── snap.proto
│   │       │   │   │   └── snapshotter.go
│   │       │   │   ├── v2auth/
│   │       │   │   │   ├── auth.go
│   │       │   │   │   └── auth_requests.go
│   │       │   │   ├── v2discovery/
│   │       │   │   │   └── discovery.go
│   │       │   │   ├── v2error/
│   │       │   │   │   └── error.go
│   │       │   │   ├── v2http/
│   │       │   │   │   ├── capability.go
│   │       │   │   │   ├── client.go
│   │       │   │   │   ├── client_auth.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── http.go
│   │       │   │   │   ├── httptypes/
│   │       │   │   │   │   ├── errors.go
│   │       │   │   │   │   └── member.go
│   │       │   │   │   └── metrics.go
│   │       │   │   ├── v2stats/
│   │       │   │   │   ├── leader.go
│   │       │   │   │   ├── queue.go
│   │       │   │   │   ├── server.go
│   │       │   │   │   └── stats.go
│   │       │   │   ├── v2store/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── event.go
│   │       │   │   │   ├── event_history.go
│   │       │   │   │   ├── event_queue.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── node.go
│   │       │   │   │   ├── node_extern.go
│   │       │   │   │   ├── stats.go
│   │       │   │   │   ├── store.go
│   │       │   │   │   ├── ttl_key_heap.go
│   │       │   │   │   ├── watcher.go
│   │       │   │   │   └── watcher_hub.go
│   │       │   │   ├── v2v3/
│   │       │   │   │   ├── cluster.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── server.go
│   │       │   │   │   ├── store.go
│   │       │   │   │   └── watcher.go
│   │       │   │   ├── v3alarm/
│   │       │   │   │   └── alarms.go
│   │       │   │   ├── v3client/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   └── v3client.go
│   │       │   │   ├── v3compactor/
│   │       │   │   │   ├── compactor.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── periodic.go
│   │       │   │   │   └── revision.go
│   │       │   │   ├── v3election/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── election.go
│   │       │   │   │   └── v3electionpb/
│   │       │   │   │       ├── gw/
│   │       │   │   │       │   └── v3election.pb.gw.go
│   │       │   │   │       ├── v3election.pb.go
│   │       │   │   │       └── v3election.proto
│   │       │   │   ├── v3lock/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── lock.go
│   │       │   │   │   └── v3lockpb/
│   │       │   │   │       ├── gw/
│   │       │   │   │       │   └── v3lock.pb.gw.go
│   │       │   │   │       ├── v3lock.pb.go
│   │       │   │   │       └── v3lock.proto
│   │       │   │   └── v3rpc/
│   │       │   │       ├── auth.go
│   │       │   │       ├── codec.go
│   │       │   │       ├── grpc.go
│   │       │   │       ├── header.go
│   │       │   │       ├── interceptor.go
│   │       │   │       ├── key.go
│   │       │   │       ├── lease.go
│   │       │   │       ├── maintenance.go
│   │       │   │       ├── member.go
│   │       │   │       ├── metrics.go
│   │       │   │       ├── quota.go
│   │       │   │       ├── rpctypes/
│   │       │   │       │   ├── doc.go
│   │       │   │       │   ├── error.go
│   │       │   │       │   ├── md.go
│   │       │   │       │   └── metadatafields.go
│   │       │   │       ├── util.go
│   │       │   │       └── watch.go
│   │       │   ├── apply.go
│   │       │   ├── apply_auth.go
│   │       │   ├── apply_v2.go
│   │       │   ├── backend.go
│   │       │   ├── cluster_util.go
│   │       │   ├── config.go
│   │       │   ├── consistent_index.go
│   │       │   ├── corrupt.go
│   │       │   ├── doc.go
│   │       │   ├── errors.go
│   │       │   ├── etcdserverpb/
│   │       │   │   ├── etcdserver.pb.go
│   │       │   │   ├── etcdserver.proto
│   │       │   │   ├── gw/
│   │       │   │   │   └── rpc.pb.gw.go
│   │       │   │   ├── raft_internal.pb.go
│   │       │   │   ├── raft_internal.proto
│   │       │   │   ├── raft_internal_stringer.go
│   │       │   │   ├── rpc.pb.go
│   │       │   │   └── rpc.proto
│   │       │   ├── metrics.go
│   │       │   ├── quota.go
│   │       │   ├── raft.go
│   │       │   ├── server.go
│   │       │   ├── server_access_control.go
│   │       │   ├── snapshot_merge.go
│   │       │   ├── storage.go
│   │       │   ├── util.go
│   │       │   ├── v2_server.go
│   │       │   └── v3_server.go
│   │       ├── functional.yaml
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── lease/
│   │       │   ├── doc.go
│   │       │   ├── lease_queue.go
│   │       │   ├── leasehttp/
│   │       │   │   ├── doc.go
│   │       │   │   └── http.go
│   │       │   ├── leasepb/
│   │       │   │   ├── lease.pb.go
│   │       │   │   └── lease.proto
│   │       │   ├── lessor.go
│   │       │   └── metrics.go
│   │       ├── main.go
│   │       ├── mvcc/
│   │       │   ├── backend/
│   │       │   │   ├── backend.go
│   │       │   │   ├── batch_tx.go
│   │       │   │   ├── config_default.go
│   │       │   │   ├── config_linux.go
│   │       │   │   ├── config_windows.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── read_tx.go
│   │       │   │   └── tx_buffer.go
│   │       │   ├── doc.go
│   │       │   ├── index.go
│   │       │   ├── key_index.go
│   │       │   ├── kv.go
│   │       │   ├── kv_view.go
│   │       │   ├── kvstore.go
│   │       │   ├── kvstore_compaction.go
│   │       │   ├── kvstore_txn.go
│   │       │   ├── metrics.go
│   │       │   ├── metrics_txn.go
│   │       │   ├── mvccpb/
│   │       │   │   ├── kv.pb.go
│   │       │   │   └── kv.proto
│   │       │   ├── revision.go
│   │       │   ├── util.go
│   │       │   ├── watchable_store.go
│   │       │   ├── watchable_store_txn.go
│   │       │   ├── watcher.go
│   │       │   └── watcher_group.go
│   │       ├── pkg/
│   │       │   ├── adt/
│   │       │   │   ├── README.md
│   │       │   │   ├── doc.go
│   │       │   │   └── interval_tree.go
│   │       │   ├── contention/
│   │       │   │   ├── contention.go
│   │       │   │   └── doc.go
│   │       │   ├── cpuutil/
│   │       │   │   ├── doc.go
│   │       │   │   └── endian.go
│   │       │   ├── crc/
│   │       │   │   └── crc.go
│   │       │   ├── debugutil/
│   │       │   │   ├── doc.go
│   │       │   │   └── pprof.go
│   │       │   ├── fileutil/
│   │       │   │   ├── dir_unix.go
│   │       │   │   ├── dir_windows.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── fileutil.go
│   │       │   │   ├── lock.go
│   │       │   │   ├── lock_flock.go
│   │       │   │   ├── lock_linux.go
│   │       │   │   ├── lock_plan9.go
│   │       │   │   ├── lock_solaris.go
│   │       │   │   ├── lock_unix.go
│   │       │   │   ├── lock_windows.go
│   │       │   │   ├── preallocate.go
│   │       │   │   ├── preallocate_darwin.go
│   │       │   │   ├── preallocate_unix.go
│   │       │   │   ├── preallocate_unsupported.go
│   │       │   │   ├── purge.go
│   │       │   │   ├── read_dir.go
│   │       │   │   ├── sync.go
│   │       │   │   ├── sync_darwin.go
│   │       │   │   └── sync_linux.go
│   │       │   ├── flags/
│   │       │   │   ├── flag.go
│   │       │   │   ├── ignored.go
│   │       │   │   ├── selective_string.go
│   │       │   │   ├── strings.go
│   │       │   │   ├── unique_strings.go
│   │       │   │   ├── unique_urls.go
│   │       │   │   └── urls.go
│   │       │   ├── httputil/
│   │       │   │   └── httputil.go
│   │       │   ├── idutil/
│   │       │   │   └── id.go
│   │       │   ├── ioutil/
│   │       │   │   ├── pagewriter.go
│   │       │   │   ├── readcloser.go
│   │       │   │   ├── reader.go
│   │       │   │   └── util.go
│   │       │   ├── logutil/
│   │       │   │   ├── discard_logger.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── log_level.go
│   │       │   │   ├── logger.go
│   │       │   │   ├── merge_logger.go
│   │       │   │   ├── package_logger.go
│   │       │   │   ├── zap.go
│   │       │   │   ├── zap_grpc.go
│   │       │   │   ├── zap_journal.go
│   │       │   │   └── zap_raft.go
│   │       │   ├── netutil/
│   │       │   │   ├── doc.go
│   │       │   │   ├── isolate_linux.go
│   │       │   │   ├── isolate_stub.go
│   │       │   │   ├── netutil.go
│   │       │   │   ├── routes.go
│   │       │   │   └── routes_linux.go
│   │       │   ├── osutil/
│   │       │   │   ├── interrupt_unix.go
│   │       │   │   ├── interrupt_windows.go
│   │       │   │   ├── osutil.go
│   │       │   │   ├── signal.go
│   │       │   │   └── signal_linux.go
│   │       │   ├── pathutil/
│   │       │   │   └── path.go
│   │       │   ├── pbutil/
│   │       │   │   └── pbutil.go
│   │       │   ├── report/
│   │       │   │   ├── doc.go
│   │       │   │   ├── report.go
│   │       │   │   ├── timeseries.go
│   │       │   │   └── weighted.go
│   │       │   ├── runtime/
│   │       │   │   ├── fds_linux.go
│   │       │   │   └── fds_other.go
│   │       │   ├── schedule/
│   │       │   │   ├── doc.go
│   │       │   │   └── schedule.go
│   │       │   ├── srv/
│   │       │   │   └── srv.go
│   │       │   ├── systemd/
│   │       │   │   ├── doc.go
│   │       │   │   └── journal.go
│   │       │   ├── tlsutil/
│   │       │   │   ├── cipher_suites.go
│   │       │   │   ├── doc.go
│   │       │   │   └── tlsutil.go
│   │       │   ├── traceutil/
│   │       │   │   └── trace.go
│   │       │   ├── transport/
│   │       │   │   ├── doc.go
│   │       │   │   ├── keepalive_listener.go
│   │       │   │   ├── limit_listen.go
│   │       │   │   ├── listener.go
│   │       │   │   ├── listener_tls.go
│   │       │   │   ├── timeout_conn.go
│   │       │   │   ├── timeout_dialer.go
│   │       │   │   ├── timeout_listener.go
│   │       │   │   ├── timeout_transport.go
│   │       │   │   ├── tls.go
│   │       │   │   ├── transport.go
│   │       │   │   └── unix_listener.go
│   │       │   ├── types/
│   │       │   │   ├── doc.go
│   │       │   │   ├── id.go
│   │       │   │   ├── set.go
│   │       │   │   ├── slice.go
│   │       │   │   ├── urls.go
│   │       │   │   └── urlsmap.go
│   │       │   └── wait/
│   │       │       ├── wait.go
│   │       │       └── wait_time.go
│   │       ├── proxy/
│   │       │   ├── grpcproxy/
│   │       │   │   ├── adapter/
│   │       │   │   │   ├── auth_client_adapter.go
│   │       │   │   │   ├── chan_stream.go
│   │       │   │   │   ├── cluster_client_adapter.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── election_client_adapter.go
│   │       │   │   │   ├── kv_client_adapter.go
│   │       │   │   │   ├── lease_client_adapter.go
│   │       │   │   │   ├── lock_client_adapter.go
│   │       │   │   │   ├── maintenance_client_adapter.go
│   │       │   │   │   └── watch_client_adapter.go
│   │       │   │   ├── auth.go
│   │       │   │   ├── cache/
│   │       │   │   │   └── store.go
│   │       │   │   ├── cluster.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── election.go
│   │       │   │   ├── health.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── leader.go
│   │       │   │   ├── lease.go
│   │       │   │   ├── lock.go
│   │       │   │   ├── logger.go
│   │       │   │   ├── maintenance.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── register.go
│   │       │   │   ├── util.go
│   │       │   │   ├── watch.go
│   │       │   │   ├── watch_broadcast.go
│   │       │   │   ├── watch_broadcasts.go
│   │       │   │   ├── watch_ranges.go
│   │       │   │   └── watcher.go
│   │       │   ├── httpproxy/
│   │       │   │   ├── director.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── proxy.go
│   │       │   │   └── reverse.go
│   │       │   └── tcpproxy/
│   │       │       ├── doc.go
│   │       │       └── userspace.go
│   │       ├── raft/
│   │       │   ├── OWNERS
│   │       │   ├── README.md
│   │       │   ├── bootstrap.go
│   │       │   ├── confchange/
│   │       │   │   ├── confchange.go
│   │       │   │   └── restore.go
│   │       │   ├── design.md
│   │       │   ├── doc.go
│   │       │   ├── log.go
│   │       │   ├── log_unstable.go
│   │       │   ├── logger.go
│   │       │   ├── node.go
│   │       │   ├── quorum/
│   │       │   │   ├── joint.go
│   │       │   │   ├── majority.go
│   │       │   │   ├── quorum.go
│   │       │   │   └── voteresult_string.go
│   │       │   ├── raft.go
│   │       │   ├── raftpb/
│   │       │   │   ├── confchange.go
│   │       │   │   ├── confstate.go
│   │       │   │   ├── raft.pb.go
│   │       │   │   └── raft.proto
│   │       │   ├── rawnode.go
│   │       │   ├── read_only.go
│   │       │   ├── status.go
│   │       │   ├── storage.go
│   │       │   ├── tracker/
│   │       │   │   ├── inflights.go
│   │       │   │   ├── progress.go
│   │       │   │   ├── state.go
│   │       │   │   └── tracker.go
│   │       │   └── util.go
│   │       ├── test
│   │       ├── version/
│   │       │   └── version.go
│   │       └── wal/
│   │           ├── decoder.go
│   │           ├── doc.go
│   │           ├── encoder.go
│   │           ├── file_pipeline.go
│   │           ├── metrics.go
│   │           ├── repair.go
│   │           ├── util.go
│   │           ├── wal.go
│   │           └── walpb/
│   │               ├── record.go
│   │               ├── record.pb.go
│   │               └── record.proto
│   ├── go.mozilla.org/
│   │   └── mozlog/
│   │       ├── .gitignore
│   │       ├── .travis.yml
│   │       ├── LICENSE
│   │       ├── README.md
│   │       └── mozlog.go
│   ├── go.uber.org/
│   │   └── tools/
│   │       └── LICENSE
│   ├── golang.org/
│   │   └── x/
│   │       ├── crypto/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bcrypt/
│   │       │   │   ├── base64.go
│   │       │   │   └── bcrypt.go
│   │       │   ├── blowfish/
│   │       │   │   ├── block.go
│   │       │   │   ├── cipher.go
│   │       │   │   └── const.go
│   │       │   ├── cryptobyte/
│   │       │   │   ├── asn1/
│   │       │   │   │   └── asn1.go
│   │       │   │   ├── asn1.go
│   │       │   │   ├── builder.go
│   │       │   │   └── string.go
│   │       │   ├── ed25519/
│   │       │   │   ├── ed25519.go
│   │       │   │   ├── ed25519_go113.go
│   │       │   │   └── internal/
│   │       │   │       └── edwards25519/
│   │       │   │           ├── const.go
│   │       │   │           └── edwards25519.go
│   │       │   └── ocsp/
│   │       │       └── ocsp.go
│   │       ├── lint/
│   │       │   ├── .travis.yml
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── README.md
│   │       │   ├── go.mod
│   │       │   ├── go.sum
│   │       │   ├── golint/
│   │       │   │   ├── golint.go
│   │       │   │   ├── import.go
│   │       │   │   └── importcomment.go
│   │       │   └── lint.go
│   │       ├── mod/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── semver/
│   │       │       └── semver.go
│   │       ├── net/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bpf/
│   │       │   │   ├── asm.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── instructions.go
│   │       │   │   ├── setter.go
│   │       │   │   ├── vm.go
│   │       │   │   └── vm_instructions.go
│   │       │   ├── context/
│   │       │   │   ├── context.go
│   │       │   │   ├── ctxhttp/
│   │       │   │   │   └── ctxhttp.go
│   │       │   │   ├── go17.go
│   │       │   │   ├── go19.go
│   │       │   │   ├── pre_go17.go
│   │       │   │   └── pre_go19.go
│   │       │   ├── http/
│   │       │   │   └── httpguts/
│   │       │   │       ├── guts.go
│   │       │   │       └── httplex.go
│   │       │   ├── http2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── Dockerfile
│   │       │   │   ├── Makefile
│   │       │   │   ├── README
│   │       │   │   ├── ciphers.go
│   │       │   │   ├── client_conn_pool.go
│   │       │   │   ├── databuffer.go
│   │       │   │   ├── errors.go
│   │       │   │   ├── flow.go
│   │       │   │   ├── frame.go
│   │       │   │   ├── go111.go
│   │       │   │   ├── gotrack.go
│   │       │   │   ├── headermap.go
│   │       │   │   ├── hpack/
│   │       │   │   │   ├── encode.go
│   │       │   │   │   ├── hpack.go
│   │       │   │   │   ├── huffman.go
│   │       │   │   │   └── tables.go
│   │       │   │   ├── http2.go
│   │       │   │   ├── not_go111.go
│   │       │   │   ├── pipe.go
│   │       │   │   ├── server.go
│   │       │   │   ├── transport.go
│   │       │   │   ├── write.go
│   │       │   │   ├── writesched.go
│   │       │   │   ├── writesched_priority.go
│   │       │   │   └── writesched_random.go
│   │       │   ├── idna/
│   │       │   │   ├── idna10.0.0.go
│   │       │   │   ├── idna9.0.0.go
│   │       │   │   ├── punycode.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   ├── trie.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── iana/
│   │       │   │   │   └── const.go
│   │       │   │   ├── socket/
│   │       │   │   │   ├── cmsghdr.go
│   │       │   │   │   ├── cmsghdr_bsd.go
│   │       │   │   │   ├── cmsghdr_linux_32bit.go
│   │       │   │   │   ├── cmsghdr_linux_64bit.go
│   │       │   │   │   ├── cmsghdr_solaris_64bit.go
│   │       │   │   │   ├── cmsghdr_stub.go
│   │       │   │   │   ├── cmsghdr_unix.go
│   │       │   │   │   ├── cmsghdr_zos_s390x.go
│   │       │   │   │   ├── empty.s
│   │       │   │   │   ├── error_unix.go
│   │       │   │   │   ├── error_windows.go
│   │       │   │   │   ├── iovec_32bit.go
│   │       │   │   │   ├── iovec_64bit.go
│   │       │   │   │   ├── iovec_solaris_64bit.go
│   │       │   │   │   ├── iovec_stub.go
│   │       │   │   │   ├── mmsghdr_stub.go
│   │       │   │   │   ├── mmsghdr_unix.go
│   │       │   │   │   ├── msghdr_bsd.go
│   │       │   │   │   ├── msghdr_bsdvar.go
│   │       │   │   │   ├── msghdr_linux.go
│   │       │   │   │   ├── msghdr_linux_32bit.go
│   │       │   │   │   ├── msghdr_linux_64bit.go
│   │       │   │   │   ├── msghdr_openbsd.go
│   │       │   │   │   ├── msghdr_solaris_64bit.go
│   │       │   │   │   ├── msghdr_stub.go
│   │       │   │   │   ├── msghdr_zos_s390x.go
│   │       │   │   │   ├── norace.go
│   │       │   │   │   ├── race.go
│   │       │   │   │   ├── rawconn.go
│   │       │   │   │   ├── rawconn_mmsg.go
│   │       │   │   │   ├── rawconn_msg.go
│   │       │   │   │   ├── rawconn_nommsg.go
│   │       │   │   │   ├── rawconn_nomsg.go
│   │       │   │   │   ├── socket.go
│   │       │   │   │   ├── sys.go
│   │       │   │   │   ├── sys_bsd.go
│   │       │   │   │   ├── sys_const_unix.go
│   │       │   │   │   ├── sys_const_zos.go
│   │       │   │   │   ├── sys_linkname.go
│   │       │   │   │   ├── sys_linux.go
│   │       │   │   │   ├── sys_linux_386.go
│   │       │   │   │   ├── sys_linux_386.s
│   │       │   │   │   ├── sys_linux_amd64.go
│   │       │   │   │   ├── sys_linux_arm.go
│   │       │   │   │   ├── sys_linux_arm64.go
│   │       │   │   │   ├── sys_linux_mips.go
│   │       │   │   │   ├── sys_linux_mips64.go
│   │       │   │   │   ├── sys_linux_mips64le.go
│   │       │   │   │   ├── sys_linux_mipsle.go
│   │       │   │   │   ├── sys_linux_ppc64.go
│   │       │   │   │   ├── sys_linux_ppc64le.go
│   │       │   │   │   ├── sys_linux_riscv64.go
│   │       │   │   │   ├── sys_linux_s390x.go
│   │       │   │   │   ├── sys_linux_s390x.s
│   │       │   │   │   ├── sys_netbsd.go
│   │       │   │   │   ├── sys_posix.go
│   │       │   │   │   ├── sys_solaris.go
│   │       │   │   │   ├── sys_solaris_amd64.s
│   │       │   │   │   ├── sys_stub.go
│   │       │   │   │   ├── sys_unix.go
│   │       │   │   │   ├── sys_windows.go
│   │       │   │   │   ├── sys_zos_s390x.go
│   │       │   │   │   ├── sys_zos_s390x.s
│   │       │   │   │   ├── zsys_aix_ppc64.go
│   │       │   │   │   ├── zsys_darwin_386.go
│   │       │   │   │   ├── zsys_darwin_amd64.go
│   │       │   │   │   ├── zsys_darwin_arm.go
│   │       │   │   │   ├── zsys_darwin_arm64.go
│   │       │   │   │   ├── zsys_dragonfly_amd64.go
│   │       │   │   │   ├── zsys_freebsd_386.go
│   │       │   │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   │   ├── zsys_freebsd_arm.go
│   │       │   │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   │   ├── zsys_linux_386.go
│   │       │   │   │   ├── zsys_linux_amd64.go
│   │       │   │   │   ├── zsys_linux_arm.go
│   │       │   │   │   ├── zsys_linux_arm64.go
│   │       │   │   │   ├── zsys_linux_mips.go
│   │       │   │   │   ├── zsys_linux_mips64.go
│   │       │   │   │   ├── zsys_linux_mips64le.go
│   │       │   │   │   ├── zsys_linux_mipsle.go
│   │       │   │   │   ├── zsys_linux_ppc64.go
│   │       │   │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   │   ├── zsys_linux_riscv64.go
│   │       │   │   │   ├── zsys_linux_s390x.go
│   │       │   │   │   ├── zsys_netbsd_386.go
│   │       │   │   │   ├── zsys_netbsd_amd64.go
│   │       │   │   │   ├── zsys_netbsd_arm.go
│   │       │   │   │   ├── zsys_netbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_386.go
│   │       │   │   │   ├── zsys_openbsd_amd64.go
│   │       │   │   │   ├── zsys_openbsd_arm.go
│   │       │   │   │   ├── zsys_openbsd_arm64.go
│   │       │   │   │   ├── zsys_solaris_amd64.go
│   │       │   │   │   └── zsys_zos_s390x.go
│   │       │   │   └── timeseries/
│   │       │   │       └── timeseries.go
│   │       │   ├── ipv4/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_bsd.go
│   │       │   │   ├── control_pktinfo.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── control_zos.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── packet.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_asmreqn.go
│   │       │   │   ├── sys_asmreqn_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_dragonfly.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── ipv6/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_rfc2292_unix.go
│   │       │   │   ├── control_rfc3542_unix.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_bsd.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_solaris.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── icmp_windows.go
│   │       │   │   ├── icmp_zos.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   └── trace/
│   │       │       ├── events.go
│   │       │       ├── histogram.go
│   │       │       └── trace.go
│   │       ├── sys/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── internal/
│   │       │   │   └── unsafeheader/
│   │       │   │       └── unsafeheader.go
│   │       │   ├── unix/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── affinity_linux.go
│   │       │   │   ├── aliases.go
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_darwin_386.s
│   │       │   │   ├── asm_darwin_amd64.s
│   │       │   │   ├── asm_darwin_arm.s
│   │       │   │   ├── asm_darwin_arm64.s
│   │       │   │   ├── asm_dragonfly_amd64.s
│   │       │   │   ├── asm_freebsd_386.s
│   │       │   │   ├── asm_freebsd_amd64.s
│   │       │   │   ├── asm_freebsd_arm.s
│   │       │   │   ├── asm_freebsd_arm64.s
│   │       │   │   ├── asm_linux_386.s
│   │       │   │   ├── asm_linux_amd64.s
│   │       │   │   ├── asm_linux_arm.s
│   │       │   │   ├── asm_linux_arm64.s
│   │       │   │   ├── asm_linux_mips64x.s
│   │       │   │   ├── asm_linux_mipsx.s
│   │       │   │   ├── asm_linux_ppc64x.s
│   │       │   │   ├── asm_linux_riscv64.s
│   │       │   │   ├── asm_linux_s390x.s
│   │       │   │   ├── asm_netbsd_386.s
│   │       │   │   ├── asm_netbsd_amd64.s
│   │       │   │   ├── asm_netbsd_arm.s
│   │       │   │   ├── asm_netbsd_arm64.s
│   │       │   │   ├── asm_openbsd_386.s
│   │       │   │   ├── asm_openbsd_amd64.s
│   │       │   │   ├── asm_openbsd_arm.s
│   │       │   │   ├── asm_openbsd_arm64.s
│   │       │   │   ├── asm_openbsd_mips64.s
│   │       │   │   ├── asm_solaris_amd64.s
│   │       │   │   ├── bluetooth_linux.go
│   │       │   │   ├── cap_freebsd.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── dev_aix_ppc.go
│   │       │   │   ├── dev_aix_ppc64.go
│   │       │   │   ├── dev_darwin.go
│   │       │   │   ├── dev_dragonfly.go
│   │       │   │   ├── dev_freebsd.go
│   │       │   │   ├── dev_linux.go
│   │       │   │   ├── dev_netbsd.go
│   │       │   │   ├── dev_openbsd.go
│   │       │   │   ├── dirent.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── env_unix.go
│   │       │   │   ├── errors_freebsd_386.go
│   │       │   │   ├── errors_freebsd_amd64.go
│   │       │   │   ├── errors_freebsd_arm.go
│   │       │   │   ├── errors_freebsd_arm64.go
│   │       │   │   ├── fcntl.go
│   │       │   │   ├── fcntl_darwin.go
│   │       │   │   ├── fcntl_linux_32bit.go
│   │       │   │   ├── fdset.go
│   │       │   │   ├── gccgo.go
│   │       │   │   ├── gccgo_c.c
│   │       │   │   ├── gccgo_linux_amd64.go
│   │       │   │   ├── ioctl.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── pagesize_unix.go
│   │       │   │   ├── pledge_openbsd.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── readdirent_getdents.go
│   │       │   │   ├── readdirent_getdirentries.go
│   │       │   │   ├── sockcmsg_dragonfly.go
│   │       │   │   ├── sockcmsg_linux.go
│   │       │   │   ├── sockcmsg_unix.go
│   │       │   │   ├── sockcmsg_unix_other.go
│   │       │   │   ├── str.go
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_aix.go
│   │       │   │   ├── syscall_aix_ppc.go
│   │       │   │   ├── syscall_aix_ppc64.go
│   │       │   │   ├── syscall_bsd.go
│   │       │   │   ├── syscall_darwin.1_12.go
│   │       │   │   ├── syscall_darwin.1_13.go
│   │       │   │   ├── syscall_darwin.go
│   │       │   │   ├── syscall_darwin_386.go
│   │       │   │   ├── syscall_darwin_amd64.go
│   │       │   │   ├── syscall_darwin_arm.go
│   │       │   │   ├── syscall_darwin_arm64.go
│   │       │   │   ├── syscall_darwin_libSystem.go
│   │       │   │   ├── syscall_dragonfly.go
│   │       │   │   ├── syscall_dragonfly_amd64.go
│   │       │   │   ├── syscall_freebsd.go
│   │       │   │   ├── syscall_freebsd_386.go
│   │       │   │   ├── syscall_freebsd_amd64.go
│   │       │   │   ├── syscall_freebsd_arm.go
│   │       │   │   ├── syscall_freebsd_arm64.go
│   │       │   │   ├── syscall_illumos.go
│   │       │   │   ├── syscall_linux.go
│   │       │   │   ├── syscall_linux_386.go
│   │       │   │   ├── syscall_linux_amd64.go
│   │       │   │   ├── syscall_linux_amd64_gc.go
│   │       │   │   ├── syscall_linux_arm.go
│   │       │   │   ├── syscall_linux_arm64.go
│   │       │   │   ├── syscall_linux_gc.go
│   │       │   │   ├── syscall_linux_gc_386.go
│   │       │   │   ├── syscall_linux_gc_arm.go
│   │       │   │   ├── syscall_linux_gccgo_386.go
│   │       │   │   ├── syscall_linux_gccgo_arm.go
│   │       │   │   ├── syscall_linux_mips64x.go
│   │       │   │   ├── syscall_linux_mipsx.go
│   │       │   │   ├── syscall_linux_ppc64x.go
│   │       │   │   ├── syscall_linux_riscv64.go
│   │       │   │   ├── syscall_linux_s390x.go
│   │       │   │   ├── syscall_linux_sparc64.go
│   │       │   │   ├── syscall_netbsd.go
│   │       │   │   ├── syscall_netbsd_386.go
│   │       │   │   ├── syscall_netbsd_amd64.go
│   │       │   │   ├── syscall_netbsd_arm.go
│   │       │   │   ├── syscall_netbsd_arm64.go
│   │       │   │   ├── syscall_openbsd.go
│   │       │   │   ├── syscall_openbsd_386.go
│   │       │   │   ├── syscall_openbsd_amd64.go
│   │       │   │   ├── syscall_openbsd_arm.go
│   │       │   │   ├── syscall_openbsd_arm64.go
│   │       │   │   ├── syscall_openbsd_mips64.go
│   │       │   │   ├── syscall_solaris.go
│   │       │   │   ├── syscall_solaris_amd64.go
│   │       │   │   ├── syscall_unix.go
│   │       │   │   ├── syscall_unix_gc.go
│   │       │   │   ├── syscall_unix_gc_ppc64x.go
│   │       │   │   ├── timestruct.go
│   │       │   │   ├── unveil_openbsd.go
│   │       │   │   ├── xattr_bsd.go
│   │       │   │   ├── zerrors_aix_ppc.go
│   │       │   │   ├── zerrors_aix_ppc64.go
│   │       │   │   ├── zerrors_darwin_386.go
│   │       │   │   ├── zerrors_darwin_amd64.go
│   │       │   │   ├── zerrors_darwin_arm.go
│   │       │   │   ├── zerrors_darwin_arm64.go
│   │       │   │   ├── zerrors_dragonfly_amd64.go
│   │       │   │   ├── zerrors_freebsd_386.go
│   │       │   │   ├── zerrors_freebsd_amd64.go
│   │       │   │   ├── zerrors_freebsd_arm.go
│   │       │   │   ├── zerrors_freebsd_arm64.go
│   │       │   │   ├── zerrors_linux.go
│   │       │   │   ├── zerrors_linux_386.go
│   │       │   │   ├── zerrors_linux_amd64.go
│   │       │   │   ├── zerrors_linux_arm.go
│   │       │   │   ├── zerrors_linux_arm64.go
│   │       │   │   ├── zerrors_linux_mips.go
│   │       │   │   ├── zerrors_linux_mips64.go
│   │       │   │   ├── zerrors_linux_mips64le.go
│   │       │   │   ├── zerrors_linux_mipsle.go
│   │       │   │   ├── zerrors_linux_ppc64.go
│   │       │   │   ├── zerrors_linux_ppc64le.go
│   │       │   │   ├── zerrors_linux_riscv64.go
│   │       │   │   ├── zerrors_linux_s390x.go
│   │       │   │   ├── zerrors_linux_sparc64.go
│   │       │   │   ├── zerrors_netbsd_386.go
│   │       │   │   ├── zerrors_netbsd_amd64.go
│   │       │   │   ├── zerrors_netbsd_arm.go
│   │       │   │   ├── zerrors_netbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_386.go
│   │       │   │   ├── zerrors_openbsd_amd64.go
│   │       │   │   ├── zerrors_openbsd_arm.go
│   │       │   │   ├── zerrors_openbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_mips64.go
│   │       │   │   ├── zerrors_solaris_amd64.go
│   │       │   │   ├── zptrace_armnn_linux.go
│   │       │   │   ├── zptrace_linux_arm64.go
│   │       │   │   ├── zptrace_mipsnn_linux.go
│   │       │   │   ├── zptrace_mipsnnle_linux.go
│   │       │   │   ├── zptrace_x86_linux.go
│   │       │   │   ├── zsyscall_aix_ppc.go
│   │       │   │   ├── zsyscall_aix_ppc64.go
│   │       │   │   ├── zsyscall_aix_ppc64_gc.go
│   │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
│   │       │   │   ├── zsyscall_darwin_386.1_13.go
│   │       │   │   ├── zsyscall_darwin_386.1_13.s
│   │       │   │   ├── zsyscall_darwin_386.go
│   │       │   │   ├── zsyscall_darwin_386.s
│   │       │   │   ├── zsyscall_darwin_amd64.1_13.go
│   │       │   │   ├── zsyscall_darwin_amd64.1_13.s
│   │       │   │   ├── zsyscall_darwin_amd64.go
│   │       │   │   ├── zsyscall_darwin_amd64.s
│   │       │   │   ├── zsyscall_darwin_arm.1_13.go
│   │       │   │   ├── zsyscall_darwin_arm.1_13.s
│   │       │   │   ├── zsyscall_darwin_arm.go
│   │       │   │   ├── zsyscall_darwin_arm.s
│   │       │   │   ├── zsyscall_darwin_arm64.1_13.go
│   │       │   │   ├── zsyscall_darwin_arm64.1_13.s
│   │       │   │   ├── zsyscall_darwin_arm64.go
│   │       │   │   ├── zsyscall_darwin_arm64.s
│   │       │   │   ├── zsyscall_dragonfly_amd64.go
│   │       │   │   ├── zsyscall_freebsd_386.go
│   │       │   │   ├── zsyscall_freebsd_amd64.go
│   │       │   │   ├── zsyscall_freebsd_arm.go
│   │       │   │   ├── zsyscall_freebsd_arm64.go
│   │       │   │   ├── zsyscall_illumos_amd64.go
│   │       │   │   ├── zsyscall_linux.go
│   │       │   │   ├── zsyscall_linux_386.go
│   │       │   │   ├── zsyscall_linux_amd64.go
│   │       │   │   ├── zsyscall_linux_arm.go
│   │       │   │   ├── zsyscall_linux_arm64.go
│   │       │   │   ├── zsyscall_linux_mips.go
│   │       │   │   ├── zsyscall_linux_mips64.go
│   │       │   │   ├── zsyscall_linux_mips64le.go
│   │       │   │   ├── zsyscall_linux_mipsle.go
│   │       │   │   ├── zsyscall_linux_ppc64.go
│   │       │   │   ├── zsyscall_linux_ppc64le.go
│   │       │   │   ├── zsyscall_linux_riscv64.go
│   │       │   │   ├── zsyscall_linux_s390x.go
│   │       │   │   ├── zsyscall_linux_sparc64.go
│   │       │   │   ├── zsyscall_netbsd_386.go
│   │       │   │   ├── zsyscall_netbsd_amd64.go
│   │       │   │   ├── zsyscall_netbsd_arm.go
│   │       │   │   ├── zsyscall_netbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_386.go
│   │       │   │   ├── zsyscall_openbsd_amd64.go
│   │       │   │   ├── zsyscall_openbsd_arm.go
│   │       │   │   ├── zsyscall_openbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_mips64.go
│   │       │   │   ├── zsyscall_solaris_amd64.go
│   │       │   │   ├── zsysctl_openbsd_386.go
│   │       │   │   ├── zsysctl_openbsd_amd64.go
│   │       │   │   ├── zsysctl_openbsd_arm.go
│   │       │   │   ├── zsysctl_openbsd_arm64.go
│   │       │   │   ├── zsysctl_openbsd_mips64.go
│   │       │   │   ├── zsysnum_dragonfly_amd64.go
│   │       │   │   ├── zsysnum_freebsd_386.go
│   │       │   │   ├── zsysnum_freebsd_amd64.go
│   │       │   │   ├── zsysnum_freebsd_arm.go
│   │       │   │   ├── zsysnum_freebsd_arm64.go
│   │       │   │   ├── zsysnum_linux_386.go
│   │       │   │   ├── zsysnum_linux_amd64.go
│   │       │   │   ├── zsysnum_linux_arm.go
│   │       │   │   ├── zsysnum_linux_arm64.go
│   │       │   │   ├── zsysnum_linux_mips.go
│   │       │   │   ├── zsysnum_linux_mips64.go
│   │       │   │   ├── zsysnum_linux_mips64le.go
│   │       │   │   ├── zsysnum_linux_mipsle.go
│   │       │   │   ├── zsysnum_linux_ppc64.go
│   │       │   │   ├── zsysnum_linux_ppc64le.go
│   │       │   │   ├── zsysnum_linux_riscv64.go
│   │       │   │   ├── zsysnum_linux_s390x.go
│   │       │   │   ├── zsysnum_linux_sparc64.go
│   │       │   │   ├── zsysnum_netbsd_386.go
│   │       │   │   ├── zsysnum_netbsd_amd64.go
│   │       │   │   ├── zsysnum_netbsd_arm.go
│   │       │   │   ├── zsysnum_netbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_386.go
│   │       │   │   ├── zsysnum_openbsd_amd64.go
│   │       │   │   ├── zsysnum_openbsd_arm.go
│   │       │   │   ├── zsysnum_openbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_mips64.go
│   │       │   │   ├── ztypes_aix_ppc.go
│   │       │   │   ├── ztypes_aix_ppc64.go
│   │       │   │   ├── ztypes_darwin_386.go
│   │       │   │   ├── ztypes_darwin_amd64.go
│   │       │   │   ├── ztypes_darwin_arm.go
│   │       │   │   ├── ztypes_darwin_arm64.go
│   │       │   │   ├── ztypes_dragonfly_amd64.go
│   │       │   │   ├── ztypes_freebsd_386.go
│   │       │   │   ├── ztypes_freebsd_amd64.go
│   │       │   │   ├── ztypes_freebsd_arm.go
│   │       │   │   ├── ztypes_freebsd_arm64.go
│   │       │   │   ├── ztypes_linux.go
│   │       │   │   ├── ztypes_linux_386.go
│   │       │   │   ├── ztypes_linux_amd64.go
│   │       │   │   ├── ztypes_linux_arm.go
│   │       │   │   ├── ztypes_linux_arm64.go
│   │       │   │   ├── ztypes_linux_mips.go
│   │       │   │   ├── ztypes_linux_mips64.go
│   │       │   │   ├── ztypes_linux_mips64le.go
│   │       │   │   ├── ztypes_linux_mipsle.go
│   │       │   │   ├── ztypes_linux_ppc64.go
│   │       │   │   ├── ztypes_linux_ppc64le.go
│   │       │   │   ├── ztypes_linux_riscv64.go
│   │       │   │   ├── ztypes_linux_s390x.go
│   │       │   │   ├── ztypes_linux_sparc64.go
│   │       │   │   ├── ztypes_netbsd_386.go
│   │       │   │   ├── ztypes_netbsd_amd64.go
│   │       │   │   ├── ztypes_netbsd_arm.go
│   │       │   │   ├── ztypes_netbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_386.go
│   │       │   │   ├── ztypes_openbsd_amd64.go
│   │       │   │   ├── ztypes_openbsd_arm.go
│   │       │   │   ├── ztypes_openbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_mips64.go
│   │       │   │   └── ztypes_solaris_amd64.go
│   │       │   └── windows/
│   │       │       ├── aliases.go
│   │       │       ├── dll_windows.go
│   │       │       ├── empty.s
│   │       │       ├── env_windows.go
│   │       │       ├── eventlog.go
│   │       │       ├── exec_windows.go
│   │       │       ├── memory_windows.go
│   │       │       ├── mkerrors.bash
│   │       │       ├── mkknownfolderids.bash
│   │       │       ├── mksyscall.go
│   │       │       ├── race.go
│   │       │       ├── race0.go
│   │       │       ├── security_windows.go
│   │       │       ├── service.go
│   │       │       ├── str.go
│   │       │       ├── syscall.go
│   │       │       ├── syscall_windows.go
│   │       │       ├── types_windows.go
│   │       │       ├── types_windows_386.go
│   │       │       ├── types_windows_amd64.go
│   │       │       ├── types_windows_arm.go
│   │       │       ├── zerrors_windows.go
│   │       │       ├── zknownfolderids_windows.go
│   │       │       └── zsyscall_windows.go
│   │       ├── text/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── secure/
│   │       │   │   └── bidirule/
│   │       │   │       ├── bidirule.go
│   │       │   │       ├── bidirule10.0.0.go
│   │       │   │       └── bidirule9.0.0.go
│   │       │   ├── transform/
│   │       │   │   └── transform.go
│   │       │   └── unicode/
│   │       │       ├── bidi/
│   │       │       │   ├── bidi.go
│   │       │       │   ├── bracket.go
│   │       │       │   ├── core.go
│   │       │       │   ├── prop.go
│   │       │       │   ├── tables10.0.0.go
│   │       │       │   ├── tables11.0.0.go
│   │       │       │   ├── tables12.0.0.go
│   │       │       │   ├── tables9.0.0.go
│   │       │       │   └── trieval.go
│   │       │       └── norm/
│   │       │           ├── composition.go
│   │       │           ├── forminfo.go
│   │       │           ├── input.go
│   │       │           ├── iter.go
│   │       │           ├── normalize.go
│   │       │           ├── readwriter.go
│   │       │           ├── tables10.0.0.go
│   │       │           ├── tables11.0.0.go
│   │       │           ├── tables12.0.0.go
│   │       │           ├── tables9.0.0.go
│   │       │           ├── transform.go
│   │       │           └── trie.go
│   │       ├── time/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── rate/
│   │       │       └── rate.go
│   │       ├── tools/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── go/
│   │       │   │   ├── analysis/
│   │       │   │   │   ├── analysis.go
│   │       │   │   │   ├── diagnostic.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── passes/
│   │       │   │   │   │   └── inspect/
│   │       │   │   │   │       └── inspect.go
│   │       │   │   │   └── validate.go
│   │       │   │   ├── ast/
│   │       │   │   │   ├── astutil/
│   │       │   │   │   │   ├── enclosing.go
│   │       │   │   │   │   ├── imports.go
│   │       │   │   │   │   ├── rewrite.go
│   │       │   │   │   │   └── util.go
│   │       │   │   │   └── inspector/
│   │       │   │   │       ├── inspector.go
│   │       │   │   │       └── typeof.go
│   │       │   │   ├── buildutil/
│   │       │   │   │   ├── allpackages.go
│   │       │   │   │   ├── fakecontext.go
│   │       │   │   │   ├── overlay.go
│   │       │   │   │   ├── tags.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── gcexportdata/
│   │       │   │   │   ├── gcexportdata.go
│   │       │   │   │   └── importer.go
│   │       │   │   ├── internal/
│   │       │   │   │   ├── cgo/
│   │       │   │   │   │   ├── cgo.go
│   │       │   │   │   │   └── cgo_pkgconfig.go
│   │       │   │   │   ├── gcimporter/
│   │       │   │   │   │   ├── bexport.go
│   │       │   │   │   │   ├── bimport.go
│   │       │   │   │   │   ├── exportdata.go
│   │       │   │   │   │   ├── gcimporter.go
│   │       │   │   │   │   ├── iexport.go
│   │       │   │   │   │   ├── iimport.go
│   │       │   │   │   │   ├── newInterface10.go
│   │       │   │   │   │   └── newInterface11.go
│   │       │   │   │   └── packagesdriver/
│   │       │   │   │       └── sizes.go
│   │       │   │   ├── loader/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── loader.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── packages/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── external.go
│   │       │   │   │   ├── golist.go
│   │       │   │   │   ├── golist_overlay.go
│   │       │   │   │   ├── loadmode_string.go
│   │       │   │   │   ├── packages.go
│   │       │   │   │   └── visit.go
│   │       │   │   └── types/
│   │       │   │       ├── objectpath/
│   │       │   │       │   └── objectpath.go
│   │       │   │       └── typeutil/
│   │       │   │           ├── callee.go
│   │       │   │           ├── imports.go
│   │       │   │           ├── map.go
│   │       │   │           ├── methodsetcache.go
│   │       │   │           └── ui.go
│   │       │   └── internal/
│   │       │       ├── analysisinternal/
│   │       │       │   └── analysis.go
│   │       │       ├── event/
│   │       │       │   ├── core/
│   │       │       │   │   ├── event.go
│   │       │       │   │   ├── export.go
│   │       │       │   │   └── fast.go
│   │       │       │   ├── doc.go
│   │       │       │   ├── event.go
│   │       │       │   ├── keys/
│   │       │       │   │   ├── keys.go
│   │       │       │   │   └── standard.go
│   │       │       │   └── label/
│   │       │       │       └── label.go
│   │       │       ├── gocommand/
│   │       │       │   ├── invoke.go
│   │       │       │   └── vendor.go
│   │       │       ├── packagesinternal/
│   │       │       │   └── packages.go
│   │       │       └── typesinternal/
│   │       │           └── types.go
│   │       └── xerrors/
│   │           ├── LICENSE
│   │           ├── PATENTS
│   │           ├── README
│   │           ├── adaptor.go
│   │           ├── codereview.cfg
│   │           ├── doc.go
│   │           ├── errors.go
│   │           ├── fmt.go
│   │           ├── format.go
│   │           ├── frame.go
│   │           ├── go.mod
│   │           ├── internal/
│   │           │   └── internal.go
│   │           └── wrap.go
│   ├── google.golang.org/
│   │   ├── genproto/
│   │   │   ├── LICENSE
│   │   │   ├── googleapis/
│   │   │   │   ├── api/
│   │   │   │   │   └── httpbody/
│   │   │   │   │       └── httpbody.pb.go
│   │   │   │   └── rpc/
│   │   │   │       └── status/
│   │   │   │           └── status.pb.go
│   │   │   └── protobuf/
│   │   │       └── field_mask/
│   │   │           └── field_mask.go
│   │   ├── grpc/
│   │   │   ├── .travis.yml
│   │   │   ├── AUTHORS
│   │   │   ├── CODE-OF-CONDUCT.md
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── GOVERNANCE.md
│   │   │   ├── LICENSE
│   │   │   ├── MAINTAINERS.md
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── attributes/
│   │   │   │   └── attributes.go
│   │   │   ├── backoff/
│   │   │   │   └── backoff.go
│   │   │   ├── backoff.go
│   │   │   ├── balancer/
│   │   │   │   ├── balancer.go
│   │   │   │   ├── base/
│   │   │   │   │   ├── balancer.go
│   │   │   │   │   └── base.go
│   │   │   │   └── roundrobin/
│   │   │   │       └── roundrobin.go
│   │   │   ├── balancer.go
│   │   │   ├── balancer_conn_wrappers.go
│   │   │   ├── balancer_v1_wrapper.go
│   │   │   ├── binarylog/
│   │   │   │   └── grpc_binarylog_v1/
│   │   │   │       └── binarylog.pb.go
│   │   │   ├── call.go
│   │   │   ├── clientconn.go
│   │   │   ├── codec.go
│   │   │   ├── codegen.sh
│   │   │   ├── codes/
│   │   │   │   ├── code_string.go
│   │   │   │   └── codes.go
│   │   │   ├── connectivity/
│   │   │   │   └── connectivity.go
│   │   │   ├── credentials/
│   │   │   │   ├── credentials.go
│   │   │   │   ├── go12.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── syscallconn.go
│   │   │   │   │   └── syscallconn_appengine.go
│   │   │   │   └── tls.go
│   │   │   ├── dialoptions.go
│   │   │   ├── doc.go
│   │   │   ├── encoding/
│   │   │   │   ├── encoding.go
│   │   │   │   └── proto/
│   │   │   │       └── proto.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── grpclog/
│   │   │   │   ├── grpclog.go
│   │   │   │   ├── logger.go
│   │   │   │   └── loggerv2.go
│   │   │   ├── health/
│   │   │   │   ├── client.go
│   │   │   │   ├── grpc_health_v1/
│   │   │   │   │   └── health.pb.go
│   │   │   │   ├── regenerate.sh
│   │   │   │   └── server.go
│   │   │   ├── install_gae.sh
│   │   │   ├── interceptor.go
│   │   │   ├── internal/
│   │   │   │   ├── backoff/
│   │   │   │   │   └── backoff.go
│   │   │   │   ├── balancerload/
│   │   │   │   │   └── load.go
│   │   │   │   ├── binarylog/
│   │   │   │   │   ├── binarylog.go
│   │   │   │   │   ├── binarylog_testutil.go
│   │   │   │   │   ├── env_config.go
│   │   │   │   │   ├── method_logger.go
│   │   │   │   │   ├── regenerate.sh
│   │   │   │   │   ├── sink.go
│   │   │   │   │   └── util.go
│   │   │   │   ├── buffer/
│   │   │   │   │   └── unbounded.go
│   │   │   │   ├── channelz/
│   │   │   │   │   ├── funcs.go
│   │   │   │   │   ├── logging.go
│   │   │   │   │   ├── types.go
│   │   │   │   │   ├── types_linux.go
│   │   │   │   │   ├── types_nonlinux.go
│   │   │   │   │   ├── util_linux.go
│   │   │   │   │   └── util_nonlinux.go
│   │   │   │   ├── envconfig/
│   │   │   │   │   └── envconfig.go
│   │   │   │   ├── grpclog/
│   │   │   │   │   ├── grpclog.go
│   │   │   │   │   └── prefixLogger.go
│   │   │   │   ├── grpcrand/
│   │   │   │   │   └── grpcrand.go
│   │   │   │   ├── grpcsync/
│   │   │   │   │   └── event.go
│   │   │   │   ├── grpcutil/
│   │   │   │   │   └── target.go
│   │   │   │   ├── internal.go
│   │   │   │   ├── resolver/
│   │   │   │   │   ├── dns/
│   │   │   │   │   │   ├── dns_resolver.go
│   │   │   │   │   │   └── go113.go
│   │   │   │   │   └── passthrough/
│   │   │   │   │       └── passthrough.go
│   │   │   │   ├── status/
│   │   │   │   │   └── status.go
│   │   │   │   ├── syscall/
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   └── syscall_nonlinux.go
│   │   │   │   └── transport/
│   │   │   │       ├── bdp_estimator.go
│   │   │   │       ├── controlbuf.go
│   │   │   │       ├── defaults.go
│   │   │   │       ├── flowcontrol.go
│   │   │   │       ├── handler_server.go
│   │   │   │       ├── http2_client.go
│   │   │   │       ├── http2_server.go
│   │   │   │       ├── http_util.go
│   │   │   │       ├── log.go
│   │   │   │       └── transport.go
│   │   │   ├── keepalive/
│   │   │   │   └── keepalive.go
│   │   │   ├── metadata/
│   │   │   │   └── metadata.go
│   │   │   ├── naming/
│   │   │   │   ├── dns_resolver.go
│   │   │   │   └── naming.go
│   │   │   ├── peer/
│   │   │   │   └── peer.go
│   │   │   ├── picker_wrapper.go
│   │   │   ├── pickfirst.go
│   │   │   ├── preloader.go
│   │   │   ├── proxy.go
│   │   │   ├── resolver/
│   │   │   │   ├── dns/
│   │   │   │   │   └── dns_resolver.go
│   │   │   │   ├── passthrough/
│   │   │   │   │   └── passthrough.go
│   │   │   │   └── resolver.go
│   │   │   ├── resolver_conn_wrapper.go
│   │   │   ├── rpc_util.go
│   │   │   ├── server.go
│   │   │   ├── service_config.go
│   │   │   ├── serviceconfig/
│   │   │   │   └── serviceconfig.go
│   │   │   ├── stats/
│   │   │   │   ├── handlers.go
│   │   │   │   └── stats.go
│   │   │   ├── status/
│   │   │   │   └── status.go
│   │   │   ├── stream.go
│   │   │   ├── tap/
│   │   │   │   └── tap.go
│   │   │   ├── trace.go
│   │   │   ├── version.go
│   │   │   └── vet.sh
│   │   └── protobuf/
│   │       ├── AUTHORS
│   │       ├── CONTRIBUTORS
│   │       ├── LICENSE
│   │       ├── PATENTS
│   │       ├── cmd/
│   │       │   └── protoc-gen-go/
│   │       │       └── internal_gengo/
│   │       │           ├── init.go
│   │       │           ├── main.go
│   │       │           ├── reflect.go
│   │       │           └── well_known_types.go
│   │       ├── compiler/
│   │       │   └── protogen/
│   │       │       └── protogen.go
│   │       ├── encoding/
│   │       │   ├── protojson/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── encode.go
│   │       │   │   └── well_known_types.go
│   │       │   ├── prototext/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   └── encode.go
│   │       │   └── protowire/
│   │       │       └── wire.go
│   │       ├── internal/
│   │       │   ├── descfmt/
│   │       │   │   └── stringer.go
│   │       │   ├── descopts/
│   │       │   │   └── options.go
│   │       │   ├── detrand/
│   │       │   │   └── rand.go
│   │       │   ├── encoding/
│   │       │   │   ├── defval/
│   │       │   │   │   └── default.go
│   │       │   │   ├── json/
│   │       │   │   │   ├── decode.go
│   │       │   │   │   ├── decode_number.go
│   │       │   │   │   ├── decode_string.go
│   │       │   │   │   ├── decode_token.go
│   │       │   │   │   └── encode.go
│   │       │   │   ├── messageset/
│   │       │   │   │   └── messageset.go
│   │       │   │   ├── tag/
│   │       │   │   │   └── tag.go
│   │       │   │   └── text/
│   │       │   │       ├── decode.go
│   │       │   │       ├── decode_number.go
│   │       │   │       ├── decode_string.go
│   │       │   │       ├── decode_token.go
│   │       │   │       ├── doc.go
│   │       │   │       └── encode.go
│   │       │   ├── errors/
│   │       │   │   ├── errors.go
│   │       │   │   ├── is_go112.go
│   │       │   │   └── is_go113.go
│   │       │   ├── fieldsort/
│   │       │   │   └── fieldsort.go
│   │       │   ├── filedesc/
│   │       │   │   ├── build.go
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_lazy.go
│   │       │   │   ├── desc_list.go
│   │       │   │   ├── desc_list_gen.go
│   │       │   │   └── placeholder.go
│   │       │   ├── filetype/
│   │       │   │   └── build.go
│   │       │   ├── flags/
│   │       │   │   ├── flags.go
│   │       │   │   ├── proto_legacy_disable.go
│   │       │   │   └── proto_legacy_enable.go
│   │       │   ├── genid/
│   │       │   │   ├── any_gen.go
│   │       │   │   ├── api_gen.go
│   │       │   │   ├── descriptor_gen.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── duration_gen.go
│   │       │   │   ├── empty_gen.go
│   │       │   │   ├── field_mask_gen.go
│   │       │   │   ├── goname.go
│   │       │   │   ├── map_entry.go
│   │       │   │   ├── source_context_gen.go
│   │       │   │   ├── struct_gen.go
│   │       │   │   ├── timestamp_gen.go
│   │       │   │   ├── type_gen.go
│   │       │   │   ├── wrappers.go
│   │       │   │   └── wrappers_gen.go
│   │       │   ├── impl/
│   │       │   │   ├── api_export.go
│   │       │   │   ├── checkinit.go
│   │       │   │   ├── codec_extension.go
│   │       │   │   ├── codec_field.go
│   │       │   │   ├── codec_gen.go
│   │       │   │   ├── codec_map.go
│   │       │   │   ├── codec_map_go111.go
│   │       │   │   ├── codec_map_go112.go
│   │       │   │   ├── codec_message.go
│   │       │   │   ├── codec_messageset.go
│   │       │   │   ├── codec_reflect.go
│   │       │   │   ├── codec_tables.go
│   │       │   │   ├── codec_unsafe.go
│   │       │   │   ├── convert.go
│   │       │   │   ├── convert_list.go
│   │       │   │   ├── convert_map.go
│   │       │   │   ├── decode.go
│   │       │   │   ├── encode.go
│   │       │   │   ├── enum.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── legacy_enum.go
│   │       │   │   ├── legacy_export.go
│   │       │   │   ├── legacy_extension.go
│   │       │   │   ├── legacy_file.go
│   │       │   │   ├── legacy_message.go
│   │       │   │   ├── merge.go
│   │       │   │   ├── merge_gen.go
│   │       │   │   ├── message.go
│   │       │   │   ├── message_reflect.go
│   │       │   │   ├── message_reflect_field.go
│   │       │   │   ├── message_reflect_gen.go
│   │       │   │   ├── pointer_reflect.go
│   │       │   │   ├── pointer_unsafe.go
│   │       │   │   ├── validate.go
│   │       │   │   └── weak.go
│   │       │   ├── mapsort/
│   │       │   │   └── mapsort.go
│   │       │   ├── pragma/
│   │       │   │   └── pragma.go
│   │       │   ├── set/
│   │       │   │   └── ints.go
│   │       │   ├── strs/
│   │       │   │   ├── strings.go
│   │       │   │   ├── strings_pure.go
│   │       │   │   └── strings_unsafe.go
│   │       │   └── version/
│   │       │       └── version.go
│   │       ├── proto/
│   │       │   ├── checkinit.go
│   │       │   ├── decode.go
│   │       │   ├── decode_gen.go
│   │       │   ├── doc.go
│   │       │   ├── encode.go
│   │       │   ├── encode_gen.go
│   │       │   ├── equal.go
│   │       │   ├── extension.go
│   │       │   ├── merge.go
│   │       │   ├── messageset.go
│   │       │   ├── proto.go
│   │       │   ├── proto_methods.go
│   │       │   ├── proto_reflect.go
│   │       │   ├── reset.go
│   │       │   ├── size.go
│   │       │   ├── size_gen.go
│   │       │   └── wrappers.go
│   │       ├── reflect/
│   │       │   ├── protodesc/
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_resolve.go
│   │       │   │   ├── desc_validate.go
│   │       │   │   └── proto.go
│   │       │   ├── protoreflect/
│   │       │   │   ├── methods.go
│   │       │   │   ├── proto.go
│   │       │   │   ├── source.go
│   │       │   │   ├── type.go
│   │       │   │   ├── value.go
│   │       │   │   ├── value_pure.go
│   │       │   │   ├── value_union.go
│   │       │   │   └── value_unsafe.go
│   │       │   └── protoregistry/
│   │       │       └── registry.go
│   │       ├── runtime/
│   │       │   ├── protoiface/
│   │       │   │   ├── legacy.go
│   │       │   │   └── methods.go
│   │       │   └── protoimpl/
│   │       │       ├── impl.go
│   │       │       └── version.go
│   │       └── types/
│   │           ├── descriptorpb/
│   │           │   └── descriptor.pb.go
│   │           ├── known/
│   │           │   ├── anypb/
│   │           │   │   └── any.pb.go
│   │           │   ├── durationpb/
│   │           │   │   └── duration.pb.go
│   │           │   ├── fieldmaskpb/
│   │           │   │   └── field_mask.pb.go
│   │           │   ├── timestamppb/
│   │           │   │   └── timestamp.pb.go
│   │           │   └── wrapperspb/
│   │           │       └── wrappers.pb.go
│   │           └── pluginpb/
│   │               └── plugin.pb.go
│   ├── gopkg.in/
│   │   ├── cheggaaa/
│   │   │   └── pb.v1/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── format.go
│   │   │       ├── pb.go
│   │   │       ├── pb_appengine.go
│   │   │       ├── pb_win.go
│   │   │       ├── pb_x.go
│   │   │       ├── pool.go
│   │   │       ├── pool_win.go
│   │   │       ├── pool_x.go
│   │   │       ├── reader.go
│   │   │       ├── runecount.go
│   │   │       ├── termios_bsd.go
│   │   │       └── termios_sysv.go
│   │   ├── gcfg.v1/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── doc.go
│   │   │   ├── errors.go
│   │   │   ├── read.go
│   │   │   ├── scanner/
│   │   │   │   ├── errors.go
│   │   │   │   └── scanner.go
│   │   │   ├── set.go
│   │   │   ├── token/
│   │   │   │   ├── position.go
│   │   │   │   ├── serialize.go
│   │   │   │   └── token.go
│   │   │   └── types/
│   │   │       ├── bool.go
│   │   │       ├── doc.go
│   │   │       ├── enum.go
│   │   │       ├── int.go
│   │   │       └── scan.go
│   │   ├── warnings.v0/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   └── warnings.go
│   │   └── yaml.v2/
│   │       ├── .travis.yml
│   │       ├── LICENSE
│   │       ├── LICENSE.libyaml
│   │       ├── NOTICE
│   │       ├── README.md
│   │       ├── apic.go
│   │       ├── decode.go
│   │       ├── emitterc.go
│   │       ├── encode.go
│   │       ├── go.mod
│   │       ├── parserc.go
│   │       ├── readerc.go
│   │       ├── resolve.go
│   │       ├── scannerc.go
│   │       ├── sorter.go
│   │       ├── writerc.go
│   │       ├── yaml.go
│   │       ├── yamlh.go
│   │       └── yamlprivateh.go
│   ├── honnef.co/
│   │   └── go/
│   │       └── tools/
│   │           ├── LICENSE
│   │           ├── LICENSE-THIRD-PARTY
│   │           ├── arg/
│   │           │   └── arg.go
│   │           ├── cmd/
│   │           │   └── staticcheck/
│   │           │       ├── README.md
│   │           │       └── staticcheck.go
│   │           ├── code/
│   │           │   └── code.go
│   │           ├── config/
│   │           │   ├── config.go
│   │           │   └── example.conf
│   │           ├── deprecated/
│   │           │   └── stdlib.go
│   │           ├── edit/
│   │           │   └── edit.go
│   │           ├── facts/
│   │           │   ├── deprecated.go
│   │           │   ├── generated.go
│   │           │   ├── purity.go
│   │           │   └── token.go
│   │           ├── functions/
│   │           │   ├── loops.go
│   │           │   ├── stub.go
│   │           │   └── terminates.go
│   │           ├── go/
│   │           │   └── types/
│   │           │       └── typeutil/
│   │           │           ├── callee.go
│   │           │           ├── identical.go
│   │           │           ├── imports.go
│   │           │           ├── map.go
│   │           │           ├── methodsetcache.go
│   │           │           └── ui.go
│   │           ├── internal/
│   │           │   ├── cache/
│   │           │   │   ├── cache.go
│   │           │   │   ├── default.go
│   │           │   │   └── hash.go
│   │           │   ├── passes/
│   │           │   │   └── buildir/
│   │           │   │       └── buildir.go
│   │           │   ├── renameio/
│   │           │   │   └── renameio.go
│   │           │   ├── robustio/
│   │           │   │   ├── robustio.go
│   │           │   │   ├── robustio_darwin.go
│   │           │   │   ├── robustio_flaky.go
│   │           │   │   ├── robustio_other.go
│   │           │   │   └── robustio_windows.go
│   │           │   └── sharedcheck/
│   │           │       └── lint.go
│   │           ├── ir/
│   │           │   ├── LICENSE
│   │           │   ├── blockopt.go
│   │           │   ├── builder.go
│   │           │   ├── const.go
│   │           │   ├── create.go
│   │           │   ├── doc.go
│   │           │   ├── dom.go
│   │           │   ├── emit.go
│   │           │   ├── exits.go
│   │           │   ├── func.go
│   │           │   ├── html.go
│   │           │   ├── identical.go
│   │           │   ├── identical_17.go
│   │           │   ├── irutil/
│   │           │   │   ├── load.go
│   │           │   │   ├── switch.go
│   │           │   │   ├── util.go
│   │           │   │   └── visit.go
│   │           │   ├── lift.go
│   │           │   ├── lvalue.go
│   │           │   ├── methods.go
│   │           │   ├── mode.go
│   │           │   ├── print.go
│   │           │   ├── sanity.go
│   │           │   ├── source.go
│   │           │   ├── ssa.go
│   │           │   ├── staticcheck.conf
│   │           │   ├── util.go
│   │           │   ├── wrappers.go
│   │           │   └── write.go
│   │           ├── lint/
│   │           │   ├── LICENSE
│   │           │   ├── lint.go
│   │           │   ├── lintdsl/
│   │           │   │   └── lintdsl.go
│   │           │   ├── lintutil/
│   │           │   │   ├── format/
│   │           │   │   │   └── format.go
│   │           │   │   ├── stats.go
│   │           │   │   ├── stats_bsd.go
│   │           │   │   ├── stats_posix.go
│   │           │   │   └── util.go
│   │           │   ├── runner.go
│   │           │   └── stats.go
│   │           ├── loader/
│   │           │   └── loader.go
│   │           ├── pattern/
│   │           │   ├── convert.go
│   │           │   ├── doc.go
│   │           │   ├── fuzz.go
│   │           │   ├── lexer.go
│   │           │   ├── match.go
│   │           │   ├── parser.go
│   │           │   └── pattern.go
│   │           ├── printf/
│   │           │   ├── fuzz.go
│   │           │   └── printf.go
│   │           ├── report/
│   │           │   └── report.go
│   │           ├── simple/
│   │           │   ├── analysis.go
│   │           │   ├── doc.go
│   │           │   └── lint.go
│   │           ├── staticcheck/
│   │           │   ├── analysis.go
│   │           │   ├── buildtag.go
│   │           │   ├── doc.go
│   │           │   ├── lint.go
│   │           │   ├── rules.go
│   │           │   └── structtag.go
│   │           ├── stylecheck/
│   │           │   ├── analysis.go
│   │           │   ├── doc.go
│   │           │   ├── lint.go
│   │           │   └── names.go
│   │           ├── unused/
│   │           │   ├── edge.go
│   │           │   ├── edgekind_string.go
│   │           │   ├── implements.go
│   │           │   └── unused.go
│   │           └── version/
│   │               ├── buildinfo.go
│   │               ├── buildinfo111.go
│   │               └── version.go
│   ├── modules.txt
│   └── sigs.k8s.io/
│       └── yaml/
│           ├── .gitignore
│           ├── .travis.yml
│           ├── CONTRIBUTING.md
│           ├── LICENSE
│           ├── OWNERS
│           ├── README.md
│           ├── RELEASE.md
│           ├── SECURITY_CONTACTS
│           ├── code-of-conduct.md
│           ├── fields.go
│           ├── yaml.go
│           └── yaml_go110.go
├── version.json
└── worker/
    ├── awsCertlint/
    │   └── awsCertlint.go
    ├── caaWorker/
    │   └── caaWorker.go
    ├── crlWorker/
    │   └── crlWorker.go
    ├── evCheckerWorker/
    │   ├── config.go
    │   └── evCheckerWorker.go
    ├── mozillaEvaluationWorker/
    │   ├── configurations.go
    │   ├── mozillaEvaluationWorker.go
    │   └── mozillaEvaluationWorker_test.go
    ├── mozillaGradingWorker/
    │   ├── cipherGrading.go
    │   ├── keyexchangeGrading.go
    │   ├── mozillaGradingWorker.go
    │   ├── mozillaGradingWorker_test.go
    │   └── protocolGrading.go
    ├── ocspStatus/
    │   └── ocspStatus.go
    ├── sslLabsClientSupport/
    │   └── sslLabsClientSupport.go
    ├── symantecDistrust/
    │   └── symantecDistrust.go
    ├── top1m/
    │   └── top1m.go
    └── worker.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .circleci/config.yml
================================================
version: 2
jobs:
  build:
    working_directory: /go/src/github.com/mozilla/tls-observatory
    docker:
      - image: golang:1.15
      - image: circleci/postgres:11-alpine
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: observatory
          POSTGRES_PASSWORD: ""
    steps:
      - checkout
      - run: git submodule update --init
      - run: apt-get update && apt-get install -y dos2unix postgresql-client unzip docker.io
      - run:
          name: Build TLS Observatory
          command: |
            make truststores cipherscan ciscotop1m alexatop1m
            make
      - run:
          name: Run a simple test scan
          command: |
            psql -h 127.0.0.1 -U postgres -d observatory -f database/schema.sql
            ln -s $GOPATH/src/github.com/mozilla/tls-observatory/conf /etc/tls-observatory
            ln -s $GOPATH/src/github.com/mozilla/tls-observatory/cipherscan /opt/cipherscan
            $GOPATH/bin/tlsobs-scanner &
            $GOPATH/bin/tlsobs-api &
            # send SIGKILL after 10m and SIGHUP after 5m
            timeout --kill-after=10m --signal=HUP 5m $GOPATH/bin/tlsobs -observatory http://localhost:8083 www.mozilla.org || exit 1
      - run:
          name: Create version.json
          command: |
            printf '{"commit":"%s","version":"%s","source":"https://github.com/%s/%s","build":"%s"}\n' \
            "$CIRCLE_SHA1" \
            "$CIRCLE_TAG" \
            "$CIRCLE_PROJECT_USERNAME" \
            "$CIRCLE_PROJECT_REPONAME" \
            "$CIRCLE_BUILD_URL" > version.json
      - setup_remote_docker
      - run:
          name: Build containers
          command: |
            docker build -t mozilla/tls-observatory .
            docker tag mozilla/tls-observatory "mozilla/tls-observatory:latest"
      - run:
          name: Push containers
          command: |
             if [ ! -z "${CIRCLE_TAG}" ]; then
                 docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
                 docker tag mozilla/tls-observatory "mozilla/tls-observatory:$CIRCLE_TAG"
                 docker push "mozilla/tls-observatory:latest"
                 docker push "mozilla/tls-observatory:$CIRCLE_TAG"
             fi

workflows:
  version: 2

  # workflow jobs are _not_ run in tag builds by default
  # we use filters to whitelist jobs that should be run for tags

  # workflow jobs are run in _all_ branch builds by default
  # we use filters to blacklist jobs that shouldn't be run for a branch

  # see: https://circleci.com/docs/2.0/workflows/#git-tag-job-execution

  build-test-push:
    jobs:
      - build:
          filters:
            tags:
              only: /.*/


================================================
FILE: .gitignore
================================================
# 3rd party
src/github.com/*
src/code.google.com/*

# configuration
conf/api_prod.cfg

# local builds
bin/
tmp/
tmppkg/
tools/tmp

# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof


================================================
FILE: .gitmodules
================================================
[submodule "truststores"]
	path = truststores
	url = https://github.com/kirei/catt.git
	branch = master
[submodule "cipherscan"]
	path = cipherscan
	url = https://github.com/mozilla/cipherscan
	branch = master


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Community Participation Guidelines

This repository is governed by Mozilla's code of conduct and etiquette guidelines. 
For more details, please read the
[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). 

## How to Report
For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.

<!--
## Project Specific Etiquette

In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html).
Please update for your project.
-->


================================================
FILE: Dockerfile
================================================
# docker build --force-rm --squash -t {REPO}/{NAME}:{TAG} .
# --squash requires the expermimental flag to be set.
# https://docs.docker.com/engine/reference/commandline/dockerd/#description
#
# This is based on the original Golang Dockerfile for Debian Stretch
# https://github.com/docker-library/golang/blob/906e04de73168f643c5c2b40dca0877a14d2377c/1.10/stretch/Dockerfile

FROM golang:1.15
MAINTAINER secops+tlsobs@mozilla.com

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

WORKDIR $GOPATH

COPY . $GOPATH/src/github.com/mozilla/tls-observatory

RUN rm -rf $GOPATH/src/github.com/mozilla/tls-observatory/.git && \
    # Create a user
    addgroup -gid 10001 app && \
    adduser --home /app --gecos "" --ingroup=app --uid=10001 --disabled-login app

# Build TLS Observatory
RUN go install github.com/mozilla/tls-observatory/tlsobs-api && \
    cp $GOPATH/bin/tlsobs-api /app/ && \
    go install github.com/mozilla/tls-observatory/tlsobs-scanner && \
    cp $GOPATH/bin/tlsobs-scanner /app/ && \
    go install github.com/mozilla/tls-observatory/tlsobs-runner && \
    cp $GOPATH/bin/tlsobs-runner /app/ && \
    go install github.com/mozilla/tls-observatory/tlsobs && \
    cp $GOPATH/bin/tlsobs /app/

# Compile ev-checker
RUN cd $GOPATH && \
    apt-get update -y && \
    apt-get --no-install-recommends install apt-utils ca-certificates git libcurl4-nss-dev \
    libnss3 libnss3-dev clang postgresql-client ruby ruby-dev -y && \
    chown app:app -R /var/lib/gems/ && \
    git clone https://github.com/mozilla-services/ev-checker.git && \
    cd ev-checker && \
    make && \
    mv ./ev-checker /go/bin/ && \
    cp $GOPATH/bin/ev-checker /app/ && \
    cd .. && \
    rm -rf ev-checker

# Compile AWS Certlint
RUN cd $GOPATH && \
    git clone https://github.com/awslabs/certlint.git && \
    cd certlint/ext && \
    gem install public_suffix simpleidn && \
    ruby extconf.rb && \
    make

# Copy TLS Observatory configuration
RUN cp $GOPATH/src/github.com/mozilla/tls-observatory/version.json /app && \
    ln -s $GOPATH/src/github.com/mozilla/tls-observatory/conf /etc/tls-observatory && \
    ln -s $GOPATH/src/github.com/mozilla/tls-observatory/cipherscan /opt/cipherscan

WORKDIR /app
USER app


================================================
FILE: LICENSE
================================================
Mozilla Public License, version 2.0

1. Definitions

1.1. "Contributor"

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. "Contributor Version"

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor's Contribution.

1.3. "Contribution"

     means Covered Software of a particular Contributor.

1.4. "Covered Software"

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. "Incompatible With Secondary Licenses"
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the terms of
        a Secondary License.

1.6. "Executable Form"

     means any form of the work other than Source Code Form.

1.7. "Larger Work"

     means a work that combines Covered Software with other material, in a
     separate file or files, that is not Covered Software.

1.8. "License"

     means this document.

1.9. "Licensable"

     means having the right to grant, to the maximum extent possible, whether
     at the time of the initial grant or subsequently, any and all of the
     rights conveyed by this License.

1.10. "Modifications"

     means any of the following:

     a. any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. "Patent Claims" of a Contributor

      means any patent claim(s), including without limitation, method,
      process, and apparatus claims, in any patent Licensable by such
      Contributor that would be infringed, but for the grant of the License,
      by the making, using, selling, offering for sale, having made, import,
      or transfer of either its Contributions or its Contributor Version.

1.12. "Secondary License"

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. "Source Code Form"

      means the form of the work preferred for making modifications.

1.14. "You" (or "Your")

      means an individual or a legal entity exercising rights under this
      License. For legal entities, "You" includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, "control" means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or
        as part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its
        Contributions or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution
     become effective for each Contribution on the date the Contributor first
     distributes such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under
     this License. No additional rights or licenses will be implied from the
     distribution or licensing of Covered Software under this License.
     Notwithstanding Section 2.1(b) above, no patent license is granted by a
     Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party's
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of
        its Contributions.

     This License does not grant any rights in the trademarks, service marks,
     or logos of any Contributor (except as may be necessary to comply with
     the notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this
     License (see Section 10.2) or under the terms of a Secondary License (if
     permitted under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its
     Contributions are its original creation(s) or it has sufficient rights to
     grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under
     applicable copyright doctrines of fair use, fair dealing, or other
     equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under
     the terms of this License. You must inform recipients that the Source
     Code Form of the Covered Software is governed by the terms of this
     License, and how they can obtain a copy of this License. You may not
     attempt to alter or restrict the recipients' rights in the Source Code
     Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this
        License, or sublicense it under different terms, provided that the
        license for the Executable Form does not attempt to limit or alter the
        recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for
     the Covered Software. If the Larger Work is a combination of Covered
     Software with a work governed by one or more Secondary Licenses, and the
     Covered Software is not Incompatible With Secondary Licenses, this
     License permits You to additionally distribute such Covered Software
     under the terms of such Secondary License(s), so that the recipient of
     the Larger Work may, at their option, further distribute the Covered
     Software under the terms of either this License or such Secondary
     License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices
     (including copyright notices, patent notices, disclaimers of warranty, or
     limitations of liability) contained within the Source Code Form of the
     Covered Software, except that You may alter any license notices to the
     extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on
     behalf of any Contributor. You must make it absolutely clear that any
     such warranty, support, indemnity, or liability obligation is offered by
     You alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute,
   judicial order, or regulation then You must: (a) comply with the terms of
   this License to the maximum extent possible; and (b) describe the
   limitations and the code they affect. Such description must be placed in a
   text file included with all distributions of the Covered Software under
   this License. Except to the extent prohibited by statute or regulation,
   such description must be sufficiently detailed for a recipient of ordinary
   skill to be able to understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing
     basis, if such Contributor fails to notify You of the non-compliance by
     some reasonable means prior to 60 days after You have come back into
     compliance. Moreover, Your grants from a particular Contributor are
     reinstated on an ongoing basis if such Contributor notifies You of the
     non-compliance by some reasonable means, this is the first time You have
     received notice of non-compliance with this License from such
     Contributor, and You become compliant prior to 30 days after Your receipt
     of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions,
     counter-claims, and cross-claims) alleging that a Contributor Version
     directly or indirectly infringes any patent, then the rights granted to
     You by any and all Contributors for the Covered Software under Section
     2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an "as is" basis,
   without warranty of any kind, either expressed, implied, or statutory,
   including, without limitation, warranties that the Covered Software is free
   of defects, merchantable, fit for a particular purpose or non-infringing.
   The entire risk as to the quality and performance of the Covered Software
   is with You. Should any Covered Software prove defective in any respect,
   You (not any Contributor) assume the cost of any necessary servicing,
   repair, or correction. This disclaimer of warranty constitutes an essential
   part of this License. No use of  any Covered Software is authorized under
   this License except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from
   such party's negligence to the extent applicable law prohibits such
   limitation. Some jurisdictions do not allow the exclusion or limitation of
   incidental or consequential damages, so this exclusion and limitation may
   not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts
   of a jurisdiction where the defendant maintains its principal place of
   business and such litigation shall be governed by laws of that
   jurisdiction, without reference to its conflict-of-law provisions. Nothing
   in this Section shall prevent a party's ability to bring cross-claims or
   counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject
   matter hereof. If any provision of this License is held to be
   unenforceable, such provision shall be reformed only to the extent
   necessary to make it enforceable. Any law or regulation which provides that
   the language of a contract shall be construed against the drafter shall not
   be used to construe this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version
      of the License under which You originally received the Covered Software,
      or under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a
      modified version of this License if you rename the license and remove
      any references to the name of the license steward (except to note that
      such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
      Licenses If You choose to distribute Source Code Form that is
      Incompatible With Secondary Licenses under the terms of this version of
      the License, the notice described in Exhibit B of this License must be
      attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file,
then You may include the notice in a location (such as a LICENSE file in a
relevant directory) where a recipient would be likely to look for such a
notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice

      This Source Code Form is "Incompatible
      With Secondary Licenses", as defined by
      the Mozilla Public License, v. 2.0.


================================================
FILE: Makefile
================================================
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

BUILDREF	:= $(shell git log --pretty=format:'%h' -n 1)
BUILDDATE	:= $(shell date +%Y%m%d)
BUILDENV	:= dev
BUILDREV	:= $(BUILDDATE)+$(BUILDREF).$(BUILDENV)

# Supported OSes: linux darwin windows
# Supported ARCHes: 386 amd64
ifeq ($(OS),windows)
	OS := windows
else
	OS := $(shell uname -s | tr [:upper:] [:lower:])
endif
ARCH := amd64

ifeq ($(OS),windows)
	BINSUFFIX   := ".exe"
else
	BINSUFFIX	:= ""
endif
GO 			:= GOOS=$(OS) GOARCH=$(ARCH) go
GOGETTER	:= GOPATH=$(shell pwd)/.tmpdeps go get -d
GOLDFLAGS	:= -ldflags "-X main.version=$(BUILDREV)"

all: test tlsobs-scanner tlsobs-api tlsobs tlsobs-runner

tlsobs-scanner:
	echo building TLS Observatory Scanner for $(OS)/$(ARCH)
	$(GO) build $(GOOPTS) -o $(GOPATH)/bin/tlsobs-scanner$(BINSUFFIX) $(GOLDFLAGS) github.com/mozilla/tls-observatory/tlsobs-scanner

tlsobs-api:
	echo building tlsobs-api for $(OS)/$(ARCH)
	$(GO) build $(GOOPTS) -o $(GOPATH)/bin/tlsobs-api$(BINSUFFIX) $(GOLDFLAGS) github.com/mozilla/tls-observatory/tlsobs-api

tlsobs:
	echo building tlsobs client for $(OS)/$(ARCH)
	$(GO) build $(GOOPTS) -o $(GOPATH)/bin/tlsobs$(BINSUFFIX) $(GOLDFLAGS) github.com/mozilla/tls-observatory/tlsobs

tlsobs-runner:
	echo building tlsobs-runner for $(OS)/$(ARCH)
	$(GO) build $(GOOPTS) -o $(GOPATH)/bin/tlsobs-runner$(BINSUFFIX) $(GOLDFLAGS) github.com/mozilla/tls-observatory/tlsobs-runner

vendor:
	go mod tidy -v
	go mod vendor -v

test:
# Skip tools/ dir, it has multiple main method
	$(GO) test `go list ./... | grep -v tools`

truststores:
	git submodule update --init --recursive
	cd truststores && git pull origin master && cd ..
	cat truststores/data/apple/snapshot/*.pem > conf/truststores/CA_apple_latest.crt
	cat truststores/data/java/snapshot/*.pem > conf/truststores/CA_java.crt
	curl -o conf/truststores/CA_AOSP.crt https://pki.goog/roots.pem
	$(GO) run tools/retrieveTruststoreFromCADatabase.go mozilla > conf/truststores/CA_mozilla_nss.crt
	$(GO) run tools/retrieveTruststoreFromCADatabase.go microsoft > conf/truststores/CA_microsoft.crt

cipherscan:
	cd cipherscan && git pull origin master && cd ..

ciscotop1m:
	wget http://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip
	unzip top-1m.csv.zip
	mv top-1m.csv conf/cisco-top-1m.csv
	rm top-1m.csv.zip
	dos2unix conf/cisco-top-1m.csv

alexatop1m:
	wget http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
	unzip top-1m.csv.zip
	mv top-1m.csv conf/alexa-top-1m.csv
	rm top-1m.csv.zip
	dos2unix conf/alexa-top-1m.csv

.PHONY: all test clean tlsobs-scanner tlsobs-api tlsobs-runner tlsobs vendor truststores cipherscan


================================================
FILE: PULL_REQUEST_TEMPLATE.md
================================================
<Describe your changes here, add references to any issue>

## Checklist
* [ ] Run `make`, `gofmt` and `golint` your code, and run a test scan on your local machine before submitting for review.
* [ ] Workers needs an AnalysisPrinter, registered via `worker.RegisterPrinter()` (which is separate from `worker.RegisterWorker()`), and imported in [tlsobs](https://github.com/mozilla/tls-observatory/blob/master/tlsobs/main.go#L20-L28) ([example](https://github.com/mozilla/tls-observatory/blob/master/worker/awsCertlint/awsCertlint.go#L39-L56)).
* [ ] When adding new columns to the database, also add a DB migration script under `database/migrations` named the **next** release (eg. if current release is 1.3.2, migration file will be `1.3.3.sql`).
* [ ] When new columns require data to be recomputed, add a script under `/tools` ([example](https://github.com/mozilla/tls-observatory/blob/master/tools/fixSHA256SubjectSPKI.go)) that updates the database and will be run by administrators.


================================================
FILE: README.md
================================================
# Mozilla TLS Observatory

[![What's Deployed](https://img.shields.io/badge/whatsdeployed-stage,prod-green.svg)](https://whatsdeployed.io/s-LVL)
[![CircleCI](https://circleci.com/gh/mozilla/tls-observatory/tree/master.svg?style=svg)](https://circleci.com/gh/mozilla/tls-observatory/tree/master)

The Mozilla TLS Observatory is a suite of tools for analysis and inspection on Transport Layer Security (TLS) services. The components of TLS Observatory include:

- [EV Checker](https://tls-observatory.services.mozilla.com/static/ev-checker.html) - Tool for Certificate Authorities (CAs) who request a root certificate enabled for Extended Validation (EV).
- [Certificate Explainer](https://tls-observatory.services.mozilla.com/static/certsplainer.html) - Web UI that parses fields of X.509 certificates
- `tlsobs` - CLI tool for issuing scans of a website
- `tlsobs-api` - HTTP webserver receiving website scan requests and displaying results
- `tlsobs-runner` - Service that schedules website scans
- `tlsobs-scanner` - Service that performs scans and analysis of websites

Want the WebUI? Check out [Mozilla's Observatory](https://observatory.mozilla.org) !

* [Mozilla TLS Observatory](#mozilla-tls-observatory)
  * [Getting started](#getting-started)
    * [Using the tlsobs client from Docker](#using-the-tlsobs-client-from-docker)
  * [Developing](#developing)
    * [Create the database](#create-the-database)
    * [Starting the API and Scanner](#starting-the-api-and-scanner)
    * [Run a scan locally](#run-a-scan-locally)
    * [Configuration](#configuration)
      * [tlsobs-api](#tlsobs-api)
      * [tlsobs-scanner](#tlsobs-scanner)
      * [tlsobs-runner](#tlsobs-runner)
  * [API Endpoints](#api-endpoints)
    * [POST /api/v1/scan](#post-apiv1scan)
    * [GET /api/v1/results](#get-apiv1results)
    * [GET /api/v1/certificate](#get-apiv1certificate)
    * [POST /api/v1/certificate](#post-apiv1certificate)
    * [GET /api/v1/paths](#get-apiv1paths)
    * [GET /api/v1/truststore](#get-apiv1truststore)
    * [GET /api/v1/issuereecount](#get-apiv1issuereecount)
    * [GET /api/v1/__heartbeat__](#get-apiv1heartbeat)
    * [GET /api/v1/__stats__](#get-apiv1stats)
  * [Database Queries](#database-queries)
  * [Core contributors](#contributors)
  * [License](#license)

## Getting started

You can use the TLS Observatory to compare your site against the mozilla guidelines.
It requires Golang 1.15+ to be installed:

```bash
$ go version
go version go1.15 linux/amd64

$ export GOPATH="$HOME/go"
$ mkdir $GOPATH

$ export PATH=$GOPATH/bin:$PATH
```

Then get the binary:

```bash
$ go get github.com/mozilla/tls-observatory/tlsobs
```

And scan using our hosted service:

```bash
$ tlsobs tls-observatory.services.mozilla.com
Scanning tls-observatory.services.mozilla.com (id 13528951)
Retrieving cached results from 20h33m1.379461888s ago. To run a new scan, use '-r'.

--- Certificate ---
Subject  C=US, O=Mozilla Corporation, CN=tls-observatory.services.mozilla.com
SubjectAlternativeName
- tls-observatory.services.mozilla.com
Validity 2016-01-20T00:00:00Z to 2017-01-24T12:00:00Z
SHA1     FECA3CA0F4B726D062A76F47635DD94A37985105
SHA256   315A8212CBDC76FF87AEB2161EDAA86E322F7C18B27152B5CB9206297F3D3A5D
SigAlg   ECDSAWithSHA256
Key      ECDSA 384bits P-384
ID       1281826

--- Trust ---
Mozilla Microsoft Apple Android
   ✓        ✓       ✓      ✓

--- Chain of trust ---
C=US, O=Mozilla Corporation, CN=tls-observatory.services.mozilla.com (id=1281826)
└──C=US, O=DigiCert Inc, CN=DigiCert ECC Secure Server CA (id=5922)
   └──C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA (id=41)



--- Ciphers Evaluation ---
prio cipher                        protocols pfs                curves
1    ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2   ECDH,P-256,256bits prime256v1
2    ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2   ECDH,P-256,256bits prime256v1
OCSP Stapling        false
Server Side Ordering true
Curves Fallback      false

--- Analyzers ---
* Mozilla evaluation: modern
  - for modern level: consider adding ciphers ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-CHACHA20-POLY1305, ECDHE-RSA-CHACHA20-POLY1305, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES256-SHA384, ECDHE-RSA-AES256-SHA384, ECDHE-ECDSA-AES128-SHA256, ECDHE-RSA-AES128-SHA256
  - for modern level: consider enabling OCSP stapling
  - for modern level: increase priority of ECDHE-ECDSA-AES256-GCM-SHA384 over ECDHE-ECDSA-AES128-GCM-SHA256
  - for modern level: fix ciphersuite ordering, use recommended modern ciphersuite
  - oldest clients: Firefox 27, Chrome 30, IE 11 on Windows 7, Edge 1, Opera 17, Safari 9, Android 5.0, Java 8
* Grade: A (93/100)
```

The analysis at the end tell you what need to be changed to reach the old, intermediate or modern level. We recommend to target the intermediate level by default, and modern if you don't care about old clients.

### Using the tlsobs client from Docker

A docker container also exists that contains the CLI, API, Scanner and Runner.
Fetch is from `docker pull mozilla/tls-observatory`.

```bash
$ docker pull mozilla/tls-observatory
$ docker run -it mozilla/tls-observatory tlsobs accounts.firefox.com
```

## Developing

You can use the Kubernetes configuration provided in https://github.com/mozilla/tls-observatory/tree/master/kubernetes , or alternatively, you can do the following:

You can use the `mozilla/tls-observatory` docker container for development:

```bash
$ docker pull mozilla/tls-observatory
$ docker run -it mozilla/tls-observatory /bin/bash
root@05676e6789dd:~# cd $GOPATH/src/github.com/mozilla/tls-observatory
root@05676e6789dd:/go/src/github.com/mozilla/tls-observatory# make
```

However, even with the docker container, you will need to setup your own
postgresql database. See below.

To build a development environment from scratch, you will need Go 1.15 or above.
You can set it up on your own machine or via the `golang:1.15` Docker
container.

Retrieve a copy of the source code using `go get`, to place it directly
under `$GOPATH/src/github.com/mozilla/tls-observatory`, then use `make`
to build all components.

```bash
$ docker run -it golang:1.15

root@c63f11b8852b:/go# go get github.com/mozilla/tls-observatory
package github.com/mozilla/tls-observatory: no buildable Go source files in /go/src/github.com/mozilla/tls-observatory

root@c63f11b8852b:/go# cd $GOPATH/src/github.com/mozilla/tls-observatory

root@c63f11b8852b:/go/src/github.com/mozilla/tls-observatory# make
```

`make` runs the tests and compiles the scanner, api, command line client
and runner. The resulting binaries are placed under `$GOPATH/bin`.

### Create the database

TLS Observatory uses PostgreSQL > 9.4. To create a database, use the
schema in `database/schema.sql`.

```bash
postgres=# create database observatory;
CREATE DATABASE

postgres=# \c observatory
You are now connected to database "observatory" as user "postgres".

postgres=# \i /go/src/github.com/mozilla/tls-observatory/database/schema.sql
```

This automatically creates all tables, indexes, users and grants to work
with the default configuration.

### Starting the API and Scanner

First symlink the configuration to /etc/observatory and the cipherscan
executable to /opt/cipherscan, as follows:

```bash
root@c63f11b8852b:/# ln -s $GOPATH/src/github.com/mozilla/tls-observatory/conf /etc/tls-observatory
root@c63f11b8852b:/# ln -s $GOPATH/src/github.com/mozilla/tls-observatory/cipherscan /opt/cipherscan
```

Then start `tlsobs-api` and `tlsobs-scanner`. The API will listen on port 8083,
on localhost (or 172.17.0.2 if you're running in Docker).

### Run a scan locally

To run a scan using the local scanner, set the `-observatory` flag of the `tlsobs`
client to use the local API, as follows:

```bash
$ tlsobs -observatory http://172.17.0.2:8083 ulfr.io
```

### Configuration

#### tlsobs-api

Customize the configuration file under `conf/api.cfg` and using the following
environment variables:

* `TLSOBS_API_ENABLE` set to `on` or `off` to enable or disable the API
* `TLSOBS_POSTGRES` is the hostname or IP of the database server (eg. `mypostgresdb.example.net`)
* `TLSOBS_POSTGRESDB` is the name of the database (eg. `observatory`)
* `TLSOBS_POSTGRESUSER` is the database user (eg. `tlsobsapi`)
* `TLSOBS_POSTGRESPASS` is the database user password (eg. `mysecretpassphrase`)

#### tlsobs-scanner

Customize the configuration file under `conf/scanner.cfg` and using the
following environment variables:

* `TLS_AWSCERTLINT_DIR` set where awslabs/certlint directory exists
* `TLSOBS_SCANNER_ENABLE` set to `on` or `off` to enable or disable the scabber
* `TLSOBS_POSTGRES` is the hostname or IP of the database server (eg. `mypostgresdb.example.net`)
* `TLSOBS_POSTGRESDB` is the name of the database (eg. `observatory`)
* `TLSOBS_POSTGRESUSER` is the database user (eg. `tlsobsscanner`)
* `TLSOBS_POSTGRESPASS` is the database user password (eg. `mysecretpassphrase`)

#### tlsobs-runner

Runs regular tests against target sites and sends notifications.

See `conf/runner.yaml` for an example of configuration. Some configuration
parameters can also be provided through environment variables:

* `TLSOBS_RUNNER_SMTP_HOST` is the hostname of the smtp server (eg. `mypostfix.example.net`)
* `TLSOBS_RUNNER_SMTP_PORT` is the port of the smtp server (eg. `587`)
* `TLSOBS_RUNNER_SMTP_FROM` is the from address of email notifications sent by the runner (eg. `mynotification@tlsobservatory.example.net`)
* `TLSOBS_RUNNER_SMTP_AUTH_USER` is the smtp authenticated username (eg `tlsobsrunner`)
* `TLSOBS_RUNNER_SMTP_AUTH_PASS` is the smtp user password (eg. `mysecretpassphrase`)
* `TLSOBS_RUNNER_SLACK_WEBHOOK` is the slack webhook (eg. `https://hooks.slack.com/services/not/a/realwebhook`)
* `TLSOBS_RUNNER_SLACK_USERNAME` is the what the message sender's username will be (eg. `tlsbot`)
* `TLSOBS_RUNNER_SLACK_ICONEMOJI` is the what the message sender's icon will be (eg. `:telescope:`)

## API Endpoints

### POST /api/v1/scan

Schedule a scan of a given target.

```bash
$ curl -X POST 'https://tls-observatory.services.mozilla.com/api/v1/scan?target=ulfr.io&rescan=true'
```

**Parameters**:

* `target` is the FQDN of the target site. eg. `google.com`. Do not use protocol handlers or query strings.
* `rescan` asks for a rescan of the target when set to true.
* `params` JSON object in which each key represents one of TLS Observatory's workers. The value under each key will be passed as the parameters to the corresponding worker. For example, `{"ev-checker": {"oid": "foo"}}` will pass `{"oid": "foo"}` to the ev-checker worker. The following workers accept parameters:
  * ev-checker: Expects a JSON object with the following keys:
    * oid: the oid of the EV policy to check
    * rootCertificate: the root certificate to check against, in PEM format

For example, with curl:

```
curl -X POST "http://localhost:8083/api/v1/scan?target=mozilla.org&rescan=true&params=%7B%0A%20%20%22ev-checker%22%3A%20%7B%0A%20%20%22rootcertificate%22%3A%20%22-----BEGIN%20CERTIFICATE-----%5CnMIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs%5CnMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3%5Cnd3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j%5CnZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL%5CnMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3%5CnLmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug%5CnRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm%5Cn%2B9S75S0tMqbf5YE%2Fyc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW%5CnPNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG%2B%2BMXs2ziS4wblCJEM%5CnxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB%5CnIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx%2BmM0aBhakaHPQNAQTXKFx01p8VdteZOE3%5CnhzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg%5CnEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH%2FBAQDAgGGMA8GA1UdEwEB%2FwQF%5CnMAMBAf8wHQYDVR0OBBYEFLE%2Bw2kD%2BL9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA%5CnFLE%2Bw2kD%2BL9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec%5CnnzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe%2FEW1ntlMMUu4kehDLI6z%5CneM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF%5CnhS9OMPagMRYjyOfiZRYzy78aG6A9%2BMpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2%5CnYzi9RKR%2F5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2%2FS6cCZdkGCe%5CnvEsXCS%2B0yx5DaMkHJ8HSXPfqIbloEpw8nL%2Be%2FIBcm2PN7EeqJSdnoDfzAIJ9VNep%5Cn%2BOkuE6N36B9K%5Cn-----END%20CERTIFICATE-----%22%2C%0A%20%20%22oid%22%3A%20%222.16.840.1.114412.22.1%22%0A%7D%0A%7D"
```

**Output**: a `json` document containing the Scan ID.

**Caching**: When `rescan` is not `true`, if a scan of the target was done over the last 24 hours, the scan ID is returned. Use `rescan=true` to force a rescan within 24 hours of the previous scan.

**Rate Limits**: Each target can only be scanned every 3 minutes with `rescan=true`.

### GET /api/v1/results

Retrieve scan results by its ID.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/results?id=12302333
```

**Parameters**:

* `id` is the Scan ID

**Output**: a `json` document containing the scan results and the ID of the end-entity certificate.

### GET /api/v1/certificate

Retrieve a certificate by its ID.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/certificate?id=1
```

**Parameters**:

* `id` is the Certificate ID
* `sha256` the hexadecimal checksum of the DER certificate (only if `id` is not
  provided)

**Output**: a `json` document containing the parsed certificate and its raw X509 version encoded with base64.

### POST /api/v1/certificate

Publish a certificate.

```bash
curl -X POST -F certificate=@example.pem https://tls-observatory.services.mozilla.com/api/v1/certificate
```

**Parameters**:

* `certificate` is a POST multipart/form-data parameter that contains the PEM encoded certificate.

**Output**: a `json` document containing the parsed certificate and its raw X509 version encoded with base64.

**Caching**: Certificates are only stored once. The database uses the SHA256 hash of the DER (binary) certificate to identify duplicates. Posting a certificate already stored in database returns the stored version.

### GET /api/v1/paths

Retrieve the paths from a certificate to one of multiple roots.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/paths?id=1
```

**Parameters**:

* `id` is the ID of the certificate to start the path at.
* `sha256` the hexadecimal checksum of the DER certificate (only if `id` is not
  provided)

**Output**: a `json` document containing the paths document. Each entry in the path contains the current certificate and an array of parents, if any exist.

### GET /api/v1/truststore

Retrieve all the certificates in a given truststore.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/truststore?store=mozilla&format=pem
```

**Parameters**:

* `store` is the store to retrieve certificates from. "mozilla", "android", "apple", "microsoft" and "ubuntu" are allowed.
* `format`, either "pem" or "json".

**Output**: if `format` is pem, a series of PEM-format certificates. If `format` is json, a json array of certificate objects, each with the same format of `/api/v1/certificate`.

### GET /api/v1/issuereecount

Retrieve the count of end-entity certificates that chain to the specified certificate. This is used to evaluate weight of a given issuer in the web pki.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/issuereecount?id=1
```

**Parameters**:

* `id` is the ID of the certificate to start the path at.
* `sha256` the hexadecimal checksum of the DER certificate (only if `id` is not
  provided)

**Output**: a `json` document containing the certificate itself under `issuer` and the count of end-entity certs under `eecount`.


### GET /api/v1/__heartbeat__

Returns a 200 OK.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/__heartbeat__
I iz alive.
```

### GET /api/v1/__stats__

Returns usage statistics in json (default) or text format.

By default, this endpoint returns stale data, refreshed the last time the
endpoint was called, so it's possible to not have the latest available
statistics. Use the query parameter `details=full` to get the real-time stats,
but be aware that this is expensive and often times out.

```bash
curl https://tls-observatory.services.mozilla.com/api/v1/__stats__?format=text&details=full

pending scans: 7

last 24 hours
-------------
- distinct targets: 21873
- certs seen:       16459
- certs added:      7886

hourly scans
------------
2017-02-08T15:00:00Z    5
2017-02-08T14:00:00Z    64
2017-02-08T13:00:00Z    928
2017-02-08T12:00:00Z    1969
2017-02-08T11:00:00Z    1957
2017-02-08T10:00:00Z    1982
2017-02-08T09:00:00Z    2013
2017-02-08T08:00:00Z    2031
2017-02-08T07:00:00Z    2153
2017-02-08T06:00:00Z    1860
2017-02-08T05:00:00Z    1869
2017-02-08T04:00:00Z    1944
2017-02-08T03:00:00Z    1959
2017-02-08T02:00:00Z    907
2017-02-08T01:00:00Z    32
2017-02-08T00:00:00Z    55
2017-02-07T23:00:00Z    41
2017-02-07T22:00:00Z    46
2017-02-07T21:00:00Z    60
2017-02-07T20:00:00Z    76
2017-02-07T19:00:00Z    66
2017-02-07T18:00:00Z    67
2017-02-07T17:00:00Z    56
```

## Database Queries

### Find certificates signed by CAs identified by their SHA256 fingerprint

```sql
SELECT certificates.id, certificates.subject, certificates.issuer
FROM certificates INNER JOIN trust ON (certificates.id=trust.cert_id)
WHERE trust.issuer_id in (
    SELECT id FROM certificates
    WHERE sha256_fingerprint IN (
        'E7685634EFACF69ACE939A6B255B7B4FABEF42935B50A265ACB5CB6027E44E70',
        'A4B6B3996FC2F306B3FD8681BD63413D8C5009CC4FA329C2CCF0E2FA1B140305'
    ))
AND certificates.is_ca='false';
```

### List signature algorithms of trusted certs

```sql
SELECT signature_algo, count(*)
FROM certificates INNER JOIN trust ON (certificates.id=trust.cert_id)
WHERE is_ca='false'
AND trust.trusted_mozilla='true'
GROUP BY signature_algo
ORDER BY count(*) DESC;
```

### Show expiration dates of trusted SHA-1 certificates

```sql
SELECT  extract('year' FROM date_trunc('year', not_valid_after)) as expiration_year,
        extract('month' FROM date_trunc('month', not_valid_after)) as expiration_month,
        count(*)
FROM    certificates
    INNER JOIN trust ON (certificates.id=trust.cert_id)
WHERE is_ca='false'
    AND trust.trusted_mozilla='true'
    AND signature_algo='SHA1WithRSA'
GROUP BY date_trunc('year', not_valid_after),
         date_trunc('month', not_valid_after)
ORDER BY date_trunc('year', not_valid_after) ASC,
         date_trunc('month', not_valid_after) ASC;
```

### Count trusted SHA-1 certs seen over the last month on TOP1M sites

```sql
SELECT distinct(certificates.id) as "id", cisco_umbrella_rank, domains, not_valid_before, not_valid_after, last_seen, signature_algo
FROM certificates
    INNER JOIN trust ON (certificates.id=trust.cert_id)
WHERE is_ca='false'
    AND trust.trusted_mozilla='true'
    AND signature_algo='SHA1WithRSA'
    AND cisco_umbrella_rank < 1000000
    AND last_seen > NOW() - INTERVAL '1 month'
    AND not_valid_after > NOW()
ORDER BY cisco_umbrella_rank ASC;
```

### List issuer, subject and SAN of Mozilla|Firefox certs not issued by Digicert

```sql
SELECT certificates.id,
       issuer->'o'->>0 AS Issuer,
       subject->>'cn' AS Subject,
       san AS SubjectAltName
FROM certificates
      INNER JOIN trust ON (trust.cert_id=certificates.id),
     jsonb_array_elements_text(x509_subjectAltName) AS san
WHERE jsonb_typeof(x509_subjectAltName) != 'null'
      AND ( subject#>>'{cn}' ~ '\.(firefox|mozilla)\.'
            OR
            san ~ '\.(firefox|mozilla)\.'
          )
      AND trust.trusted_mozilla='true'
      AND certificates.not_valid_after>now()
      AND cast(issuer#>>'{o}' AS text) NOT LIKE '%DigiCert Inc%'
GROUP BY certificates.id, san
ORDER BY certificates.id ASC;
```

### Find count of targets that support the SEED-SHA ciphersuite

```sql
SELECT COUNT(DISTINCT(target))
FROM scans, jsonb_array_elements(conn_info->'ciphersuite') as ciphersuites
WHERE jsonb_typeof(conn_info) != 'null'
AND ciphersuites->>'cipher'='SEED-SHA';
```

### Find intermediate CA certs whose root is trusted by Mozilla

```sql
SELECT id, subject
FROM certificates
WHERE is_ca=True
  AND subject!=issuer
  AND issuer IN (
      SELECT subject
      FROM certificates
      WHERE in_mozilla_root_store=True
  )
GROUP BY subject, sha256_fingerprint;
```

### Find CA certs treated as EV in Firefox

The list is CA Certs that get EV treatment in Firefox can be [found here](https://dxr.mozilla.org/mozilla-central/source/security/certverifier/ExtendedValidation.cpp).

```sql
SELECT id, subject
FROM certificates,
     jsonb_array_elements_text(x509_certificatePolicies) AS cpol
WHERE jsonb_typeof(x509_certificatePolicies) != 'null'
  AND cpol IN ('1.2.392.200091.100.721.1','1.2.616.1.113527.2.5.1.1','1.3.159.1.17.1',
               '1.3.6.1.4.1.13177.10.1.3.10','1.3.6.1.4.1.13769.666.666.666.1.500.9.1',
               '1.3.6.1.4.1.14370.1.6','1.3.6.1.4.1.14777.6.1.1','1.3.6.1.4.1.14777.6.1.2',
               '1.3.6.1.4.1.17326.10.14.2.1.2','1.3.6.1.4.1.17326.10.8.12.1.2',
               '1.3.6.1.4.1.22234.2.14.3.11','1.3.6.1.4.1.22234.2.5.2.3.1',
               '1.3.6.1.4.1.22234.3.5.3.1','1.3.6.1.4.1.22234.3.5.3.2','1.3.6.1.4.1.23223.1.1.1',
               '1.3.6.1.4.1.29836.1.10','1.3.6.1.4.1.34697.2.1','1.3.6.1.4.1.34697.2.2',
               '1.3.6.1.4.1.34697.2.3','1.3.6.1.4.1.34697.2.4','1.3.6.1.4.1.36305.2',
               '1.3.6.1.4.1.40869.1.1.22.3','1.3.6.1.4.1.4146.1.1','1.3.6.1.4.1.4788.2.202.1',
               '1.3.6.1.4.1.6334.1.100.1','1.3.6.1.4.1.6449.1.2.1.5.1','1.3.6.1.4.1.782.1.2.1.8.1',
               '1.3.6.1.4.1.7879.13.24.1','1.3.6.1.4.1.8024.0.2.100.1.2','2.16.156.112554.3',
               '2.16.528.1.1003.1.2.7','2.16.578.1.26.1.3.3','2.16.756.1.83.21.0',
               '2.16.756.1.89.1.2.1.1','2.16.756.5.14.7.4.8','2.16.792.3.0.3.1.1.5',
               '2.16.792.3.0.4.1.1.4','2.16.840.1.113733.1.7.23.6','2.16.840.1.113733.1.7.48.1',
               '2.16.840.1.114028.10.1.2','2.16.840.1.114404.1.1.2.4.1','2.16.840.1.114412.2.1',
               '2.16.840.1.114413.1.7.23.3','2.16.840.1.114414.1.7.23.3')
  AND is_ca='true';
```

### Evaluate the quality of TLS configurations of top sites

This query uses the top1m ranking analyzer to retrieve the Mozilla evaluation of top sites.

```sql
observatory=> SELECT COUNT(DISTINCT(target)), output->>'level' AS "Mozilla Configuration"
FROM scans
  INNER JOIN analysis ON (scans.id=analysis.scan_id)
WHERE has_tls=true
  AND target IN ( SELECT target
                  FROM scans
                  INNER JOIN analysis ON (scans.id=analysis.scan_id)
                  WHERE worker_name='top1m'
                    AND CAST(output->'target'->>'rank' AS INTEGER) < 10000
                    AND timestamp > NOW() - INTERVAL '1 month')
  AND worker_name='mozillaEvaluationWorker'
  AND timestamp > NOW() - INTERVAL '1 month'
GROUP BY has_tls, output->>'level'
ORDER BY COUNT(DISTINCT(target)) DESC;

 count | Mozilla Configuration
-------+-----------------------
  3689 | intermediate
  1906 | non compliant
  1570 | bad
    15 | old
(4 rows)

```

### Count Top 1M sites that support RC4
```sql
SELECT COUNT(DISTINCT(target))
FROM scans,
     jsonb_array_elements(conn_info->'ciphersuite') as ciphersuites
WHERE jsonb_typeof(conn_info) = 'object'
  AND jsonb_typeof(conn_info->'ciphersuite') = 'array'
  AND ciphersuites->>'cipher' LIKE 'RC4-%'
  AND target IN ( SELECT target
                  FROM scans
                       INNER JOIN analysis ON (scans.id=analysis.scan_id)
                  WHERE worker_name='top1m'
                    AND CAST(output->'target'->>'rank' AS INTEGER) < 1000000
                    AND timestamp > NOW() - INTERVAL '1 month')
  AND timestamp > NOW() - INTERVAL '1 month';
  ```

### Count Top 1M sites that support TLSv1.2
```sql
SELECT ciphersuites->'protocols' @> '["TLSv1.2"]'::jsonb AS "Support TLS 1.2", COUNT(DISTINCT(target))
FROM scans,
     jsonb_array_elements(conn_info->'ciphersuite') as ciphersuites
WHERE jsonb_typeof(conn_info) = 'object'
  AND jsonb_typeof(conn_info->'ciphersuite') = 'array'
  AND target IN ( SELECT target
                  FROM scans
                       INNER JOIN analysis ON (scans.id=analysis.scan_id)
                  WHERE worker_name='top1m'
                    AND CAST(output->'target'->>'rank' AS INTEGER) < 1000000
                    AND timestamp > NOW() - INTERVAL '1 month')
  AND timestamp > NOW() - INTERVAL '1 month'
GROUP BY ciphersuites->'protocols' @> '["TLSv1.2"]'::jsonb;
```

### Count end-entity certificates by issuer organizations
```sql
SELECT COUNT(*), issuer#>'{o}'->>0
FROM certificates
  INNER JOIN trust ON (certificates.id=trust.cert_id)
WHERE certificates.is_ca = false
  AND trust.trusted_mozilla=true
  AND trust.is_current = true
GROUP BY issuer#>'{o}'->>0
ORDER BY count(*) DESC;
```

### Count sites in the top 10k that are impacted by the Symantec distrust in Firefox 60
note: in Firefox 63, the not_valid_before condition will be removed
```sql
SELECT COUNT(DISTINCT(target))
FROM scans
  INNER JOIN analysis ON (scans.id=analysis.scan_id)
  INNER JOIN certificates ON (scans.cert_id=certificates.id)
WHERE has_tls=true
  AND target IN ( SELECT target
                  FROM scans
                  INNER JOIN analysis ON (scans.id=analysis.scan_id)
                  WHERE worker_name='top1m'
                    AND CAST(output->'target'->>'rank' AS INTEGER) < 10000
                    AND timestamp > NOW() - INTERVAL '1 week')
  AND worker_name='symantecDistrust'
  AND timestamp > NOW() - INTERVAL '1 week'
  AND not_valid_before < '2016-06-01'
GROUP BY has_tls, output->>'isDistrusted'
ORDER BY COUNT(DISTINCT(target)) DESC;
```

## Contributing

We're always happy to help new contributors. You can find us in `#observatory` on `irc.mozilla.org` ([Mozilla Wiki](https://wiki.mozilla.org/IRC)).

### Dependencies

We currently vendor dependencies in `vendor/`.

Using a golang version with [`go mod`](https://golang.org/ref/mod#mod-commands),run `make vendor` update vendored dependencies.

## Contributors

 * Julien Vehent
 * Dimitris Bachtis (original dev)
 * Adrian Utrilla

## License

 * Mozilla Public License Version 2.0


================================================
FILE: certificate/certificate.go
================================================
package certificate

import (
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/md5"
	"crypto/rsa"
	"crypto/sha1"
	"crypto/sha256"
	"crypto/x509"
	"encoding/asn1"
	"encoding/base64"
	"fmt"
	"log"
	"net"
	"strconv"
	"strings"
	"time"

	certconstraints "github.com/mozilla/tls-observatory/certificate/constraints"
)

const (
	Ubuntu_TS_name    = "Ubuntu"
	Mozilla_TS_name   = "Mozilla"
	Microsoft_TS_name = "Microsoft"
	Apple_TS_name     = "Apple"
	Android_TS_name   = "Android"

	Default_Cisco_Umbrella_Rank = 2147483647 // max positive value of postgres integer
)

type Certificate struct {
	ID                     int64                     `json:"id"`
	Serial                 string                    `json:"serialNumber"`
	ScanTarget             string                    `json:"scanTarget,omitempty"`
	IPs                    []string                  `json:"ips,omitempty"`
	Version                int                       `json:"version"`
	SignatureAlgorithm     string                    `json:"signatureAlgorithm"`
	Issuer                 Subject                   `json:"issuer"`
	Validity               Validity                  `json:"validity"`
	Subject                Subject                   `json:"subject"`
	Key                    SubjectPublicKeyInfo      `json:"key"`
	X509v3Extensions       Extensions                `json:"x509v3Extensions"`
	X509v3BasicConstraints string                    `json:"x509v3BasicConstraints"`
	CA                     bool                      `json:"ca"`
	Analysis               interface{}               `json:"analysis,omitempty"` //for future use...
	ParentSignature        []string                  `json:"parentSignature,omitempty"`
	ValidationInfo         map[string]ValidationInfo `json:"validationInfo"`
	FirstSeenTimestamp     time.Time                 `json:"firstSeenTimestamp"`
	LastSeenTimestamp      time.Time                 `json:"lastSeenTimestamp"`
	Hashes                 Hashes                    `json:"hashes"`
	Raw                    string                    `json:"Raw"`
	CiscoUmbrellaRank      int64                     `json:"ciscoUmbrellaRank"`
	Anomalies              string                    `json:"anomalies,omitempty"`
	MozillaPolicyV2_5      MozillaPolicy             `json:"mozillaPolicyV2_5"`
}

type MozillaPolicy struct {
	IsTechnicallyConstrained bool
}

type Hashes struct {
	MD5               string `json:"md5,omitempty"`
	SHA1              string `json:"sha1,omitempty"`
	SHA256            string `json:"sha256,omitempty"`
	SPKISHA256        string `json:"spki-sha256,omitempty"`
	SubjectSPKISHA256 string `json:"subject-spki-sha256,omitempty"`
	PKPSHA256         string `json:"pin-sha256,omitempty"`
}

type Validity struct {
	NotBefore time.Time `json:"notBefore"`
	NotAfter  time.Time `json:"notAfter"`
}

type Subject struct {
	ID           int64    `json:"id,omitempty"`
	Country      []string `json:"c,omitempty"`
	Organisation []string `json:"o,omitempty"`
	OrgUnit      []string `json:"ou,omitempty"`
	CommonName   string   `json:"cn,omitempty"`
}

type SubjectPublicKeyInfo struct {
	Alg      string  `json:"alg,omitempty"`
	Size     float64 `json:"size,omitempty"`
	Exponent float64 `json:"exponent,omitempty"`
	X        string  `json:"x,omitempty"`
	Y        string  `json:"y,omitempty"`
	P        string  `json:"p,omitempty"`
	Q        string  `json:"q,omitempty"`
	G        string  `json:"g,omitempty"`
	Curve    string  `json:"curve,omitempty"`
}

//Currently exporting extensions that are already decoded into the x509 Certificate structure
type Extensions struct {
	AuthorityKeyId           string   `json:"authorityKeyId"`
	SubjectKeyId             string   `json:"subjectKeyId"`
	KeyUsage                 []string `json:"keyUsage"`
	ExtendedKeyUsage         []string `json:"extendedKeyUsage"`
	ExtendedKeyUsageOID      []string `json:"extendedKeyUsageOID"`
	SubjectAlternativeName   []string `json:"subjectAlternativeName"`
	CRLDistributionPoints    []string `json:"crlDistributionPoint"`
	PolicyIdentifiers        []string `json:"policyIdentifiers,omitempty"`
	PermittedDNSDomains      []string `json:"permittedDNSNames,omitempty"`
	PermittedIPAddresses     []string `json:"permittedIPAddresses,omitempty"`
	ExcludedDNSDomains       []string `json:"excludedDNSNames,omitempty"`
	ExcludedIPAddresses      []string `json:"excludedIPAddresses,omitempty"`
	IsTechnicallyConstrained bool     `json:"isTechnicallyConstrained"`
}

type X509v3BasicConstraints struct {
	CA       bool        `json:"ca"`
	Analysis interface{} `json:"analysis,omitempty"`
}

type Chain struct {
	Domain string `json:"domain"`
	IP     string `json:"ip"`
	// base64 DER encoded certificates
	Certs []string `json:"certs"`
}

type IDs struct {
	_type  string   `json:"type"`
	values []string `json:"values"`
}

type JsonRawCert struct {
	RawCert string `json:"rawCert"`
}

type TrustStore struct {
	Name  string
	Certs *x509.CertPool
}

type ValidationInfo struct {
	IsValid         bool   `json:"isValid,omitempty"`
	ValidationError string `json:"validationError,omitempty"`
}

type Trust struct {
	ID               int64
	CertID           int64
	IssuerID         int64
	Timestamp        time.Time
	TrustUbuntu      bool
	TrustMozilla     bool
	TrustedMicrosoft bool
	TrustedApple     bool
	TrustedAndroid   bool
	Current          bool
}

var SignatureAlgorithm = [...]string{
	"UnknownSignatureAlgorithm",
	"MD2WithRSA",
	"MD5WithRSA",
	"SHA1WithRSA",
	"SHA256WithRSA",
	"SHA384WithRSA",
	"SHA512WithRSA",
	"DSAWithSHA1",
	"DSAWithSHA256",
	"ECDSAWithSHA1",
	"ECDSAWithSHA256",
	"ECDSAWithSHA384",
	"ECDSAWithSHA512",
}

var ExtKeyUsage = [...]string{
	"ExtKeyUsageAny",
	"ExtKeyUsageServerAuth",
	"ExtKeyUsageClientAuth",
	"ExtKeyUsageCodeSigning",
	"ExtKeyUsageEmailProtection",
	"ExtKeyUsageIPSECEndSystem",
	"ExtKeyUsageIPSECTunnel",
	"ExtKeyUsageIPSECUser",
	"ExtKeyUsageTimeStamping",
	"ExtKeyUsageOCSPSigning",
	"ExtKeyUsageMicrosoftServerGatedCrypto",
	"ExtKeyUsageNetscapeServerGatedCrypto",
	"ExtKeyUsageMicrosoftCommercialCodeSigning",
	"ExtKeyUsageMicrosoftKernelCodeSigning",
}

var ExtKeyUsageOID = [...]string{
	asn1.ObjectIdentifier{2, 5, 29, 37, 0}.String(),                 // ExtKeyUsageAny
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 1}.String(),       // ExtKeyUsageServerAuth
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 2}.String(),       // ExtKeyUsageClientAuth
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 3}.String(),       // ExtKeyUsageCodeSigning
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 4}.String(),       // ExtKeyUsageEmailProtection
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 5}.String(),       // ExtKeyUsageIPSECEndSystem
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 6}.String(),       // ExtKeyUsageIPSECTunnel
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 7}.String(),       // ExtKeyUsageIPSECUser
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 8}.String(),       // ExtKeyUsageTimeStamping
	asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 3, 9}.String(),       // ExtKeyUsageOCSPSigning
	asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 10, 3, 3}.String(), // ExtKeyUsageMicrosoftServerGatedCrypto
	asn1.ObjectIdentifier{2, 16, 840, 1, 113730, 4, 1}.String(),     // ExtKeyUsageNetscapeServerGatedCrypto
	asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 2, 1, 22}.String(), // ExtKeyUsageMicrosoftCommercialCodeSigning
	asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 311, 61, 1, 1}.String(), // ExtKeyUsageMicrosoftKernelCodeSigning
}

var PublicKeyAlgorithm = [...]string{
	"UnknownPublicKeyAlgorithm",
	"RSA",
	"DSA",
	"ECDSA",
}

func SubjectSPKISHA256(cert *x509.Certificate) string {
	h := sha256.New()
	h.Write(cert.RawSubject)
	h.Write(cert.RawSubjectPublicKeyInfo)
	return fmt.Sprintf("%X", h.Sum(nil))
}

func SPKISHA256(cert *x509.Certificate) string {
	h := sha256.New()
	h.Write(cert.RawSubjectPublicKeyInfo)
	return fmt.Sprintf("%X", h.Sum(nil))
}

func PKPSHA256Hash(cert *x509.Certificate) string {
	h := sha256.New()
	switch pub := cert.PublicKey.(type) {
	case *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey:
		der, _ := x509.MarshalPKIXPublicKey(pub)
		h.Write(der)
	default:
		return ""
	}
	return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

func SHA256Hash(data []byte) string {
	h := sha256.Sum256(data)
	return fmt.Sprintf("%X", h[:])
}

func MD5Hash(data []byte) string {
	h := md5.Sum(data)
	return fmt.Sprintf("%X", h[:])
}

func SHA1Hash(data []byte) string {
	h := sha1.Sum(data)
	return fmt.Sprintf("%X", h[:])
}

//GetBooleanValidity converts the validation info map to DB booleans
func (c Certificate) GetBooleanValidity() (trusted_ubuntu, trusted_mozilla, trusted_microsoft, trusted_apple, trusted_android bool) {

	//check Ubuntu validation info
	valInfo, ok := c.ValidationInfo[Ubuntu_TS_name]

	if !ok {
		trusted_ubuntu = false
	} else {
		trusted_ubuntu = valInfo.IsValid
	}

	//check Mozilla validation info
	valInfo, ok = c.ValidationInfo[Mozilla_TS_name]

	if !ok {
		trusted_mozilla = false
	} else {
		trusted_mozilla = valInfo.IsValid
	}

	//check Microsoft validation info
	valInfo, ok = c.ValidationInfo[Microsoft_TS_name]

	if !ok {
		trusted_microsoft = false
	} else {
		trusted_microsoft = valInfo.IsValid
	}

	//check Apple validation info
	valInfo, ok = c.ValidationInfo[Apple_TS_name]

	if !ok {
		trusted_apple = false
	} else {
		trusted_apple = valInfo.IsValid
	}

	//check Android validation info
	valInfo, ok = c.ValidationInfo[Android_TS_name]

	if !ok {
		trusted_android = false
	} else {
		trusted_android = valInfo.IsValid
	}
	return
}

// GetValidityMap converts boolean validity variables to a validity map.
func GetValidityMap(trusted_ubuntu, trusted_mozilla, trusted_microsoft, trusted_apple, trusted_android bool) map[string]ValidationInfo {

	vUbuntu := ValidationInfo{IsValid: trusted_ubuntu}
	vMozilla := ValidationInfo{IsValid: trusted_mozilla}
	vMicrosoft := ValidationInfo{IsValid: trusted_microsoft}
	vApple := ValidationInfo{IsValid: trusted_apple}
	vAndroid := ValidationInfo{IsValid: trusted_android}

	m := make(map[string]ValidationInfo)

	m[Ubuntu_TS_name] = vUbuntu
	m[Mozilla_TS_name] = vMozilla
	m[Microsoft_TS_name] = vMicrosoft
	m[Apple_TS_name] = vApple
	m[Android_TS_name] = vAndroid

	return m

}

func getExtKeyUsages(cert *x509.Certificate) (usage []string) {
	for _, eku := range cert.ExtKeyUsage {
		usage = append(usage, ExtKeyUsage[eku])
	}
	for _, unknownEku := range cert.UnknownExtKeyUsage {
		usage = append(usage, unknownEku.String())
	}
	return usage
}

func getExtKeyUsageOIDs(cert *x509.Certificate) (usage []string) {
	for _, eku := range cert.ExtKeyUsage {
		usage = append(usage, ExtKeyUsageOID[eku])
	}
	for _, unknownEku := range cert.UnknownExtKeyUsage {
		usage = append(usage, unknownEku.String())
	}
	return usage
}

func getPolicyIdentifiers(cert *x509.Certificate) []string {
	identifiers := make([]string, 0)
	for _, pi := range cert.PolicyIdentifiers {
		identifiers = append(identifiers, pi.String())
	}
	return identifiers
}

func getKeyUsages(cert *x509.Certificate) []string {
	usage := make([]string, 0)
	keyUsage := cert.KeyUsage

	//calculate included keyUsage from bitmap
	//String values taken from OpenSSL

	if keyUsage&x509.KeyUsageDigitalSignature != 0 {
		usage = append(usage, "Digital Signature")
	}
	if keyUsage&x509.KeyUsageContentCommitment != 0 {
		usage = append(usage, "Non Repudiation")
	}

	if keyUsage&x509.KeyUsageKeyEncipherment != 0 {
		usage = append(usage, "Key Encipherment")
	}

	if keyUsage&x509.KeyUsageDataEncipherment != 0 {
		usage = append(usage, "Data Encipherment")
	}

	if keyUsage&x509.KeyUsageKeyAgreement != 0 {
		usage = append(usage, "Key Agreement")
	}

	if keyUsage&x509.KeyUsageCertSign != 0 {
		usage = append(usage, "Certificate Sign")
	}

	if keyUsage&x509.KeyUsageCRLSign != 0 {
		usage = append(usage, "CRL Sign")
	}

	if keyUsage&x509.KeyUsageEncipherOnly != 0 {
		usage = append(usage, "Encipher Only")
	}

	if keyUsage&x509.KeyUsageDecipherOnly != 0 {
		usage = append(usage, "Decipher Only")
	}

	return usage
}

//getCertExtensions currently stores only the extensions that are already exported by GoLang
//(in the x509 Certificate Struct)
func getCertExtensions(cert *x509.Certificate) Extensions {
	// initialize []string to store them as `[]` instead of null
	san := make([]string, 0)
	san = append(san, cert.DNSNames...)
	crld := make([]string, 0)
	crld = append(crld, cert.CRLDistributionPoints...)
	constraints, _ := certconstraints.Get(cert)
	ipNetSliceToStringSlice := func(in []*net.IPNet) []string {
		out := make([]string, 0)
		for _, ipnet := range in {
			out = append(out, ipnet.String())
		}
		return out
	}
	permittedIPAddresses := ipNetSliceToStringSlice(constraints.PermittedIPRanges)
	excludedIPAddresses := ipNetSliceToStringSlice(constraints.ExcludedIPRanges)
	ext := Extensions{
		AuthorityKeyId:           base64.StdEncoding.EncodeToString(cert.AuthorityKeyId),
		SubjectKeyId:             base64.StdEncoding.EncodeToString(cert.SubjectKeyId),
		KeyUsage:                 getKeyUsages(cert),
		ExtendedKeyUsage:         getExtKeyUsages(cert),
		ExtendedKeyUsageOID:      getExtKeyUsageOIDs(cert),
		PolicyIdentifiers:        getPolicyIdentifiers(cert),
		SubjectAlternativeName:   san,
		CRLDistributionPoints:    crld,
		PermittedDNSDomains:      constraints.PermittedDNSDomains,
		ExcludedDNSDomains:       constraints.ExcludedDNSDomains,
		PermittedIPAddresses:     permittedIPAddresses,
		ExcludedIPAddresses:      excludedIPAddresses,
		IsTechnicallyConstrained: certconstraints.IsTechnicallyConstrained(cert),
	}
	return ext
}

func getMozillaPolicyV2_5(cert *x509.Certificate) MozillaPolicy {
	return MozillaPolicy{IsTechnicallyConstrained: certconstraints.IsTechnicallyConstrainedMozPolicyV2_5(cert)}
}

func getPublicKeyInfo(cert *x509.Certificate) (SubjectPublicKeyInfo, error) {
	pubInfo := SubjectPublicKeyInfo{
		Alg: PublicKeyAlgorithm[cert.PublicKeyAlgorithm],
	}

	switch pub := cert.PublicKey.(type) {
	case *rsa.PublicKey:
		pubInfo.Size = float64(pub.N.BitLen())
		pubInfo.Exponent = float64(pub.E)

	case *dsa.PublicKey:
		pubInfo.Size = float64(pub.Y.BitLen())
		textInt, err := pub.G.MarshalText()

		if err == nil {
			pubInfo.G = string(textInt)
		} else {
			return pubInfo, err
		}

		textInt, err = pub.P.MarshalText()

		if err == nil {
			pubInfo.P = string(textInt)
		} else {
			return pubInfo, err
		}

		textInt, err = pub.Q.MarshalText()

		if err == nil {
			pubInfo.Q = string(textInt)
		} else {
			return pubInfo, err
		}

		textInt, err = pub.Y.MarshalText()

		if err == nil {
			pubInfo.Y = string(textInt)
		} else {
			return pubInfo, err
		}

	case *ecdsa.PublicKey:
		pubInfo.Size = float64(pub.Curve.Params().BitSize)
		pubInfo.Curve = pub.Curve.Params().Name
		pubInfo.Y = pub.Y.String()
		pubInfo.X = pub.X.String()
	}

	return pubInfo, nil

}

func GetHexASN1Serial(cert *x509.Certificate) (serial string, err error) {
	m, err := asn1.Marshal(cert.SerialNumber)
	if err != nil {
		return
	}
	var rawValue asn1.RawValue
	_, err = asn1.Unmarshal(m, &rawValue)
	if err != nil {
		return
	}
	serial = fmt.Sprintf("%X", rawValue.Bytes)
	return
}

//certtoStored returns a Certificate struct created from a X509.Certificate
func CertToStored(cert *x509.Certificate, parentSignature, domain, ip string, TSName string, valInfo *ValidationInfo) Certificate {
	var (
		err    error
		stored = Certificate{}
	)
	// initialize []string to never store them as null
	stored.ParentSignature = make([]string, 0)
	stored.IPs = make([]string, 0)

	stored.Version = cert.Version

	// If there's an error, we just store the zero value ("")
	serial, _ := GetHexASN1Serial(cert)
	stored.Serial = serial

	stored.SignatureAlgorithm = SignatureAlgorithm[cert.SignatureAlgorithm]

	stored.Key, err = getPublicKeyInfo(cert)
	if err != nil {
		log.Printf("Failed to retrieve public key information: %v. Continuing anyway.", err)
	}

	stored.Issuer.Country = cert.Issuer.Country
	stored.Issuer.Organisation = cert.Issuer.Organization
	stored.Issuer.OrgUnit = cert.Issuer.OrganizationalUnit
	stored.Issuer.CommonName = cert.Issuer.CommonName

	stored.Subject.Country = cert.Subject.Country
	stored.Subject.Organisation = cert.Subject.Organization
	stored.Subject.OrgUnit = cert.Subject.OrganizationalUnit
	stored.Subject.CommonName = cert.Subject.CommonName

	stored.Validity.NotBefore = cert.NotBefore.UTC()
	stored.Validity.NotAfter = cert.NotAfter.UTC()

	stored.X509v3Extensions = getCertExtensions(cert)

	stored.MozillaPolicyV2_5 = getMozillaPolicyV2_5(cert)

	//below check tries to hack around the basic constraints extension
	//not being available in versions < 3.
	//Only the IsCa variable is set, as setting X509v3BasicConstraints
	//messes up the validation procedure.
	if cert.Version < 3 {
		stored.CA = cert.IsCA
	} else {
		if cert.BasicConstraintsValid {
			stored.X509v3BasicConstraints = "Critical"
			stored.CA = cert.IsCA
		} else {
			stored.X509v3BasicConstraints = ""
			stored.CA = false
		}
	}

	t := time.Now().UTC()

	stored.FirstSeenTimestamp = t
	stored.LastSeenTimestamp = t

	stored.ParentSignature = append(stored.ParentSignature, parentSignature)

	if !cert.IsCA {
		stored.ScanTarget = domain
		stored.IPs = append(stored.IPs, ip)
	}

	stored.ValidationInfo = make(map[string]ValidationInfo)
	stored.ValidationInfo[TSName] = *valInfo

	stored.Hashes.MD5 = MD5Hash(cert.Raw)
	stored.Hashes.SHA1 = SHA1Hash(cert.Raw)
	stored.Hashes.SHA256 = SHA256Hash(cert.Raw)
	stored.Hashes.SPKISHA256 = SPKISHA256(cert)
	stored.Hashes.SubjectSPKISHA256 = SubjectSPKISHA256(cert)
	stored.Hashes.PKPSHA256 = PKPSHA256Hash(cert)

	stored.Raw = base64.StdEncoding.EncodeToString(cert.Raw)
	stored.CiscoUmbrellaRank = Default_Cisco_Umbrella_Rank

	return stored
}

// ToX509() returns the crypto/x509 version of a certificate
func (cert Certificate) ToX509() (xcert *x509.Certificate, err error) {
	certRaw, err := base64.StdEncoding.DecodeString(cert.Raw)
	if err != nil {
		return
	}
	return x509.ParseCertificate(certRaw)
}

//printRawCertExtensions Print raw extension info
//for debugging purposes
func printRawCertExtensions(cert *x509.Certificate) {

	for i, extension := range cert.Extensions {

		var numbers string
		for num, num2 := range extension.Id {

			numbers = numbers + " " + "[" + strconv.Itoa(num) + " " + strconv.Itoa(num2) + "]"

		}
		fmt.Println("//", strconv.Itoa(i), ": {", numbers, "}", string(extension.Value))
	}

}

// String() prints the subject as a single string, following OpenSSL's display
// format: Subject: C=US, ST=California, L=Mountain View, O=Google Inc, CN=*.google.com
func (s Subject) String() string {
	var comp []string
	if len(s.Country) > 0 {
		comp = append(comp, "C="+strings.Join(s.Country, ", C="))
	}
	if len(s.Organisation) > 0 {
		comp = append(comp, "O="+strings.Join(s.Organisation, ", O="))
	}
	if len(s.OrgUnit) > 0 {
		comp = append(comp, "OU="+strings.Join(s.OrgUnit, ", OU="))
	}
	if len(s.CommonName) > 0 {
		comp = append(comp, "CN="+s.CommonName)
	}
	return strings.Join(comp, ", ")
}

// IsSelfSigned return true if the subject and issuer fields of a certificate
// are identical
func (c Certificate) IsSelfSigned() bool {
	if c.Subject.CommonName != c.Issuer.CommonName ||
		len(c.Subject.Organisation) != len(c.Issuer.Organisation) ||
		len(c.Subject.OrgUnit) != len(c.Issuer.OrgUnit) ||
		len(c.Subject.Country) != len(c.Issuer.Country) {
		return false
	}
	for i, _ := range c.Subject.Organisation {
		if c.Subject.Organisation[i] != c.Issuer.Organisation[i] {
			return false
		}
	}
	for i, _ := range c.Subject.OrgUnit {
		if c.Subject.OrgUnit[i] != c.Issuer.OrgUnit[i] {
			return false
		}
	}
	for i, _ := range c.Subject.Country {
		if c.Subject.Country[i] != c.Issuer.Country[i] {
			return false
		}
	}
	return true
}


================================================
FILE: certificate/certificate_test.go
================================================
package certificate

import (
	"crypto/x509"
	"encoding/pem"
	"math/big"
	"testing"
)

func TestGetHexASN1Serial(t *testing.T) {
	type testcase struct {
		input  *x509.Certificate
		output string
	}
	testcases := []testcase{
		{
			&x509.Certificate{SerialNumber: big.NewInt(-1)},
			"FF",
		},
		{
			&x509.Certificate{SerialNumber: big.NewInt(1)},
			"01",
		},
		{
			&x509.Certificate{SerialNumber: big.NewInt(0)},
			"00",
		},
		{
			&x509.Certificate{SerialNumber: big.NewInt(201)},
			"00C9",
		},
		{
			&x509.Certificate{SerialNumber: big.NewInt(-201)},
			"FF37",
		},
	}
	for _, tc := range testcases {
		serial, _ := GetHexASN1Serial(tc.input)
		if serial != tc.output {
			t.Errorf("Expected %s, got %s", tc.output, serial)
		}
	}
}

var mozTechnicallyConstrained = []byte(`-----BEGIN CERTIFICATE-----
MIIHTDCCBjSgAwIBAgINAecH0ddtF7+K4cYQiTANBgkqhkiG9w0BAQsFADBjMQsw
CQYDVQQGEwJCRTEVMBMGA1UECxMMVHJ1c3RlZCBSb290MRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMSIwIAYDVQQDExlUcnVzdGVkIFJvb3QgQ0EgU0hBMjU2IEcy
MB4XDTE4MDExNzAwMDAwMFoXDTIzMDExNzAwMDAwMFowgYcxCzAJBgNVBAYTAlVT
MRswGQYDVQQKExJGb3JkIE1vdG9yIENvbXBhbnkxETAPBgNVBAcTCERlYXJib3Ju
MREwDwYDVQQIEwhNaWNoaWdhbjE1MDMGA1UEAxMsRm9yZCBNb3RvciBDb21wYW55
IC0gRW50ZXJwcmlzZSBJc3N1aW5nIENBMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDSo24yvoHjFxQ6mRA/JVncVa4TdGJTy1DXWsN2QXE/aTzvxtAp
jgZ+J2jWiTiBXbLFSCCEcrlqd9R7GfGmzvHlJldZO340FS+caConYvsdZOFfCVKA
2AlJwZXiPXiq9q13hlxKTuKDpx7eqdhrseuJzFSb/mR3gy1hHW4XvIqkQXRY2ZTO
nQqgwxOQEirVYkBGWZrmE7pd+P2Pbm0Oy3IKfmPgRr26qLaLflhuiof3S0z3xGdF
8NDAQKiUF0FHxrm6I2wppdZrsEtuavK/JttbAUg+2u/PiWb6EoBVURQ7cV8gJhQ4
Mf77I+DJqCtg3MmlaEqwWtHSoF+tiu5kyD/5AgMBAAGjggPYMIID1DAOBgNVHQ8B
Af8EBAMCAQYwgZ0GA1UdJQSBlTCBkgYIKwYBBQUHAwIGCCsGAQUFBwMEBggrBgEF
BQcDCQYIKwYBBQUHAw4GCisGAQQBgjcKAwQGCysGAQQBgjcKAwQBBgorBgEEAYI3
CgMLBgorBgEEAYI3FAIBBgorBgEEAYI3FAICBgkrBgEEAYI3FRMGCSsGAQQBgjcV
BQYJKwYBBAGCNxUGBgorBgEEAYI3CgMMMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
VR0OBBYEFIPFhTmtaeDfsuzUbTSm6/kGvWeeMB8GA1UdIwQYMBaAFMhjmwhpVMKY
yNnN4zO3UF74yQGbMIGNBggrBgEFBQcBAQSBgDB+MDcGCCsGAQUFBzABhitodHRw
Oi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vdHJ1c3Ryb290c2hhMmcyMEMGCCsGAQUF
BzAChjdodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC90cnVzdHJv
b3RzaGEyZzIuY3J0MIIBoAYDVR0eBIIBlzCCAZOgggFdMAuBCS5mb3JkLmNvbTAR
gQ9haXMtY29sb2duZS5jb20wE4ERYWlzLXNhYXJsb3Vpcy5jb20wDYELY290YXJr
by5jb20wEoEQZXVyb3BlYW4tbGxwLmNvbTAKgQhmb3JkLmNvbTAQgQ5mb3JkY3Jl
ZGl0LmNvbTAQgQ5mb3JkZGlyZWN0LmNvbTARgQ9mb3Jzb25vcmRpYy5jb20wDYEL
bGluY29sbi5jb20wEIEObGluY29sbmFmcy5jb20wDIEKdHJveWRtLmNvbTAKgghm
b3JkLmNvbTBUpFIwUDELMAkGA1UEBhMCVVMxGzAZBgNVBAoTEkZvcmQgTW90b3Ig
Q29tcGFueTERMA8GA1UEBxMIRGVhcmJvcm4xETAPBgNVBAgTCE1pY2hpZ2FuMC+k
LTArMRMwEQYKCZImiZPyLGQBGRYDY29tMRQwEgYKCZImiZPyLGQBGRYEZm9yZKEw
MAqHCAAAAAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
MD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vdHJ1
c3Ryb290c2hhMmcyLmNybDBaBgNVHSAEUzBRMAwGCisGAQQBge4xCgEwQQYJKwYB
BAGgMgE8MDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
L3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBCwUAA4IBAQA1X07Sm0BkKpg9GbEouL1C
zob9nM94esEZkQL69szSN75evgs5XulK/K4dQcXcN5y0kontEaaMZCG+T3mHDfbZ
Ru9GeITG4C9o+JzRZ+aUA71+1pzkrtCMc6QtaMziVSoGARswXuf8m7q0lNjnBYb6
lESAdtFzOitRf9436UiESrsWrOZQSX0ejR+L09vfWwCXoZfhmADvFeWtm7GBnN7k
1h1eVHay8uFCl4XrUPMZmBxw6ev1RGXjPIF8VtZAywkdY5u+XzH2NDQdeJPGih3Y
03K7PYtOSccYXKbsV+XEtgFN7fBFTuODihb4ygJVtwP+M/CGyRwtEZM2j7OHhM2F
-----END CERTIFICATE-----`)

// This cert has the EmailProtection EKU but does not fulfill
// the name constraint.
var mozNotTechnicallyConstrained = []byte(`-----BEGIN CERTIFICATE-----
MIII9TCCBt2gAwIBAgIIBrhoC897Tn4wDQYJKoZIhvcNAQEFBQAwgaoxCzAJBgNV
BAYTAkVTMRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xEjAQBgNVBAUTCUE4
Mjc0MzI4NzFLMEkGA1UEBxNCTWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
IGh0dHBzOi8vd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMR0wGwYDVQQDExRB
QyBDYW1lcmZpcm1hIC0gMjAwOTAeFw0xNDExMjQxMTA3NTVaFw0yNDExMjExMTA3
NTVaMGUxCzAJBgNVBAYTAkVTMSUwIwYDVQQKDBxPUkdBTklaQUNJT04gTUVESUNB
IENPTEVHSUFMMSEwHwYDVQQLDBhFTlRJREFEIERFIENFUlRJRklDQUNJT04xDDAK
BgNVBAMMA09NQzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALRbioOD
0Dw7bglJNJ2yPMUoiQgMwJwGqAvMMbwEv8DGHW1mYOJEvxSLqub0lZSocUkh1o+s
wiBlATGXsuql995MDoRhbR9flyPv09FUBFXWySSsrOjpSDiMGMmaz3vB1oa0+t4k
kdcHj+Xb7rq0XNvWpklvZxbt/ng7UjKvkgPsSOEO0BA3L0KwUQVlRjogxRvVFR15
/X/GVpEVOwcLcb7qVI/W5gzMF2cnXNEXwJuiwPhg3Wlbk6VLppDLKrhIQagOgfqC
GxGBXYHWGnTNl/0HpHcx8HbvvB5zZLdQA5HfNHNZ19hGXjGoUotTN5dEhPDnQ91N
iGUzhdYj3NFKL3BGOSgBCZQayTZf1gz1MQsEjNS2MOYhxUuVYalXeQnL+vvuTGlB
3Kii+/X2KrNo4Af5yM2+n73da6fP9G7koT7fQBQRgZ3CRoNasMgb0QwGVzNCS5y1
g2BUPBQVDN+JV/JyeN9DCrYbm68kfufOYtyj2rp/dRgYANFtSJGZwRumKjqZ7QuZ
DRJjEorcGABHVuiAwv3jgfPoYaIQ92rtT+vbkponzE8SdBXVoToWXS1JWxoJMxRa
e2+KZhLOcfHbaZCtITMSmPZrJdtdr+QFvAJReXXXOylf9j4irKVxkXsE2RrfaN4H
F8hE5yOvgskgZEMPYQEtpsm6IjQv4EZ8lu6HAgMBAAGjggNhMIIDXTASBgNVHRMB
Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBTnZBVkvqc1vvc6Ts8tPgcLt14/KzCB2QYD
VR0jBIHRMIHOgBTIAA/8xlL8n9s7ZC4yuW4ucfNleaGBsqSBrzCBrDELMAkGA1UE
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3
d3cuY2FtZXJmaXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEb
MBkGA1UEChMSQUMgQ2FtZXJmaXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hh
bWJlcnNpZ24gUm9vdCAtIDIwMDiCAQIwegYIKwYBBQUHAQEEbjBsMEIGCCsGAQUF
BzAChjZodHRwOi8vd3d3LmNhbWVyZmlybWEuY29tL2NlcnRzL2FjX2NhbWVyZmly
bWEtMjAwOS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLmNhbWVyZmlybWEu
Y29tMA4GA1UdDwEB/wQEAwIBBjAnBgNVHSUEIDAeBggrBgEFBQcDAgYIKwYBBQUH
AwQGCCsGAQUFBwMJMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
dHRwczovL3BvbGljeS5jYW1lcmZpcm1hLmNvbTB6BgNVHR8EczBxMDagNKAyhjBo
dHRwOi8vY3JsLmNhbWVyZmlybWEuY29tL2FjX2NhbWVyZmlybWEtMjAwOS5jcmww
N6A1oDOGMWh0dHA6Ly9jcmwxLmNhbWVyZmlybWEuY29tL2FjX2NhbWVyZmlybWEt
MjAwOS5jcmwwgdoGA1UdEQSB0jCBz4EWY2VydGlmaWNhY2lvbkBjZ2NvbS5lc6SB
tDCBsTELMAkGA1UEBhMCRVMxDzANBgNVBAgTBk1BRFJJRDEPMA0GA1UEBxMGTUFE
UklEMQ4wDAYDVQQREwUyODAxNDEfMB0GA1UECRMWUExBWkEgREUgTEFTIENPUlRF
UyAxMTESMBAGA1UEBRMJUTI4NjYwMTdDMTswOQYDVQQDFDJDT05TRUpPIEdFTkVS
QUwgREUgQ09MRUdJT1MgREUgTcOJRElDT1MgREUgRVNQQcORQTANBgkqhkiG9w0B
AQUFAAOCAgEAhODURFs76WtpihhB6y5etlbWk5TrHqsckgRrqA/UMUEajSxSlHbC
JQ3lz9vzJW/dQHw77RlJBQJvAY3II/s5bRsG+TbEA2f4XLY1fchU+lYY8suilbEY
MnorKfl1uP9y+aF7OCtLHY1Wt0MYccKwUtNgrozTwMgPbwCo3e4mTdWgg1Vvu573
jFmopi5Agzzcth8ruHmAlp1tSqZOs8NKExZ9k1tkFiuDtrdFqOUi/4vx9LQKFm9E
aaoB1vDAbU5KCyOZrq+dvwpHz9B5EN0995a68k/8dmMsAmL4qXrSLVJ66ugm0HUK
7xBwTHZhi3Nz5HvyJHpmkccUmEbVEjxLrKpJc80xjw2HlQV+uvUP0jUyLwm+9RV+
d4cEQ3Js8WLmUjseHm68gI2Ivv0kPDVpUCyUADRkFfnN4YHp54kaNNXI/Wr12hA3
J80RDyPY+9DfU9DfGfybtu5Eoc/Cl5jumoUDuVghRPxpByWp+dNOFJtWCD8I/9QI
OmribtK9mjEZVNm/CqIjwhcI5D737n6QKOEapJVCmDFj2UwiAS9pVR4gqNY9cHkU
lfT06yBl+QBe3mZV6JLi3Lq6U6Blfi8+eWaGD7TkopVYJl+eR/4vUGVH5f5s0Wdg
lMlvG5avdIGZyTT+ktD3R0wJ/WGAUviweDBSGb+oUmUaBV7igHuZ/ws=
-----END CERTIFICATE-----`)

func TestMozillaPolicy(t *testing.T) {
	block, _ := pem.Decode(mozTechnicallyConstrained)
	cert, _ := x509.ParseCertificate(block.Bytes)
	mozPolicy := getMozillaPolicyV2_5(cert)
	if !mozPolicy.IsTechnicallyConstrained {
		t.Errorf("Wrong Mozilla Technical Constraint value. Got %v, wanted %v", mozPolicy.IsTechnicallyConstrained, true)
	}
}

func TestMozillaPolicyNotTechnicallyConstrained(t *testing.T) {
	block, _ := pem.Decode(mozNotTechnicallyConstrained)
	cert, _ := x509.ParseCertificate(block.Bytes)
	mozPolicy := getMozillaPolicyV2_5(cert)
	if mozPolicy.IsTechnicallyConstrained {
		t.Errorf("Wrong Mozilla Technical Constraint value. Got %v, wanted %v", mozPolicy.IsTechnicallyConstrained, false)
	}
}


================================================
FILE: certificate/constraints/constraints.go
================================================
package certconstraints

import (
	// constraintsx509 "constraintcrypto/x509"
	"crypto/x509"
	"fmt"
	"net"
	"time"
)

type Constraints struct {
	PermittedDNSDomains []string
	ExcludedDNSDomains  []string
	PermittedIPRanges   []*net.IPNet
	ExcludedIPRanges    []*net.IPNet
}

// Get returns the Constraints for a given x509 certificate
func Get(cert *x509.Certificate) (*Constraints, error) {
	certs, err := x509.ParseCertificates(cert.Raw)
	if err != nil {
		return nil, err
	}
	if len(certs) != 1 {
		return nil, fmt.Errorf("cert.Raw must contain exactly one certificate")
	}
	constraintCert := certs[0]

	return &Constraints{
		PermittedDNSDomains: constraintCert.PermittedDNSDomains,
		ExcludedDNSDomains:  constraintCert.ExcludedDNSDomains,
		PermittedIPRanges:   constraintCert.PermittedIPRanges,
		ExcludedIPRanges:    constraintCert.ExcludedIPRanges,
	}, nil
}

func isAllZeros(buf []byte, length int) bool {
	if length > len(buf) {
		return false
	}
	for i := 0; i < length; i++ {
		if buf[i] != 0 {
			return false
		}
	}
	return true
}

// IsTechnicallyConstrained determines if a given certificate is technically constrained.
// Slightly modified from https://github.com/jcjones/gx509/blob/master/gx509/technicalconstraints.go
func IsTechnicallyConstrained(cert *x509.Certificate) bool {
	// There must be Extended Key Usage flags
	if len(cert.ExtKeyUsage) == 0 {
		return false
	}

	// For certificates with a notBefore before 23 August 2016, the
	// id-Netscape-stepUp OID (aka Netscape Server Gated Crypto ("nsSGC")) is
	// treated as equivalent to id-kp-serverAuth.
	nsSGCCutoff := time.Date(2016, time.August, 23, 0, 0, 0, 0, time.UTC)

	stepUpEquivalentToServerAuth := cert.NotBefore.Before(nsSGCCutoff)
	var hasServerAuth bool
	var hasStepUp bool

	for _, usage := range cert.ExtKeyUsage {
		switch usage {
		case x509.ExtKeyUsageAny:
			// Do not permit ExtKeyUsageAny
			return false
		case x509.ExtKeyUsageServerAuth:
			hasServerAuth = true
		case x509.ExtKeyUsageNetscapeServerGatedCrypto:
			hasStepUp = true
		}
	}

	// Must be marked for Server Auth, or have StepUp and be from before the cutoff
	if !(hasServerAuth || (stepUpEquivalentToServerAuth && hasStepUp)) {
		return true
	}

	// For iPAddresses in excludedSubtrees, both IPv4 and IPv6 must be present
	// and the constraints must cover the entire range (0.0.0.0/0 for IPv4 and
	// ::0/0 for IPv6).
	var excludesIPv4 bool
	var excludesIPv6 bool
	constraints, _ := Get(cert)
	for _, cidr := range constraints.ExcludedIPRanges {
		if cidr.IP.Equal(net.IPv4zero) && isAllZeros(cidr.Mask, net.IPv4len) {
			excludesIPv4 = true
		}
		if cidr.IP.Equal(net.IPv6zero) && isAllZeros(cidr.Mask, net.IPv6len) {
			excludesIPv6 = true
		}
	}

	hasIPAddressInPermittedSubtrees := len(constraints.PermittedIPRanges) > 0
	hasIPAddressesInExcludedSubtrees := excludesIPv4 && excludesIPv6

	// There must be at least one DNSname constraint
	hasDNSName := len(cert.PermittedDNSDomains) > 0 ||
		len(constraints.ExcludedDNSDomains) > 0

	if hasDNSName && (hasIPAddressInPermittedSubtrees ||
		hasIPAddressesInExcludedSubtrees) {
		return true
	}
	return false
}

// IsTechnicallyConstrainedMozPolicyV2_5 determines if a given certificate is technically constrained
// according to the Mozilla Root Store Policy V2.5.
// https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/policy/
func IsTechnicallyConstrainedMozPolicyV2_5(cert *x509.Certificate) bool {
	// The logic from IsTechnicallyConstrained is extended here due to paragraph
	// three of section 5.3.1:
	//
	// If the certificate includes the id-kp-emailProtection extended key usage,
	// it MUST include the Name Constraints X.509v3 extension with constraints on
	// rfc822Name, with at least one name in permittedSubtrees, each such name having
	// its ownership validated according to section 3.2.2.4 of the Baseline Requirements.
	for _, extKeyUsage := range cert.ExtKeyUsage {
		if extKeyUsage == x509.ExtKeyUsageEmailProtection {
			if len(cert.PermittedEmailAddresses) == 0 {
				return false
			}
			break
		}
	}
	return IsTechnicallyConstrained(cert)
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/cert_pool.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import (
	"encoding/pem"
	"errors"
	"runtime"
)

// CertPool is a set of certificates.
type CertPool struct {
	bySubjectKeyId map[string][]int
	byName         map[string][]int
	certs          []*Certificate
}

// NewCertPool returns a new, empty CertPool.
func NewCertPool() *CertPool {
	return &CertPool{
		bySubjectKeyId: make(map[string][]int),
		byName:         make(map[string][]int),
	}
}

// SystemCertPool returns a copy of the system cert pool.
//
// Any mutations to the returned pool are not written to disk and do
// not affect any other pool.
func SystemCertPool() (*CertPool, error) {
	if runtime.GOOS == "windows" {
		return nil, errors.New("crypto/x509: system root pool is not available on Windows")
	}
	return loadSystemRoots()
}

// findVerifiedParents attempts to find certificates in s which have signed the
// given certificate. If any candidates were rejected then errCert will be set
// to one of them, arbitrarily, and err will contain the reason that it was
// rejected.
func (s *CertPool) findVerifiedParents(cert *Certificate) (parents []int, errCert *Certificate, err error) {
	if s == nil {
		return
	}
	var candidates []int

	if len(cert.AuthorityKeyId) > 0 {
		candidates = s.bySubjectKeyId[string(cert.AuthorityKeyId)]
	}
	if len(candidates) == 0 {
		candidates = s.byName[string(cert.RawIssuer)]
	}

	for _, c := range candidates {
		if err = cert.CheckSignatureFrom(s.certs[c]); err == nil {
			parents = append(parents, c)
		} else {
			errCert = s.certs[c]
		}
	}

	return
}

// AddCert adds a certificate to a pool.
func (s *CertPool) AddCert(cert *Certificate) {
	if cert == nil {
		panic("adding nil Certificate to CertPool")
	}

	// Check that the certificate isn't being added twice.
	for _, c := range s.certs {
		if c.Equal(cert) {
			return
		}
	}

	n := len(s.certs)
	s.certs = append(s.certs, cert)

	if len(cert.SubjectKeyId) > 0 {
		keyId := string(cert.SubjectKeyId)
		s.bySubjectKeyId[keyId] = append(s.bySubjectKeyId[keyId], n)
	}
	name := string(cert.RawSubject)
	s.byName[name] = append(s.byName[name], n)
}

// AppendCertsFromPEM attempts to parse a series of PEM encoded certificates.
// It appends any certificates found to s and reports whether any certificates
// were successfully parsed.
//
// On many Linux systems, /etc/ssl/cert.pem will contain the system wide set
// of root CAs in a format suitable for this function.
func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool) {
	for len(pemCerts) > 0 {
		var block *pem.Block
		block, pemCerts = pem.Decode(pemCerts)
		if block == nil {
			break
		}
		if block.Type != "CERTIFICATE" || len(block.Headers) != 0 {
			continue
		}

		cert, err := ParseCertificate(block.Bytes)
		if err != nil {
			continue
		}

		s.AddCert(cert)
		ok = true
	}

	return
}

// Subjects returns a list of the DER-encoded subjects of
// all of the certificates in the pool.
func (s *CertPool) Subjects() [][]byte {
	res := make([][]byte, len(s.certs))
	for i, c := range s.certs {
		res[i] = c.RawSubject
	}
	return res
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/example_test.go
================================================
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509_test

import (
	"crypto/dsa"
	"crypto/ecdsa"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"fmt"
)

func ExampleCertificate_Verify() {
	// Verifying with a custom list of root certificates.

	const rootPEM = `
-----BEGIN CERTIFICATE-----
MIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG
EwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy
bmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP
VaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv
h8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE
ahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ
EASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC
DTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD
VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g
K4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI
KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n
ZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB
BQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY
/iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/
zG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza
HFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto
WHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6
yuGnBXj8ytqU0CwIPX4WecigUCAkVDNx
-----END CERTIFICATE-----`

	const certPEM = `
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgIIE31FZVaPXTUwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTQwMTI5MTMyNzQzWhcNMTQwNTI5MDAwMDAw
WjBpMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEYMBYGA1UEAwwPbWFp
bC5nb29nbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfRrObuSW5T7q
5CnSEqefEmtH4CCv6+5EckuriNr1CjfVvqzwfAhopXkLrq45EQm8vkmf7W96XJhC
7ZM0dYi1/qOCAU8wggFLMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAa
BgNVHREEEzARgg9tYWlsLmdvb2dsZS5jb20wCwYDVR0PBAQDAgeAMGgGCCsGAQUF
BwEBBFwwWjArBggrBgEFBQcwAoYfaHR0cDovL3BraS5nb29nbGUuY29tL0dJQUcy
LmNydDArBggrBgEFBQcwAYYfaHR0cDovL2NsaWVudHMxLmdvb2dsZS5jb20vb2Nz
cDAdBgNVHQ4EFgQUiJxtimAuTfwb+aUtBn5UYKreKvMwDAYDVR0TAQH/BAIwADAf
BgNVHSMEGDAWgBRK3QYWG7z2aLV29YG2u2IaulqBLzAXBgNVHSAEEDAOMAwGCisG
AQQB1nkCBQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29nbGUuY29t
L0dJQUcyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAH6RYHxHdcGpMpFE3oxDoFnP+
gtuBCHan2yE2GRbJ2Cw8Lw0MmuKqHlf9RSeYfd3BXeKkj1qO6TVKwCh+0HdZk283
TZZyzmEOyclm3UGFYe82P/iDFt+CeQ3NpmBg+GoaVCuWAARJN/KfglbLyyYygcQq
0SgeDh8dRKUiaW3HQSoYvTvdTuqzwK4CXsr3b5/dAOY8uMuG/IAR3FgwTbZ1dtoW
RvOTa8hYiU6A475WuZKyEHcwnGYe57u2I2KbMgcKjPniocj4QzgYsVAVKW3IwaOh
yE+vPxsiUkvQHdO2fojCkY8jg70jxM+gu59tPDNbw3Uh/2Ij310FgTHsnGQMyA==
-----END CERTIFICATE-----`

	// First, create the set of root certificates. For this example we only
	// have one. It's also possible to omit this in order to use the
	// default root set of the current operating system.
	roots := x509.NewCertPool()
	ok := roots.AppendCertsFromPEM([]byte(rootPEM))
	if !ok {
		panic("failed to parse root certificate")
	}

	block, _ := pem.Decode([]byte(certPEM))
	if block == nil {
		panic("failed to parse certificate PEM")
	}
	cert, err := x509.ParseCertificate(block.Bytes)
	if err != nil {
		panic("failed to parse certificate: " + err.Error())
	}

	opts := x509.VerifyOptions{
		DNSName: "mail.google.com",
		Roots:   roots,
	}

	if _, err := cert.Verify(opts); err != nil {
		panic("failed to verify certificate: " + err.Error())
	}
}

func ExampleParsePKIXPublicKey() {
	const pubPEM = `
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlRuRnThUjU8/prwYxbty
WPT9pURI3lbsKMiB6Fn/VHOKE13p4D8xgOCADpdRagdT6n4etr9atzDKUSvpMtR3
CP5noNc97WiNCggBjVWhs7szEe8ugyqF23XwpHQ6uV1LKH50m92MbOWfCtjU9p/x
qhNpQQ1AZhqNy5Gevap5k8XzRmjSldNAFZMY7Yv3Gi+nyCwGwpVtBUwhuLzgNFK/
yDtw2WcWmUU7NuC8Q6MWvPebxVtCfVp/iQU6q60yyt6aGOBkhAX0LpKAEhKidixY
nP9PNVBvxgu3XZ4P36gZV6+ummKdBVnc3NqwBLu5+CcdRdusmHPHd5pHf4/38Z3/
6qU2a/fPvWzceVTEgZ47QjFMTCTmCwNt29cvi7zZeQzjtwQgn4ipN9NibRH/Ax/q
TbIzHfrJ1xa2RteWSdFjwtxi9C20HUkjXSeI4YlzQMH0fPX6KCE7aVePTOnB69I/
a9/q96DiXZajwlpq3wFctrs1oXqBp5DVrCIj8hU2wNgB7LtQ1mCtsYz//heai0K9
PhE4X6hiE0YmeAZjR0uHl8M/5aW9xCoJ72+12kKpWAa0SFRWLy6FejNYCYpkupVJ
yecLk/4L1W0l6jQQZnWErXZYe0PNFcmwGXy1Rep83kfBRNKRy5tvocalLlwXLdUk
AIU+2GKjyT3iMuzZxxFxPFMCAwEAAQ==
-----END PUBLIC KEY-----`

	block, _ := pem.Decode([]byte(pubPEM))
	if block == nil {
		panic("failed to parse PEM block containing the public key")
	}

	pub, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		panic("failed to parse DER encoded public key: " + err.Error())
	}

	switch pub := pub.(type) {
	case *rsa.PublicKey:
		fmt.Println("pub is of type RSA:", pub)
	case *dsa.PublicKey:
		fmt.Println("pub is of type DSA:", pub)
	case *ecdsa.PublicKey:
		fmt.Println("pub is of type ECDSA:", pub)
	default:
		panic("unknown type of public key")
	}
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt.go
================================================
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

// RFC 1423 describes the encryption of PEM blocks. The algorithm used to
// generate a key from the password was derived by looking at the OpenSSL
// implementation.

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/des"
	"crypto/md5"
	"encoding/hex"
	"encoding/pem"
	"errors"
	"io"
	"strings"
)

type PEMCipher int

// Possible values for the EncryptPEMBlock encryption algorithm.
const (
	_ PEMCipher = iota
	PEMCipherDES
	PEMCipher3DES
	PEMCipherAES128
	PEMCipherAES192
	PEMCipherAES256
)

// rfc1423Algo holds a method for enciphering a PEM block.
type rfc1423Algo struct {
	cipher     PEMCipher
	name       string
	cipherFunc func(key []byte) (cipher.Block, error)
	keySize    int
	blockSize  int
}

// rfc1423Algos holds a slice of the possible ways to encrypt a PEM
// block. The ivSize numbers were taken from the OpenSSL source.
var rfc1423Algos = []rfc1423Algo{{
	cipher:     PEMCipherDES,
	name:       "DES-CBC",
	cipherFunc: des.NewCipher,
	keySize:    8,
	blockSize:  des.BlockSize,
}, {
	cipher:     PEMCipher3DES,
	name:       "DES-EDE3-CBC",
	cipherFunc: des.NewTripleDESCipher,
	keySize:    24,
	blockSize:  des.BlockSize,
}, {
	cipher:     PEMCipherAES128,
	name:       "AES-128-CBC",
	cipherFunc: aes.NewCipher,
	keySize:    16,
	blockSize:  aes.BlockSize,
}, {
	cipher:     PEMCipherAES192,
	name:       "AES-192-CBC",
	cipherFunc: aes.NewCipher,
	keySize:    24,
	blockSize:  aes.BlockSize,
}, {
	cipher:     PEMCipherAES256,
	name:       "AES-256-CBC",
	cipherFunc: aes.NewCipher,
	keySize:    32,
	blockSize:  aes.BlockSize,
},
}

// deriveKey uses a key derivation function to stretch the password into a key
// with the number of bits our cipher requires. This algorithm was derived from
// the OpenSSL source.
func (c rfc1423Algo) deriveKey(password, salt []byte) []byte {
	hash := md5.New()
	out := make([]byte, c.keySize)
	var digest []byte

	for i := 0; i < len(out); i += len(digest) {
		hash.Reset()
		hash.Write(digest)
		hash.Write(password)
		hash.Write(salt)
		digest = hash.Sum(digest[:0])
		copy(out[i:], digest)
	}
	return out
}

// IsEncryptedPEMBlock returns if the PEM block is password encrypted.
func IsEncryptedPEMBlock(b *pem.Block) bool {
	_, ok := b.Headers["DEK-Info"]
	return ok
}

// IncorrectPasswordError is returned when an incorrect password is detected.
var IncorrectPasswordError = errors.New("x509: decryption password incorrect")

// DecryptPEMBlock takes a password encrypted PEM block and the password used to
// encrypt it and returns a slice of decrypted DER encoded bytes. It inspects
// the DEK-Info header to determine the algorithm used for decryption. If no
// DEK-Info header is present, an error is returned. If an incorrect password
// is detected an IncorrectPasswordError is returned. Because of deficiencies
// in the encrypted-PEM format, it's not always possible to detect an incorrect
// password. In these cases no error will be returned but the decrypted DER
// bytes will be random noise.
func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error) {
	dek, ok := b.Headers["DEK-Info"]
	if !ok {
		return nil, errors.New("x509: no DEK-Info header in block")
	}

	idx := strings.Index(dek, ",")
	if idx == -1 {
		return nil, errors.New("x509: malformed DEK-Info header")
	}

	mode, hexIV := dek[:idx], dek[idx+1:]
	ciph := cipherByName(mode)
	if ciph == nil {
		return nil, errors.New("x509: unknown encryption mode")
	}
	iv, err := hex.DecodeString(hexIV)
	if err != nil {
		return nil, err
	}
	if len(iv) != ciph.blockSize {
		return nil, errors.New("x509: incorrect IV size")
	}

	// Based on the OpenSSL implementation. The salt is the first 8 bytes
	// of the initialization vector.
	key := ciph.deriveKey(password, iv[:8])
	block, err := ciph.cipherFunc(key)
	if err != nil {
		return nil, err
	}

	if len(b.Bytes)%block.BlockSize() != 0 {
		return nil, errors.New("x509: encrypted PEM data is not a multiple of the block size")
	}

	data := make([]byte, len(b.Bytes))
	dec := cipher.NewCBCDecrypter(block, iv)
	dec.CryptBlocks(data, b.Bytes)

	// Blocks are padded using a scheme where the last n bytes of padding are all
	// equal to n. It can pad from 1 to blocksize bytes inclusive. See RFC 1423.
	// For example:
	//	[x y z 2 2]
	//	[x y 7 7 7 7 7 7 7]
	// If we detect a bad padding, we assume it is an invalid password.
	dlen := len(data)
	if dlen == 0 || dlen%ciph.blockSize != 0 {
		return nil, errors.New("x509: invalid padding")
	}
	last := int(data[dlen-1])
	if dlen < last {
		return nil, IncorrectPasswordError
	}
	if last == 0 || last > ciph.blockSize {
		return nil, IncorrectPasswordError
	}
	for _, val := range data[dlen-last:] {
		if int(val) != last {
			return nil, IncorrectPasswordError
		}
	}
	return data[:dlen-last], nil
}

// EncryptPEMBlock returns a PEM block of the specified type holding the
// given DER-encoded data encrypted with the specified algorithm and
// password.
func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error) {
	ciph := cipherByKey(alg)
	if ciph == nil {
		return nil, errors.New("x509: unknown encryption mode")
	}
	iv := make([]byte, ciph.blockSize)
	if _, err := io.ReadFull(rand, iv); err != nil {
		return nil, errors.New("x509: cannot generate IV: " + err.Error())
	}
	// The salt is the first 8 bytes of the initialization vector,
	// matching the key derivation in DecryptPEMBlock.
	key := ciph.deriveKey(password, iv[:8])
	block, err := ciph.cipherFunc(key)
	if err != nil {
		return nil, err
	}
	enc := cipher.NewCBCEncrypter(block, iv)
	pad := ciph.blockSize - len(data)%ciph.blockSize
	encrypted := make([]byte, len(data), len(data)+pad)
	// We could save this copy by encrypting all the whole blocks in
	// the data separately, but it doesn't seem worth the additional
	// code.
	copy(encrypted, data)
	// See RFC 1423, section 1.1
	for i := 0; i < pad; i++ {
		encrypted = append(encrypted, byte(pad))
	}
	enc.CryptBlocks(encrypted, encrypted)

	return &pem.Block{
		Type: blockType,
		Headers: map[string]string{
			"Proc-Type": "4,ENCRYPTED",
			"DEK-Info":  ciph.name + "," + hex.EncodeToString(iv),
		},
		Bytes: encrypted,
	}, nil
}

func cipherByName(name string) *rfc1423Algo {
	for i := range rfc1423Algos {
		alg := &rfc1423Algos[i]
		if alg.name == name {
			return alg
		}
	}
	return nil
}

func cipherByKey(key PEMCipher) *rfc1423Algo {
	for i := range rfc1423Algos {
		alg := &rfc1423Algos[i]
		if alg.cipher == key {
			return alg
		}
	}
	return nil
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt_test.go
================================================
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import (
	"bytes"
	"crypto/rand"
	"encoding/base64"
	"encoding/pem"
	"strings"
	"testing"
)

func TestDecrypt(t *testing.T) {
	for i, data := range testData {
		t.Logf("test %v. %v", i, data.kind)
		block, rest := pem.Decode(data.pemData)
		if len(rest) > 0 {
			t.Error("extra data")
		}
		der, err := DecryptPEMBlock(block, data.password)
		if err != nil {
			t.Error("decrypt failed: ", err)
			continue
		}
		if _, err := ParsePKCS1PrivateKey(der); err != nil {
			t.Error("invalid private key: ", err)
		}
		plainDER, err := base64.StdEncoding.DecodeString(data.plainDER)
		if err != nil {
			t.Fatal("cannot decode test DER data: ", err)
		}
		if !bytes.Equal(der, plainDER) {
			t.Error("data mismatch")
		}
	}
}

func TestEncrypt(t *testing.T) {
	for i, data := range testData {
		t.Logf("test %v. %v", i, data.kind)
		plainDER, err := base64.StdEncoding.DecodeString(data.plainDER)
		if err != nil {
			t.Fatal("cannot decode test DER data: ", err)
		}
		password := []byte("kremvax1")
		block, err := EncryptPEMBlock(rand.Reader, "RSA PRIVATE KEY", plainDER, password, data.kind)
		if err != nil {
			t.Error("encrypt: ", err)
			continue
		}
		if !IsEncryptedPEMBlock(block) {
			t.Error("PEM block does not appear to be encrypted")
		}
		if block.Type != "RSA PRIVATE KEY" {
			t.Errorf("unexpected block type; got %q want %q", block.Type, "RSA PRIVATE KEY")
		}
		if block.Headers["Proc-Type"] != "4,ENCRYPTED" {
			t.Errorf("block does not have correct Proc-Type header")
		}
		der, err := DecryptPEMBlock(block, password)
		if err != nil {
			t.Error("decrypt: ", err)
			continue
		}
		if !bytes.Equal(der, plainDER) {
			t.Errorf("data mismatch")
		}
	}
}

var testData = []struct {
	kind     PEMCipher
	password []byte
	pemData  []byte
	plainDER string
}{
	{
		kind:     PEMCipherDES,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,34F09A4FC8DE22B5

WXxy8kbZdiZvANtKvhmPBLV7eVFj2A5z6oAxvI9KGyhG0ZK0skfnt00C24vfU7m5
ICXeoqP67lzJ18xCzQfHjDaBNs53DSDT+Iz4e8QUep1xQ30+8QKX2NA2coee3nwc
6oM1cuvhNUDemBH2i3dKgMVkfaga0zQiiOq6HJyGSncCMSruQ7F9iWEfRbFcxFCx
qtHb1kirfGKEtgWTF+ynyco6+2gMXNu70L7nJcnxnV/RLFkHt7AUU1yrclxz7eZz
XOH9VfTjb52q/I8Suozq9coVQwg4tXfIoYUdT//O+mB7zJb9HI9Ps77b9TxDE6Gm
4C9brwZ3zg2vqXcwwV6QRZMtyll9rOpxkbw6NPlpfBqkc3xS51bbxivbO/Nve4KD
r12ymjFNF4stXCfJnNqKoZ50BHmEEUDu5Wb0fpVn82XrGw7CYc4iug==
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MIIBPAIBAAJBAPASZe+tCPU6p80AjHhDkVsLYa51D35e/YGa8QcZyooeZM8EHozo
KD0fNiKI+53bHdy07N+81VQ8/ejPcRoXPlsCAwEAAQJBAMTxIuSq27VpR+zZ7WJf
c6fvv1OBvpMZ0/d1pxL/KnOAgq2rD5hDtk9b0LGhTPgQAmrrMTKuSeGoIuYE+gKQ
QvkCIQD+GC1m+/do+QRurr0uo46Kx1LzLeSCrjBk34wiOp2+dwIhAPHfTLRXS2fv
7rljm0bYa4+eDZpz+E8RcXEgzhhvcQQ9AiAI5eHZJGOyml3MXnQjiPi55WcDOw0w
glcRgT6QCEtz2wIhANSyqaFtosIkHKqrDUGfz/bb5tqMYTAnBruVPaf/WEOBAiEA
9xORWeRG1tRpso4+dYy4KdDkuLPIO01KY6neYGm3BCM=`,
	},
	{
		kind:     PEMCipher3DES,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C1F4A6A03682C2C7

0JqVdBEH6iqM7drTkj+e2W/bE3LqakaiWhb9WUVonFkhyu8ca/QzebY3b5gCvAZQ
YwBvDcT/GHospKqPx+cxDHJNsUASDZws6bz8ZXWJGwZGExKzr0+Qx5fgXn44Ms3x
8g1ENFuTXtxo+KoNK0zuAMAqp66Llcds3Fjl4XR18QaD0CrVNAfOdgATWZm5GJxk
Fgx5f84nT+/ovvreG+xeOzWgvtKo0UUZVrhGOgfKLpa57adumcJ6SkUuBtEFpZFB
ldw5w7WC7d13x2LsRkwo8ZrDKgIV+Y9GNvhuCCkTzNP0V3gNeJpd201HZHR+9n3w
3z0VjR/MGqsfcy1ziEWMNOO53At3zlG6zP05aHMnMcZoVXadEK6L1gz++inSSDCq
gI0UJP4e3JVB7AkgYymYAwiYALAkoEIuanxoc50njJk=
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MIIBOwIBAAJBANOCXKdoNS/iP/MAbl9cf1/SF3P+Ns7ZeNL27CfmDh0O6Zduaax5
NBiumd2PmjkaCu7lQ5JOibHfWn+xJsc3kw0CAwEAAQJANX/W8d1Q/sCqzkuAn4xl
B5a7qfJWaLHndu1QRLNTRJPn0Ee7OKJ4H0QKOhQM6vpjRrz+P2u9thn6wUxoPsef
QQIhAP/jCkfejFcy4v15beqKzwz08/tslVjF+Yq41eJGejmxAiEA05pMoqfkyjcx
fyvGhpoOyoCp71vSGUfR2I9CR65oKh0CIC1Msjs66LlfJtQctRq6bCEtFCxEcsP+
eEjYo/Sk6WphAiEAxpgWPMJeU/shFT28gS+tmhjPZLpEoT1qkVlC14u0b3ECIQDX
tZZZxCtPAm7shftEib0VU77Lk8MsXJcx2C4voRsjEw==`,
	},
	{
		kind:     PEMCipherAES128,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D4492E793FC835CC038A728ED174F78A

EyfQSzXSjv6BaNH+NHdXRlkHdimpF9izWlugVJAPApgXrq5YldPe2aGIOFXyJ+QE
ZIG20DYqaPzJRjTEbPNZ6Es0S2JJ5yCpKxwJuDkgJZKtF39Q2i36JeGbSZQIuWJE
GZbBpf1jDH/pr0iGonuAdl2PCCZUiy+8eLsD2tyviHUkFLOB+ykYoJ5t8ngZ/B6D
33U43LLb7+9zD4y3Q9OVHqBFGyHcxCY9+9Qh4ZnFp7DTf6RY5TNEvE3s4g6aDpBs
3NbvRVvYTgs8K9EPk4K+5R+P2kD8J8KvEIGxVa1vz8QoCJ/jr7Ka2rvNgPCex5/E
080LzLHPCrXKdlr/f50yhNWq08ZxMWQFkui+FDHPDUaEELKAXV8/5PDxw80Rtybo
AVYoCVIbZXZCuCO81op8UcOgEpTtyU5Lgh3Mw5scQL0=
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MIIBOgIBAAJBAMBlj5FxYtqbcy8wY89d/S7n0+r5MzD9F63BA/Lpl78vQKtdJ5dT
cDGh/rBt1ufRrNp0WihcmZi7Mpl/3jHjiWECAwEAAQJABNOHYnKhtDIqFYj1OAJ3
k3GlU0OlERmIOoeY/cL2V4lgwllPBEs7r134AY4wMmZSBUj8UR/O4SNO668ElKPE
cQIhAOuqY7/115x5KCdGDMWi+jNaMxIvI4ETGwV40ykGzqlzAiEA0P9oEC3m9tHB
kbpjSTxaNkrXxDgdEOZz8X0uOUUwHNsCIAwzcSCiGLyYJTULUmP1ESERfW1mlV78
XzzESaJpIM/zAiBQkSTcl9VhcJreQqvjn5BnPZLP4ZHS4gPwJAGdsj5J4QIhAOVR
B3WlRNTXR2WsJ5JdByezg9xzdXzULqmga0OE339a`,
	},
	{
		kind:     PEMCipherAES192,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-192-CBC,E2C9FB02BCA23ADE1829F8D8BC5F5369

cqVslvHqDDM6qwU6YjezCRifXmKsrgEev7ng6Qs7UmDJOpHDgJQZI9fwMFUhIyn5
FbCu1SHkLMW52Ld3CuEqMnzWMlhPrW8tFvUOrMWPYSisv7nNq88HobZEJcUNL2MM
Y15XmHW6IJwPqhKyLHpWXyOCVEh4ODND2nV15PCoi18oTa475baxSk7+1qH7GuIs
Rb7tshNTMqHbCpyo9Rn3UxeFIf9efdl8YLiMoIqc7J8E5e9VlbeQSdLMQOgDAQJG
ReUtTw8exmKsY4gsSjhkg5uiw7/ZB1Ihto0qnfQJgjGc680qGkT1d6JfvOfeYAk6
xn5RqS/h8rYAYm64KnepfC9vIujo4NqpaREDmaLdX5MJPQ+SlytITQvgUsUq3q/t
Ss85xjQEZH3hzwjQqdJvmA4hYP6SUjxYpBM+02xZ1Xw=
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MIIBOwIBAAJBAMGcRrZiNNmtF20zyS6MQ7pdGx17aFDl+lTl+qnLuJRUCMUG05xs
OmxmL/O1Qlf+bnqR8Bgg65SfKg21SYuLhiMCAwEAAQJBAL94uuHyO4wux2VC+qpj
IzPykjdU7XRcDHbbvksf4xokSeUFjjD3PB0Qa83M94y89ZfdILIqS9x5EgSB4/lX
qNkCIQD6cCIqLfzq/lYbZbQgAAjpBXeQVYsbvVtJrPrXJAlVVQIhAMXpDKMeFPMn
J0g2rbx1gngx0qOa5r5iMU5w/noN4W2XAiBjf+WzCG5yFvazD+dOx3TC0A8+4x3P
uZ3pWbaXf5PNuQIgAcdXarvhelH2w2piY1g3BPeFqhzBSCK/yLGxR82KIh8CIQDD
+qGKsd09NhQ/G27y/DARzOYtml1NvdmCQAgsDIIOLA==`,
	},
	{
		kind:     PEMCipherAES256,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,8E7ED5CD731902CE938957A886A5FFBD

4Mxr+KIzRVwoOP0wwq6caSkvW0iS+GE2h2Ov/u+n9ZTMwL83PRnmjfjzBgfRZLVf
JFPXxUK26kMNpIdssNnqGOds+DhB+oSrsNKoxgxSl5OBoYv9eJTVYm7qOyAFIsjr
DRKAcjYCmzfesr7PVTowwy0RtHmYwyXMGDlAzzZrEvaiySFFmMyKKvtoavwaFoc7
Pz3RZScwIuubzTGJ1x8EzdffYOsdCa9Mtgpp3L136+23dOd6L/qK2EG2fzrJSHs/
2XugkleBFSMKzEp9mxXKRfa++uidQvMZTFLDK9w5YjrRvMBo/l2BoZIsq0jAIE1N
sv5Z/KwlX+3MDEpPQpUwGPlGGdLnjI3UZ+cjgqBcoMiNc6HfgbBgYJSU6aDSHuCk
clCwByxWkBNgJ2GrkwNrF26v+bGJJJNR4SKouY1jQf0=
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MIIBOgIBAAJBAKy3GFkstoCHIEeUU/qO8207m8WSrjksR+p9B4tf1w5k+2O1V/GY
AQ5WFCApItcOkQe/I0yZZJk/PmCqMzSxrc8CAwEAAQJAOCAz0F7AW9oNelVQSP8F
Sfzx7O1yom+qWyAQQJF/gFR11gpf9xpVnnyu1WxIRnDUh1LZwUsjwlDYb7MB74id
oQIhANPcOiLwOPT4sIUpRM5HG6BF1BI7L77VpyGVk8xNP7X/AiEA0LMHZtk4I+lJ
nClgYp4Yh2JZ1Znbu7IoQMCEJCjwKDECIGd8Dzm5tViTkUW6Hs3Tlf73nNs65duF
aRnSglss8I3pAiEAonEnKruawgD8RavDFR+fUgmQiPz4FnGGeVgfwpGG1JECIBYq
PXHYtPqxQIbD2pScR5qum7iGUh11lEUPkmt+2uqS`,
	},
	{
		// generated with:
		// openssl genrsa -aes128 -passout pass:asdf -out server.orig.key 128
		kind:     PEMCipherAES128,
		password: []byte("asdf"),
		pemData: []byte(`
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,74611ABC2571AF11B1BF9B69E62C89E7

6ei/MlytjE0FFgZOGQ+jrwomKfpl8kdefeE0NSt/DMRrw8OacHAzBNi3pPEa0eX3
eND9l7C9meCirWovjj9QWVHrXyugFuDIqgdhQ8iHTgCfF3lrmcttVrbIfMDw+smD
hTP8O1mS/MHl92NE0nhv0w==
-----END RSA PRIVATE KEY-----`),
		plainDER: `
MGMCAQACEQC6ssxmYuauuHGOCDAI54RdAgMBAAECEQCWIn6Yv2O+kBcDF7STctKB
AgkA8SEfu/2i3g0CCQDGNlXbBHX7kQIIK3Ww5o0cYbECCQDCimPb0dYGsQIIeQ7A
jryIst8=`,
	},
}

const incompleteBlockPEM = `
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,74611ABC2571AF11B1BF9B69E62C89E7

6L8yXK2MTQUWBk4ZD6OvCiYp+mXyR1594TQ1K38MxGvDw5pwcDME2Lek8RrR5fd40P2XsL2Z4KKt
ai+OP1BZUetfK6AW4MiqB2FDyIdOAJ8XeWuZy21Wtsh8wPD6yYOFM/w7WZL8weX3Y0TSeG/T
-----END RSA PRIVATE KEY-----`

func TestIncompleteBlock(t *testing.T) {
	// incompleteBlockPEM contains ciphertext that is not a multiple of the
	// block size. This previously panicked. See #11215.
	block, _ := pem.Decode([]byte(incompleteBlockPEM))
	_, err := DecryptPEMBlock(block, []byte("foo"))
	if err == nil {
		t.Fatal("Bad PEM data decrypted successfully")
	}
	const expectedSubstr = "block size"
	if e := err.Error(); !strings.Contains(e, expectedSubstr) {
		t.Fatalf("Expected error containing %q but got: %q", expectedSubstr, e)
	}
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs1.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import (
	"crypto/rsa"
	"encoding/asn1"
	"errors"
	"math/big"
)

// pkcs1PrivateKey is a structure which mirrors the PKCS#1 ASN.1 for an RSA private key.
type pkcs1PrivateKey struct {
	Version int
	N       *big.Int
	E       int
	D       *big.Int
	P       *big.Int
	Q       *big.Int
	// We ignore these values, if present, because rsa will calculate them.
	Dp   *big.Int `asn1:"optional"`
	Dq   *big.Int `asn1:"optional"`
	Qinv *big.Int `asn1:"optional"`

	AdditionalPrimes []pkcs1AdditionalRSAPrime `asn1:"optional,omitempty"`
}

type pkcs1AdditionalRSAPrime struct {
	Prime *big.Int

	// We ignore these values because rsa will calculate them.
	Exp   *big.Int
	Coeff *big.Int
}

// ParsePKCS1PrivateKey returns an RSA private key from its ASN.1 PKCS#1 DER encoded form.
func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error) {
	var priv pkcs1PrivateKey
	rest, err := asn1.Unmarshal(der, &priv)
	if len(rest) > 0 {
		return nil, asn1.SyntaxError{Msg: "trailing data"}
	}
	if err != nil {
		return nil, err
	}

	if priv.Version > 1 {
		return nil, errors.New("x509: unsupported private key version")
	}

	if priv.N.Sign() <= 0 || priv.D.Sign() <= 0 || priv.P.Sign() <= 0 || priv.Q.Sign() <= 0 {
		return nil, errors.New("x509: private key contains zero or negative value")
	}

	key := new(rsa.PrivateKey)
	key.PublicKey = rsa.PublicKey{
		E: priv.E,
		N: priv.N,
	}

	key.D = priv.D
	key.Primes = make([]*big.Int, 2+len(priv.AdditionalPrimes))
	key.Primes[0] = priv.P
	key.Primes[1] = priv.Q
	for i, a := range priv.AdditionalPrimes {
		if a.Prime.Sign() <= 0 {
			return nil, errors.New("x509: private key contains zero or negative prime")
		}
		key.Primes[i+2] = a.Prime
		// We ignore the other two values because rsa will calculate
		// them as needed.
	}

	err = key.Validate()
	if err != nil {
		return nil, err
	}
	key.Precompute()

	return key, nil
}

// MarshalPKCS1PrivateKey converts a private key to ASN.1 DER encoded form.
func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte {
	key.Precompute()

	version := 0
	if len(key.Primes) > 2 {
		version = 1
	}

	priv := pkcs1PrivateKey{
		Version: version,
		N:       key.N,
		E:       key.PublicKey.E,
		D:       key.D,
		P:       key.Primes[0],
		Q:       key.Primes[1],
		Dp:      key.Precomputed.Dp,
		Dq:      key.Precomputed.Dq,
		Qinv:    key.Precomputed.Qinv,
	}

	priv.AdditionalPrimes = make([]pkcs1AdditionalRSAPrime, len(key.Precomputed.CRTValues))
	for i, values := range key.Precomputed.CRTValues {
		priv.AdditionalPrimes[i].Prime = key.Primes[2+i]
		priv.AdditionalPrimes[i].Exp = values.Exp
		priv.AdditionalPrimes[i].Coeff = values.Coeff
	}

	b, _ := asn1.Marshal(priv)
	return b
}

// rsaPublicKey reflects the ASN.1 structure of a PKCS#1 public key.
type rsaPublicKey struct {
	N *big.Int
	E int
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs8.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import (
	"crypto/x509/pkix"
	"encoding/asn1"
	"errors"
	"fmt"
)

// pkcs8 reflects an ASN.1, PKCS#8 PrivateKey. See
// ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-8/pkcs-8v1_2.asn
// and RFC 5208.
type pkcs8 struct {
	Version    int
	Algo       pkix.AlgorithmIdentifier
	PrivateKey []byte
	// optional attributes omitted.
}

// ParsePKCS8PrivateKey parses an unencrypted, PKCS#8 private key.
// See RFC 5208.
func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error) {
	var privKey pkcs8
	if _, err := asn1.Unmarshal(der, &privKey); err != nil {
		return nil, err
	}
	switch {
	case privKey.Algo.Algorithm.Equal(oidPublicKeyRSA):
		key, err = ParsePKCS1PrivateKey(privKey.PrivateKey)
		if err != nil {
			return nil, errors.New("x509: failed to parse RSA private key embedded in PKCS#8: " + err.Error())
		}
		return key, nil

	case privKey.Algo.Algorithm.Equal(oidPublicKeyECDSA):
		bytes := privKey.Algo.Parameters.FullBytes
		namedCurveOID := new(asn1.ObjectIdentifier)
		if _, err := asn1.Unmarshal(bytes, namedCurveOID); err != nil {
			namedCurveOID = nil
		}
		key, err = parseECPrivateKey(namedCurveOID, privKey.PrivateKey)
		if err != nil {
			return nil, errors.New("x509: failed to parse EC private key embedded in PKCS#8: " + err.Error())
		}
		return key, nil

	default:
		return nil, fmt.Errorf("x509: PKCS#8 wrapping contained private key with unknown algorithm: %v", privKey.Algo.Algorithm)
	}
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs8_test.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import (
	"encoding/hex"
	"testing"
)

var pkcs8RSAPrivateKeyHex = `30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100cfb1b5bf9685ffa97b4f99df4ff122b70e59ac9b992f3bc2b3dde17d53c1a34928719b02e8fd17839499bfbd515bd6ef99c7a1c47a239718fe36bfd824c0d96060084b5f67f0273443007a24dfaf5634f7772c9346e10eb294c2306671a5a5e719ae24b4de467291bc571014b0e02dec04534d66a9bb171d644b66b091780e8d020301000102818100b595778383c4afdbab95d2bfed12b3f93bb0a73a7ad952f44d7185fd9ec6c34de8f03a48770f2009c8580bcd275e9632714e9a5e3f32f29dc55474b2329ff0ebc08b3ffcb35bc96e6516b483df80a4a59cceb71918cbabf91564e64a39d7e35dce21cb3031824fdbc845dba6458852ec16af5dddf51a8397a8797ae0337b1439024100ea0eb1b914158c70db39031dd8904d6f18f408c85fbbc592d7d20dee7986969efbda081fdf8bc40e1b1336d6b638110c836bfdc3f314560d2e49cd4fbde1e20b024100e32a4e793b574c9c4a94c8803db5152141e72d03de64e54ef2c8ed104988ca780cd11397bc359630d01b97ebd87067c5451ba777cf045ca23f5912f1031308c702406dfcdbbd5a57c9f85abc4edf9e9e29153507b07ce0a7ef6f52e60dcfebe1b8341babd8b789a837485da6c8d55b29bbb142ace3c24a1f5b54b454d01b51e2ad03024100bd6a2b60dee01e1b3bfcef6a2f09ed027c273cdbbaf6ba55a80f6dcc64e4509ee560f84b4f3e076bd03b11e42fe71a3fdd2dffe7e0902c8584f8cad877cdc945024100aa512fa4ada69881f1d8bb8ad6614f192b83200aef5edf4811313d5ef30a86cbd0a90f7b025c71ea06ec6b34db6306c86b1040670fd8654ad7291d066d06d031`

// Generated using:
//   openssl ecparam -genkey -name secp521r1 | openssl pkcs8 -topk8 -nocrypt
var pkcs8ECPrivateKeyHex = `3081ed020100301006072a8648ce3d020106052b810400230481d53081d20201010441850d81618c5da1aec74c2eed608ba816038506975e6427237c2def150c96a3b13efbfa1f89f1be15cdf4d0ac26422e680e65a0ddd4ad3541ad76165fbf54d6e34ba18189038186000400da97bcedba1eb6d30aeb93c9f9a1454598fa47278df27d6f60ea73eb672d8dc528a9b67885b5b5dcef93c9824f7449ab512ee6a27e76142f56b94b474cfd697e810046c8ca70419365245c1d7d44d0db82c334073835d002232714548abbae6e5700f5ef315ee08b929d8581383dcf2d1c98c2f8a9fccbf79c9579f7b2fd8a90115ac2`

func TestPKCS8(t *testing.T) {
	derBytes, _ := hex.DecodeString(pkcs8RSAPrivateKeyHex)
	if _, err := ParsePKCS8PrivateKey(derBytes); err != nil {
		t.Errorf("failed to decode PKCS8 with RSA private key: %s", err)
	}

	derBytes, _ = hex.DecodeString(pkcs8ECPrivateKeyHex)
	if _, err := ParsePKCS8PrivateKey(derBytes); err != nil {
		t.Errorf("failed to decode PKCS8 with EC private key: %s", err)
	}
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/pkix/pkix.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package pkix contains shared, low level structures used for ASN.1 parsing
// and serialization of X.509 certificates, CRL and OCSP.
package pkix

import (
	"encoding/asn1"
	"math/big"
	"time"
)

// AlgorithmIdentifier represents the ASN.1 structure of the same name. See RFC
// 5280, section 4.1.1.2.
type AlgorithmIdentifier struct {
	Algorithm  asn1.ObjectIdentifier
	Parameters asn1.RawValue `asn1:"optional"`
}

type RDNSequence []RelativeDistinguishedNameSET

type RelativeDistinguishedNameSET []AttributeTypeAndValue

// AttributeTypeAndValue mirrors the ASN.1 structure of the same name in
// http://tools.ietf.org/html/rfc5280#section-4.1.2.4
type AttributeTypeAndValue struct {
	Type  asn1.ObjectIdentifier
	Value interface{}
}

// AttributeTypeAndValueSET represents a set of ASN.1 sequences of
// AttributeTypeAndValue sequences from RFC 2986 (PKCS #10).
type AttributeTypeAndValueSET struct {
	Type  asn1.ObjectIdentifier
	Value [][]AttributeTypeAndValue `asn1:"set"`
}

// Extension represents the ASN.1 structure of the same name. See RFC
// 5280, section 4.2.
type Extension struct {
	Id       asn1.ObjectIdentifier
	Critical bool `asn1:"optional"`
	Value    []byte
}

// Name represents an X.509 distinguished name. This only includes the common
// elements of a DN. When parsing, all elements are stored in Names and
// non-standard elements can be extracted from there. When marshaling, elements
// in ExtraNames are appended and override other values with the same OID.
type Name struct {
	Country, Organization, OrganizationalUnit []string
	Locality, Province                        []string
	StreetAddress, PostalCode                 []string
	SerialNumber, CommonName                  string

	Names      []AttributeTypeAndValue
	ExtraNames []AttributeTypeAndValue
}

func (n *Name) FillFromRDNSequence(rdns *RDNSequence) {
	for _, rdn := range *rdns {
		if len(rdn) == 0 {
			continue
		}
		atv := rdn[0]
		n.Names = append(n.Names, atv)
		value, ok := atv.Value.(string)
		if !ok {
			continue
		}

		t := atv.Type
		if len(t) == 4 && t[0] == 2 && t[1] == 5 && t[2] == 4 {
			switch t[3] {
			case 3:
				n.CommonName = value
			case 5:
				n.SerialNumber = value
			case 6:
				n.Country = append(n.Country, value)
			case 7:
				n.Locality = append(n.Locality, value)
			case 8:
				n.Province = append(n.Province, value)
			case 9:
				n.StreetAddress = append(n.StreetAddress, value)
			case 10:
				n.Organization = append(n.Organization, value)
			case 11:
				n.OrganizationalUnit = append(n.OrganizationalUnit, value)
			case 17:
				n.PostalCode = append(n.PostalCode, value)
			}
		}
	}
}

var (
	oidCountry            = []int{2, 5, 4, 6}
	oidOrganization       = []int{2, 5, 4, 10}
	oidOrganizationalUnit = []int{2, 5, 4, 11}
	oidCommonName         = []int{2, 5, 4, 3}
	oidSerialNumber       = []int{2, 5, 4, 5}
	oidLocality           = []int{2, 5, 4, 7}
	oidProvince           = []int{2, 5, 4, 8}
	oidStreetAddress      = []int{2, 5, 4, 9}
	oidPostalCode         = []int{2, 5, 4, 17}
)

// appendRDNs appends a relativeDistinguishedNameSET to the given RDNSequence
// and returns the new value. The relativeDistinguishedNameSET contains an
// attributeTypeAndValue for each of the given values. See RFC 5280, A.1, and
// search for AttributeTypeAndValue.
func (n Name) appendRDNs(in RDNSequence, values []string, oid asn1.ObjectIdentifier) RDNSequence {
	if len(values) == 0 || oidInAttributeTypeAndValue(oid, n.ExtraNames) {
		return in
	}

	s := make([]AttributeTypeAndValue, len(values))
	for i, value := range values {
		s[i].Type = oid
		s[i].Value = value
	}

	return append(in, s)
}

func (n Name) ToRDNSequence() (ret RDNSequence) {
	ret = n.appendRDNs(ret, n.Country, oidCountry)
	ret = n.appendRDNs(ret, n.Province, oidProvince)
	ret = n.appendRDNs(ret, n.Locality, oidLocality)
	ret = n.appendRDNs(ret, n.StreetAddress, oidStreetAddress)
	ret = n.appendRDNs(ret, n.PostalCode, oidPostalCode)
	ret = n.appendRDNs(ret, n.Organization, oidOrganization)
	ret = n.appendRDNs(ret, n.OrganizationalUnit, oidOrganizationalUnit)
	if len(n.CommonName) > 0 {
		ret = n.appendRDNs(ret, []string{n.CommonName}, oidCommonName)
	}
	if len(n.SerialNumber) > 0 {
		ret = n.appendRDNs(ret, []string{n.SerialNumber}, oidSerialNumber)
	}
	for _, atv := range n.ExtraNames {
		ret = append(ret, []AttributeTypeAndValue{atv})
	}

	return ret
}

// oidInAttributeTypeAndValue returns whether a type with the given OID exists
// in atv.
func oidInAttributeTypeAndValue(oid asn1.ObjectIdentifier, atv []AttributeTypeAndValue) bool {
	for _, a := range atv {
		if a.Type.Equal(oid) {
			return true
		}
	}
	return false
}

// CertificateList represents the ASN.1 structure of the same name. See RFC
// 5280, section 5.1. Use Certificate.CheckCRLSignature to verify the
// signature.
type CertificateList struct {
	TBSCertList        TBSCertificateList
	SignatureAlgorithm AlgorithmIdentifier
	SignatureValue     asn1.BitString
}

// HasExpired reports whether now is past the expiry time of certList.
func (certList *CertificateList) HasExpired(now time.Time) bool {
	return now.After(certList.TBSCertList.NextUpdate)
}

// TBSCertificateList represents the ASN.1 structure of the same name. See RFC
// 5280, section 5.1.
type TBSCertificateList struct {
	Raw                 asn1.RawContent
	Version             int `asn1:"optional,default:0"`
	Signature           AlgorithmIdentifier
	Issuer              RDNSequence
	ThisUpdate          time.Time
	NextUpdate          time.Time            `asn1:"optional"`
	RevokedCertificates []RevokedCertificate `asn1:"optional"`
	Extensions          []Extension          `asn1:"tag:0,optional,explicit"`
}

// RevokedCertificate represents the ASN.1 structure of the same name. See RFC
// 5280, section 5.1.
type RevokedCertificate struct {
	SerialNumber   *big.Int
	RevocationTime time.Time
	Extensions     []Extension `asn1:"optional"`
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root.go
================================================
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

import "sync"

var (
	once           sync.Once
	systemRoots    *CertPool
	systemRootsErr error
)

func systemRootsPool() *CertPool {
	once.Do(initSystemRoots)
	return systemRoots
}

func initSystemRoots() {
	systemRoots, systemRootsErr = loadSystemRoots()
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root_bsd.go
================================================
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build dragonfly freebsd netbsd openbsd

package x509

// Possible certificate files; stop after finding one.
var certFiles = []string{
	"/usr/local/share/certs/ca-root-nss.crt", // FreeBSD/DragonFly
	"/etc/ssl/cert.pem",                      // OpenBSD
	"/etc/openssl/certs/ca-certificates.crt", // NetBSD
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root_cgo_darwin.go
================================================
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build cgo,!arm,!arm64,!ios

package x509

/*
#cgo CFLAGS: -mmacosx-version-min=10.6 -D__MAC_OS_X_VERSION_MAX_ALLOWED=1060
#cgo LDFLAGS: -framework CoreFoundation -framework Security

#include <errno.h>
#include <sys/sysctl.h>

#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>

// VendorFetchPEMRoots_MountainLion is the version of VendorFetchPEMRoots from Go 1.6
// which still works on OS X 10.8 (Mountain Lion).
// It lacks support for admin & user cert domains.
// See golang.org/issue/16473
int VendorVendorFetchPEMRoots_MountainLion(CFDataRef *pemRoots) {
	if (pemRoots == NULL) {
		return -1;
	}
	CFArrayRef certs = NULL;
	OSStatus err = SecTrustCopyAnchorCertificates(&certs);
	if (err != noErr) {
		return -1;
	}
	CFMutableDataRef combinedData = CFDataCreateMutable(kCFAllocatorDefault, 0);
	int i, ncerts = CFArrayGetCount(certs);
	for (i = 0; i < ncerts; i++) {
		CFDataRef data = NULL;
		SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(certs, i);
		if (cert == NULL) {
			continue;
		}
		// Note: SecKeychainItemExport is deprecated as of 10.7 in favor of SecItemExport.
		// Once we support weak imports via cgo we should prefer that, and fall back to this
		// for older systems.
		err = SecKeychainItemExport(cert, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data);
		if (err != noErr) {
			continue;
		}
		if (data != NULL) {
			CFDataAppendBytes(combinedData, CFDataGetBytePtr(data), CFDataGetLength(data));
			CFRelease(data);
		}
	}
	CFRelease(certs);
	*pemRoots = combinedData;
	return 0;
}

// vendorUseOldCode reports whether the running machine is OS X 10.8 Mountain Lion
// or older. We only support Mountain Lion and higher, but we'll at least try our
// best on older machines and continue to use the old code path.
//
// See golang.org/issue/16473
int vendorUseOldCode() {
	char str[256];
	size_t size = sizeof(str);
	memset(str, 0, size);
	sysctlbyname("kern.osrelease", str, &size, NULL, 0);
	// OS X 10.8 is osrelease "12.*", 10.7 is 11.*, 10.6 is 10.*.
	// We never supported things before that.
	return memcmp(str, "12.", 3) == 0 || memcmp(str, "11.", 3) == 0 || memcmp(str, "10.", 3) == 0;
}

// VendorFetchPEMRoots fetches the system's list of trusted X.509 root certificates.
//
// On success it returns 0 and fills pemRoots with a CFDataRef that contains the extracted root
// certificates of the system. On failure, the function returns -1.
//
// Note: The CFDataRef returned in pemRoots must be released (using CFRelease) after
// we've consumed its content.
int VendorFetchPEMRoots(CFDataRef *pemRoots) {
	if (vendorUseOldCode()) {
		return VendorVendorFetchPEMRoots_MountainLion(pemRoots);
	}

	// Get certificates from all domains, not just System, this lets
	// the user add CAs to their "login" keychain, and Admins to add
	// to the "System" keychain
	SecTrustSettingsDomain domains[] = { kSecTrustSettingsDomainSystem,
					     kSecTrustSettingsDomainAdmin,
					     kSecTrustSettingsDomainUser };

	int numDomains = sizeof(domains)/sizeof(SecTrustSettingsDomain);
	if (pemRoots == NULL) {
		return -1;
	}

	CFMutableDataRef combinedData = CFDataCreateMutable(kCFAllocatorDefault, 0);
	for (int i = 0; i < numDomains; i++) {
		CFArrayRef certs = NULL;
		// Only get certificates from domain that are trusted
		OSStatus err = SecTrustSettingsCopyCertificates(domains[i], &certs);
		if (err != noErr) {
			continue;
		}

		int numCerts = CFArrayGetCount(certs);
		for (int j = 0; j < numCerts; j++) {
			CFDataRef data = NULL;
			CFErrorRef errRef = NULL;
			SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(certs, j);
			if (cert == NULL) {
				continue;
			}
			// We only want to add Root CAs, so make sure Subject and Issuer Name match
			CFDataRef subjectName = SecCertificateCopyNormalizedSubjectContent(cert, &errRef);
			if (errRef != NULL) {
				CFRelease(errRef);
				continue;
			}
			CFDataRef issuerName = SecCertificateCopyNormalizedIssuerContent(cert, &errRef);
			if (errRef != NULL) {
				CFRelease(subjectName);
				CFRelease(errRef);
				continue;
			}
			Boolean equal = CFEqual(subjectName, issuerName);
			CFRelease(subjectName);
			CFRelease(issuerName);
			if (!equal) {
				continue;
			}

			// Note: SecKeychainItemExport is deprecated as of 10.7 in favor of SecItemExport.
			// Once we support weak imports via cgo we should prefer that, and fall back to this
			// for older systems.
			err = SecKeychainItemExport(cert, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data);
			if (err != noErr) {
				continue;
			}

			if (data != NULL) {
				CFDataAppendBytes(combinedData, CFDataGetBytePtr(data), CFDataGetLength(data));
				CFRelease(data);
			}
		}
		CFRelease(certs);
	}
	*pemRoots = combinedData;
	return 0;
}
*/
import "C"
import (
	"errors"
	"unsafe"
)

func loadSystemRoots() (*CertPool, error) {
	roots := NewCertPool()

	var data C.CFDataRef
	err := C.VendorFetchPEMRoots(&data)
	if err == -1 {
		// TODO: better error message
		return nil, errors.New("crypto/x509: failed to load darwin system roots with cgo")
	}

	defer C.CFRelease(C.CFTypeRef(data))
	buf := C.GoBytes(unsafe.Pointer(C.CFDataGetBytePtr(data)), C.int(C.CFDataGetLength(data)))
	roots.AppendCertsFromPEM(buf)
	return roots, nil
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin.go
================================================
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:generate go run root_darwin_arm_gen.go -output root_darwin_armx.go

package x509

import "os/exec"

func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Certificate, err error) {
	return nil, nil
}

func execSecurityRoots() (*CertPool, error) {
	cmd := exec.Command("/usr/bin/security", "find-certificate", "-a", "-p", "/System/Library/Keychains/SystemRootCertificates.keychain")
	data, err := cmd.Output()
	if err != nil {
		return nil, err
	}

	roots := NewCertPool()
	roots.AppendCertsFromPEM(data)
	return roots, nil
}


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin_arm_gen.go
================================================
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build ignore

// Generates root_darwin_armx.go.
//
// As of iOS 8, there is no API for querying the system trusted X.509 root
// certificates. We could use SecTrustEvaluate to verify that a trust chain
// exists for a certificate, but the x509 API requires returning the entire
// chain.
//
// Apple publishes the list of trusted root certificates for iOS on
// support.apple.com. So we parse the list and extract the certificates from
// an OS X machine and embed them into the x509 package.
package main

import (
	"bytes"
	"crypto/x509"
	"encoding/pem"
	"flag"
	"fmt"
	"go/format"
	"io/ioutil"
	"log"
	"math/big"
	"net/http"
	"os/exec"
	"strings"
)

var output = flag.String("output", "root_darwin_armx.go", "file name to write")

func main() {
	certs, err := selectCerts()
	if err != nil {
		log.Fatal(err)
	}

	buf := new(bytes.Buffer)

	fmt.Fprintf(buf, "// Created by root_darwin_arm_gen --output %s; DO NOT EDIT\n", *output)
	fmt.Fprintf(buf, "%s", header)

	fmt.Fprintf(buf, "const systemRootsPEM = `\n")
	for _, cert := range certs {
		b := &pem.Block{
			Type:  "CERTIFICATE",
			Bytes: cert.Raw,
		}
		if err := pem.Encode(buf, b); err != nil {
			log.Fatal(err)
		}
	}
	fmt.Fprintf(buf, "`")

	source, err := format.Source(buf.Bytes())
	if err != nil {
		log.Fatal("source format error:", err)
	}
	if err := ioutil.WriteFile(*output, source, 0644); err != nil {
		log.Fatal(err)
	}
}

func selectCerts() ([]*x509.Certificate, error) {
	ids, err := fetchCertIDs()
	if err != nil {
		return nil, err
	}

	scerts, err := sysCerts()
	if err != nil {
		return nil, err
	}

	var certs []*x509.Certificate
	for _, id := range ids {
		sn, ok := big.NewInt(0).SetString(id.serialNumber, 0) // 0x prefix selects hex
		if !ok {
			return nil, fmt.Errorf("invalid serial number: %q", id.serialNumber)
		}
		ski, ok := big.NewInt(0).SetString(id.subjectKeyID, 0)
		if !ok {
			return nil, fmt.Errorf("invalid Subject Key ID: %q", id.subjectKeyID)
		}

		for _, cert := range scerts {
			if sn.Cmp(cert.SerialNumber) != 0 {
				continue
			}
			cski := big.NewInt(0).SetBytes(cert.SubjectKeyId)
			if ski.Cmp(cski) != 0 {
				continue
			}
			certs = append(certs, cert)
			break
		}
	}
	return certs, nil
}

func sysCerts() (certs []*x509.Certificate, err error) {
	cmd := exec.Command("/usr/bin/security", "find-certificate", "-a", "-p", "/System/Library/Keychains/SystemRootCertificates.keychain")
	data, err := cmd.Output()
	if err != nil {
		return nil, err
	}
	for len(data) > 0 {
		var block *pem.Block
		block, data = pem.Decode(data)
		if block == nil {
			break
		}
		if block.Type != "CERTIFICATE" || len(block.Headers) != 0 {
			continue
		}

		cert, err := x509.ParseCertificate(block.Bytes)
		if err != nil {
			continue
		}
		certs = append(certs, cert)
	}
	return certs, nil
}

type certID struct {
	serialNumber string
	subjectKeyID string
}

// fetchCertIDs fetches IDs of iOS X509 certificates from apple.com.
func fetchCertIDs() ([]certID, error) {
	resp, err := http.Get("https://support.apple.com/en-us/HT204132")
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	text := string(body)
	text = text[strings.Index(text, "<section id=trusted"):]
	text = text[:strings.Index(text, "</section>")]

	lines := strings.Split(text, "\n")
	var ids []certID
	var id certID
	for i, ln := range lines {
		if i == len(lines)-1 {
			break
		}
		const sn = "Serial Number:"
		if ln == sn {
			id.serialNumber = "0x" + strings.Replace(strings.TrimSpace(lines[i+1]), ":", "", -1)
			continue
		}
		if strings.HasPrefix(ln, sn) {
			// extract hex value from parentheses.
			id.serialNumber = ln[strings.Index(ln, "(")+1 : len(ln)-1]
			continue
		}
		if strings.TrimSpace(ln) == "X509v3 Subject Key Identifier:" {
			id.subjectKeyID = "0x" + strings.Replace(strings.TrimSpace(lines[i+1]), ":", "", -1)
			ids = append(ids, id)
			id = certID{}
		}
	}
	return ids, nil
}

const header = `
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build cgo
// +build darwin
// +build arm arm64

package x509

func loadSystemRoots() (*CertPool, error) {
	p := NewCertPool()
	p.AppendCertsFromPEM([]byte(systemRootsPEM))
	return p, nil
}
`


================================================
FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin_armx.go
================================================
// Created by root_darwin_arm_gen --output root_darwin_armx.go; DO NOT EDIT

// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build cgo
// +build darwin
// +build arm arm64 ios

package x509

func loadSystemRoots() (*CertPool, error) {
	p := NewCertPool()
	p.AppendCertsFromPEM([]byte(systemRootsPEM))
	return p, nil
}

const systemRootsPEM = `
-----BEGIN CERTIFICATE-----
MIIF8DCCA9igAwIBAgIPBuhGJy8fCo/RhFzjafbVMA0GCSqGSIb3DQEBBQUAMDgx
CzAJBgNVBAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXpl
bnBlLmNvbTAeFw0wNzEyMTMxMzA4MjdaFw0zNzEyMTMwODI3MjVaMDgxCzAJBgNV
BAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXplbnBlLmNv
bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMnTesoPHqynhugWZWqx
whtFMnGV2f4QW8yv56V5AY+Jw8ryVXH3d753lPNypCxE2J6SmxQ6oeckkAoKVo7F
2CaU4dlI4S0+2gpy3aOZFdqBoof0e24md4lYrdbrDLJBenNubdt6eEHpCIgSfocu
ZhFjbFT7PJ1ywLwu/8K33Q124zrX97RovqL144FuwUZvXY3gTcZUVYkaMzEKsVe5
o4qYw+w7NMWVQWl+dcI8IMVhulFHoCCQk6GQS/NOfIVFVJrRBSZBsLVNHTO+xAPI
JXzBcNs79AktVCdIrC/hxKw+yMuSTFM5NyPs0wH54AlETU1kwOENWocivK0bo/4m
tRXzp/yEGensoYi0RGmEg/OJ0XQGqcwL1sLeJ4VQJsoXuMl6h1YsGgEebL4TrRCs
tST1OJGh1kva8bvS3ke18byB9llrzxlT6Y0Vy0rLqW9E5RtBz+GGp8rQap+8TI0G
M1qiheWQNaBiXBZO8OOi+gMatCxxs1gs3nsL2xoP694hHwZ3BgOwye+Z/MC5TwuG
KP7Suerj2qXDR2kS4Nvw9hmL7Xtw1wLW7YcYKCwEJEx35EiKGsY7mtQPyvp10gFA
Wo15v4vPS8+qFsGV5K1Mij4XkdSxYuWC5YAEpAN+jb/af6IPl08M0w3719Hlcn4c
yHf/W5oPt64FRuXxqBbsR6QXAgMBAAGjgfYwgfMwgbAGA1UdEQSBqDCBpYEPaW5m
b0BpemVucGUuY29tpIGRMIGOMUcwRQYDVQQKDD5JWkVOUEUgUy5BLiAtIENJRiBB
MDEzMzcyNjAtUk1lcmMuVml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFDMEEG
A1UECQw6QXZkYSBkZWwgTWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAxNCAtIDAxMDEw
IFZpdG9yaWEtR2FzdGVpejAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
BjAdBgNVHQ4EFgQUHRxlDqjyJXu0kc/ksbHmvVV0bAUwDQYJKoZIhvcNAQEFBQAD
ggIBAMeBRm8hGE+gBe/n1bqXUKJg7aWSFBpSm/nxiEqg3Hh10dUflU7F57dp5iL0
+CmoKom+z892j+Mxc50m0xwbRxYpB2iEitL7sRskPtKYGCwkjq/2e+pEFhsqxPqg
l+nqbFik73WrAGLRne0TNtsiC7bw0fRue0aHwp28vb5CO7dz0JoqPLRbEhYArxk5
ja2DUBzIgU+9Ag89njWW7u/kwgN8KRwCfr00J16vU9adF79XbOnQgxCvv11N75B7
XSus7Op9ACYXzAJcY9cZGKfsK8eKPlgOiofmg59OsjQerFQJTx0CCzl+gQgVuaBp
E8gyK+OtbBPWg50jLbJtooiGfqgNASYJQNntKE6MkyQP2/EeTXp6WuKlWPHcj1+Z
ggwuz7LdmMySlD/5CbOlliVbN/UShUHiGUzGigjB3Bh6Dx4/glmimj4/+eAJn/3B
kUtdyXvWton83x18hqrNA/ILUpLxYm9/h+qrdslsUMIZgq+qHfUgKGgu1fxkN0/P
pUTEvnK0jHS0bKf68r10OEMr3q/53NjgnZ/cPcqlY0S/kqJPTIAcuxrDmkoEVU3K
7iYLHL8CxWTTnn7S05EcS6L1HOUXHA0MUqORH5zwIe0ClG+poEnK6EOMxPQ02nwi
o8ZmPrgbBYhdurz3vOXcFD2nhqi2WVIhA16L4wTtSyoeo09Q
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
fF6adulZkMV8gzURZVE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
tGWaIZDgqtCYvDi1czyL+Nw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
ZQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY
MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y
OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy
bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg
Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07
rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F
GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+
OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF
lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6
WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/
UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA
cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0
mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG
K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS
tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW
qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx
v5HSOJTT9pUst2zJQraNypCNhdk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
l7+ijrRU
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID9jCCAt6gAwIBAgIQZIKe/DcedF38l/+XyLH/QTANBgkqhkiG9w0BAQsFADCB
lDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w
HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRl
YyBDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
IC0gRzYwHhcNMTExMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UE
BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT
eW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAy
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzYwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNzOkFyGOFyz9AYxe9GPo15gRn
V2WYKaRPyVyPDzTS+NqoE2KquB5QZ3iwFkygOakVeq7t0qLA8JA3KRgmXOgNPLZs
ST/B4NzZS7YUGQum05bh1gnjGSYc+R9lS/kaQxwAg9bQqkmi1NvmYji6UBRDbfkx
+FYW2TgCkc/rbN27OU6Z4TBnRfHU8I3D3/7yOAchfQBeVkSz5GC9kSucq1sEcg+y
KNlyqwUgQiWpWwNqIBDMMfAr2jUs0Pual07wgksr2F82owstr2MNHSV/oW5cYqGN
KD6h/Bwg+AEvulWaEbAZ0shQeWsOagXXqgQ2sqPy4V93p3ec5R7c6d9qwWVdAgMB
AAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
BBSHjCCVyJhK0daABkqQNETfHE2/sDANBgkqhkiG9w0BAQsFAAOCAQEAgY6ypWaW
tyGltu9vI1pf24HFQqV4wWn99DzX+VxrcHIa/FqXTQCAiIiCisNxDY7FiZss7Y0L
0nJU9X3UXENX6fOupQIR9nYrgVfdfdp0MP1UR/bgFm6mtApI5ud1Bw8pGTnOefS2
bMVfmdUfS/rfbSw8DVSAcPCIC4DPxmiiuB1w2XaM/O6lyc+tHc+ZJVdaYkXLFmu9
Sc2lo4xpeSWuuExsi0BmSxY/zwIa3eFsawdhanYVKZl/G92IgMG/tY9zxaaWI4Sm
KIYkM2oBLldzJbZev4/mHWGoQClnHYebHX+bn5nNMdZUvmK7OaxoEkiRIKXLsd3+
b/xa5IJVWa8xqQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
398znM/jra6O1I7mT1GvFpLgXPYHDw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
RY8mkaKO/qk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIHqTCCBZGgAwIBAgIQYwaGp8U3ZaVDkKhqWMzUMjANBgkqhkiG9w0BAQUFADCB
jzELMAkGA1UEBhMCTFYxNTAzBgNVBAoTLFZBUyBMYXR2aWphcyBQYXN0cyAtIFZp
ZW4ucmVnLk5yLjQwMDAzMDUyNzkwMSMwIQYDVQQLExpTZXJ0aWZpa2FjaWphcyBw
YWthbHBvanVtaTEkMCIGA1UEAxMbVkFTIExhdHZpamFzIFBhc3RzIFNTSShSQ0Ep
MB4XDTA2MDkxMzA5MjIxMFoXDTI0MDkxMzA5Mjc1N1owgY8xCzAJBgNVBAYTAkxW
MTUwMwYDVQQKEyxWQVMgTGF0dmlqYXMgUGFzdHMgLSBWaWVuLnJlZy5Oci40MDAw
MzA1Mjc5MDEjMCEGA1UECxMaU2VydGlmaWthY2lqYXMgcGFrYWxwb2p1bWkxJDAi
BgNVBAMTG1ZBUyBMYXR2aWphcyBQYXN0cyBTU0koUkNBKTCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBAJu4+f1hVS9PpKUUtS6OuSSPrPuxVD9A/0/F5YZo
e1OT+zWCNahQLpRSoNuDPnXaFXCsCc/ugkmtNkm5tHGLtAChQgbKCApjl7YI/O60
3Jh4GYLJ+H9kPqrJ/rGN67Bk9bzzxD46kOpOjj8bGbxqg8ORPGxV+wpSwOjhXXeF
M8VJ3+xqv79sN/6OSaIVGM6LjmseOKMwb4iBfnJWRBrEejkP9sSPltSy6wBOXN67
5zu35iQFk2tN5pFEv+6YG8eFGxFBeyI2p74+6Ho33BjekJ2PzbLXmj/iF39bDOHv
P2Y9biTksM7DDIhslNo4JXxSOeNzFLMARWOaDEJAXgTG93JkzsluM7Pk020klTeT
fvIAXRmLH/NDc6ifRdIGqey0Qrv67gzHTz9RH9Gv0KwYf4eBIv6p3QeWbXz4TtlN
OlBp1UF+xdp02I5z5X6D4cMZgbe9v0COvi6aogyqTgIuuyrhCF0xA8msJ7Cv3NXI
FH1AnVWJIfmQzNTJYEFzq+jN2DpVOQqCmf6b9fU8HJHLwPpGVK4h/CqsXHveepdx
/WxrzUiapNuBfBg3L5B9YZS9F8lctlQWd8oJSqrpvE+UdQFaVryS0o+515feVnQB
9xZxSbH1GEaZQe5i4bMsZXVpKXJDA/ibH/o49J7sQBCOrJfVsDO+nxjcLfdBeFRK
YkTnAgMBAAGjggH9MIIB+TAOBgNVHQ8BAf8EBAMCAQYwGAYIKwYBBQUHAQMEDDAK
MAgGBgQAjkYBATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTMw/Vm/3OsOFqW
GyGJuIFMH8teJTAQBgkrBgEEAYI3FQEEAwIBADCCAYkGA1UdIASCAYAwggF8MIIB
eAYLKwYBBAGBxFkBAQIwggFnMIIBOAYIKwYBBQUHAgIwggEqHoIBJgBTAGkAcwAg
AGkAcgAgAHMAZQByAHQAaQBmAGkAawBhAHQAcwAsACAAawBvACAAaQB6AGQAZQB2
AGkAcwAgAFYAQQBTACAATABhAHQAdgBpAGoAYQBzACAAUABhAHMAdABzACwAIABu
AG8AZAByAG8AcwBpAG4AbwB0ACAAYQB0AGIAaQBsAHMAdABpAGIAdQAgAEUAbABl
AGsAdAByAG8AbgBpAHMAawBvACAAZABvAGsAdQBtAGUAbgB0AHUAIABsAGkAawB1
AG0AYQBtACAAdQBuACAARQBpAHIAbwBwAGEAcwAgAFAAYQByAGwAYQBtAGUAbgB0
AGEAIABkAGkAcgBlAGsAdABpAHYAYQBpACAAMQA5ADkAOQAvADkAMwAvAEUASzAp
BggrBgEFBQcCARYdaHR0cDovL3d3dy5lLW1lLmx2L3JlcG9zaXRvcnkwDQYJKoZI
hvcNAQEFBQADggIBAB8oSjWQIWNoCi94r6MegiaXoz8nGdJLo0J6BhNlW8EEy+t9
fO+U8vGJ9bffUgIhadLqljTloM+XuJxVDhCFoxReLAX4tTp28/l6uN62DCdp8suU
kQsdudWOb5kvzfIZVjk6SFbwAf+Cdbay/dHU9fJjV0xNoX7MELoEae/0FPyzlx9F
7m9KKH/Rxie8x6Opa3vtghNvq94P+3HrXBEaqSzQMJ/8NjdW75XpurcTtq6fAmGt
nuxrBG82nw+Z98LJyEwouSjUIdeeVNXAzvSO5FWUe48kxjj8q3qkVnc9qEXvZJKk
0Ep+u3OL9A1Sc7g6SF5DgNOpcHdi/8coHHMeQ+YnJFtJueY2pI79xS0veqV5EnrX
IbIlbcgPosNhS+VI4le6n/KKId3bZPDaGd/OwJuAOcJ3d2MVU3KE+qSPBzeGIX1Q
+j1qN9uRDjez/c4Lynth0Jx0nH04aG3pex3W8Sq07ztgUncF5gLCX4xbvPB9t3PH
kWuyKrNjozTVq60lcUf/Gj56to2VdsPups0DCWzuRWeYz5lIdsHOinSaaFIBNCLI
7eIUC4S9bhCMsXKbvugI11fVf+q0AT1O5OLoZ+eMfunnQhHvlUbIkda+JxeAGTSY
58bfHvwhX56GPbx+8Jy9cp70R4JbcWfz+txUTKhc2FnH0AcOEzMnvPRp8Gsh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIDAOJCMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNVBAYTAkFU
MRAwDgYDVQQKEwdBLVRydXN0MRkwFwYDVQQLExBBLVRydXN0LW5RdWFsLTAxMRkw
FwYDVQQDExBBLVRydXN0LW5RdWFsLTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEz
MDIzMDAwMFowVTELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB0EtVHJ1c3QxGTAXBgNV
BAsTEEEtVHJ1c3QtblF1YWwtMDExGTAXBgNVBAMTEEEtVHJ1c3QtblF1YWwtMDEw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD/9RyAEZ6eHmhYzNJ328f0
jmdSUFi6EqRqOxb3jHNPTIpK82CR6z5lmSnZQNUuCPD+htbNZffd2DKVB06NOyZ1
2zcOMCgj4GtkZoqE0zPpPT3bpoE55nkZZe/qWEX/64wz/L/4EdkvKDSKG/UsP75M
tmCVY5m2Eg73RVFRz4ccBIMpHel4lzEqSkdDtZOY5fnkrE333hx67nxq21vY8Eyf
8O4fPQ5RtN8eohQCcPQ1z6ypU1R7N9jPRpnI+yzMOiwd3+QcKhHi1miCzo0pkOaB
1CwmfsTyNl8qU0NJUL9Ta6cea7WThwTiWol2yD88cd2cy388xpbNkfrCPmZNGLoV
AgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECE5ZzscCMocwMA4G
A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEA69I9R1hU9Gbl9vV7W7AH
QpUJAlFAvv2It/eY8p2ouQUPVaSZikaKtAYrCD/arzfXB43Qet+dM6CpHsn8ikYR
vQKePjXv3Evf+C1bxwJAimcnZV6W+bNOTpdo8lXljxkmfN+Z5S+XzvK2ttUtP4Et
YOVaxHw2mPMNbvDeY+foJkiBn3KYjGabMaR8moZqof5ofj4iS/WyamTZti6v/fKx
n1vII+/uWkcxV5DT5+r9HLon0NYF0Vg317Wh+gWDV59VZo+dcwJDb+keYqMFYoqp
77SGkZGu41S8NGYkQY3X9rNHRkDbLfpKYDmy6NanpOE1EHW1/sNSFAs43qZZKJEQ
xg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
KeC2uAloGRwYQw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN
MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g
Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz
MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV
BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC
cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8
52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL
yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2
agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi
MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA
UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR
/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE
CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ
S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC
SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG
A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj
grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG
SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg
HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R
8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M
Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58
IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih
bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU
YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7
5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR
rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7
ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
aQNiuJkFBT1reBK9sG9l
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk
MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH
bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ
FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F
uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX
kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs
ewv4n4Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
SnQ2+Q==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1
OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd
AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC
FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi
1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq
jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ
wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj
QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/
WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy
NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC
uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw
IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6
g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP
BSeOE6Fuwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw
NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv
b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD
VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F
VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1
7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X
Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+
/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs
81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm
dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe
Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu
sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4
pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs
slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ
arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD
VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG
9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl
dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj
TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed
Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7
Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI
OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7
vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW
t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn
HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx
SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
jVaMaA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDhDCCAmygAwIBAgIBCTANBgkqhkiG9w0BAQUFADAzMQswCQYDVQQGEwJDTjER
MA8GA1UEChMIVW5pVHJ1c3QxETAPBgNVBAMTCFVDQSBSb290MB4XDTA0MDEwMTAw
MDAwMFoXDTI5MTIzMTAwMDAwMFowMzELMAkGA1UEBhMCQ04xETAPBgNVBAoTCFVu
aVRydXN0MREwDwYDVQQDEwhVQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBALNdB8qGJn1r4vs4CQ7MgsJqGgCiFV/W6dQBt1YDAVmP9ThpJHbC
XivF9iu/r/tB/Q9a/KvXg3BNMJjRnrJ2u5LWu+kQKGkoNkTo8SzXWHwk1n8COvCB
a2FgP/Qz3m3l6ihST/ypHWN8C7rqrsRoRuTej8GnsrZYWm0dLNmMOreIy4XU9+gD
Xv2yTVDo1h//rgI/i0+WITyb1yXJHT/7mLFZ5PCpO6+zzYUs4mBGzG+OoOvwNMXx
QhhgrhLtRnUc5dipllq+3lrWeGeWW5N3UPJuG96WUUqm1ktDdSFmjXfsAoR2XEQQ
th1hbOSjIH23jboPkXXHjd+8AmCoKai9PUMCAwEAAaOBojCBnzALBgNVHQ8EBAMC
AQYwDAYDVR0TBAUwAwEB/zBjBgNVHSUEXDBaBggrBgEFBQcDAQYIKwYBBQUHAwIG
CCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcD
BwYIKwYBBQUHAwgGCCsGAQUFBwMJMB0GA1UdDgQWBBTbHzXza0z/QjFkm827Wh4d
SBC37jANBgkqhkiG9w0BAQUFAAOCAQEAOGy3iPGt+lg3dNHocN6cJ1nL5BXXoMNg
14iABMUwTD3UGusGXllH5rxmy+AI/Og17GJ9ysDawXiv5UZv+4mCI4/211NmVaDe
JRI7cTYWVRJ2+z34VFsxugAG+H1V5ad2g6pcSpemKijfvcZsCyOVjjN/Hl5AHxNU
LJzltQ7dFyiuawHTUin1Ih+QOfTcYmjwPIZH7LgFRbu3DJaUxmfLI3HQjnQi1kHr
A6i26r7EARK1s11AdgYg1GS4KUYGis4fk5oQ7vuqWrTcL9Ury/bXBYSYBZELhPc9
+tb5evosFeo2gkO3t7jj83EB7UNDogVFwygFBzXjAaU4HoDU18PZ3g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
/L7fCg0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn
MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy
NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT
D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS
J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB
MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy
v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S
dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh
pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD
VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW
IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW
m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU
EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP
lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC
wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/
M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr
8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6
7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe
4r50ErAEQyo=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF
MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD
bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw
NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV
BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn
ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0
3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z
qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR
p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8
HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw
ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea
HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw
Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh
c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E
RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt
dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku
Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp
3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF
CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na
xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX
KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk
MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT
AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr
jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r
0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f
2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP
ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF
y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA
tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL
6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0
uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL
acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh
k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q
VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh
b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R
fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv
/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI
REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx
srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv
aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT
woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n
Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W
t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N
8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2
9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5
wSsSnqaeG8XmDtkx2Q==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt
T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV
BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc
BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3
dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP
HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO
KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo
5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+
pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb
kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC
AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV
HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN
AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB
mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5
81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR
Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDjjCCAnagAwIBAgIIKv++n6Lw6YcwDQYJKoZIhvcNAQEFBQAwKDELMAkGA1UE
BhMCQkUxGTAXBgNVBAMTEEJlbGdpdW0gUm9vdCBDQTIwHhcNMDcxMDA0MTAwMDAw
WhcNMjExMjE1MDgwMDAwWjAoMQswCQYDVQQGEwJCRTEZMBcGA1UEAxMQQmVsZ2l1
bSBSb290IENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMZzQh6S
/3UPi790hqc/7bIYLS2X+an7mEoj39WN4IzGMhwWLQdC1i22bi+n9fzGhYJdld61
IgDMqFNAn68KNaJ6x+HK92AQZw6nUHMXU5WfIp8MXW+2QbyM69odRr2nlL/zGsvU
+40OHjPIltfsjFPekx40HopQcSZYtF3CiInaYNKJIT/e1wEYNm7hLHADBGXvmAYr
XR5i3FVr/mZkIV/4L+HXmymvb82fqgxG0YjFnaKVn6w/Fa7yYd/vw2uaItgscf1Y
HewApDgglVrH1Tdjuk+bqv5WRi5j2Qsj1Yr6tSPwiRuhFA0m2kHwOI8w7QUmecFL
TqG4flVSOmlGhHUCAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4CQEBMC4wLAYIKwYBBQUHAgEWIGh0dHA6
Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBSFiuv0xbu+DlkD
lN7WgAEV4xCcOTARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUhYrr9MW7
vg5ZA5Te1oABFeMQnDkwDQYJKoZIhvcNAQEFBQADggEBAFHYhd27V2/MoGy1oyCc
UwnzSgEMdL8rs5qauhjyC4isHLMzr87lEwEnkoRYmhC598wUkmt0FoqW6FHvv/pK
JaeJtmMrXZRY0c8RcrYeuTlBFk0pvDVTC9rejg7NqZV3JcqUWumyaa7YwBO+mPyW
nIR/VRPmPIfjvCCkpDZoa01gZhz5v6yAlGYuuUGK02XThIAC71AdXkbc98m6tTR8
KvPG2F9fVJ3bTc0R5/0UAoNmXsimABKgX77OFP67H6dh96tK8QYUn8pJQsKpvO2F
sauBQeYNxUJpU4c5nUwfAA4+Bw11V0SoU7Q2dmSZ3G7rPUZuFF1eR1ONeE3gJ7uO
hXY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk
MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH
bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
MHYwEAYHK
Download .txt
gitextract_augxgva_/

├── .circleci/
│   └── config.yml
├── .gitignore
├── .gitmodules
├── CODE_OF_CONDUCT.md
├── Dockerfile
├── LICENSE
├── Makefile
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── certificate/
│   ├── certificate.go
│   ├── certificate_test.go
│   ├── constraints/
│   │   ├── constraints.go
│   │   └── vendor/
│   │       └── constraintcrypto/
│   │           └── x509/
│   │               ├── cert_pool.go
│   │               ├── example_test.go
│   │               ├── pem_decrypt.go
│   │               ├── pem_decrypt_test.go
│   │               ├── pkcs1.go
│   │               ├── pkcs8.go
│   │               ├── pkcs8_test.go
│   │               ├── pkix/
│   │               │   └── pkix.go
│   │               ├── root.go
│   │               ├── root_bsd.go
│   │               ├── root_cgo_darwin.go
│   │               ├── root_darwin.go
│   │               ├── root_darwin_arm_gen.go
│   │               ├── root_darwin_armx.go
│   │               ├── root_darwin_test.go
│   │               ├── root_linux.go
│   │               ├── root_nacl.go
│   │               ├── root_nocgo_darwin.go
│   │               ├── root_plan9.go
│   │               ├── root_solaris.go
│   │               ├── root_unix.go
│   │               ├── root_windows.go
│   │               ├── sec1.go
│   │               ├── sec1_test.go
│   │               ├── sha2_windows_test.go
│   │               ├── verify.go
│   │               ├── verify_test.go
│   │               ├── x509.go
│   │               ├── x509_test.go
│   │               └── x509_test_import.go
│   └── paths.go
├── conf/
│   ├── alexa-top-1m.csv
│   ├── api.cfg
│   ├── cisco-top-1m.csv
│   ├── runner.yaml
│   ├── runner_env.sh
│   ├── scanner.cfg
│   └── truststores/
│       ├── CA_AOSP.crt
│       ├── CA_apple_10.10.0.crt
│       ├── CA_apple_10.8.5.crt
│       ├── CA_apple_10.9.5.crt
│       ├── CA_apple_latest.crt
│       ├── CA_java.crt
│       ├── CA_microsoft.crt
│       ├── CA_mozilla_nss.crt
│       ├── CA_ubuntu_12.04.crt
│       └── CA_ubuntu_latest.crt
├── config/
│   └── config.go
├── connection/
│   ├── connection.go
│   └── retriever.go
├── constants/
│   ├── ciphersuites.go
│   ├── curves.go
│   └── protocols.go
├── database/
│   ├── certificate.go
│   ├── database.go
│   ├── messaging.go
│   ├── migrations/
│   │   ├── 1.3.3.sql
│   │   └── 1.3.5.sql
│   ├── schema.sql
│   └── stats.go
├── go.mod
├── go.sum
├── kubernetes/
│   ├── README.md
│   ├── deployment.yaml
│   └── setup_db.yaml
├── logger/
│   └── logger.go
├── metrics/
│   └── metrics.go
├── static/
│   ├── .eslintrc.js
│   ├── certsplainer.css
│   ├── certsplainer.html
│   ├── certsplainer.js
│   ├── custom.css
│   ├── ev-checker.html
│   ├── ev-checker.js
│   ├── index.html
│   └── style.css
├── tlsobs/
│   └── main.go
├── tlsobs-api/
│   ├── handlers.go
│   ├── helpers.go
│   ├── insert_test.go
│   ├── main.go
│   ├── middleware.go
│   └── router.go
├── tlsobs-runner/
│   ├── assertions.go
│   ├── main.go
│   ├── main_test.go
│   └── notifications.go
├── tlsobs-scanner/
│   ├── analyser.go
│   ├── main.go
│   ├── retriever.go
│   └── workerconfig.go
├── tools/
│   ├── MakeMarkdownTOC.rb
│   ├── aws_create_env.sh
│   ├── ciphersuites_names.json
│   ├── ebs-api-options.json
│   ├── ebs-worker-options.json
│   ├── extractCiphersuites.go
│   ├── fixDupCerts.go
│   ├── fixExtensions.go
│   ├── fixKeyInfo.go
│   ├── fixSHA256SubjectSPKI.go
│   ├── fixSerial.go
│   ├── fixserialnumber.go
│   ├── fixsubjectNames.go
│   ├── fixvalidity.go
│   ├── getPaths.go
│   ├── initMozPolicy.go
│   ├── monthly_report.sql
│   ├── pullCTLogs.go
│   ├── pullCTLogsIntoDB.go
│   ├── rescanDomains.go
│   ├── retrieveIntermediatesFromCADatabase.go
│   ├── retrieveTruststoreFromCADatabase.go
│   ├── tls-observatory-api-elasticbeanstalk.json
│   ├── tls-observatory-scanner-elasticbeanstalk.json
│   └── updateCertificate.go
├── vendor/
│   ├── github.com/
│   │   ├── BurntSushi/
│   │   │   └── toml/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── COMPATIBLE
│   │   │       ├── COPYING
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── decode.go
│   │   │       ├── decode_meta.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── encoding_types.go
│   │   │       ├── encoding_types_1.1.go
│   │   │       ├── lex.go
│   │   │       ├── parse.go
│   │   │       ├── session.vim
│   │   │       ├── type_check.go
│   │   │       └── type_fields.go
│   │   ├── aws/
│   │   │   └── aws-sdk-go/
│   │   │       ├── LICENSE.txt
│   │   │       ├── NOTICE.txt
│   │   │       ├── aws/
│   │   │       │   ├── awserr/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── types.go
│   │   │       │   ├── awsutil/
│   │   │       │   │   ├── copy.go
│   │   │       │   │   ├── equal.go
│   │   │       │   │   ├── path_value.go
│   │   │       │   │   ├── prettify.go
│   │   │       │   │   └── string_value.go
│   │   │       │   ├── client/
│   │   │       │   │   ├── client.go
│   │   │       │   │   ├── default_retryer.go
│   │   │       │   │   ├── logger.go
│   │   │       │   │   ├── metadata/
│   │   │       │   │   │   └── client_info.go
│   │   │       │   │   └── no_op_retryer.go
│   │   │       │   ├── config.go
│   │   │       │   ├── context_1_5.go
│   │   │       │   ├── context_1_9.go
│   │   │       │   ├── context_background_1_5.go
│   │   │       │   ├── context_background_1_7.go
│   │   │       │   ├── context_sleep.go
│   │   │       │   ├── convert_types.go
│   │   │       │   ├── corehandlers/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── param_validator.go
│   │   │       │   │   └── user_agent.go
│   │   │       │   ├── credentials/
│   │   │       │   │   ├── chain_provider.go
│   │   │       │   │   ├── context_background_go1.5.go
│   │   │       │   │   ├── context_background_go1.7.go
│   │   │       │   │   ├── context_go1.5.go
│   │   │       │   │   ├── context_go1.9.go
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── ec2rolecreds/
│   │   │       │   │   │   └── ec2_role_provider.go
│   │   │       │   │   ├── endpointcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── env_provider.go
│   │   │       │   │   ├── example.ini
│   │   │       │   │   ├── processcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── shared_credentials_provider.go
│   │   │       │   │   ├── static_provider.go
│   │   │       │   │   └── stscreds/
│   │   │       │   │       ├── assume_role_provider.go
│   │   │       │   │       └── web_identity_provider.go
│   │   │       │   ├── csm/
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── enable.go
│   │   │       │   │   ├── metric.go
│   │   │       │   │   ├── metric_chan.go
│   │   │       │   │   ├── metric_exception.go
│   │   │       │   │   └── reporter.go
│   │   │       │   ├── defaults/
│   │   │       │   │   ├── defaults.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── doc.go
│   │   │       │   ├── ec2metadata/
│   │   │       │   │   ├── api.go
│   │   │       │   │   ├── service.go
│   │   │       │   │   └── token_provider.go
│   │   │       │   ├── endpoints/
│   │   │       │   │   ├── decode.go
│   │   │       │   │   ├── defaults.go
│   │   │       │   │   ├── dep_service_ids.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── endpoints.go
│   │   │       │   │   ├── legacy_regions.go
│   │   │       │   │   ├── v3model.go
│   │   │       │   │   └── v3model_codegen.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── jsonvalue.go
│   │   │       │   ├── logger.go
│   │   │       │   ├── request/
│   │   │       │   │   ├── connection_reset_error.go
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── http_request.go
│   │   │       │   │   ├── offset_reader.go
│   │   │       │   │   ├── request.go
│   │   │       │   │   ├── request_1_7.go
│   │   │       │   │   ├── request_1_8.go
│   │   │       │   │   ├── request_context.go
│   │   │       │   │   ├── request_context_1_6.go
│   │   │       │   │   ├── request_pagination.go
│   │   │       │   │   ├── retryer.go
│   │   │       │   │   ├── timeout_read_closer.go
│   │   │       │   │   ├── validation.go
│   │   │       │   │   └── waiter.go
│   │   │       │   ├── session/
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── custom_transport.go
│   │   │       │   │   ├── custom_transport_go1.12.go
│   │   │       │   │   ├── custom_transport_go1.5.go
│   │   │       │   │   ├── custom_transport_go1.6.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── env_config.go
│   │   │       │   │   ├── session.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── signer/
│   │   │       │   │   └── v4/
│   │   │       │   │       ├── header_rules.go
│   │   │       │   │       ├── options.go
│   │   │       │   │       ├── request_context_go1.5.go
│   │   │       │   │       ├── request_context_go1.7.go
│   │   │       │   │       ├── stream.go
│   │   │       │   │       ├── uri_path.go
│   │   │       │   │       └── v4.go
│   │   │       │   ├── types.go
│   │   │       │   ├── url.go
│   │   │       │   ├── url_1_7.go
│   │   │       │   └── version.go
│   │   │       ├── internal/
│   │   │       │   ├── context/
│   │   │       │   │   └── background_go1.5.go
│   │   │       │   ├── ini/
│   │   │       │   │   ├── ast.go
│   │   │       │   │   ├── comma_token.go
│   │   │       │   │   ├── comment_token.go
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── empty_token.go
│   │   │       │   │   ├── expression.go
│   │   │       │   │   ├── fuzz.go
│   │   │       │   │   ├── ini.go
│   │   │       │   │   ├── ini_lexer.go
│   │   │       │   │   ├── ini_parser.go
│   │   │       │   │   ├── literal_tokens.go
│   │   │       │   │   ├── newline_token.go
│   │   │       │   │   ├── number_helper.go
│   │   │       │   │   ├── op_tokens.go
│   │   │       │   │   ├── parse_error.go
│   │   │       │   │   ├── parse_stack.go
│   │   │       │   │   ├── sep_tokens.go
│   │   │       │   │   ├── skipper.go
│   │   │       │   │   ├── statement.go
│   │   │       │   │   ├── value_util.go
│   │   │       │   │   ├── visitor.go
│   │   │       │   │   ├── walker.go
│   │   │       │   │   └── ws_token.go
│   │   │       │   ├── sdkio/
│   │   │       │   │   ├── byte.go
│   │   │       │   │   ├── io_go1.6.go
│   │   │       │   │   └── io_go1.7.go
│   │   │       │   ├── sdkmath/
│   │   │       │   │   ├── floor.go
│   │   │       │   │   └── floor_go1.9.go
│   │   │       │   ├── sdkrand/
│   │   │       │   │   ├── locked_source.go
│   │   │       │   │   ├── read.go
│   │   │       │   │   └── read_1_5.go
│   │   │       │   ├── sdkuri/
│   │   │       │   │   └── path.go
│   │   │       │   ├── shareddefaults/
│   │   │       │   │   ├── ecs_container.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── strings/
│   │   │       │   │   └── strings.go
│   │   │       │   └── sync/
│   │   │       │       └── singleflight/
│   │   │       │           ├── LICENSE
│   │   │       │           └── singleflight.go
│   │   │       ├── private/
│   │   │       │   └── protocol/
│   │   │       │       ├── host.go
│   │   │       │       ├── host_prefix.go
│   │   │       │       ├── idempotency.go
│   │   │       │       ├── json/
│   │   │       │       │   └── jsonutil/
│   │   │       │       │       ├── build.go
│   │   │       │       │       └── unmarshal.go
│   │   │       │       ├── jsonvalue.go
│   │   │       │       ├── payload.go
│   │   │       │       ├── protocol.go
│   │   │       │       ├── query/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── queryutil/
│   │   │       │       │   │   └── queryutil.go
│   │   │       │       │   ├── unmarshal.go
│   │   │       │       │   └── unmarshal_error.go
│   │   │       │       ├── rest/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── payload.go
│   │   │       │       │   └── unmarshal.go
│   │   │       │       ├── timestamp.go
│   │   │       │       ├── unmarshal.go
│   │   │       │       ├── unmarshal_error.go
│   │   │       │       └── xml/
│   │   │       │           └── xmlutil/
│   │   │       │               ├── build.go
│   │   │       │               ├── sort.go
│   │   │       │               ├── unmarshal.go
│   │   │       │               └── xml_to_struct.go
│   │   │       └── service/
│   │   │           ├── cloudwatch/
│   │   │           │   ├── api.go
│   │   │           │   ├── doc.go
│   │   │           │   ├── errors.go
│   │   │           │   ├── service.go
│   │   │           │   └── waiters.go
│   │   │           └── sts/
│   │   │               ├── api.go
│   │   │               ├── customizations.go
│   │   │               ├── doc.go
│   │   │               ├── errors.go
│   │   │               ├── service.go
│   │   │               └── stsiface/
│   │   │                   └── interface.go
│   │   ├── beorn7/
│   │   │   └── perks/
│   │   │       ├── LICENSE
│   │   │       └── quantile/
│   │   │           ├── exampledata.txt
│   │   │           └── stream.go
│   │   ├── bgentry/
│   │   │   └── speakeasy/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── LICENSE_WINDOWS
│   │   │       ├── Readme.md
│   │   │       ├── speakeasy.go
│   │   │       ├── speakeasy_unix.go
│   │   │       └── speakeasy_windows.go
│   │   ├── cespare/
│   │   │   └── xxhash/
│   │   │       └── v2/
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── go.mod
│   │   │           ├── go.sum
│   │   │           ├── xxhash.go
│   │   │           ├── xxhash_amd64.go
│   │   │           ├── xxhash_amd64.s
│   │   │           ├── xxhash_other.go
│   │   │           ├── xxhash_safe.go
│   │   │           └── xxhash_unsafe.go
│   │   ├── coreos/
│   │   │   ├── go-semver/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── semver/
│   │   │   │       ├── semver.go
│   │   │   │       └── sort.go
│   │   │   ├── go-systemd/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── daemon/
│   │   │   │   │   ├── sdnotify.go
│   │   │   │   │   └── watchdog.go
│   │   │   │   └── journal/
│   │   │   │       └── journal.go
│   │   │   └── pkg/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── capnslog/
│   │   │           ├── README.md
│   │   │           ├── formatters.go
│   │   │           ├── glog_formatter.go
│   │   │           ├── init.go
│   │   │           ├── init_windows.go
│   │   │           ├── journald_formatter.go
│   │   │           ├── log_hijack.go
│   │   │           ├── logmap.go
│   │   │           ├── pkg_logger.go
│   │   │           └── syslog_formatter.go
│   │   ├── cpuguy83/
│   │   │   └── go-md2man/
│   │   │       └── v2/
│   │   │           ├── LICENSE.md
│   │   │           └── md2man/
│   │   │               ├── md2man.go
│   │   │               └── roff.go
│   │   ├── dgrijalva/
│   │   │   └── jwt-go/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── MIGRATION_GUIDE.md
│   │   │       ├── README.md
│   │   │       ├── VERSION_HISTORY.md
│   │   │       ├── claims.go
│   │   │       ├── doc.go
│   │   │       ├── ecdsa.go
│   │   │       ├── ecdsa_utils.go
│   │   │       ├── errors.go
│   │   │       ├── hmac.go
│   │   │       ├── map_claims.go
│   │   │       ├── none.go
│   │   │       ├── parser.go
│   │   │       ├── rsa.go
│   │   │       ├── rsa_pss.go
│   │   │       ├── rsa_utils.go
│   │   │       ├── signing_method.go
│   │   │       └── token.go
│   │   ├── dustin/
│   │   │   └── go-humanize/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.markdown
│   │   │       ├── big.go
│   │   │       ├── bigbytes.go
│   │   │       ├── bytes.go
│   │   │       ├── comma.go
│   │   │       ├── commaf.go
│   │   │       ├── ftoa.go
│   │   │       ├── humanize.go
│   │   │       ├── number.go
│   │   │       ├── ordinals.go
│   │   │       ├── si.go
│   │   │       └── times.go
│   │   ├── fatih/
│   │   │   └── color/
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── color.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       └── go.sum
│   │   ├── gogo/
│   │   │   └── protobuf/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── gogoproto/
│   │   │       │   ├── Makefile
│   │   │       │   ├── doc.go
│   │   │       │   ├── gogo.pb.go
│   │   │       │   ├── gogo.pb.golden
│   │   │       │   ├── gogo.proto
│   │   │       │   └── helper.go
│   │   │       ├── proto/
│   │   │       │   ├── Makefile
│   │   │       │   ├── clone.go
│   │   │       │   ├── custom_gogo.go
│   │   │       │   ├── decode.go
│   │   │       │   ├── deprecated.go
│   │   │       │   ├── discard.go
│   │   │       │   ├── duration.go
│   │   │       │   ├── duration_gogo.go
│   │   │       │   ├── encode.go
│   │   │       │   ├── encode_gogo.go
│   │   │       │   ├── equal.go
│   │   │       │   ├── extensions.go
│   │   │       │   ├── extensions_gogo.go
│   │   │       │   ├── lib.go
│   │   │       │   ├── lib_gogo.go
│   │   │       │   ├── message_set.go
│   │   │       │   ├── pointer_reflect.go
│   │   │       │   ├── pointer_reflect_gogo.go
│   │   │       │   ├── pointer_unsafe.go
│   │   │       │   ├── pointer_unsafe_gogo.go
│   │   │       │   ├── properties.go
│   │   │       │   ├── properties_gogo.go
│   │   │       │   ├── skip_gogo.go
│   │   │       │   ├── table_marshal.go
│   │   │       │   ├── table_marshal_gogo.go
│   │   │       │   ├── table_merge.go
│   │   │       │   ├── table_unmarshal.go
│   │   │       │   ├── table_unmarshal_gogo.go
│   │   │       │   ├── text.go
│   │   │       │   ├── text_gogo.go
│   │   │       │   ├── text_parser.go
│   │   │       │   ├── timestamp.go
│   │   │       │   ├── timestamp_gogo.go
│   │   │       │   ├── wrappers.go
│   │   │       │   └── wrappers_gogo.go
│   │   │       └── protoc-gen-gogo/
│   │   │           └── descriptor/
│   │   │               ├── Makefile
│   │   │               ├── descriptor.go
│   │   │               ├── descriptor.pb.go
│   │   │               ├── descriptor_gostring.gen.go
│   │   │               └── helper.go
│   │   ├── golang/
│   │   │   ├── glog/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── glog.go
│   │   │   │   └── glog_file.go
│   │   │   ├── groupcache/
│   │   │   │   ├── LICENSE
│   │   │   │   └── lru/
│   │   │   │       └── lru.go
│   │   │   ├── mock/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   └── mockgen/
│   │   │   │       ├── mockgen.go
│   │   │   │       ├── model/
│   │   │   │       │   └── model.go
│   │   │   │       ├── parse.go
│   │   │   │       ├── reflect.go
│   │   │   │       ├── version.1.11.go
│   │   │   │       └── version.1.12.go
│   │   │   └── protobuf/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── descriptor/
│   │   │       │   └── descriptor.go
│   │   │       ├── internal/
│   │   │       │   └── gengogrpc/
│   │   │       │       └── grpc.go
│   │   │       ├── jsonpb/
│   │   │       │   ├── decode.go
│   │   │       │   ├── encode.go
│   │   │       │   └── json.go
│   │   │       ├── proto/
│   │   │       │   ├── buffer.go
│   │   │       │   ├── defaults.go
│   │   │       │   ├── deprecated.go
│   │   │       │   ├── discard.go
│   │   │       │   ├── extensions.go
│   │   │       │   ├── properties.go
│   │   │       │   ├── proto.go
│   │   │       │   ├── registry.go
│   │   │       │   ├── text_decode.go
│   │   │       │   ├── text_encode.go
│   │   │       │   ├── wire.go
│   │   │       │   └── wrappers.go
│   │   │       ├── protoc-gen-go/
│   │   │       │   ├── descriptor/
│   │   │       │   │   └── descriptor.pb.go
│   │   │       │   └── main.go
│   │   │       └── ptypes/
│   │   │           ├── any/
│   │   │           │   └── any.pb.go
│   │   │           ├── any.go
│   │   │           ├── doc.go
│   │   │           ├── duration/
│   │   │           │   └── duration.pb.go
│   │   │           ├── duration.go
│   │   │           ├── timestamp/
│   │   │           │   └── timestamp.pb.go
│   │   │           ├── timestamp.go
│   │   │           └── wrappers/
│   │   │               └── wrappers.pb.go
│   │   ├── google/
│   │   │   ├── btree/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   └── btree.go
│   │   │   ├── certificate-transparency-go/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .golangci.yaml
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── CHANGELOG.md
│   │   │   │   ├── CONTRIBUTING.md
│   │   │   │   ├── CONTRIBUTORS
│   │   │   │   ├── LICENSE
│   │   │   │   ├── PULL_REQUEST_TEMPLATE.md
│   │   │   │   ├── README.md
│   │   │   │   ├── asn1/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── asn1.go
│   │   │   │   │   ├── common.go
│   │   │   │   │   └── marshal.go
│   │   │   │   ├── client/
│   │   │   │   │   ├── configpb/
│   │   │   │   │   │   ├── gen.go
│   │   │   │   │   │   ├── multilog.pb.go
│   │   │   │   │   │   └── multilog.proto
│   │   │   │   │   ├── getentries.go
│   │   │   │   │   ├── logclient.go
│   │   │   │   │   └── multilog.go
│   │   │   │   ├── cloudbuild.yaml
│   │   │   │   ├── cloudbuild_master.yaml
│   │   │   │   ├── cloudbuild_tag.yaml
│   │   │   │   ├── codecov.yml
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── jsonclient/
│   │   │   │   │   ├── backoff.go
│   │   │   │   │   └── client.go
│   │   │   │   ├── serialization.go
│   │   │   │   ├── signatures.go
│   │   │   │   ├── tls/
│   │   │   │   │   ├── signature.go
│   │   │   │   │   ├── tls.go
│   │   │   │   │   └── types.go
│   │   │   │   ├── tools.go
│   │   │   │   ├── types.go
│   │   │   │   └── x509/
│   │   │   │       ├── README.md
│   │   │   │       ├── cert_pool.go
│   │   │   │       ├── curves.go
│   │   │   │       ├── error.go
│   │   │   │       ├── errors.go
│   │   │   │       ├── names.go
│   │   │   │       ├── pem_decrypt.go
│   │   │   │       ├── pkcs1.go
│   │   │   │       ├── pkcs8.go
│   │   │   │       ├── pkix/
│   │   │   │       │   └── pkix.go
│   │   │   │       ├── ptr_sysptr_windows.go
│   │   │   │       ├── ptr_uint_windows.go
│   │   │   │       ├── revoked.go
│   │   │   │       ├── root.go
│   │   │   │       ├── root_bsd.go
│   │   │   │       ├── root_cgo_darwin.go
│   │   │   │       ├── root_darwin.go
│   │   │   │       ├── root_darwin_armx.go
│   │   │   │       ├── root_js.go
│   │   │   │       ├── root_linux.go
│   │   │   │       ├── root_nocgo_darwin.go
│   │   │   │       ├── root_plan9.go
│   │   │   │       ├── root_solaris.go
│   │   │   │       ├── root_unix.go
│   │   │   │       ├── root_windows.go
│   │   │   │       ├── rpki.go
│   │   │   │       ├── sec1.go
│   │   │   │       ├── test-dir.crt
│   │   │   │       ├── test-file.crt
│   │   │   │       ├── verify.go
│   │   │   │       └── x509.go
│   │   │   └── uuid/
│   │   │       ├── .travis.yml
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── dce.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── hash.go
│   │   │       ├── marshal.go
│   │   │       ├── node.go
│   │   │       ├── node_js.go
│   │   │       ├── node_net.go
│   │   │       ├── sql.go
│   │   │       ├── time.go
│   │   │       ├── util.go
│   │   │       ├── uuid.go
│   │   │       ├── version1.go
│   │   │       └── version4.go
│   │   ├── gorhill/
│   │   │   └── cronexpr/
│   │   │       ├── APLv2
│   │   │       ├── GPLv3
│   │   │       ├── README.md
│   │   │       ├── cronexpr.go
│   │   │       ├── cronexpr_next.go
│   │   │       └── cronexpr_parse.go
│   │   ├── gorilla/
│   │   │   ├── mux/
│   │   │   │   ├── AUTHORS
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── middleware.go
│   │   │   │   ├── mux.go
│   │   │   │   ├── regexp.go
│   │   │   │   ├── route.go
│   │   │   │   └── test_helpers.go
│   │   │   └── websocket/
│   │   │       ├── .gitignore
│   │   │       ├── AUTHORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── client.go
│   │   │       ├── client_clone.go
│   │   │       ├── client_clone_legacy.go
│   │   │       ├── compression.go
│   │   │       ├── conn.go
│   │   │       ├── conn_write.go
│   │   │       ├── conn_write_legacy.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── join.go
│   │   │       ├── json.go
│   │   │       ├── mask.go
│   │   │       ├── mask_safe.go
│   │   │       ├── prepared.go
│   │   │       ├── proxy.go
│   │   │       ├── server.go
│   │   │       ├── trace.go
│   │   │       ├── trace_17.go
│   │   │       ├── util.go
│   │   │       └── x_net_proxy.go
│   │   ├── gregjones/
│   │   │   └── httpcache/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.txt
│   │   │       ├── README.md
│   │   │       ├── diskcache/
│   │   │       │   └── diskcache.go
│   │   │       └── httpcache.go
│   │   ├── grpc-ecosystem/
│   │   │   └── grpc-gateway/
│   │   │       ├── LICENSE.txt
│   │   │       ├── internal/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── stream_chunk.pb.go
│   │   │       │   └── stream_chunk.proto
│   │   │       ├── runtime/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── context.go
│   │   │       │   ├── convert.go
│   │   │       │   ├── doc.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── fieldmask.go
│   │   │       │   ├── handler.go
│   │   │       │   ├── marshal_httpbodyproto.go
│   │   │       │   ├── marshal_json.go
│   │   │       │   ├── marshal_jsonpb.go
│   │   │       │   ├── marshal_proto.go
│   │   │       │   ├── marshaler.go
│   │   │       │   ├── marshaler_registry.go
│   │   │       │   ├── mux.go
│   │   │       │   ├── pattern.go
│   │   │       │   ├── proto2_convert.go
│   │   │       │   ├── proto_errors.go
│   │   │       │   └── query.go
│   │   │       └── utilities/
│   │   │           ├── BUILD.bazel
│   │   │           ├── doc.go
│   │   │           ├── pattern.go
│   │   │           ├── readerfactory.go
│   │   │           └── trie.go
│   │   ├── hashicorp/
│   │   │   └── golang-lru/
│   │   │       ├── .gitignore
│   │   │       ├── 2q.go
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── arc.go
│   │   │       ├── doc.go
│   │   │       ├── go.mod
│   │   │       ├── lru.go
│   │   │       └── simplelru/
│   │   │           ├── lru.go
│   │   │           └── lru_interface.go
│   │   ├── inconshreveable/
│   │   │   └── mousetrap/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── trap_others.go
│   │   │       ├── trap_windows.go
│   │   │       └── trap_windows_1.4.go
│   │   ├── jmespath/
│   │   │   └── go-jmespath/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── api.go
│   │   │       ├── astnodetype_string.go
│   │   │       ├── functions.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── interpreter.go
│   │   │       ├── lexer.go
│   │   │       ├── parser.go
│   │   │       ├── toktype_string.go
│   │   │       └── util.go
│   │   ├── jonboulle/
│   │   │   └── clockwork/
│   │   │       ├── .editorconfig
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── clockwork.go
│   │   │       ├── go.mod
│   │   │       └── ticker.go
│   │   ├── lib/
│   │   │   └── pq/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.sh
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── TESTS.md
│   │   │       ├── array.go
│   │   │       ├── buf.go
│   │   │       ├── conn.go
│   │   │       ├── conn_go18.go
│   │   │       ├── connector.go
│   │   │       ├── copy.go
│   │   │       ├── doc.go
│   │   │       ├── encode.go
│   │   │       ├── error.go
│   │   │       ├── go.mod
│   │   │       ├── krb.go
│   │   │       ├── notice.go
│   │   │       ├── notify.go
│   │   │       ├── oid/
│   │   │       │   ├── doc.go
│   │   │       │   └── types.go
│   │   │       ├── rows.go
│   │   │       ├── scram/
│   │   │       │   └── scram.go
│   │   │       ├── ssl.go
│   │   │       ├── ssl_permissions.go
│   │   │       ├── ssl_windows.go
│   │   │       ├── url.go
│   │   │       ├── user_posix.go
│   │   │       ├── user_windows.go
│   │   │       └── uuid.go
│   │   ├── mattn/
│   │   │   ├── go-colorable/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── colorable_appengine.go
│   │   │   │   ├── colorable_others.go
│   │   │   │   ├── colorable_windows.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── go.test.sh
│   │   │   │   └── noncolorable.go
│   │   │   ├── go-isatty/
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README.md
│   │   │   │   ├── doc.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── go.test.sh
│   │   │   │   ├── isatty_bsd.go
│   │   │   │   ├── isatty_others.go
│   │   │   │   ├── isatty_plan9.go
│   │   │   │   ├── isatty_solaris.go
│   │   │   │   ├── isatty_tcgets.go
│   │   │   │   ├── isatty_windows.go
│   │   │   │   └── renovate.json
│   │   │   └── go-runewidth/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.mkd
│   │   │       ├── go.mod
│   │   │       ├── runewidth.go
│   │   │       ├── runewidth_appengine.go
│   │   │       ├── runewidth_js.go
│   │   │       ├── runewidth_posix.go
│   │   │       ├── runewidth_table.go
│   │   │       └── runewidth_windows.go
│   │   ├── matttproud/
│   │   │   └── golang_protobuf_extensions/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── pbutil/
│   │   │           ├── .gitignore
│   │   │           ├── Makefile
│   │   │           ├── decode.go
│   │   │           ├── doc.go
│   │   │           └── encode.go
│   │   ├── miekg/
│   │   │   └── dns/
│   │   │       ├── .codecov.yml
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── AUTHORS
│   │   │       ├── CODEOWNERS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── COPYRIGHT
│   │   │       ├── LICENSE
│   │   │       ├── Makefile.fuzz
│   │   │       ├── Makefile.release
│   │   │       ├── README.md
│   │   │       ├── acceptfunc.go
│   │   │       ├── client.go
│   │   │       ├── clientconfig.go
│   │   │       ├── dane.go
│   │   │       ├── defaults.go
│   │   │       ├── dns.go
│   │   │       ├── dnssec.go
│   │   │       ├── dnssec_keygen.go
│   │   │       ├── dnssec_keyscan.go
│   │   │       ├── dnssec_privkey.go
│   │   │       ├── doc.go
│   │   │       ├── duplicate.go
│   │   │       ├── edns.go
│   │   │       ├── format.go
│   │   │       ├── fuzz.go
│   │   │       ├── generate.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── labels.go
│   │   │       ├── listen_go111.go
│   │   │       ├── listen_go_not111.go
│   │   │       ├── msg.go
│   │   │       ├── msg_helpers.go
│   │   │       ├── msg_truncate.go
│   │   │       ├── nsecx.go
│   │   │       ├── privaterr.go
│   │   │       ├── reverse.go
│   │   │       ├── sanitize.go
│   │   │       ├── scan.go
│   │   │       ├── scan_rr.go
│   │   │       ├── serve_mux.go
│   │   │       ├── server.go
│   │   │       ├── sig0.go
│   │   │       ├── singleinflight.go
│   │   │       ├── smimea.go
│   │   │       ├── svcb.go
│   │   │       ├── tlsa.go
│   │   │       ├── tsig.go
│   │   │       ├── types.go
│   │   │       ├── udp.go
│   │   │       ├── udp_windows.go
│   │   │       ├── update.go
│   │   │       ├── version.go
│   │   │       ├── xfr.go
│   │   │       ├── zduplicate.go
│   │   │       ├── zmsg.go
│   │   │       └── ztypes.go
│   │   ├── modern-go/
│   │   │   └── concurrent/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── executor.go
│   │   │       ├── go_above_19.go
│   │   │       ├── go_below_19.go
│   │   │       ├── log.go
│   │   │       ├── test.sh
│   │   │       └── unbounded_executor.go
│   │   ├── mozilla/
│   │   │   └── scribe/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── chain.go
│   │   │       ├── concat.go
│   │   │       ├── document.go
│   │   │       ├── evr.go
│   │   │       ├── evrops.go
│   │   │       ├── exactmatch.go
│   │   │       ├── filecontent.go
│   │   │       ├── filename.go
│   │   │       ├── hasline.go
│   │   │       ├── noop.go
│   │   │       ├── object.go
│   │   │       ├── package.go
│   │   │       ├── parser.go
│   │   │       ├── pkgmgr.go
│   │   │       ├── raw.go
│   │   │       ├── regexp.go
│   │   │       ├── result.go
│   │   │       ├── scribe.go
│   │   │       ├── test.go
│   │   │       └── variable.go
│   │   ├── olekukonko/
│   │   │   └── tablewriter/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE.md
│   │   │       ├── README.md
│   │   │       ├── csv.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── table.go
│   │   │       ├── table_with_color.go
│   │   │       ├── util.go
│   │   │       └── wrap.go
│   │   ├── peterbourgon/
│   │   │   └── diskv/
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── compression.go
│   │   │       ├── diskv.go
│   │   │       └── index.go
│   │   ├── prometheus/
│   │   │   ├── client_golang/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── prometheus/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── README.md
│   │   │   │       ├── build_info.go
│   │   │   │       ├── build_info_pre_1.12.go
│   │   │   │       ├── collector.go
│   │   │   │       ├── counter.go
│   │   │   │       ├── desc.go
│   │   │   │       ├── doc.go
│   │   │   │       ├── expvar_collector.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── gauge.go
│   │   │   │       ├── go_collector.go
│   │   │   │       ├── histogram.go
│   │   │   │       ├── internal/
│   │   │   │       │   └── metric.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── observer.go
│   │   │   │       ├── process_collector.go
│   │   │   │       ├── process_collector_other.go
│   │   │   │       ├── process_collector_windows.go
│   │   │   │       ├── promhttp/
│   │   │   │       │   ├── delegator.go
│   │   │   │       │   ├── http.go
│   │   │   │       │   ├── instrument_client.go
│   │   │   │       │   └── instrument_server.go
│   │   │   │       ├── registry.go
│   │   │   │       ├── summary.go
│   │   │   │       ├── timer.go
│   │   │   │       ├── untyped.go
│   │   │   │       ├── value.go
│   │   │   │       ├── vec.go
│   │   │   │       └── wrap.go
│   │   │   ├── client_model/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   └── go/
│   │   │   │       └── metrics.pb.go
│   │   │   ├── common/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── NOTICE
│   │   │   │   ├── expfmt/
│   │   │   │   │   ├── decode.go
│   │   │   │   │   ├── encode.go
│   │   │   │   │   ├── expfmt.go
│   │   │   │   │   ├── fuzz.go
│   │   │   │   │   ├── openmetrics_create.go
│   │   │   │   │   ├── text_create.go
│   │   │   │   │   └── text_parse.go
│   │   │   │   ├── internal/
│   │   │   │   │   └── bitbucket.org/
│   │   │   │   │       └── ww/
│   │   │   │   │           └── goautoneg/
│   │   │   │   │               ├── README.txt
│   │   │   │   │               └── autoneg.go
│   │   │   │   └── model/
│   │   │   │       ├── alert.go
│   │   │   │       ├── fingerprinting.go
│   │   │   │       ├── fnv.go
│   │   │   │       ├── labels.go
│   │   │   │       ├── labelset.go
│   │   │   │       ├── metric.go
│   │   │   │       ├── model.go
│   │   │   │       ├── signature.go
│   │   │   │       ├── silence.go
│   │   │   │       ├── time.go
│   │   │   │       └── value.go
│   │   │   └── procfs/
│   │   │       ├── .gitignore
│   │   │       ├── .golangci.yml
│   │   │       ├── CONTRIBUTING.md
│   │   │       ├── LICENSE
│   │   │       ├── MAINTAINERS.md
│   │   │       ├── Makefile
│   │   │       ├── Makefile.common
│   │   │       ├── NOTICE
│   │   │       ├── README.md
│   │   │       ├── arp.go
│   │   │       ├── buddyinfo.go
│   │   │       ├── cpuinfo.go
│   │   │       ├── cpuinfo_arm.go
│   │   │       ├── cpuinfo_arm64.go
│   │   │       ├── cpuinfo_default.go
│   │   │       ├── cpuinfo_mips.go
│   │   │       ├── cpuinfo_mips64.go
│   │   │       ├── cpuinfo_mips64le.go
│   │   │       ├── cpuinfo_mipsle.go
│   │   │       ├── cpuinfo_ppc64.go
│   │   │       ├── cpuinfo_ppc64le.go
│   │   │       ├── cpuinfo_s390x.go
│   │   │       ├── crypto.go
│   │   │       ├── doc.go
│   │   │       ├── fixtures.ttar
│   │   │       ├── fs.go
│   │   │       ├── fscache.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── internal/
│   │   │       │   ├── fs/
│   │   │       │   │   └── fs.go
│   │   │       │   └── util/
│   │   │       │       ├── parse.go
│   │   │       │       ├── readfile.go
│   │   │       │       ├── sysreadfile.go
│   │   │       │       ├── sysreadfile_compat.go
│   │   │       │       └── valueparser.go
│   │   │       ├── ipvs.go
│   │   │       ├── kernel_random.go
│   │   │       ├── loadavg.go
│   │   │       ├── mdstat.go
│   │   │       ├── meminfo.go
│   │   │       ├── mountinfo.go
│   │   │       ├── mountstats.go
│   │   │       ├── net_conntrackstat.go
│   │   │       ├── net_dev.go
│   │   │       ├── net_sockstat.go
│   │   │       ├── net_softnet.go
│   │   │       ├── net_udp.go
│   │   │       ├── net_unix.go
│   │   │       ├── proc.go
│   │   │       ├── proc_cgroup.go
│   │   │       ├── proc_environ.go
│   │   │       ├── proc_fdinfo.go
│   │   │       ├── proc_io.go
│   │   │       ├── proc_limits.go
│   │   │       ├── proc_maps.go
│   │   │       ├── proc_ns.go
│   │   │       ├── proc_psi.go
│   │   │       ├── proc_smaps.go
│   │   │       ├── proc_stat.go
│   │   │       ├── proc_status.go
│   │   │       ├── schedstat.go
│   │   │       ├── stat.go
│   │   │       ├── swaps.go
│   │   │       ├── ttar
│   │   │       ├── vm.go
│   │   │       ├── xfrm.go
│   │   │       └── zoneinfo.go
│   │   ├── russross/
│   │   │   └── blackfriday/
│   │   │       └── v2/
│   │   │           ├── .gitignore
│   │   │           ├── .travis.yml
│   │   │           ├── LICENSE.txt
│   │   │           ├── README.md
│   │   │           ├── block.go
│   │   │           ├── doc.go
│   │   │           ├── esc.go
│   │   │           ├── go.mod
│   │   │           ├── html.go
│   │   │           ├── inline.go
│   │   │           ├── markdown.go
│   │   │           ├── node.go
│   │   │           └── smartypants.go
│   │   ├── sergi/
│   │   │   └── go-diff/
│   │   │       ├── AUTHORS
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       └── diffmatchpatch/
│   │   │           ├── diff.go
│   │   │           ├── diffmatchpatch.go
│   │   │           ├── match.go
│   │   │           ├── mathutil.go
│   │   │           ├── operation_string.go
│   │   │           ├── patch.go
│   │   │           └── stringutil.go
│   │   ├── shurcooL/
│   │   │   └── sanitized_anchor_name/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── go.mod
│   │   │       └── main.go
│   │   ├── soheilhy/
│   │   │   └── cmux/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── CONTRIBUTORS
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── buffer.go
│   │   │       ├── cmux.go
│   │   │       ├── doc.go
│   │   │       ├── matchers.go
│   │   │       └── patricia.go
│   │   ├── spf13/
│   │   │   ├── cobra/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── .mailmap
│   │   │   │   ├── .travis.yml
│   │   │   │   ├── LICENSE.txt
│   │   │   │   ├── README.md
│   │   │   │   ├── args.go
│   │   │   │   ├── bash_completions.go
│   │   │   │   ├── bash_completions.md
│   │   │   │   ├── cobra.go
│   │   │   │   ├── command.go
│   │   │   │   ├── command_notwin.go
│   │   │   │   ├── command_win.go
│   │   │   │   ├── go.mod
│   │   │   │   ├── go.sum
│   │   │   │   ├── powershell_completions.go
│   │   │   │   ├── powershell_completions.md
│   │   │   │   ├── shell_completions.go
│   │   │   │   ├── zsh_completions.go
│   │   │   │   └── zsh_completions.md
│   │   │   └── pflag/
│   │   │       ├── .gitignore
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── bool.go
│   │   │       ├── bool_slice.go
│   │   │       ├── bytes.go
│   │   │       ├── count.go
│   │   │       ├── duration.go
│   │   │       ├── duration_slice.go
│   │   │       ├── flag.go
│   │   │       ├── float32.go
│   │   │       ├── float32_slice.go
│   │   │       ├── float64.go
│   │   │       ├── float64_slice.go
│   │   │       ├── go.mod
│   │   │       ├── go.sum
│   │   │       ├── golangflag.go
│   │   │       ├── int.go
│   │   │       ├── int16.go
│   │   │       ├── int32.go
│   │   │       ├── int32_slice.go
│   │   │       ├── int64.go
│   │   │       ├── int64_slice.go
│   │   │       ├── int8.go
│   │   │       ├── int_slice.go
│   │   │       ├── ip.go
│   │   │       ├── ip_slice.go
│   │   │       ├── ipmask.go
│   │   │       ├── ipnet.go
│   │   │       ├── string.go
│   │   │       ├── string_array.go
│   │   │       ├── string_slice.go
│   │   │       ├── string_to_int.go
│   │   │       ├── string_to_int64.go
│   │   │       ├── string_to_string.go
│   │   │       ├── uint.go
│   │   │       ├── uint16.go
│   │   │       ├── uint32.go
│   │   │       ├── uint64.go
│   │   │       ├── uint8.go
│   │   │       └── uint_slice.go
│   │   ├── tmc/
│   │   │   └── grpc-websocket-proxy/
│   │   │       ├── LICENSE
│   │   │       └── wsproxy/
│   │   │           ├── doc.go
│   │   │           └── websocket_proxy.go
│   │   ├── viki-org/
│   │   │   └── dnscache/
│   │   │       ├── dnscache.go
│   │   │       ├── license.txt
│   │   │       └── readme.md
│   │   ├── xiang90/
│   │   │   └── probing/
│   │   │       ├── .gitignore
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── prober.go
│   │   │       ├── server.go
│   │   │       └── status.go
│   │   └── yudai/
│   │       ├── gojsondiff/
│   │       │   ├── .gitignore
│   │       │   ├── LICENSE
│   │       │   ├── Makefile
│   │       │   ├── README.md
│   │       │   ├── deltas.go
│   │       │   ├── formatter/
│   │       │   │   ├── ascii.go
│   │       │   │   └── delta.go
│   │       │   ├── gojsondiff.go
│   │       │   ├── unmarshaler.go
│   │       │   └── wercker.yml
│   │       └── golcs/
│   │           ├── LICENSE
│   │           ├── README.md
│   │           └── golcs.go
│   ├── go.etcd.io/
│   │   ├── bbolt/
│   │   │   ├── .gitignore
│   │   │   ├── .travis.yml
│   │   │   ├── LICENSE
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── bolt_386.go
│   │   │   ├── bolt_amd64.go
│   │   │   ├── bolt_arm.go
│   │   │   ├── bolt_arm64.go
│   │   │   ├── bolt_linux.go
│   │   │   ├── bolt_mips64x.go
│   │   │   ├── bolt_mipsx.go
│   │   │   ├── bolt_openbsd.go
│   │   │   ├── bolt_ppc.go
│   │   │   ├── bolt_ppc64.go
│   │   │   ├── bolt_ppc64le.go
│   │   │   ├── bolt_riscv64.go
│   │   │   ├── bolt_s390x.go
│   │   │   ├── bolt_unix.go
│   │   │   ├── bolt_unix_aix.go
│   │   │   ├── bolt_unix_solaris.go
│   │   │   ├── bolt_windows.go
│   │   │   ├── boltsync_unix.go
│   │   │   ├── bucket.go
│   │   │   ├── cursor.go
│   │   │   ├── db.go
│   │   │   ├── doc.go
│   │   │   ├── errors.go
│   │   │   ├── freelist.go
│   │   │   ├── freelist_hmap.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── node.go
│   │   │   ├── page.go
│   │   │   └── tx.go
│   │   └── etcd/
│   │       ├── .gitignore
│   │       ├── .header
│   │       ├── .travis.yml
│   │       ├── .words
│   │       ├── CONTRIBUTING.md
│   │       ├── DCO
│   │       ├── Dockerfile-release
│   │       ├── Dockerfile-release.arm64
│   │       ├── Dockerfile-release.ppc64le
│   │       ├── LICENSE
│   │       ├── MAINTAINERS
│   │       ├── MAINTAINERS_RULES.md
│   │       ├── Makefile
│   │       ├── NOTICE
│   │       ├── OWNERS
│   │       ├── Procfile
│   │       ├── Procfile.v2
│   │       ├── README.md
│   │       ├── auth/
│   │       │   ├── authpb/
│   │       │   │   ├── auth.pb.go
│   │       │   │   └── auth.proto
│   │       │   ├── doc.go
│   │       │   ├── jwt.go
│   │       │   ├── metrics.go
│   │       │   ├── nop.go
│   │       │   ├── options.go
│   │       │   ├── range_perm_cache.go
│   │       │   ├── simple_token.go
│   │       │   └── store.go
│   │       ├── bill-of-materials.json
│   │       ├── bill-of-materials.override.json
│   │       ├── build
│   │       ├── build.bat
│   │       ├── build.ps1
│   │       ├── client/
│   │       │   ├── README.md
│   │       │   ├── auth_role.go
│   │       │   ├── auth_user.go
│   │       │   ├── cancelreq.go
│   │       │   ├── client.go
│   │       │   ├── cluster_error.go
│   │       │   ├── curl.go
│   │       │   ├── discover.go
│   │       │   ├── doc.go
│   │       │   ├── json.go
│   │       │   ├── keys.go
│   │       │   ├── members.go
│   │       │   └── util.go
│   │       ├── clientv3/
│   │       │   ├── README.md
│   │       │   ├── auth.go
│   │       │   ├── balancer/
│   │       │   │   ├── balancer.go
│   │       │   │   ├── connectivity/
│   │       │   │   │   └── connectivity.go
│   │       │   │   ├── picker/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── err.go
│   │       │   │   │   ├── picker.go
│   │       │   │   │   └── roundrobin_balanced.go
│   │       │   │   ├── resolver/
│   │       │   │   │   └── endpoint/
│   │       │   │   │       └── endpoint.go
│   │       │   │   └── utils.go
│   │       │   ├── client.go
│   │       │   ├── cluster.go
│   │       │   ├── compact_op.go
│   │       │   ├── compare.go
│   │       │   ├── concurrency/
│   │       │   │   ├── doc.go
│   │       │   │   ├── election.go
│   │       │   │   ├── key.go
│   │       │   │   ├── mutex.go
│   │       │   │   ├── session.go
│   │       │   │   └── stm.go
│   │       │   ├── config.go
│   │       │   ├── credentials/
│   │       │   │   └── credentials.go
│   │       │   ├── ctx.go
│   │       │   ├── doc.go
│   │       │   ├── kv.go
│   │       │   ├── lease.go
│   │       │   ├── leasing/
│   │       │   │   ├── cache.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── txn.go
│   │       │   │   └── util.go
│   │       │   ├── logger.go
│   │       │   ├── maintenance.go
│   │       │   ├── mirror/
│   │       │   │   └── syncer.go
│   │       │   ├── namespace/
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── lease.go
│   │       │   │   ├── util.go
│   │       │   │   └── watch.go
│   │       │   ├── naming/
│   │       │   │   ├── doc.go
│   │       │   │   └── grpc.go
│   │       │   ├── op.go
│   │       │   ├── options.go
│   │       │   ├── ordering/
│   │       │   │   ├── doc.go
│   │       │   │   ├── kv.go
│   │       │   │   └── util.go
│   │       │   ├── retry.go
│   │       │   ├── retry_interceptor.go
│   │       │   ├── snapshot/
│   │       │   │   ├── doc.go
│   │       │   │   ├── util.go
│   │       │   │   └── v3_snapshot.go
│   │       │   ├── sort.go
│   │       │   ├── txn.go
│   │       │   ├── utils.go
│   │       │   └── watch.go
│   │       ├── code-of-conduct.md
│   │       ├── embed/
│   │       │   ├── config.go
│   │       │   ├── config_logging.go
│   │       │   ├── config_logging_journal_unix.go
│   │       │   ├── config_logging_journal_windows.go
│   │       │   ├── doc.go
│   │       │   ├── etcd.go
│   │       │   ├── serve.go
│   │       │   └── util.go
│   │       ├── etcd.conf.yml.sample
│   │       ├── etcdctl/
│   │       │   ├── README.md
│   │       │   ├── READMEv2.md
│   │       │   ├── ctlv2/
│   │       │   │   ├── command/
│   │       │   │   │   ├── auth_commands.go
│   │       │   │   │   ├── backup_command.go
│   │       │   │   │   ├── cluster_health.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── error.go
│   │       │   │   │   ├── exec_watch_command.go
│   │       │   │   │   ├── format.go
│   │       │   │   │   ├── get_command.go
│   │       │   │   │   ├── ls_command.go
│   │       │   │   │   ├── member_commands.go
│   │       │   │   │   ├── mk_command.go
│   │       │   │   │   ├── mkdir_command.go
│   │       │   │   │   ├── rm_command.go
│   │       │   │   │   ├── rmdir_command.go
│   │       │   │   │   ├── role_commands.go
│   │       │   │   │   ├── set_command.go
│   │       │   │   │   ├── set_dir_command.go
│   │       │   │   │   ├── update_command.go
│   │       │   │   │   ├── update_dir_command.go
│   │       │   │   │   ├── user_commands.go
│   │       │   │   │   ├── util.go
│   │       │   │   │   └── watch_command.go
│   │       │   │   ├── ctl.go
│   │       │   │   ├── ctl_cov.go
│   │       │   │   └── ctl_nocov.go
│   │       │   ├── ctlv3/
│   │       │   │   ├── command/
│   │       │   │   │   ├── alarm_command.go
│   │       │   │   │   ├── auth_command.go
│   │       │   │   │   ├── check.go
│   │       │   │   │   ├── compaction_command.go
│   │       │   │   │   ├── defrag_command.go
│   │       │   │   │   ├── del_command.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── elect_command.go
│   │       │   │   │   ├── ep_command.go
│   │       │   │   │   ├── error.go
│   │       │   │   │   ├── get_command.go
│   │       │   │   │   ├── global.go
│   │       │   │   │   ├── lease_command.go
│   │       │   │   │   ├── lock_command.go
│   │       │   │   │   ├── make_mirror_command.go
│   │       │   │   │   ├── member_command.go
│   │       │   │   │   ├── migrate_command.go
│   │       │   │   │   ├── move_leader_command.go
│   │       │   │   │   ├── printer.go
│   │       │   │   │   ├── printer_fields.go
│   │       │   │   │   ├── printer_json.go
│   │       │   │   │   ├── printer_protobuf.go
│   │       │   │   │   ├── printer_simple.go
│   │       │   │   │   ├── printer_table.go
│   │       │   │   │   ├── put_command.go
│   │       │   │   │   ├── role_command.go
│   │       │   │   │   ├── snapshot_command.go
│   │       │   │   │   ├── txn_command.go
│   │       │   │   │   ├── user_command.go
│   │       │   │   │   ├── util.go
│   │       │   │   │   ├── version_command.go
│   │       │   │   │   └── watch_command.go
│   │       │   │   ├── ctl.go
│   │       │   │   ├── ctl_cov.go
│   │       │   │   ├── ctl_nocov.go
│   │       │   │   └── help.go
│   │       │   └── main.go
│   │       ├── etcdmain/
│   │       │   ├── config.go
│   │       │   ├── doc.go
│   │       │   ├── etcd.go
│   │       │   ├── gateway.go
│   │       │   ├── grpc_proxy.go
│   │       │   ├── help.go
│   │       │   ├── main.go
│   │       │   └── util.go
│   │       ├── etcdserver/
│   │       │   ├── api/
│   │       │   │   ├── capability.go
│   │       │   │   ├── cluster.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── etcdhttp/
│   │       │   │   │   ├── base.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   └── peer.go
│   │       │   │   ├── membership/
│   │       │   │   │   ├── cluster.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── errors.go
│   │       │   │   │   ├── member.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   └── store.go
│   │       │   │   ├── rafthttp/
│   │       │   │   │   ├── coder.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── http.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── msg_codec.go
│   │       │   │   │   ├── msgappv2_codec.go
│   │       │   │   │   ├── peer.go
│   │       │   │   │   ├── peer_status.go
│   │       │   │   │   ├── pipeline.go
│   │       │   │   │   ├── probing_status.go
│   │       │   │   │   ├── remote.go
│   │       │   │   │   ├── snapshot_sender.go
│   │       │   │   │   ├── stream.go
│   │       │   │   │   ├── transport.go
│   │       │   │   │   ├── urlpick.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── snap/
│   │       │   │   │   ├── db.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── message.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── snappb/
│   │       │   │   │   │   ├── snap.pb.go
│   │       │   │   │   │   └── snap.proto
│   │       │   │   │   └── snapshotter.go
│   │       │   │   ├── v2auth/
│   │       │   │   │   ├── auth.go
│   │       │   │   │   └── auth_requests.go
│   │       │   │   ├── v2discovery/
│   │       │   │   │   └── discovery.go
│   │       │   │   ├── v2error/
│   │       │   │   │   └── error.go
│   │       │   │   ├── v2http/
│   │       │   │   │   ├── capability.go
│   │       │   │   │   ├── client.go
│   │       │   │   │   ├── client_auth.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── http.go
│   │       │   │   │   ├── httptypes/
│   │       │   │   │   │   ├── errors.go
│   │       │   │   │   │   └── member.go
│   │       │   │   │   └── metrics.go
│   │       │   │   ├── v2stats/
│   │       │   │   │   ├── leader.go
│   │       │   │   │   ├── queue.go
│   │       │   │   │   ├── server.go
│   │       │   │   │   └── stats.go
│   │       │   │   ├── v2store/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── event.go
│   │       │   │   │   ├── event_history.go
│   │       │   │   │   ├── event_queue.go
│   │       │   │   │   ├── metrics.go
│   │       │   │   │   ├── node.go
│   │       │   │   │   ├── node_extern.go
│   │       │   │   │   ├── stats.go
│   │       │   │   │   ├── store.go
│   │       │   │   │   ├── ttl_key_heap.go
│   │       │   │   │   ├── watcher.go
│   │       │   │   │   └── watcher_hub.go
│   │       │   │   ├── v2v3/
│   │       │   │   │   ├── cluster.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── server.go
│   │       │   │   │   ├── store.go
│   │       │   │   │   └── watcher.go
│   │       │   │   ├── v3alarm/
│   │       │   │   │   └── alarms.go
│   │       │   │   ├── v3client/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   └── v3client.go
│   │       │   │   ├── v3compactor/
│   │       │   │   │   ├── compactor.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── periodic.go
│   │       │   │   │   └── revision.go
│   │       │   │   ├── v3election/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── election.go
│   │       │   │   │   └── v3electionpb/
│   │       │   │   │       ├── gw/
│   │       │   │   │       │   └── v3election.pb.gw.go
│   │       │   │   │       ├── v3election.pb.go
│   │       │   │   │       └── v3election.proto
│   │       │   │   ├── v3lock/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── lock.go
│   │       │   │   │   └── v3lockpb/
│   │       │   │   │       ├── gw/
│   │       │   │   │       │   └── v3lock.pb.gw.go
│   │       │   │   │       ├── v3lock.pb.go
│   │       │   │   │       └── v3lock.proto
│   │       │   │   └── v3rpc/
│   │       │   │       ├── auth.go
│   │       │   │       ├── codec.go
│   │       │   │       ├── grpc.go
│   │       │   │       ├── header.go
│   │       │   │       ├── interceptor.go
│   │       │   │       ├── key.go
│   │       │   │       ├── lease.go
│   │       │   │       ├── maintenance.go
│   │       │   │       ├── member.go
│   │       │   │       ├── metrics.go
│   │       │   │       ├── quota.go
│   │       │   │       ├── rpctypes/
│   │       │   │       │   ├── doc.go
│   │       │   │       │   ├── error.go
│   │       │   │       │   ├── md.go
│   │       │   │       │   └── metadatafields.go
│   │       │   │       ├── util.go
│   │       │   │       └── watch.go
│   │       │   ├── apply.go
│   │       │   ├── apply_auth.go
│   │       │   ├── apply_v2.go
│   │       │   ├── backend.go
│   │       │   ├── cluster_util.go
│   │       │   ├── config.go
│   │       │   ├── consistent_index.go
│   │       │   ├── corrupt.go
│   │       │   ├── doc.go
│   │       │   ├── errors.go
│   │       │   ├── etcdserverpb/
│   │       │   │   ├── etcdserver.pb.go
│   │       │   │   ├── etcdserver.proto
│   │       │   │   ├── gw/
│   │       │   │   │   └── rpc.pb.gw.go
│   │       │   │   ├── raft_internal.pb.go
│   │       │   │   ├── raft_internal.proto
│   │       │   │   ├── raft_internal_stringer.go
│   │       │   │   ├── rpc.pb.go
│   │       │   │   └── rpc.proto
│   │       │   ├── metrics.go
│   │       │   ├── quota.go
│   │       │   ├── raft.go
│   │       │   ├── server.go
│   │       │   ├── server_access_control.go
│   │       │   ├── snapshot_merge.go
│   │       │   ├── storage.go
│   │       │   ├── util.go
│   │       │   ├── v2_server.go
│   │       │   └── v3_server.go
│   │       ├── functional.yaml
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── lease/
│   │       │   ├── doc.go
│   │       │   ├── lease_queue.go
│   │       │   ├── leasehttp/
│   │       │   │   ├── doc.go
│   │       │   │   └── http.go
│   │       │   ├── leasepb/
│   │       │   │   ├── lease.pb.go
│   │       │   │   └── lease.proto
│   │       │   ├── lessor.go
│   │       │   └── metrics.go
│   │       ├── main.go
│   │       ├── mvcc/
│   │       │   ├── backend/
│   │       │   │   ├── backend.go
│   │       │   │   ├── batch_tx.go
│   │       │   │   ├── config_default.go
│   │       │   │   ├── config_linux.go
│   │       │   │   ├── config_windows.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── read_tx.go
│   │       │   │   └── tx_buffer.go
│   │       │   ├── doc.go
│   │       │   ├── index.go
│   │       │   ├── key_index.go
│   │       │   ├── kv.go
│   │       │   ├── kv_view.go
│   │       │   ├── kvstore.go
│   │       │   ├── kvstore_compaction.go
│   │       │   ├── kvstore_txn.go
│   │       │   ├── metrics.go
│   │       │   ├── metrics_txn.go
│   │       │   ├── mvccpb/
│   │       │   │   ├── kv.pb.go
│   │       │   │   └── kv.proto
│   │       │   ├── revision.go
│   │       │   ├── util.go
│   │       │   ├── watchable_store.go
│   │       │   ├── watchable_store_txn.go
│   │       │   ├── watcher.go
│   │       │   └── watcher_group.go
│   │       ├── pkg/
│   │       │   ├── adt/
│   │       │   │   ├── README.md
│   │       │   │   ├── doc.go
│   │       │   │   └── interval_tree.go
│   │       │   ├── contention/
│   │       │   │   ├── contention.go
│   │       │   │   └── doc.go
│   │       │   ├── cpuutil/
│   │       │   │   ├── doc.go
│   │       │   │   └── endian.go
│   │       │   ├── crc/
│   │       │   │   └── crc.go
│   │       │   ├── debugutil/
│   │       │   │   ├── doc.go
│   │       │   │   └── pprof.go
│   │       │   ├── fileutil/
│   │       │   │   ├── dir_unix.go
│   │       │   │   ├── dir_windows.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── fileutil.go
│   │       │   │   ├── lock.go
│   │       │   │   ├── lock_flock.go
│   │       │   │   ├── lock_linux.go
│   │       │   │   ├── lock_plan9.go
│   │       │   │   ├── lock_solaris.go
│   │       │   │   ├── lock_unix.go
│   │       │   │   ├── lock_windows.go
│   │       │   │   ├── preallocate.go
│   │       │   │   ├── preallocate_darwin.go
│   │       │   │   ├── preallocate_unix.go
│   │       │   │   ├── preallocate_unsupported.go
│   │       │   │   ├── purge.go
│   │       │   │   ├── read_dir.go
│   │       │   │   ├── sync.go
│   │       │   │   ├── sync_darwin.go
│   │       │   │   └── sync_linux.go
│   │       │   ├── flags/
│   │       │   │   ├── flag.go
│   │       │   │   ├── ignored.go
│   │       │   │   ├── selective_string.go
│   │       │   │   ├── strings.go
│   │       │   │   ├── unique_strings.go
│   │       │   │   ├── unique_urls.go
│   │       │   │   └── urls.go
│   │       │   ├── httputil/
│   │       │   │   └── httputil.go
│   │       │   ├── idutil/
│   │       │   │   └── id.go
│   │       │   ├── ioutil/
│   │       │   │   ├── pagewriter.go
│   │       │   │   ├── readcloser.go
│   │       │   │   ├── reader.go
│   │       │   │   └── util.go
│   │       │   ├── logutil/
│   │       │   │   ├── discard_logger.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── log_level.go
│   │       │   │   ├── logger.go
│   │       │   │   ├── merge_logger.go
│   │       │   │   ├── package_logger.go
│   │       │   │   ├── zap.go
│   │       │   │   ├── zap_grpc.go
│   │       │   │   ├── zap_journal.go
│   │       │   │   └── zap_raft.go
│   │       │   ├── netutil/
│   │       │   │   ├── doc.go
│   │       │   │   ├── isolate_linux.go
│   │       │   │   ├── isolate_stub.go
│   │       │   │   ├── netutil.go
│   │       │   │   ├── routes.go
│   │       │   │   └── routes_linux.go
│   │       │   ├── osutil/
│   │       │   │   ├── interrupt_unix.go
│   │       │   │   ├── interrupt_windows.go
│   │       │   │   ├── osutil.go
│   │       │   │   ├── signal.go
│   │       │   │   └── signal_linux.go
│   │       │   ├── pathutil/
│   │       │   │   └── path.go
│   │       │   ├── pbutil/
│   │       │   │   └── pbutil.go
│   │       │   ├── report/
│   │       │   │   ├── doc.go
│   │       │   │   ├── report.go
│   │       │   │   ├── timeseries.go
│   │       │   │   └── weighted.go
│   │       │   ├── runtime/
│   │       │   │   ├── fds_linux.go
│   │       │   │   └── fds_other.go
│   │       │   ├── schedule/
│   │       │   │   ├── doc.go
│   │       │   │   └── schedule.go
│   │       │   ├── srv/
│   │       │   │   └── srv.go
│   │       │   ├── systemd/
│   │       │   │   ├── doc.go
│   │       │   │   └── journal.go
│   │       │   ├── tlsutil/
│   │       │   │   ├── cipher_suites.go
│   │       │   │   ├── doc.go
│   │       │   │   └── tlsutil.go
│   │       │   ├── traceutil/
│   │       │   │   └── trace.go
│   │       │   ├── transport/
│   │       │   │   ├── doc.go
│   │       │   │   ├── keepalive_listener.go
│   │       │   │   ├── limit_listen.go
│   │       │   │   ├── listener.go
│   │       │   │   ├── listener_tls.go
│   │       │   │   ├── timeout_conn.go
│   │       │   │   ├── timeout_dialer.go
│   │       │   │   ├── timeout_listener.go
│   │       │   │   ├── timeout_transport.go
│   │       │   │   ├── tls.go
│   │       │   │   ├── transport.go
│   │       │   │   └── unix_listener.go
│   │       │   ├── types/
│   │       │   │   ├── doc.go
│   │       │   │   ├── id.go
│   │       │   │   ├── set.go
│   │       │   │   ├── slice.go
│   │       │   │   ├── urls.go
│   │       │   │   └── urlsmap.go
│   │       │   └── wait/
│   │       │       ├── wait.go
│   │       │       └── wait_time.go
│   │       ├── proxy/
│   │       │   ├── grpcproxy/
│   │       │   │   ├── adapter/
│   │       │   │   │   ├── auth_client_adapter.go
│   │       │   │   │   ├── chan_stream.go
│   │       │   │   │   ├── cluster_client_adapter.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── election_client_adapter.go
│   │       │   │   │   ├── kv_client_adapter.go
│   │       │   │   │   ├── lease_client_adapter.go
│   │       │   │   │   ├── lock_client_adapter.go
│   │       │   │   │   ├── maintenance_client_adapter.go
│   │       │   │   │   └── watch_client_adapter.go
│   │       │   │   ├── auth.go
│   │       │   │   ├── cache/
│   │       │   │   │   └── store.go
│   │       │   │   ├── cluster.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── election.go
│   │       │   │   ├── health.go
│   │       │   │   ├── kv.go
│   │       │   │   ├── leader.go
│   │       │   │   ├── lease.go
│   │       │   │   ├── lock.go
│   │       │   │   ├── logger.go
│   │       │   │   ├── maintenance.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── register.go
│   │       │   │   ├── util.go
│   │       │   │   ├── watch.go
│   │       │   │   ├── watch_broadcast.go
│   │       │   │   ├── watch_broadcasts.go
│   │       │   │   ├── watch_ranges.go
│   │       │   │   └── watcher.go
│   │       │   ├── httpproxy/
│   │       │   │   ├── director.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── metrics.go
│   │       │   │   ├── proxy.go
│   │       │   │   └── reverse.go
│   │       │   └── tcpproxy/
│   │       │       ├── doc.go
│   │       │       └── userspace.go
│   │       ├── raft/
│   │       │   ├── OWNERS
│   │       │   ├── README.md
│   │       │   ├── bootstrap.go
│   │       │   ├── confchange/
│   │       │   │   ├── confchange.go
│   │       │   │   └── restore.go
│   │       │   ├── design.md
│   │       │   ├── doc.go
│   │       │   ├── log.go
│   │       │   ├── log_unstable.go
│   │       │   ├── logger.go
│   │       │   ├── node.go
│   │       │   ├── quorum/
│   │       │   │   ├── joint.go
│   │       │   │   ├── majority.go
│   │       │   │   ├── quorum.go
│   │       │   │   └── voteresult_string.go
│   │       │   ├── raft.go
│   │       │   ├── raftpb/
│   │       │   │   ├── confchange.go
│   │       │   │   ├── confstate.go
│   │       │   │   ├── raft.pb.go
│   │       │   │   └── raft.proto
│   │       │   ├── rawnode.go
│   │       │   ├── read_only.go
│   │       │   ├── status.go
│   │       │   ├── storage.go
│   │       │   ├── tracker/
│   │       │   │   ├── inflights.go
│   │       │   │   ├── progress.go
│   │       │   │   ├── state.go
│   │       │   │   └── tracker.go
│   │       │   └── util.go
│   │       ├── test
│   │       ├── version/
│   │       │   └── version.go
│   │       └── wal/
│   │           ├── decoder.go
│   │           ├── doc.go
│   │           ├── encoder.go
│   │           ├── file_pipeline.go
│   │           ├── metrics.go
│   │           ├── repair.go
│   │           ├── util.go
│   │           ├── wal.go
│   │           └── walpb/
│   │               ├── record.go
│   │               ├── record.pb.go
│   │               └── record.proto
│   ├── go.mozilla.org/
│   │   └── mozlog/
│   │       ├── .gitignore
│   │       ├── .travis.yml
│   │       ├── LICENSE
│   │       ├── README.md
│   │       └── mozlog.go
│   ├── go.uber.org/
│   │   └── tools/
│   │       └── LICENSE
│   ├── golang.org/
│   │   └── x/
│   │       ├── crypto/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bcrypt/
│   │       │   │   ├── base64.go
│   │       │   │   └── bcrypt.go
│   │       │   ├── blowfish/
│   │       │   │   ├── block.go
│   │       │   │   ├── cipher.go
│   │       │   │   └── const.go
│   │       │   ├── cryptobyte/
│   │       │   │   ├── asn1/
│   │       │   │   │   └── asn1.go
│   │       │   │   ├── asn1.go
│   │       │   │   ├── builder.go
│   │       │   │   └── string.go
│   │       │   ├── ed25519/
│   │       │   │   ├── ed25519.go
│   │       │   │   ├── ed25519_go113.go
│   │       │   │   └── internal/
│   │       │   │       └── edwards25519/
│   │       │   │           ├── const.go
│   │       │   │           └── edwards25519.go
│   │       │   └── ocsp/
│   │       │       └── ocsp.go
│   │       ├── lint/
│   │       │   ├── .travis.yml
│   │       │   ├── CONTRIBUTING.md
│   │       │   ├── LICENSE
│   │       │   ├── README.md
│   │       │   ├── go.mod
│   │       │   ├── go.sum
│   │       │   ├── golint/
│   │       │   │   ├── golint.go
│   │       │   │   ├── import.go
│   │       │   │   └── importcomment.go
│   │       │   └── lint.go
│   │       ├── mod/
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── semver/
│   │       │       └── semver.go
│   │       ├── net/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── bpf/
│   │       │   │   ├── asm.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── instructions.go
│   │       │   │   ├── setter.go
│   │       │   │   ├── vm.go
│   │       │   │   └── vm_instructions.go
│   │       │   ├── context/
│   │       │   │   ├── context.go
│   │       │   │   ├── ctxhttp/
│   │       │   │   │   └── ctxhttp.go
│   │       │   │   ├── go17.go
│   │       │   │   ├── go19.go
│   │       │   │   ├── pre_go17.go
│   │       │   │   └── pre_go19.go
│   │       │   ├── http/
│   │       │   │   └── httpguts/
│   │       │   │       ├── guts.go
│   │       │   │       └── httplex.go
│   │       │   ├── http2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── Dockerfile
│   │       │   │   ├── Makefile
│   │       │   │   ├── README
│   │       │   │   ├── ciphers.go
│   │       │   │   ├── client_conn_pool.go
│   │       │   │   ├── databuffer.go
│   │       │   │   ├── errors.go
│   │       │   │   ├── flow.go
│   │       │   │   ├── frame.go
│   │       │   │   ├── go111.go
│   │       │   │   ├── gotrack.go
│   │       │   │   ├── headermap.go
│   │       │   │   ├── hpack/
│   │       │   │   │   ├── encode.go
│   │       │   │   │   ├── hpack.go
│   │       │   │   │   ├── huffman.go
│   │       │   │   │   └── tables.go
│   │       │   │   ├── http2.go
│   │       │   │   ├── not_go111.go
│   │       │   │   ├── pipe.go
│   │       │   │   ├── server.go
│   │       │   │   ├── transport.go
│   │       │   │   ├── write.go
│   │       │   │   ├── writesched.go
│   │       │   │   ├── writesched_priority.go
│   │       │   │   └── writesched_random.go
│   │       │   ├── idna/
│   │       │   │   ├── idna10.0.0.go
│   │       │   │   ├── idna9.0.0.go
│   │       │   │   ├── punycode.go
│   │       │   │   ├── tables10.0.0.go
│   │       │   │   ├── tables11.0.0.go
│   │       │   │   ├── tables12.0.0.go
│   │       │   │   ├── tables13.0.0.go
│   │       │   │   ├── tables9.0.0.go
│   │       │   │   ├── trie.go
│   │       │   │   └── trieval.go
│   │       │   ├── internal/
│   │       │   │   ├── iana/
│   │       │   │   │   └── const.go
│   │       │   │   ├── socket/
│   │       │   │   │   ├── cmsghdr.go
│   │       │   │   │   ├── cmsghdr_bsd.go
│   │       │   │   │   ├── cmsghdr_linux_32bit.go
│   │       │   │   │   ├── cmsghdr_linux_64bit.go
│   │       │   │   │   ├── cmsghdr_solaris_64bit.go
│   │       │   │   │   ├── cmsghdr_stub.go
│   │       │   │   │   ├── cmsghdr_unix.go
│   │       │   │   │   ├── cmsghdr_zos_s390x.go
│   │       │   │   │   ├── empty.s
│   │       │   │   │   ├── error_unix.go
│   │       │   │   │   ├── error_windows.go
│   │       │   │   │   ├── iovec_32bit.go
│   │       │   │   │   ├── iovec_64bit.go
│   │       │   │   │   ├── iovec_solaris_64bit.go
│   │       │   │   │   ├── iovec_stub.go
│   │       │   │   │   ├── mmsghdr_stub.go
│   │       │   │   │   ├── mmsghdr_unix.go
│   │       │   │   │   ├── msghdr_bsd.go
│   │       │   │   │   ├── msghdr_bsdvar.go
│   │       │   │   │   ├── msghdr_linux.go
│   │       │   │   │   ├── msghdr_linux_32bit.go
│   │       │   │   │   ├── msghdr_linux_64bit.go
│   │       │   │   │   ├── msghdr_openbsd.go
│   │       │   │   │   ├── msghdr_solaris_64bit.go
│   │       │   │   │   ├── msghdr_stub.go
│   │       │   │   │   ├── msghdr_zos_s390x.go
│   │       │   │   │   ├── norace.go
│   │       │   │   │   ├── race.go
│   │       │   │   │   ├── rawconn.go
│   │       │   │   │   ├── rawconn_mmsg.go
│   │       │   │   │   ├── rawconn_msg.go
│   │       │   │   │   ├── rawconn_nommsg.go
│   │       │   │   │   ├── rawconn_nomsg.go
│   │       │   │   │   ├── socket.go
│   │       │   │   │   ├── sys.go
│   │       │   │   │   ├── sys_bsd.go
│   │       │   │   │   ├── sys_const_unix.go
│   │       │   │   │   ├── sys_const_zos.go
│   │       │   │   │   ├── sys_linkname.go
│   │       │   │   │   ├── sys_linux.go
│   │       │   │   │   ├── sys_linux_386.go
│   │       │   │   │   ├── sys_linux_386.s
│   │       │   │   │   ├── sys_linux_amd64.go
│   │       │   │   │   ├── sys_linux_arm.go
│   │       │   │   │   ├── sys_linux_arm64.go
│   │       │   │   │   ├── sys_linux_mips.go
│   │       │   │   │   ├── sys_linux_mips64.go
│   │       │   │   │   ├── sys_linux_mips64le.go
│   │       │   │   │   ├── sys_linux_mipsle.go
│   │       │   │   │   ├── sys_linux_ppc64.go
│   │       │   │   │   ├── sys_linux_ppc64le.go
│   │       │   │   │   ├── sys_linux_riscv64.go
│   │       │   │   │   ├── sys_linux_s390x.go
│   │       │   │   │   ├── sys_linux_s390x.s
│   │       │   │   │   ├── sys_netbsd.go
│   │       │   │   │   ├── sys_posix.go
│   │       │   │   │   ├── sys_solaris.go
│   │       │   │   │   ├── sys_solaris_amd64.s
│   │       │   │   │   ├── sys_stub.go
│   │       │   │   │   ├── sys_unix.go
│   │       │   │   │   ├── sys_windows.go
│   │       │   │   │   ├── sys_zos_s390x.go
│   │       │   │   │   ├── sys_zos_s390x.s
│   │       │   │   │   ├── zsys_aix_ppc64.go
│   │       │   │   │   ├── zsys_darwin_386.go
│   │       │   │   │   ├── zsys_darwin_amd64.go
│   │       │   │   │   ├── zsys_darwin_arm.go
│   │       │   │   │   ├── zsys_darwin_arm64.go
│   │       │   │   │   ├── zsys_dragonfly_amd64.go
│   │       │   │   │   ├── zsys_freebsd_386.go
│   │       │   │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   │   ├── zsys_freebsd_arm.go
│   │       │   │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   │   ├── zsys_linux_386.go
│   │       │   │   │   ├── zsys_linux_amd64.go
│   │       │   │   │   ├── zsys_linux_arm.go
│   │       │   │   │   ├── zsys_linux_arm64.go
│   │       │   │   │   ├── zsys_linux_mips.go
│   │       │   │   │   ├── zsys_linux_mips64.go
│   │       │   │   │   ├── zsys_linux_mips64le.go
│   │       │   │   │   ├── zsys_linux_mipsle.go
│   │       │   │   │   ├── zsys_linux_ppc64.go
│   │       │   │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   │   ├── zsys_linux_riscv64.go
│   │       │   │   │   ├── zsys_linux_s390x.go
│   │       │   │   │   ├── zsys_netbsd_386.go
│   │       │   │   │   ├── zsys_netbsd_amd64.go
│   │       │   │   │   ├── zsys_netbsd_arm.go
│   │       │   │   │   ├── zsys_netbsd_arm64.go
│   │       │   │   │   ├── zsys_openbsd_386.go
│   │       │   │   │   ├── zsys_openbsd_amd64.go
│   │       │   │   │   ├── zsys_openbsd_arm.go
│   │       │   │   │   ├── zsys_openbsd_arm64.go
│   │       │   │   │   ├── zsys_solaris_amd64.go
│   │       │   │   │   └── zsys_zos_s390x.go
│   │       │   │   └── timeseries/
│   │       │   │       └── timeseries.go
│   │       │   ├── ipv4/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_bsd.go
│   │       │   │   ├── control_pktinfo.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── control_zos.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── packet.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_asmreqn.go
│   │       │   │   ├── sys_asmreqn_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_dragonfly.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   ├── ipv6/
│   │       │   │   ├── batch.go
│   │       │   │   ├── control.go
│   │       │   │   ├── control_rfc2292_unix.go
│   │       │   │   ├── control_rfc3542_unix.go
│   │       │   │   ├── control_stub.go
│   │       │   │   ├── control_unix.go
│   │       │   │   ├── control_windows.go
│   │       │   │   ├── dgramopt.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── endpoint.go
│   │       │   │   ├── genericopt.go
│   │       │   │   ├── header.go
│   │       │   │   ├── helper.go
│   │       │   │   ├── iana.go
│   │       │   │   ├── icmp.go
│   │       │   │   ├── icmp_bsd.go
│   │       │   │   ├── icmp_linux.go
│   │       │   │   ├── icmp_solaris.go
│   │       │   │   ├── icmp_stub.go
│   │       │   │   ├── icmp_windows.go
│   │       │   │   ├── icmp_zos.go
│   │       │   │   ├── payload.go
│   │       │   │   ├── payload_cmsg.go
│   │       │   │   ├── payload_nocmsg.go
│   │       │   │   ├── sockopt.go
│   │       │   │   ├── sockopt_posix.go
│   │       │   │   ├── sockopt_stub.go
│   │       │   │   ├── sys_aix.go
│   │       │   │   ├── sys_asmreq.go
│   │       │   │   ├── sys_asmreq_stub.go
│   │       │   │   ├── sys_bpf.go
│   │       │   │   ├── sys_bpf_stub.go
│   │       │   │   ├── sys_bsd.go
│   │       │   │   ├── sys_darwin.go
│   │       │   │   ├── sys_freebsd.go
│   │       │   │   ├── sys_linux.go
│   │       │   │   ├── sys_solaris.go
│   │       │   │   ├── sys_ssmreq.go
│   │       │   │   ├── sys_ssmreq_stub.go
│   │       │   │   ├── sys_stub.go
│   │       │   │   ├── sys_windows.go
│   │       │   │   ├── sys_zos.go
│   │       │   │   ├── zsys_aix_ppc64.go
│   │       │   │   ├── zsys_darwin.go
│   │       │   │   ├── zsys_dragonfly.go
│   │       │   │   ├── zsys_freebsd_386.go
│   │       │   │   ├── zsys_freebsd_amd64.go
│   │       │   │   ├── zsys_freebsd_arm.go
│   │       │   │   ├── zsys_freebsd_arm64.go
│   │       │   │   ├── zsys_linux_386.go
│   │       │   │   ├── zsys_linux_amd64.go
│   │       │   │   ├── zsys_linux_arm.go
│   │       │   │   ├── zsys_linux_arm64.go
│   │       │   │   ├── zsys_linux_mips.go
│   │       │   │   ├── zsys_linux_mips64.go
│   │       │   │   ├── zsys_linux_mips64le.go
│   │       │   │   ├── zsys_linux_mipsle.go
│   │       │   │   ├── zsys_linux_ppc.go
│   │       │   │   ├── zsys_linux_ppc64.go
│   │       │   │   ├── zsys_linux_ppc64le.go
│   │       │   │   ├── zsys_linux_riscv64.go
│   │       │   │   ├── zsys_linux_s390x.go
│   │       │   │   ├── zsys_netbsd.go
│   │       │   │   ├── zsys_openbsd.go
│   │       │   │   ├── zsys_solaris.go
│   │       │   │   └── zsys_zos_s390x.go
│   │       │   └── trace/
│   │       │       ├── events.go
│   │       │       ├── histogram.go
│   │       │       └── trace.go
│   │       ├── sys/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── internal/
│   │       │   │   └── unsafeheader/
│   │       │   │       └── unsafeheader.go
│   │       │   ├── unix/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── README.md
│   │       │   │   ├── affinity_linux.go
│   │       │   │   ├── aliases.go
│   │       │   │   ├── asm_aix_ppc64.s
│   │       │   │   ├── asm_darwin_386.s
│   │       │   │   ├── asm_darwin_amd64.s
│   │       │   │   ├── asm_darwin_arm.s
│   │       │   │   ├── asm_darwin_arm64.s
│   │       │   │   ├── asm_dragonfly_amd64.s
│   │       │   │   ├── asm_freebsd_386.s
│   │       │   │   ├── asm_freebsd_amd64.s
│   │       │   │   ├── asm_freebsd_arm.s
│   │       │   │   ├── asm_freebsd_arm64.s
│   │       │   │   ├── asm_linux_386.s
│   │       │   │   ├── asm_linux_amd64.s
│   │       │   │   ├── asm_linux_arm.s
│   │       │   │   ├── asm_linux_arm64.s
│   │       │   │   ├── asm_linux_mips64x.s
│   │       │   │   ├── asm_linux_mipsx.s
│   │       │   │   ├── asm_linux_ppc64x.s
│   │       │   │   ├── asm_linux_riscv64.s
│   │       │   │   ├── asm_linux_s390x.s
│   │       │   │   ├── asm_netbsd_386.s
│   │       │   │   ├── asm_netbsd_amd64.s
│   │       │   │   ├── asm_netbsd_arm.s
│   │       │   │   ├── asm_netbsd_arm64.s
│   │       │   │   ├── asm_openbsd_386.s
│   │       │   │   ├── asm_openbsd_amd64.s
│   │       │   │   ├── asm_openbsd_arm.s
│   │       │   │   ├── asm_openbsd_arm64.s
│   │       │   │   ├── asm_openbsd_mips64.s
│   │       │   │   ├── asm_solaris_amd64.s
│   │       │   │   ├── bluetooth_linux.go
│   │       │   │   ├── cap_freebsd.go
│   │       │   │   ├── constants.go
│   │       │   │   ├── dev_aix_ppc.go
│   │       │   │   ├── dev_aix_ppc64.go
│   │       │   │   ├── dev_darwin.go
│   │       │   │   ├── dev_dragonfly.go
│   │       │   │   ├── dev_freebsd.go
│   │       │   │   ├── dev_linux.go
│   │       │   │   ├── dev_netbsd.go
│   │       │   │   ├── dev_openbsd.go
│   │       │   │   ├── dirent.go
│   │       │   │   ├── endian_big.go
│   │       │   │   ├── endian_little.go
│   │       │   │   ├── env_unix.go
│   │       │   │   ├── errors_freebsd_386.go
│   │       │   │   ├── errors_freebsd_amd64.go
│   │       │   │   ├── errors_freebsd_arm.go
│   │       │   │   ├── errors_freebsd_arm64.go
│   │       │   │   ├── fcntl.go
│   │       │   │   ├── fcntl_darwin.go
│   │       │   │   ├── fcntl_linux_32bit.go
│   │       │   │   ├── fdset.go
│   │       │   │   ├── gccgo.go
│   │       │   │   ├── gccgo_c.c
│   │       │   │   ├── gccgo_linux_amd64.go
│   │       │   │   ├── ioctl.go
│   │       │   │   ├── mkall.sh
│   │       │   │   ├── mkerrors.sh
│   │       │   │   ├── pagesize_unix.go
│   │       │   │   ├── pledge_openbsd.go
│   │       │   │   ├── race.go
│   │       │   │   ├── race0.go
│   │       │   │   ├── readdirent_getdents.go
│   │       │   │   ├── readdirent_getdirentries.go
│   │       │   │   ├── sockcmsg_dragonfly.go
│   │       │   │   ├── sockcmsg_linux.go
│   │       │   │   ├── sockcmsg_unix.go
│   │       │   │   ├── sockcmsg_unix_other.go
│   │       │   │   ├── str.go
│   │       │   │   ├── syscall.go
│   │       │   │   ├── syscall_aix.go
│   │       │   │   ├── syscall_aix_ppc.go
│   │       │   │   ├── syscall_aix_ppc64.go
│   │       │   │   ├── syscall_bsd.go
│   │       │   │   ├── syscall_darwin.1_12.go
│   │       │   │   ├── syscall_darwin.1_13.go
│   │       │   │   ├── syscall_darwin.go
│   │       │   │   ├── syscall_darwin_386.go
│   │       │   │   ├── syscall_darwin_amd64.go
│   │       │   │   ├── syscall_darwin_arm.go
│   │       │   │   ├── syscall_darwin_arm64.go
│   │       │   │   ├── syscall_darwin_libSystem.go
│   │       │   │   ├── syscall_dragonfly.go
│   │       │   │   ├── syscall_dragonfly_amd64.go
│   │       │   │   ├── syscall_freebsd.go
│   │       │   │   ├── syscall_freebsd_386.go
│   │       │   │   ├── syscall_freebsd_amd64.go
│   │       │   │   ├── syscall_freebsd_arm.go
│   │       │   │   ├── syscall_freebsd_arm64.go
│   │       │   │   ├── syscall_illumos.go
│   │       │   │   ├── syscall_linux.go
│   │       │   │   ├── syscall_linux_386.go
│   │       │   │   ├── syscall_linux_amd64.go
│   │       │   │   ├── syscall_linux_amd64_gc.go
│   │       │   │   ├── syscall_linux_arm.go
│   │       │   │   ├── syscall_linux_arm64.go
│   │       │   │   ├── syscall_linux_gc.go
│   │       │   │   ├── syscall_linux_gc_386.go
│   │       │   │   ├── syscall_linux_gc_arm.go
│   │       │   │   ├── syscall_linux_gccgo_386.go
│   │       │   │   ├── syscall_linux_gccgo_arm.go
│   │       │   │   ├── syscall_linux_mips64x.go
│   │       │   │   ├── syscall_linux_mipsx.go
│   │       │   │   ├── syscall_linux_ppc64x.go
│   │       │   │   ├── syscall_linux_riscv64.go
│   │       │   │   ├── syscall_linux_s390x.go
│   │       │   │   ├── syscall_linux_sparc64.go
│   │       │   │   ├── syscall_netbsd.go
│   │       │   │   ├── syscall_netbsd_386.go
│   │       │   │   ├── syscall_netbsd_amd64.go
│   │       │   │   ├── syscall_netbsd_arm.go
│   │       │   │   ├── syscall_netbsd_arm64.go
│   │       │   │   ├── syscall_openbsd.go
│   │       │   │   ├── syscall_openbsd_386.go
│   │       │   │   ├── syscall_openbsd_amd64.go
│   │       │   │   ├── syscall_openbsd_arm.go
│   │       │   │   ├── syscall_openbsd_arm64.go
│   │       │   │   ├── syscall_openbsd_mips64.go
│   │       │   │   ├── syscall_solaris.go
│   │       │   │   ├── syscall_solaris_amd64.go
│   │       │   │   ├── syscall_unix.go
│   │       │   │   ├── syscall_unix_gc.go
│   │       │   │   ├── syscall_unix_gc_ppc64x.go
│   │       │   │   ├── timestruct.go
│   │       │   │   ├── unveil_openbsd.go
│   │       │   │   ├── xattr_bsd.go
│   │       │   │   ├── zerrors_aix_ppc.go
│   │       │   │   ├── zerrors_aix_ppc64.go
│   │       │   │   ├── zerrors_darwin_386.go
│   │       │   │   ├── zerrors_darwin_amd64.go
│   │       │   │   ├── zerrors_darwin_arm.go
│   │       │   │   ├── zerrors_darwin_arm64.go
│   │       │   │   ├── zerrors_dragonfly_amd64.go
│   │       │   │   ├── zerrors_freebsd_386.go
│   │       │   │   ├── zerrors_freebsd_amd64.go
│   │       │   │   ├── zerrors_freebsd_arm.go
│   │       │   │   ├── zerrors_freebsd_arm64.go
│   │       │   │   ├── zerrors_linux.go
│   │       │   │   ├── zerrors_linux_386.go
│   │       │   │   ├── zerrors_linux_amd64.go
│   │       │   │   ├── zerrors_linux_arm.go
│   │       │   │   ├── zerrors_linux_arm64.go
│   │       │   │   ├── zerrors_linux_mips.go
│   │       │   │   ├── zerrors_linux_mips64.go
│   │       │   │   ├── zerrors_linux_mips64le.go
│   │       │   │   ├── zerrors_linux_mipsle.go
│   │       │   │   ├── zerrors_linux_ppc64.go
│   │       │   │   ├── zerrors_linux_ppc64le.go
│   │       │   │   ├── zerrors_linux_riscv64.go
│   │       │   │   ├── zerrors_linux_s390x.go
│   │       │   │   ├── zerrors_linux_sparc64.go
│   │       │   │   ├── zerrors_netbsd_386.go
│   │       │   │   ├── zerrors_netbsd_amd64.go
│   │       │   │   ├── zerrors_netbsd_arm.go
│   │       │   │   ├── zerrors_netbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_386.go
│   │       │   │   ├── zerrors_openbsd_amd64.go
│   │       │   │   ├── zerrors_openbsd_arm.go
│   │       │   │   ├── zerrors_openbsd_arm64.go
│   │       │   │   ├── zerrors_openbsd_mips64.go
│   │       │   │   ├── zerrors_solaris_amd64.go
│   │       │   │   ├── zptrace_armnn_linux.go
│   │       │   │   ├── zptrace_linux_arm64.go
│   │       │   │   ├── zptrace_mipsnn_linux.go
│   │       │   │   ├── zptrace_mipsnnle_linux.go
│   │       │   │   ├── zptrace_x86_linux.go
│   │       │   │   ├── zsyscall_aix_ppc.go
│   │       │   │   ├── zsyscall_aix_ppc64.go
│   │       │   │   ├── zsyscall_aix_ppc64_gc.go
│   │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
│   │       │   │   ├── zsyscall_darwin_386.1_13.go
│   │       │   │   ├── zsyscall_darwin_386.1_13.s
│   │       │   │   ├── zsyscall_darwin_386.go
│   │       │   │   ├── zsyscall_darwin_386.s
│   │       │   │   ├── zsyscall_darwin_amd64.1_13.go
│   │       │   │   ├── zsyscall_darwin_amd64.1_13.s
│   │       │   │   ├── zsyscall_darwin_amd64.go
│   │       │   │   ├── zsyscall_darwin_amd64.s
│   │       │   │   ├── zsyscall_darwin_arm.1_13.go
│   │       │   │   ├── zsyscall_darwin_arm.1_13.s
│   │       │   │   ├── zsyscall_darwin_arm.go
│   │       │   │   ├── zsyscall_darwin_arm.s
│   │       │   │   ├── zsyscall_darwin_arm64.1_13.go
│   │       │   │   ├── zsyscall_darwin_arm64.1_13.s
│   │       │   │   ├── zsyscall_darwin_arm64.go
│   │       │   │   ├── zsyscall_darwin_arm64.s
│   │       │   │   ├── zsyscall_dragonfly_amd64.go
│   │       │   │   ├── zsyscall_freebsd_386.go
│   │       │   │   ├── zsyscall_freebsd_amd64.go
│   │       │   │   ├── zsyscall_freebsd_arm.go
│   │       │   │   ├── zsyscall_freebsd_arm64.go
│   │       │   │   ├── zsyscall_illumos_amd64.go
│   │       │   │   ├── zsyscall_linux.go
│   │       │   │   ├── zsyscall_linux_386.go
│   │       │   │   ├── zsyscall_linux_amd64.go
│   │       │   │   ├── zsyscall_linux_arm.go
│   │       │   │   ├── zsyscall_linux_arm64.go
│   │       │   │   ├── zsyscall_linux_mips.go
│   │       │   │   ├── zsyscall_linux_mips64.go
│   │       │   │   ├── zsyscall_linux_mips64le.go
│   │       │   │   ├── zsyscall_linux_mipsle.go
│   │       │   │   ├── zsyscall_linux_ppc64.go
│   │       │   │   ├── zsyscall_linux_ppc64le.go
│   │       │   │   ├── zsyscall_linux_riscv64.go
│   │       │   │   ├── zsyscall_linux_s390x.go
│   │       │   │   ├── zsyscall_linux_sparc64.go
│   │       │   │   ├── zsyscall_netbsd_386.go
│   │       │   │   ├── zsyscall_netbsd_amd64.go
│   │       │   │   ├── zsyscall_netbsd_arm.go
│   │       │   │   ├── zsyscall_netbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_386.go
│   │       │   │   ├── zsyscall_openbsd_amd64.go
│   │       │   │   ├── zsyscall_openbsd_arm.go
│   │       │   │   ├── zsyscall_openbsd_arm64.go
│   │       │   │   ├── zsyscall_openbsd_mips64.go
│   │       │   │   ├── zsyscall_solaris_amd64.go
│   │       │   │   ├── zsysctl_openbsd_386.go
│   │       │   │   ├── zsysctl_openbsd_amd64.go
│   │       │   │   ├── zsysctl_openbsd_arm.go
│   │       │   │   ├── zsysctl_openbsd_arm64.go
│   │       │   │   ├── zsysctl_openbsd_mips64.go
│   │       │   │   ├── zsysnum_dragonfly_amd64.go
│   │       │   │   ├── zsysnum_freebsd_386.go
│   │       │   │   ├── zsysnum_freebsd_amd64.go
│   │       │   │   ├── zsysnum_freebsd_arm.go
│   │       │   │   ├── zsysnum_freebsd_arm64.go
│   │       │   │   ├── zsysnum_linux_386.go
│   │       │   │   ├── zsysnum_linux_amd64.go
│   │       │   │   ├── zsysnum_linux_arm.go
│   │       │   │   ├── zsysnum_linux_arm64.go
│   │       │   │   ├── zsysnum_linux_mips.go
│   │       │   │   ├── zsysnum_linux_mips64.go
│   │       │   │   ├── zsysnum_linux_mips64le.go
│   │       │   │   ├── zsysnum_linux_mipsle.go
│   │       │   │   ├── zsysnum_linux_ppc64.go
│   │       │   │   ├── zsysnum_linux_ppc64le.go
│   │       │   │   ├── zsysnum_linux_riscv64.go
│   │       │   │   ├── zsysnum_linux_s390x.go
│   │       │   │   ├── zsysnum_linux_sparc64.go
│   │       │   │   ├── zsysnum_netbsd_386.go
│   │       │   │   ├── zsysnum_netbsd_amd64.go
│   │       │   │   ├── zsysnum_netbsd_arm.go
│   │       │   │   ├── zsysnum_netbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_386.go
│   │       │   │   ├── zsysnum_openbsd_amd64.go
│   │       │   │   ├── zsysnum_openbsd_arm.go
│   │       │   │   ├── zsysnum_openbsd_arm64.go
│   │       │   │   ├── zsysnum_openbsd_mips64.go
│   │       │   │   ├── ztypes_aix_ppc.go
│   │       │   │   ├── ztypes_aix_ppc64.go
│   │       │   │   ├── ztypes_darwin_386.go
│   │       │   │   ├── ztypes_darwin_amd64.go
│   │       │   │   ├── ztypes_darwin_arm.go
│   │       │   │   ├── ztypes_darwin_arm64.go
│   │       │   │   ├── ztypes_dragonfly_amd64.go
│   │       │   │   ├── ztypes_freebsd_386.go
│   │       │   │   ├── ztypes_freebsd_amd64.go
│   │       │   │   ├── ztypes_freebsd_arm.go
│   │       │   │   ├── ztypes_freebsd_arm64.go
│   │       │   │   ├── ztypes_linux.go
│   │       │   │   ├── ztypes_linux_386.go
│   │       │   │   ├── ztypes_linux_amd64.go
│   │       │   │   ├── ztypes_linux_arm.go
│   │       │   │   ├── ztypes_linux_arm64.go
│   │       │   │   ├── ztypes_linux_mips.go
│   │       │   │   ├── ztypes_linux_mips64.go
│   │       │   │   ├── ztypes_linux_mips64le.go
│   │       │   │   ├── ztypes_linux_mipsle.go
│   │       │   │   ├── ztypes_linux_ppc64.go
│   │       │   │   ├── ztypes_linux_ppc64le.go
│   │       │   │   ├── ztypes_linux_riscv64.go
│   │       │   │   ├── ztypes_linux_s390x.go
│   │       │   │   ├── ztypes_linux_sparc64.go
│   │       │   │   ├── ztypes_netbsd_386.go
│   │       │   │   ├── ztypes_netbsd_amd64.go
│   │       │   │   ├── ztypes_netbsd_arm.go
│   │       │   │   ├── ztypes_netbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_386.go
│   │       │   │   ├── ztypes_openbsd_amd64.go
│   │       │   │   ├── ztypes_openbsd_arm.go
│   │       │   │   ├── ztypes_openbsd_arm64.go
│   │       │   │   ├── ztypes_openbsd_mips64.go
│   │       │   │   └── ztypes_solaris_amd64.go
│   │       │   └── windows/
│   │       │       ├── aliases.go
│   │       │       ├── dll_windows.go
│   │       │       ├── empty.s
│   │       │       ├── env_windows.go
│   │       │       ├── eventlog.go
│   │       │       ├── exec_windows.go
│   │       │       ├── memory_windows.go
│   │       │       ├── mkerrors.bash
│   │       │       ├── mkknownfolderids.bash
│   │       │       ├── mksyscall.go
│   │       │       ├── race.go
│   │       │       ├── race0.go
│   │       │       ├── security_windows.go
│   │       │       ├── service.go
│   │       │       ├── str.go
│   │       │       ├── syscall.go
│   │       │       ├── syscall_windows.go
│   │       │       ├── types_windows.go
│   │       │       ├── types_windows_386.go
│   │       │       ├── types_windows_amd64.go
│   │       │       ├── types_windows_arm.go
│   │       │       ├── zerrors_windows.go
│   │       │       ├── zknownfolderids_windows.go
│   │       │       └── zsyscall_windows.go
│   │       ├── text/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── secure/
│   │       │   │   └── bidirule/
│   │       │   │       ├── bidirule.go
│   │       │   │       ├── bidirule10.0.0.go
│   │       │   │       └── bidirule9.0.0.go
│   │       │   ├── transform/
│   │       │   │   └── transform.go
│   │       │   └── unicode/
│   │       │       ├── bidi/
│   │       │       │   ├── bidi.go
│   │       │       │   ├── bracket.go
│   │       │       │   ├── core.go
│   │       │       │   ├── prop.go
│   │       │       │   ├── tables10.0.0.go
│   │       │       │   ├── tables11.0.0.go
│   │       │       │   ├── tables12.0.0.go
│   │       │       │   ├── tables9.0.0.go
│   │       │       │   └── trieval.go
│   │       │       └── norm/
│   │       │           ├── composition.go
│   │       │           ├── forminfo.go
│   │       │           ├── input.go
│   │       │           ├── iter.go
│   │       │           ├── normalize.go
│   │       │           ├── readwriter.go
│   │       │           ├── tables10.0.0.go
│   │       │           ├── tables11.0.0.go
│   │       │           ├── tables12.0.0.go
│   │       │           ├── tables9.0.0.go
│   │       │           ├── transform.go
│   │       │           └── trie.go
│   │       ├── time/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   └── rate/
│   │       │       └── rate.go
│   │       ├── tools/
│   │       │   ├── AUTHORS
│   │       │   ├── CONTRIBUTORS
│   │       │   ├── LICENSE
│   │       │   ├── PATENTS
│   │       │   ├── go/
│   │       │   │   ├── analysis/
│   │       │   │   │   ├── analysis.go
│   │       │   │   │   ├── diagnostic.go
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── passes/
│   │       │   │   │   │   └── inspect/
│   │       │   │   │   │       └── inspect.go
│   │       │   │   │   └── validate.go
│   │       │   │   ├── ast/
│   │       │   │   │   ├── astutil/
│   │       │   │   │   │   ├── enclosing.go
│   │       │   │   │   │   ├── imports.go
│   │       │   │   │   │   ├── rewrite.go
│   │       │   │   │   │   └── util.go
│   │       │   │   │   └── inspector/
│   │       │   │   │       ├── inspector.go
│   │       │   │   │       └── typeof.go
│   │       │   │   ├── buildutil/
│   │       │   │   │   ├── allpackages.go
│   │       │   │   │   ├── fakecontext.go
│   │       │   │   │   ├── overlay.go
│   │       │   │   │   ├── tags.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── gcexportdata/
│   │       │   │   │   ├── gcexportdata.go
│   │       │   │   │   └── importer.go
│   │       │   │   ├── internal/
│   │       │   │   │   ├── cgo/
│   │       │   │   │   │   ├── cgo.go
│   │       │   │   │   │   └── cgo_pkgconfig.go
│   │       │   │   │   ├── gcimporter/
│   │       │   │   │   │   ├── bexport.go
│   │       │   │   │   │   ├── bimport.go
│   │       │   │   │   │   ├── exportdata.go
│   │       │   │   │   │   ├── gcimporter.go
│   │       │   │   │   │   ├── iexport.go
│   │       │   │   │   │   ├── iimport.go
│   │       │   │   │   │   ├── newInterface10.go
│   │       │   │   │   │   └── newInterface11.go
│   │       │   │   │   └── packagesdriver/
│   │       │   │   │       └── sizes.go
│   │       │   │   ├── loader/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── loader.go
│   │       │   │   │   └── util.go
│   │       │   │   ├── packages/
│   │       │   │   │   ├── doc.go
│   │       │   │   │   ├── external.go
│   │       │   │   │   ├── golist.go
│   │       │   │   │   ├── golist_overlay.go
│   │       │   │   │   ├── loadmode_string.go
│   │       │   │   │   ├── packages.go
│   │       │   │   │   └── visit.go
│   │       │   │   └── types/
│   │       │   │       ├── objectpath/
│   │       │   │       │   └── objectpath.go
│   │       │   │       └── typeutil/
│   │       │   │           ├── callee.go
│   │       │   │           ├── imports.go
│   │       │   │           ├── map.go
│   │       │   │           ├── methodsetcache.go
│   │       │   │           └── ui.go
│   │       │   └── internal/
│   │       │       ├── analysisinternal/
│   │       │       │   └── analysis.go
│   │       │       ├── event/
│   │       │       │   ├── core/
│   │       │       │   │   ├── event.go
│   │       │       │   │   ├── export.go
│   │       │       │   │   └── fast.go
│   │       │       │   ├── doc.go
│   │       │       │   ├── event.go
│   │       │       │   ├── keys/
│   │       │       │   │   ├── keys.go
│   │       │       │   │   └── standard.go
│   │       │       │   └── label/
│   │       │       │       └── label.go
│   │       │       ├── gocommand/
│   │       │       │   ├── invoke.go
│   │       │       │   └── vendor.go
│   │       │       ├── packagesinternal/
│   │       │       │   └── packages.go
│   │       │       └── typesinternal/
│   │       │           └── types.go
│   │       └── xerrors/
│   │           ├── LICENSE
│   │           ├── PATENTS
│   │           ├── README
│   │           ├── adaptor.go
│   │           ├── codereview.cfg
│   │           ├── doc.go
│   │           ├── errors.go
│   │           ├── fmt.go
│   │           ├── format.go
│   │           ├── frame.go
│   │           ├── go.mod
│   │           ├── internal/
│   │           │   └── internal.go
│   │           └── wrap.go
│   ├── google.golang.org/
│   │   ├── genproto/
│   │   │   ├── LICENSE
│   │   │   ├── googleapis/
│   │   │   │   ├── api/
│   │   │   │   │   └── httpbody/
│   │   │   │   │       └── httpbody.pb.go
│   │   │   │   └── rpc/
│   │   │   │       └── status/
│   │   │   │           └── status.pb.go
│   │   │   └── protobuf/
│   │   │       └── field_mask/
│   │   │           └── field_mask.go
│   │   ├── grpc/
│   │   │   ├── .travis.yml
│   │   │   ├── AUTHORS
│   │   │   ├── CODE-OF-CONDUCT.md
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── GOVERNANCE.md
│   │   │   ├── LICENSE
│   │   │   ├── MAINTAINERS.md
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── attributes/
│   │   │   │   └── attributes.go
│   │   │   ├── backoff/
│   │   │   │   └── backoff.go
│   │   │   ├── backoff.go
│   │   │   ├── balancer/
│   │   │   │   ├── balancer.go
│   │   │   │   ├── base/
│   │   │   │   │   ├── balancer.go
│   │   │   │   │   └── base.go
│   │   │   │   └── roundrobin/
│   │   │   │       └── roundrobin.go
│   │   │   ├── balancer.go
│   │   │   ├── balancer_conn_wrappers.go
│   │   │   ├── balancer_v1_wrapper.go
│   │   │   ├── binarylog/
│   │   │   │   └── grpc_binarylog_v1/
│   │   │   │       └── binarylog.pb.go
│   │   │   ├── call.go
│   │   │   ├── clientconn.go
│   │   │   ├── codec.go
│   │   │   ├── codegen.sh
│   │   │   ├── codes/
│   │   │   │   ├── code_string.go
│   │   │   │   └── codes.go
│   │   │   ├── connectivity/
│   │   │   │   └── connectivity.go
│   │   │   ├── credentials/
│   │   │   │   ├── credentials.go
│   │   │   │   ├── go12.go
│   │   │   │   ├── internal/
│   │   │   │   │   ├── syscallconn.go
│   │   │   │   │   └── syscallconn_appengine.go
│   │   │   │   └── tls.go
│   │   │   ├── dialoptions.go
│   │   │   ├── doc.go
│   │   │   ├── encoding/
│   │   │   │   ├── encoding.go
│   │   │   │   └── proto/
│   │   │   │       └── proto.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── grpclog/
│   │   │   │   ├── grpclog.go
│   │   │   │   ├── logger.go
│   │   │   │   └── loggerv2.go
│   │   │   ├── health/
│   │   │   │   ├── client.go
│   │   │   │   ├── grpc_health_v1/
│   │   │   │   │   └── health.pb.go
│   │   │   │   ├── regenerate.sh
│   │   │   │   └── server.go
│   │   │   ├── install_gae.sh
│   │   │   ├── interceptor.go
│   │   │   ├── internal/
│   │   │   │   ├── backoff/
│   │   │   │   │   └── backoff.go
│   │   │   │   ├── balancerload/
│   │   │   │   │   └── load.go
│   │   │   │   ├── binarylog/
│   │   │   │   │   ├── binarylog.go
│   │   │   │   │   ├── binarylog_testutil.go
│   │   │   │   │   ├── env_config.go
│   │   │   │   │   ├── method_logger.go
│   │   │   │   │   ├── regenerate.sh
│   │   │   │   │   ├── sink.go
│   │   │   │   │   └── util.go
│   │   │   │   ├── buffer/
│   │   │   │   │   └── unbounded.go
│   │   │   │   ├── channelz/
│   │   │   │   │   ├── funcs.go
│   │   │   │   │   ├── logging.go
│   │   │   │   │   ├── types.go
│   │   │   │   │   ├── types_linux.go
│   │   │   │   │   ├── types_nonlinux.go
│   │   │   │   │   ├── util_linux.go
│   │   │   │   │   └── util_nonlinux.go
│   │   │   │   ├── envconfig/
│   │   │   │   │   └── envconfig.go
│   │   │   │   ├── grpclog/
│   │   │   │   │   ├── grpclog.go
│   │   │   │   │   └── prefixLogger.go
│   │   │   │   ├── grpcrand/
│   │   │   │   │   └── grpcrand.go
│   │   │   │   ├── grpcsync/
│   │   │   │   │   └── event.go
│   │   │   │   ├── grpcutil/
│   │   │   │   │   └── target.go
│   │   │   │   ├── internal.go
│   │   │   │   ├── resolver/
│   │   │   │   │   ├── dns/
│   │   │   │   │   │   ├── dns_resolver.go
│   │   │   │   │   │   └── go113.go
│   │   │   │   │   └── passthrough/
│   │   │   │   │       └── passthrough.go
│   │   │   │   ├── status/
│   │   │   │   │   └── status.go
│   │   │   │   ├── syscall/
│   │   │   │   │   ├── syscall_linux.go
│   │   │   │   │   └── syscall_nonlinux.go
│   │   │   │   └── transport/
│   │   │   │       ├── bdp_estimator.go
│   │   │   │       ├── controlbuf.go
│   │   │   │       ├── defaults.go
│   │   │   │       ├── flowcontrol.go
│   │   │   │       ├── handler_server.go
│   │   │   │       ├── http2_client.go
│   │   │   │       ├── http2_server.go
│   │   │   │       ├── http_util.go
│   │   │   │       ├── log.go
│   │   │   │       └── transport.go
│   │   │   ├── keepalive/
│   │   │   │   └── keepalive.go
│   │   │   ├── metadata/
│   │   │   │   └── metadata.go
│   │   │   ├── naming/
│   │   │   │   ├── dns_resolver.go
│   │   │   │   └── naming.go
│   │   │   ├── peer/
│   │   │   │   └── peer.go
│   │   │   ├── picker_wrapper.go
│   │   │   ├── pickfirst.go
│   │   │   ├── preloader.go
│   │   │   ├── proxy.go
│   │   │   ├── resolver/
│   │   │   │   ├── dns/
│   │   │   │   │   └── dns_resolver.go
│   │   │   │   ├── passthrough/
│   │   │   │   │   └── passthrough.go
│   │   │   │   └── resolver.go
│   │   │   ├── resolver_conn_wrapper.go
│   │   │   ├── rpc_util.go
│   │   │   ├── server.go
│   │   │   ├── service_config.go
│   │   │   ├── serviceconfig/
│   │   │   │   └── serviceconfig.go
│   │   │   ├── stats/
│   │   │   │   ├── handlers.go
│   │   │   │   └── stats.go
│   │   │   ├── status/
│   │   │   │   └── status.go
│   │   │   ├── stream.go
│   │   │   ├── tap/
│   │   │   │   └── tap.go
│   │   │   ├── trace.go
│   │   │   ├── version.go
│   │   │   └── vet.sh
│   │   └── protobuf/
│   │       ├── AUTHORS
│   │       ├── CONTRIBUTORS
│   │       ├── LICENSE
│   │       ├── PATENTS
│   │       ├── cmd/
│   │       │   └── protoc-gen-go/
│   │       │       └── internal_gengo/
│   │       │           ├── init.go
│   │       │           ├── main.go
│   │       │           ├── reflect.go
│   │       │           └── well_known_types.go
│   │       ├── compiler/
│   │       │   └── protogen/
│   │       │       └── protogen.go
│   │       ├── encoding/
│   │       │   ├── protojson/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── encode.go
│   │       │   │   └── well_known_types.go
│   │       │   ├── prototext/
│   │       │   │   ├── decode.go
│   │       │   │   ├── doc.go
│   │       │   │   └── encode.go
│   │       │   └── protowire/
│   │       │       └── wire.go
│   │       ├── internal/
│   │       │   ├── descfmt/
│   │       │   │   └── stringer.go
│   │       │   ├── descopts/
│   │       │   │   └── options.go
│   │       │   ├── detrand/
│   │       │   │   └── rand.go
│   │       │   ├── encoding/
│   │       │   │   ├── defval/
│   │       │   │   │   └── default.go
│   │       │   │   ├── json/
│   │       │   │   │   ├── decode.go
│   │       │   │   │   ├── decode_number.go
│   │       │   │   │   ├── decode_string.go
│   │       │   │   │   ├── decode_token.go
│   │       │   │   │   └── encode.go
│   │       │   │   ├── messageset/
│   │       │   │   │   └── messageset.go
│   │       │   │   ├── tag/
│   │       │   │   │   └── tag.go
│   │       │   │   └── text/
│   │       │   │       ├── decode.go
│   │       │   │       ├── decode_number.go
│   │       │   │       ├── decode_string.go
│   │       │   │       ├── decode_token.go
│   │       │   │       ├── doc.go
│   │       │   │       └── encode.go
│   │       │   ├── errors/
│   │       │   │   ├── errors.go
│   │       │   │   ├── is_go112.go
│   │       │   │   └── is_go113.go
│   │       │   ├── fieldsort/
│   │       │   │   └── fieldsort.go
│   │       │   ├── filedesc/
│   │       │   │   ├── build.go
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_lazy.go
│   │       │   │   ├── desc_list.go
│   │       │   │   ├── desc_list_gen.go
│   │       │   │   └── placeholder.go
│   │       │   ├── filetype/
│   │       │   │   └── build.go
│   │       │   ├── flags/
│   │       │   │   ├── flags.go
│   │       │   │   ├── proto_legacy_disable.go
│   │       │   │   └── proto_legacy_enable.go
│   │       │   ├── genid/
│   │       │   │   ├── any_gen.go
│   │       │   │   ├── api_gen.go
│   │       │   │   ├── descriptor_gen.go
│   │       │   │   ├── doc.go
│   │       │   │   ├── duration_gen.go
│   │       │   │   ├── empty_gen.go
│   │       │   │   ├── field_mask_gen.go
│   │       │   │   ├── goname.go
│   │       │   │   ├── map_entry.go
│   │       │   │   ├── source_context_gen.go
│   │       │   │   ├── struct_gen.go
│   │       │   │   ├── timestamp_gen.go
│   │       │   │   ├── type_gen.go
│   │       │   │   ├── wrappers.go
│   │       │   │   └── wrappers_gen.go
│   │       │   ├── impl/
│   │       │   │   ├── api_export.go
│   │       │   │   ├── checkinit.go
│   │       │   │   ├── codec_extension.go
│   │       │   │   ├── codec_field.go
│   │       │   │   ├── codec_gen.go
│   │       │   │   ├── codec_map.go
│   │       │   │   ├── codec_map_go111.go
│   │       │   │   ├── codec_map_go112.go
│   │       │   │   ├── codec_message.go
│   │       │   │   ├── codec_messageset.go
│   │       │   │   ├── codec_reflect.go
│   │       │   │   ├── codec_tables.go
│   │       │   │   ├── codec_unsafe.go
│   │       │   │   ├── convert.go
│   │       │   │   ├── convert_list.go
│   │       │   │   ├── convert_map.go
│   │       │   │   ├── decode.go
│   │       │   │   ├── encode.go
│   │       │   │   ├── enum.go
│   │       │   │   ├── extension.go
│   │       │   │   ├── legacy_enum.go
│   │       │   │   ├── legacy_export.go
│   │       │   │   ├── legacy_extension.go
│   │       │   │   ├── legacy_file.go
│   │       │   │   ├── legacy_message.go
│   │       │   │   ├── merge.go
│   │       │   │   ├── merge_gen.go
│   │       │   │   ├── message.go
│   │       │   │   ├── message_reflect.go
│   │       │   │   ├── message_reflect_field.go
│   │       │   │   ├── message_reflect_gen.go
│   │       │   │   ├── pointer_reflect.go
│   │       │   │   ├── pointer_unsafe.go
│   │       │   │   ├── validate.go
│   │       │   │   └── weak.go
│   │       │   ├── mapsort/
│   │       │   │   └── mapsort.go
│   │       │   ├── pragma/
│   │       │   │   └── pragma.go
│   │       │   ├── set/
│   │       │   │   └── ints.go
│   │       │   ├── strs/
│   │       │   │   ├── strings.go
│   │       │   │   ├── strings_pure.go
│   │       │   │   └── strings_unsafe.go
│   │       │   └── version/
│   │       │       └── version.go
│   │       ├── proto/
│   │       │   ├── checkinit.go
│   │       │   ├── decode.go
│   │       │   ├── decode_gen.go
│   │       │   ├── doc.go
│   │       │   ├── encode.go
│   │       │   ├── encode_gen.go
│   │       │   ├── equal.go
│   │       │   ├── extension.go
│   │       │   ├── merge.go
│   │       │   ├── messageset.go
│   │       │   ├── proto.go
│   │       │   ├── proto_methods.go
│   │       │   ├── proto_reflect.go
│   │       │   ├── reset.go
│   │       │   ├── size.go
│   │       │   ├── size_gen.go
│   │       │   └── wrappers.go
│   │       ├── reflect/
│   │       │   ├── protodesc/
│   │       │   │   ├── desc.go
│   │       │   │   ├── desc_init.go
│   │       │   │   ├── desc_resolve.go
│   │       │   │   ├── desc_validate.go
│   │       │   │   └── proto.go
│   │       │   ├── protoreflect/
│   │       │   │   ├── methods.go
│   │       │   │   ├── proto.go
│   │       │   │   ├── source.go
│   │       │   │   ├── type.go
│   │       │   │   ├── value.go
│   │       │   │   ├── value_pure.go
│   │       │   │   ├── value_union.go
│   │       │   │   └── value_unsafe.go
│   │       │   └── protoregistry/
│   │       │       └── registry.go
│   │       ├── runtime/
│   │       │   ├── protoiface/
│   │       │   │   ├── legacy.go
│   │       │   │   └── methods.go
│   │       │   └── protoimpl/
│   │       │       ├── impl.go
│   │       │       └── version.go
│   │       └── types/
│   │           ├── descriptorpb/
│   │           │   └── descriptor.pb.go
│   │           ├── known/
│   │           │   ├── anypb/
│   │           │   │   └── any.pb.go
│   │           │   ├── durationpb/
│   │           │   │   └── duration.pb.go
│   │           │   ├── fieldmaskpb/
│   │           │   │   └── field_mask.pb.go
│   │           │   ├── timestamppb/
│   │           │   │   └── timestamp.pb.go
│   │           │   └── wrapperspb/
│   │           │       └── wrappers.pb.go
│   │           └── pluginpb/
│   │               └── plugin.pb.go
│   ├── gopkg.in/
│   │   ├── cheggaaa/
│   │   │   └── pb.v1/
│   │   │       ├── .travis.yml
│   │   │       ├── LICENSE
│   │   │       ├── README.md
│   │   │       ├── format.go
│   │   │       ├── pb.go
│   │   │       ├── pb_appengine.go
│   │   │       ├── pb_win.go
│   │   │       ├── pb_x.go
│   │   │       ├── pool.go
│   │   │       ├── pool_win.go
│   │   │       ├── pool_x.go
│   │   │       ├── reader.go
│   │   │       ├── runecount.go
│   │   │       ├── termios_bsd.go
│   │   │       └── termios_sysv.go
│   │   ├── gcfg.v1/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── doc.go
│   │   │   ├── errors.go
│   │   │   ├── read.go
│   │   │   ├── scanner/
│   │   │   │   ├── errors.go
│   │   │   │   └── scanner.go
│   │   │   ├── set.go
│   │   │   ├── token/
│   │   │   │   ├── position.go
│   │   │   │   ├── serialize.go
│   │   │   │   └── token.go
│   │   │   └── types/
│   │   │       ├── bool.go
│   │   │       ├── doc.go
│   │   │       ├── enum.go
│   │   │       ├── int.go
│   │   │       └── scan.go
│   │   ├── warnings.v0/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   └── warnings.go
│   │   └── yaml.v2/
│   │       ├── .travis.yml
│   │       ├── LICENSE
│   │       ├── LICENSE.libyaml
│   │       ├── NOTICE
│   │       ├── README.md
│   │       ├── apic.go
│   │       ├── decode.go
│   │       ├── emitterc.go
│   │       ├── encode.go
│   │       ├── go.mod
│   │       ├── parserc.go
│   │       ├── readerc.go
│   │       ├── resolve.go
│   │       ├── scannerc.go
│   │       ├── sorter.go
│   │       ├── writerc.go
│   │       ├── yaml.go
│   │       ├── yamlh.go
│   │       └── yamlprivateh.go
│   ├── honnef.co/
│   │   └── go/
│   │       └── tools/
│   │           ├── LICENSE
│   │           ├── LICENSE-THIRD-PARTY
│   │           ├── arg/
│   │           │   └── arg.go
│   │           ├── cmd/
│   │           │   └── staticcheck/
│   │           │       ├── README.md
│   │           │       └── staticcheck.go
│   │           ├── code/
│   │           │   └── code.go
│   │           ├── config/
│   │           │   ├── config.go
│   │           │   └── example.conf
│   │           ├── deprecated/
│   │           │   └── stdlib.go
│   │           ├── edit/
│   │           │   └── edit.go
│   │           ├── facts/
│   │           │   ├── deprecated.go
│   │           │   ├── generated.go
│   │           │   ├── purity.go
│   │           │   └── token.go
│   │           ├── functions/
│   │           │   ├── loops.go
│   │           │   ├── stub.go
│   │           │   └── terminates.go
│   │           ├── go/
│   │           │   └── types/
│   │           │       └── typeutil/
│   │           │           ├── callee.go
│   │           │           ├── identical.go
│   │           │           ├── imports.go
│   │           │           ├── map.go
│   │           │           ├── methodsetcache.go
│   │           │           └── ui.go
│   │           ├── internal/
│   │           │   ├── cache/
│   │           │   │   ├── cache.go
│   │           │   │   ├── default.go
│   │           │   │   └── hash.go
│   │           │   ├── passes/
│   │           │   │   └── buildir/
│   │           │   │       └── buildir.go
│   │           │   ├── renameio/
│   │           │   │   └── renameio.go
│   │           │   ├── robustio/
│   │           │   │   ├── robustio.go
│   │           │   │   ├── robustio_darwin.go
│   │           │   │   ├── robustio_flaky.go
│   │           │   │   ├── robustio_other.go
│   │           │   │   └── robustio_windows.go
│   │           │   └── sharedcheck/
│   │           │       └── lint.go
│   │           ├── ir/
│   │           │   ├── LICENSE
│   │           │   ├── blockopt.go
│   │           │   ├── builder.go
│   │           │   ├── const.go
│   │           │   ├── create.go
│   │           │   ├── doc.go
│   │           │   ├── dom.go
│   │           │   ├── emit.go
│   │           │   ├── exits.go
│   │           │   ├── func.go
│   │           │   ├── html.go
│   │           │   ├── identical.go
│   │           │   ├── identical_17.go
│   │           │   ├── irutil/
│   │           │   │   ├── load.go
│   │           │   │   ├── switch.go
│   │           │   │   ├── util.go
│   │           │   │   └── visit.go
│   │           │   ├── lift.go
│   │           │   ├── lvalue.go
│   │           │   ├── methods.go
│   │           │   ├── mode.go
│   │           │   ├── print.go
│   │           │   ├── sanity.go
│   │           │   ├── source.go
│   │           │   ├── ssa.go
│   │           │   ├── staticcheck.conf
│   │           │   ├── util.go
│   │           │   ├── wrappers.go
│   │           │   └── write.go
│   │           ├── lint/
│   │           │   ├── LICENSE
│   │           │   ├── lint.go
│   │           │   ├── lintdsl/
│   │           │   │   └── lintdsl.go
│   │           │   ├── lintutil/
│   │           │   │   ├── format/
│   │           │   │   │   └── format.go
│   │           │   │   ├── stats.go
│   │           │   │   ├── stats_bsd.go
│   │           │   │   ├── stats_posix.go
│   │           │   │   └── util.go
│   │           │   ├── runner.go
│   │           │   └── stats.go
│   │           ├── loader/
│   │           │   └── loader.go
│   │           ├── pattern/
│   │           │   ├── convert.go
│   │           │   ├── doc.go
│   │           │   ├── fuzz.go
│   │           │   ├── lexer.go
│   │           │   ├── match.go
│   │           │   ├── parser.go
│   │           │   └── pattern.go
│   │           ├── printf/
│   │           │   ├── fuzz.go
│   │           │   └── printf.go
│   │           ├── report/
│   │           │   └── report.go
│   │           ├── simple/
│   │           │   ├── analysis.go
│   │           │   ├── doc.go
│   │           │   └── lint.go
│   │           ├── staticcheck/
│   │           │   ├── analysis.go
│   │           │   ├── buildtag.go
│   │           │   ├── doc.go
│   │           │   ├── lint.go
│   │           │   ├── rules.go
│   │           │   └── structtag.go
│   │           ├── stylecheck/
│   │           │   ├── analysis.go
│   │           │   ├── doc.go
│   │           │   ├── lint.go
│   │           │   └── names.go
│   │           ├── unused/
│   │           │   ├── edge.go
│   │           │   ├── edgekind_string.go
│   │           │   ├── implements.go
│   │           │   └── unused.go
│   │           └── version/
│   │               ├── buildinfo.go
│   │               ├── buildinfo111.go
│   │               └── version.go
│   ├── modules.txt
│   └── sigs.k8s.io/
│       └── yaml/
│           ├── .gitignore
│           ├── .travis.yml
│           ├── CONTRIBUTING.md
│           ├── LICENSE
│           ├── OWNERS
│           ├── README.md
│           ├── RELEASE.md
│           ├── SECURITY_CONTACTS
│           ├── code-of-conduct.md
│           ├── fields.go
│           ├── yaml.go
│           └── yaml_go110.go
├── version.json
└── worker/
    ├── awsCertlint/
    │   └── awsCertlint.go
    ├── caaWorker/
    │   └── caaWorker.go
    ├── crlWorker/
    │   └── crlWorker.go
    ├── evCheckerWorker/
    │   ├── config.go
    │   └── evCheckerWorker.go
    ├── mozillaEvaluationWorker/
    │   ├── configurations.go
    │   ├── mozillaEvaluationWorker.go
    │   └── mozillaEvaluationWorker_test.go
    ├── mozillaGradingWorker/
    │   ├── cipherGrading.go
    │   ├── keyexchangeGrading.go
    │   ├── mozillaGradingWorker.go
    │   ├── mozillaGradingWorker_test.go
    │   └── protocolGrading.go
    ├── ocspStatus/
    │   └── ocspStatus.go
    ├── sslLabsClientSupport/
    │   └── sslLabsClientSupport.go
    ├── symantecDistrust/
    │   └── symantecDistrust.go
    ├── top1m/
    │   └── top1m.go
    └── worker.go
Download .txt
Showing preview only (9,018K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (107676 symbols across 2217 files)

FILE: certificate/certificate.go
  constant Ubuntu_TS_name (line 24) | Ubuntu_TS_name    = "Ubuntu"
  constant Mozilla_TS_name (line 25) | Mozilla_TS_name   = "Mozilla"
  constant Microsoft_TS_name (line 26) | Microsoft_TS_name = "Microsoft"
  constant Apple_TS_name (line 27) | Apple_TS_name     = "Apple"
  constant Android_TS_name (line 28) | Android_TS_name   = "Android"
  constant Default_Cisco_Umbrella_Rank (line 30) | Default_Cisco_Umbrella_Rank = 2147483647
  type Certificate (line 33) | type Certificate struct
    method GetBooleanValidity (line 256) | func (c Certificate) GetBooleanValidity() (trusted_ubuntu, trusted_moz...
    method ToX509 (line 593) | func (cert Certificate) ToX509() (xcert *x509.Certificate, err error) {
    method IsSelfSigned (line 639) | func (c Certificate) IsSelfSigned() bool {
  type MozillaPolicy (line 59) | type MozillaPolicy struct
  type Hashes (line 63) | type Hashes struct
  type Validity (line 72) | type Validity struct
  type Subject (line 77) | type Subject struct
    method String (line 620) | func (s Subject) String() string {
  type SubjectPublicKeyInfo (line 85) | type SubjectPublicKeyInfo struct
  type Extensions (line 98) | type Extensions struct
  type X509v3BasicConstraints (line 114) | type X509v3BasicConstraints struct
  type Chain (line 119) | type Chain struct
  type IDs (line 126) | type IDs struct
  type JsonRawCert (line 131) | type JsonRawCert struct
  type TrustStore (line 135) | type TrustStore struct
  type ValidationInfo (line 140) | type ValidationInfo struct
  type Trust (line 145) | type Trust struct
  function SubjectSPKISHA256 (line 215) | func SubjectSPKISHA256(cert *x509.Certificate) string {
  function SPKISHA256 (line 222) | func SPKISHA256(cert *x509.Certificate) string {
  function PKPSHA256Hash (line 228) | func PKPSHA256Hash(cert *x509.Certificate) string {
  function SHA256Hash (line 240) | func SHA256Hash(data []byte) string {
  function MD5Hash (line 245) | func MD5Hash(data []byte) string {
  function SHA1Hash (line 250) | func SHA1Hash(data []byte) string {
  function GetValidityMap (line 306) | func GetValidityMap(trusted_ubuntu, trusted_mozilla, trusted_microsoft, ...
  function getExtKeyUsages (line 326) | func getExtKeyUsages(cert *x509.Certificate) (usage []string) {
  function getExtKeyUsageOIDs (line 336) | func getExtKeyUsageOIDs(cert *x509.Certificate) (usage []string) {
  function getPolicyIdentifiers (line 346) | func getPolicyIdentifiers(cert *x509.Certificate) []string {
  function getKeyUsages (line 354) | func getKeyUsages(cert *x509.Certificate) []string {
  function getCertExtensions (line 401) | func getCertExtensions(cert *x509.Certificate) Extensions {
  function getMozillaPolicyV2_5 (line 435) | func getMozillaPolicyV2_5(cert *x509.Certificate) MozillaPolicy {
  function getPublicKeyInfo (line 439) | func getPublicKeyInfo(cert *x509.Certificate) (SubjectPublicKeyInfo, err...
  function GetHexASN1Serial (line 494) | func GetHexASN1Serial(cert *x509.Certificate) (serial string, err error) {
  function CertToStored (line 509) | func CertToStored(cert *x509.Certificate, parentSignature, domain, ip st...
  function printRawCertExtensions (line 603) | func printRawCertExtensions(cert *x509.Certificate) {

FILE: certificate/certificate_test.go
  function TestGetHexASN1Serial (line 10) | func TestGetHexASN1Serial(t *testing.T) {
  function TestMozillaPolicy (line 140) | func TestMozillaPolicy(t *testing.T) {
  function TestMozillaPolicyNotTechnicallyConstrained (line 149) | func TestMozillaPolicyNotTechnicallyConstrained(t *testing.T) {

FILE: certificate/constraints/constraints.go
  type Constraints (line 11) | type Constraints struct
  function Get (line 19) | func Get(cert *x509.Certificate) (*Constraints, error) {
  function isAllZeros (line 37) | func isAllZeros(buf []byte, length int) bool {
  function IsTechnicallyConstrained (line 51) | func IsTechnicallyConstrained(cert *x509.Certificate) bool {
  function IsTechnicallyConstrainedMozPolicyV2_5 (line 115) | func IsTechnicallyConstrainedMozPolicyV2_5(cert *x509.Certificate) bool {

FILE: certificate/constraints/vendor/constraintcrypto/x509/cert_pool.go
  type CertPool (line 14) | type CertPool struct
    method findVerifiedParents (line 43) | func (s *CertPool) findVerifiedParents(cert *Certificate) (parents []i...
    method AddCert (line 68) | func (s *CertPool) AddCert(cert *Certificate) {
    method AppendCertsFromPEM (line 97) | func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool) {
    method Subjects (line 122) | func (s *CertPool) Subjects() [][]byte {
  function NewCertPool (line 21) | func NewCertPool() *CertPool {
  function SystemCertPool (line 32) | func SystemCertPool() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/example_test.go
  function ExampleCertificate_Verify (line 16) | func ExampleCertificate_Verify() {
  function ExampleParsePKIXPublicKey (line 97) | func ExampleParsePKIXPublicKey() {

FILE: certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt.go
  type PEMCipher (line 23) | type PEMCipher
  constant _ (line 27) | _ PEMCipher = iota
  constant PEMCipherDES (line 28) | PEMCipherDES
  constant PEMCipher3DES (line 29) | PEMCipher3DES
  constant PEMCipherAES128 (line 30) | PEMCipherAES128
  constant PEMCipherAES192 (line 31) | PEMCipherAES192
  constant PEMCipherAES256 (line 32) | PEMCipherAES256
  type rfc1423Algo (line 36) | type rfc1423Algo struct
    method deriveKey (line 82) | func (c rfc1423Algo) deriveKey(password, salt []byte) []byte {
  function IsEncryptedPEMBlock (line 99) | func IsEncryptedPEMBlock(b *pem.Block) bool {
  function DecryptPEMBlock (line 115) | func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error) {
  function EncryptPEMBlock (line 183) | func EncryptPEMBlock(rand io.Reader, blockType string, data, password []...
  function cipherByName (line 222) | func cipherByName(name string) *rfc1423Algo {
  function cipherByKey (line 232) | func cipherByKey(key PEMCipher) *rfc1423Algo {

FILE: certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt_test.go
  function TestDecrypt (line 16) | func TestDecrypt(t *testing.T) {
  function TestEncrypt (line 41) | func TestEncrypt(t *testing.T) {
  constant incompleteBlockPEM (line 226) | incompleteBlockPEM = `
  function TestIncompleteBlock (line 235) | func TestIncompleteBlock(t *testing.T) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs1.go
  type pkcs1PrivateKey (line 15) | type pkcs1PrivateKey struct
  type pkcs1AdditionalRSAPrime (line 30) | type pkcs1AdditionalRSAPrime struct
  function ParsePKCS1PrivateKey (line 39) | func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error) {
  function MarshalPKCS1PrivateKey (line 86) | func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte {
  type rsaPublicKey (line 118) | type rsaPublicKey struct

FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs8.go
  type pkcs8 (line 17) | type pkcs8 struct
  function ParsePKCS8PrivateKey (line 26) | func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/pkcs8_test.go
  function TestPKCS8 (line 18) | func TestPKCS8(t *testing.T) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/pkix/pkix.go
  type AlgorithmIdentifier (line 17) | type AlgorithmIdentifier struct
  type RDNSequence (line 22) | type RDNSequence
  type RelativeDistinguishedNameSET (line 24) | type RelativeDistinguishedNameSET
  type AttributeTypeAndValue (line 28) | type AttributeTypeAndValue struct
  type AttributeTypeAndValueSET (line 35) | type AttributeTypeAndValueSET struct
  type Extension (line 42) | type Extension struct
  type Name (line 52) | type Name struct
    method FillFromRDNSequence (line 62) | func (n *Name) FillFromRDNSequence(rdns *RDNSequence) {
    method appendRDNs (line 116) | func (n Name) appendRDNs(in RDNSequence, values []string, oid asn1.Obj...
    method ToRDNSequence (line 130) | func (n Name) ToRDNSequence() (ret RDNSequence) {
  function oidInAttributeTypeAndValue (line 153) | func oidInAttributeTypeAndValue(oid asn1.ObjectIdentifier, atv []Attribu...
  type CertificateList (line 165) | type CertificateList struct
    method HasExpired (line 172) | func (certList *CertificateList) HasExpired(now time.Time) bool {
  type TBSCertificateList (line 178) | type TBSCertificateList struct
  type RevokedCertificate (line 191) | type RevokedCertificate struct

FILE: certificate/constraints/vendor/constraintcrypto/x509/root.go
  function systemRootsPool (line 15) | func systemRootsPool() *CertPool {
  function initSystemRoots (line 20) | func initSystemRoots() {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_cgo_darwin.go
  function loadSystemRoots (line 157) | func loadSystemRoots() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin.go
  method systemVerify (line 11) | func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Cer...
  function execSecurityRoots (line 15) | func execSecurityRoots() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin_arm_gen.go
  function main (line 36) | func main() {
  function selectCerts (line 68) | func selectCerts() ([]*x509.Certificate, error) {
  function sysCerts (line 105) | func sysCerts() (certs []*x509.Certificate, err error) {
  type certID (line 130) | type certID struct
  function fetchCertIDs (line 136) | func fetchCertIDs() ([]certID, error) {
  constant header (line 176) | header = `

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin_armx.go
  function loadSystemRoots (line 13) | func loadSystemRoots() (*CertPool, error) {
  constant systemRootsPEM (line 19) | systemRootsPEM = `

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_darwin_test.go
  function TestSystemRoots (line 12) | func TestSystemRoots(t *testing.T) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_nocgo_darwin.go
  function loadSystemRoots (line 9) | func loadSystemRoots() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_plan9.go
  method systemVerify (line 19) | func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Cer...
  function loadSystemRoots (line 23) | func loadSystemRoots() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_unix.go
  method systemVerify (line 21) | func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Cer...
  function loadSystemRoots (line 25) | func loadSystemRoots() (*CertPool, error) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/root_windows.go
  function createStoreContext (line 20) | func createStoreContext(leaf *Certificate, opts *VerifyOptions) (*syscal...
  function extractSimpleChain (line 59) | func extractSimpleChain(simpleChain **syscall.CertSimpleChain, count int...
  function checkChainTrustStatus (line 85) | func checkChainTrustStatus(c *Certificate, chainCtx *syscall.CertChainCo...
  function checkChainSSLServerPolicy (line 100) | func checkChainSSLServerPolicy(c *Certificate, chainCtx *syscall.CertCha...
  method systemVerify (line 143) | func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Cer...
  function loadSystemRoots (line 228) | func loadSystemRoots() (*CertPool, error) { return nil, nil }

FILE: certificate/constraints/vendor/constraintcrypto/x509/sec1.go
  constant ecPrivKeyVersion (line 16) | ecPrivKeyVersion = 1
  type ecPrivateKey (line 24) | type ecPrivateKey struct
  function ParseECPrivateKey (line 32) | func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error) {
  function MarshalECPrivateKey (line 37) | func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error) {
  function parseECPrivateKey (line 59) | func parseECPrivateKey(namedCurveOID *asn1.ObjectIdentifier, der []byte)...

FILE: certificate/constraints/vendor/constraintcrypto/x509/sec1_test.go
  function TestParseECPrivateKey (line 28) | func TestParseECPrivateKey(t *testing.T) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/sha2_windows_test.go
  function init (line 9) | func init() {

FILE: certificate/constraints/vendor/constraintcrypto/x509/verify.go
  type InvalidReason (line 17) | type InvalidReason
  constant NotAuthorizedToSign (line 22) | NotAuthorizedToSign InvalidReason = iota
  constant Expired (line 25) | Expired
  constant CANotAuthorizedForThisName (line 29) | CANotAuthorizedForThisName
  constant TooManyIntermediates (line 32) | TooManyIntermediates
  constant IncompatibleUsage (line 35) | IncompatibleUsage
  type CertificateInvalidError (line 40) | type CertificateInvalidError struct
    method Error (line 45) | func (e CertificateInvalidError) Error() string {
  type HostnameError (line 63) | type HostnameError struct
    method Error (line 68) | func (h HostnameError) Error() string {
  type UnknownAuthorityError (line 94) | type UnknownAuthorityError struct
    method Error (line 104) | func (e UnknownAuthorityError) Error() string {
  type SystemRootsError (line 120) | type SystemRootsError struct
    method Error (line 124) | func (se SystemRootsError) Error() string {
  type VerifyOptions (line 138) | type VerifyOptions struct
  constant leafCertificate (line 151) | leafCertificate = iota
  constant intermediateCertificate (line 152) | intermediateCertificate
  constant rootCertificate (line 153) | rootCertificate
  method isValid (line 157) | func (c *Certificate) isValid(certType int, currentChain []*Certificate,...
  method Verify (line 223) | func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificat...
  function appendToFreshChain (line 296) | func appendToFreshChain(chain []*Certificate, cert *Certificate) []*Cert...
  method buildChains (line 303) | func (c *Certificate) buildChains(cache map[int][][]*Certificate, curren...
  function matchHostnames (line 353) | func matchHostnames(pattern, host string) bool {
  function toLowerCaseASCII (line 383) | func toLowerCaseASCII(in string) string {
  method VerifyHostname (line 414) | func (c *Certificate) VerifyHostname(h string) error {
  function checkChainForKeyUsage (line 447) | func checkChainForKeyUsage(chain []*Certificate, keyUsages []ExtKeyUsage...

FILE: certificate/constraints/vendor/constraintcrypto/x509/verify_test.go
  type verifyTest (line 19) | type verifyTest struct
  function expectHostnameError (line 240) | func expectHostnameError(t *testing.T, i int, err error) (ok bool) {
  function expectExpired (line 248) | func expectExpired(t *testing.T, i int, err error) (ok bool) {
  function expectUsageError (line 256) | func expectUsageError(t *testing.T, i int, err error) (ok bool) {
  function expectAuthorityUnknown (line 264) | func expectAuthorityUnknown(t *testing.T, i int, err error) (ok bool) {
  function expectSystemRootsError (line 272) | func expectSystemRootsError(t *testing.T, i int, err error) bool {
  function expectHashError (line 280) | func expectHashError(t *testing.T, i int, err error) bool {
  function certificateFromPEM (line 292) | func certificateFromPEM(pemBytes string) (*Certificate, error) {
  function testVerify (line 300) | func testVerify(t *testing.T, useSystemRoots bool) {
  function TestGoVerify (line 398) | func TestGoVerify(t *testing.T) {
  function TestSystemVerify (line 402) | func TestSystemVerify(t *testing.T) {
  function chainToDebugString (line 410) | func chainToDebugString(chain []*Certificate) string {
  function nameToKey (line 421) | func nameToKey(name *pkix.Name) string {
  constant geoTrustRoot (line 425) | geoTrustRoot = `-----BEGIN CERTIFICATE-----
  constant giag2Intermediate (line 447) | giag2Intermediate = `-----BEGIN CERTIFICATE-----
  constant googleLeaf (line 473) | googleLeaf = `-----BEGIN CERTIFICATE-----
  constant googleLeafWithInvalidHash (line 503) | googleLeafWithInvalidHash = `-----BEGIN CERTIFICATE-----
  constant dnssecExpLeaf (line 531) | dnssecExpLeaf = `-----BEGIN CERTIFICATE-----
  constant startComIntermediate (line 571) | startComIntermediate = `-----BEGIN CERTIFICATE-----
  constant startComRoot (line 608) | startComRoot = `-----BEGIN CERTIFICATE-----
  constant smimeLeaf (line 653) | smimeLeaf = `-----BEGIN CERTIFICATE-----
  constant smimeIntermediate (line 683) | smimeIntermediate = `-----BEGIN CERTIFICATE-----
  constant comodoRSAAuthority (line 1033) | comodoRSAAuthority = `-----BEGIN CERTIFICATE-----
  constant addTrustRoot (line 1066) | addTrustRoot = `-----BEGIN CERTIFICATE-----

FILE: certificate/constraints/vendor/constraintcrypto/x509/x509.go
  type pkixPublicKey (line 32) | type pkixPublicKey struct
  function ParsePKIXPublicKey (line 45) | func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error) {
  function marshalPublicKey (line 59) | func marshalPublicKey(pub interface{}) (publicKeyBytes []byte, publicKey...
  function MarshalPKIXPublicKey (line 97) | func MarshalPKIXPublicKey(pub interface{}) ([]byte, error) {
  type certificate (line 120) | type certificate struct
  type tbsCertificate (line 127) | type tbsCertificate struct
  type dsaAlgorithmParameters (line 141) | type dsaAlgorithmParameters struct
  type dsaSignature (line 145) | type dsaSignature struct
  type ecdsaSignature (line 149) | type ecdsaSignature
  type validity (line 151) | type validity struct
  type publicKeyInfo (line 155) | type publicKeyInfo struct
  type authKeyId (line 162) | type authKeyId struct
  type SignatureAlgorithm (line 166) | type SignatureAlgorithm
    method String (line 199) | func (algo SignatureAlgorithm) String() string {
  constant UnknownSignatureAlgorithm (line 169) | UnknownSignatureAlgorithm SignatureAlgorithm = iota
  constant MD2WithRSA (line 170) | MD2WithRSA
  constant MD5WithRSA (line 171) | MD5WithRSA
  constant SHA1WithRSA (line 172) | SHA1WithRSA
  constant SHA256WithRSA (line 173) | SHA256WithRSA
  constant SHA384WithRSA (line 174) | SHA384WithRSA
  constant SHA512WithRSA (line 175) | SHA512WithRSA
  constant DSAWithSHA1 (line 176) | DSAWithSHA1
  constant DSAWithSHA256 (line 177) | DSAWithSHA256
  constant ECDSAWithSHA1 (line 178) | ECDSAWithSHA1
  constant ECDSAWithSHA256 (line 179) | ECDSAWithSHA256
  constant ECDSAWithSHA384 (line 180) | ECDSAWithSHA384
  constant ECDSAWithSHA512 (line 181) | ECDSAWithSHA512
  type PublicKeyAlgorithm (line 206) | type PublicKeyAlgorithm
  constant UnknownPublicKeyAlgorithm (line 209) | UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota
  constant RSA (line 210) | RSA
  constant DSA (line 211) | DSA
  constant ECDSA (line 212) | ECDSA
  function getSignatureAlgorithmFromOID (line 300) | func getSignatureAlgorithmFromOID(oid asn1.ObjectIdentifier) SignatureAl...
  function getPublicKeyAlgorithmFromOID (line 329) | func getPublicKeyAlgorithmFromOID(oid asn1.ObjectIdentifier) PublicKeyAl...
  function namedCurveFromOID (line 364) | func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve {
  function oidFromNamedCurve (line 378) | func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, boo...
  type KeyUsage (line 395) | type KeyUsage
  constant KeyUsageDigitalSignature (line 398) | KeyUsageDigitalSignature KeyUsage = 1 << iota
  constant KeyUsageContentCommitment (line 399) | KeyUsageContentCommitment
  constant KeyUsageKeyEncipherment (line 400) | KeyUsageKeyEncipherment
  constant KeyUsageDataEncipherment (line 401) | KeyUsageDataEncipherment
  constant KeyUsageKeyAgreement (line 402) | KeyUsageKeyAgreement
  constant KeyUsageCertSign (line 403) | KeyUsageCertSign
  constant KeyUsageCRLSign (line 404) | KeyUsageCRLSign
  constant KeyUsageEncipherOnly (line 405) | KeyUsageEncipherOnly
  constant KeyUsageDecipherOnly (line 406) | KeyUsageDecipherOnly
  type ExtKeyUsage (line 438) | type ExtKeyUsage
  constant ExtKeyUsageAny (line 441) | ExtKeyUsageAny ExtKeyUsage = iota
  constant ExtKeyUsageServerAuth (line 442) | ExtKeyUsageServerAuth
  constant ExtKeyUsageClientAuth (line 443) | ExtKeyUsageClientAuth
  constant ExtKeyUsageCodeSigning (line 444) | ExtKeyUsageCodeSigning
  constant ExtKeyUsageEmailProtection (line 445) | ExtKeyUsageEmailProtection
  constant ExtKeyUsageIPSECEndSystem (line 446) | ExtKeyUsageIPSECEndSystem
  constant ExtKeyUsageIPSECTunnel (line 447) | ExtKeyUsageIPSECTunnel
  constant ExtKeyUsageIPSECUser (line 448) | ExtKeyUsageIPSECUser
  constant ExtKeyUsageTimeStamping (line 449) | ExtKeyUsageTimeStamping
  constant ExtKeyUsageOCSPSigning (line 450) | ExtKeyUsageOCSPSigning
  constant ExtKeyUsageMicrosoftServerGatedCrypto (line 451) | ExtKeyUsageMicrosoftServerGatedCrypto
  constant ExtKeyUsageNetscapeServerGatedCrypto (line 452) | ExtKeyUsageNetscapeServerGatedCrypto
  function extKeyUsageFromOID (line 474) | func extKeyUsageFromOID(oid asn1.ObjectIdentifier) (eku ExtKeyUsage, ok ...
  function oidFromExtKeyUsage (line 483) | func oidFromExtKeyUsage(eku ExtKeyUsage) (oid asn1.ObjectIdentifier, ok ...
  type Certificate (line 493) | type Certificate struct
    method Equal (line 592) | func (c *Certificate) Equal(other *Certificate) bool {
    method CheckSignatureFrom (line 647) | func (c *Certificate) CheckSignatureFrom(parent *Certificate) error {
    method CheckSignature (line 675) | func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, ...
    method CheckCRLSignature (line 743) | func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) err...
    method CreateCRL (line 1731) | func (c *Certificate) CreateCRL(rand io.Reader, priv interface{}, revo...
  type InsecureAlgorithmError (line 577) | type InsecureAlgorithmError
    method Error (line 579) | func (e InsecureAlgorithmError) Error() string {
  type ConstraintViolationError (line 586) | type ConstraintViolationError struct
    method Error (line 588) | func (ConstraintViolationError) Error() string {
  function checkSignature (line 681) | func checkSignature(algo SignatureAlgorithm, signed, signature []byte, p...
  type UnhandledCriticalExtension (line 748) | type UnhandledCriticalExtension struct
    method Error (line 750) | func (h UnhandledCriticalExtension) Error() string {
  type basicConstraints (line 754) | type basicConstraints struct
  type policyInformation (line 760) | type policyInformation struct
  type nameConstraints (line 766) | type nameConstraints struct
  type generalSubtree (line 771) | type generalSubtree struct
  type authorityInfoAccess (line 777) | type authorityInfoAccess struct
  type distributionPoint (line 783) | type distributionPoint struct
  type distributionPointName (line 789) | type distributionPointName struct
  function parsePublicKey (line 794) | func parsePublicKey(algo PublicKeyAlgorithm, keyData *publicKeyInfo) (in...
  function parseSANExtension (line 878) | func parseSANExtension(value []byte) (dnsNames, emailAddresses []string,...
  function parseCIDR (line 934) | func parseCIDR(address []byte) (*net.IPNet, error) {
  function parseCertificate (line 947) | func parseCertificate(in *certificate) (*Certificate, error) {
  function ParseCertificate (line 1228) | func ParseCertificate(asn1Data []byte) (*Certificate, error) {
  function ParseCertificates (line 1243) | func ParseCertificates(asn1Data []byte) ([]*Certificate, error) {
  function reverseBitsInAByte (line 1268) | func reverseBitsInAByte(in byte) byte {
  function asn1BitLength (line 1278) | func asn1BitLength(bitString []byte) int {
  function oidInExtensions (line 1315) | func oidInExtensions(oid asn1.ObjectIdentifier, extensions []pkix.Extens...
  function marshalSANs (line 1326) | func marshalSANs(dnsNames, emailAddresses []string, ipAddresses []net.IP...
  function buildExtensions (line 1345) | func buildExtensions(template *Certificate) (ret []pkix.Extension, err e...
  function subjectBytes (line 1534) | func subjectBytes(cert *Certificate) ([]byte, error) {
  function signingParamsForPublicKey (line 1545) | func signingParamsForPublicKey(pub interface{}, requestedSigAlgo Signatu...
  function CreateCertificate (line 1625) | func CreateCertificate(rand io.Reader, template, parent *Certificate, pu...
  function ParseCRL (line 1708) | func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error) {
  function ParseDERCRL (line 1719) | func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error) {
  type CertificateRequest (line 1785) | type CertificateRequest struct
    method CheckSignature (line 2129) | func (c *CertificateRequest) CheckSignature() error {
  type tbsCertificateRequest (line 1826) | type tbsCertificateRequest struct
  type certificateRequest (line 1834) | type certificateRequest struct
  function newRawAttributes (line 1847) | func newRawAttributes(attributes []pkix.AttributeTypeAndValueSET) ([]asn...
  function parseRawAttributes (line 1864) | func parseRawAttributes(rawAttributes []asn1.RawValue) []pkix.AttributeT...
  function parseCSRExtensions (line 1880) | func parseCSRExtensions(rawAttributes []asn1.RawValue) ([]pkix.Extension...
  function CreateCertificateRequest (line 1919) | func CreateCertificateRequest(rand io.Reader, template *CertificateReque...
  function ParseCertificateRequest (line 2068) | func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, erro...
  function parseCertificateRequest (line 2081) | func parseCertificateRequest(in *certificateRequest) (*CertificateReques...

FILE: certificate/constraints/vendor/constraintcrypto/x509/x509_test.go
  function TestParsePKCS1PrivateKey (line 31) | func TestParsePKCS1PrivateKey(t *testing.T) {
  function TestParsePKIXPublicKey (line 54) | func TestParsePKIXPublicKey(t *testing.T) {
  function init (line 101) | func init() {
  function bigFromString (line 110) | func bigFromString(s string) *big.Int {
  function fromBase10 (line 116) | func fromBase10(base10 string) *big.Int {
  function bigFromHexString (line 122) | func bigFromHexString(s string) *big.Int {
  function TestMarshalRSAPrivateKey (line 140) | func TestMarshalRSAPrivateKey(t *testing.T) {
  type matchHostnamesTest (line 172) | type matchHostnamesTest struct
  function TestMatchHostnames (line 204) | func TestMatchHostnames(t *testing.T) {
  function TestMatchIP (line 213) | func TestMatchIP(t *testing.T) {
  function TestCertificateParse (line 256) | func TestCertificateParse(t *testing.T) {
  function TestCreateSelfSignedCertificate (line 325) | func TestCreateSelfSignedCertificate(t *testing.T) {
  function TestUnknownCriticalExtension (line 528) | func TestUnknownCriticalExtension(t *testing.T) {
  function TestECDSA (line 681) | func TestECDSA(t *testing.T) {
  function TestParseCertificateWithDsaPublicKey (line 731) | func TestParseCertificateWithDsaPublicKey(t *testing.T) {
  function TestParseCertificateWithDSASignatureAlgorithm (line 760) | func TestParseCertificateWithDSASignatureAlgorithm(t *testing.T) {
  function TestVerifyCertificateWithDSASignature (line 771) | func TestVerifyCertificateWithDSASignature(t *testing.T) {
  constant pemCertificate (line 783) | pemCertificate = `-----BEGIN CERTIFICATE-----
  function TestCRLCreation (line 795) | func TestCRLCreation(t *testing.T) {
  function fromBase64 (line 826) | func fromBase64(in string) []byte {
  function TestParseDERCRL (line 835) | func TestParseDERCRL(t *testing.T) {
  function TestCRLWithoutExpiry (line 855) | func TestCRLWithoutExpiry(t *testing.T) {
  function TestParsePEMCRL (line 866) | func TestParsePEMCRL(t *testing.T) {
  function TestImports (line 886) | func TestImports(t *testing.T) {
  constant derCRLBase64 (line 894) | derCRLBase64 = "MIINqzCCDJMCAQEwDQYJKoZIhvcNAQEFBQAwVjEZMBcGA1UEAxMQUEtJ...
  constant pemCRLBase64 (line 896) | pemCRLBase64 = "LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tDQpNSUlCOWpDQ0FWOENBUUV3...
  function TestCreateCertificateRequest (line 898) | func TestCreateCertificateRequest(t *testing.T) {
  function marshalAndParseCSR (line 971) | func marshalAndParseCSR(t *testing.T, template *CertificateRequest) *Cer...
  function TestCertificateRequestOverrides (line 985) | func TestCertificateRequestOverrides(t *testing.T) {
  function TestParseCertificateRequest (line 1061) | func TestParseCertificateRequest(t *testing.T) {
  function TestCriticalFlagInCSRRequestedExtensions (line 1094) | func TestCriticalFlagInCSRRequestedExtensions(t *testing.T) {
  function serialiseAndParse (line 1130) | func serialiseAndParse(t *testing.T, template *Certificate) *Certificate {
  function TestMaxPathLen (line 1146) | func TestMaxPathLen(t *testing.T) {
  function TestNoAuthorityKeyIdInSelfSignedCert (line 1187) | func TestNoAuthorityKeyIdInSelfSignedCert(t *testing.T) {
  function TestASN1BitLength (line 1211) | func TestASN1BitLength(t *testing.T) {
  function TestVerifyEmptyCertificate (line 1233) | func TestVerifyEmptyCertificate(t *testing.T) {
  function TestInsecureAlgorithmErrorString (line 1239) | func TestInsecureAlgorithmErrorString(t *testing.T) {
  function TestMD5 (line 1290) | func TestMD5(t *testing.T) {

FILE: certificate/constraints/vendor/constraintcrypto/x509/x509_test_import.go
  function main (line 21) | func main() {

FILE: certificate/paths.go
  type Paths (line 8) | type Paths struct
    method String (line 26) | func (p Paths) String() (str string) {
    method GetValidityMap (line 56) | func (p Paths) GetValidityMap() map[string]ValidationInfo {
    method IsTrustedBy (line 65) | func (p Paths) IsTrustedBy(truststore string) bool {
  constant E_SEP (line 19) | E_SEP string = "   "
  constant S_SEP (line 20) | S_SEP string = "│  "
  constant T_SEP (line 21) | T_SEP string = "├──"
  constant L_SEP (line 22) | L_SEP string = "└──"
  constant C_SEP (line 23) | C_SEP string = "───"

FILE: config/config.go
  type Config (line 11) | type Config struct
  function Load (line 35) | func Load(path string) (conf Config, err error) {

FILE: connection/connection.go
  type CipherscanOutput (line 15) | type CipherscanOutput struct
    method convertTimestamp (line 119) | func (s CipherscanOutput) convertTimestamp(t string) (time.Time, error) {
    method Stored (line 126) | func (s CipherscanOutput) Stored() (Stored, error) {
  type CipherscanCiphersuite (line 24) | type CipherscanCiphersuite struct
  type Stored (line 38) | type Stored struct
    method Equal (line 65) | func (c Stored) Equal(ci Stored) bool {
  type Ciphersuite (line 45) | type Ciphersuite struct
    method equal (line 85) | func (s Ciphersuite) equal(cs Ciphersuite) bool {
  function stringtoBool (line 57) | func stringtoBool(s string) bool {

FILE: connection/retriever.go
  type NoTLSConnErr (line 14) | type NoTLSConnErr
    method Error (line 16) | func (f NoTLSConnErr) Error() string {
  function Connect (line 20) | func Connect(domain, cipherscanbinPath string) ([]byte, error) {
  function getRandomIP (line 77) | func getRandomIP(domain string) string {

FILE: constants/ciphersuites.go
  type CipherSuite (line 3) | type CipherSuite struct
  type Encryption (line 16) | type Encryption struct

FILE: constants/curves.go
  type Curve (line 4) | type Curve struct

FILE: constants/protocols.go
  type Protocol (line 3) | type Protocol struct

FILE: database/certificate.go
  method InsertCertificate (line 19) | func (db *DB) InsertCertificate(cert *certificate.Certificate) (int64, e...
  method UpdateCertificate (line 187) | func (db *DB) UpdateCertificate(cert *certificate.Certificate) error {
  method UpdateCertificateRank (line 350) | func (db *DB) UpdateCertificateRank(id, rank int64) error {
  method UpdateCertLastSeen (line 357) | func (db *DB) UpdateCertLastSeen(cert *certificate.Certificate) error {
  method UpdateCertLastSeenByID (line 364) | func (db *DB) UpdateCertLastSeenByID(id int64) error {
  method UpdateCertsLastSeenByID (line 371) | func (db *DB) UpdateCertsLastSeenByID(ids []int64) error {
  method UpdateCertMarkAsRevoked (line 376) | func (db *DB) UpdateCertMarkAsRevoked(id int64, when time.Time) error {
  method AddCertToUbuntuTruststore (line 381) | func (db *DB) AddCertToUbuntuTruststore(id int64) error {
  method AddCertToMozillaTruststore (line 386) | func (db *DB) AddCertToMozillaTruststore(id int64) error {
  method AddCertToMicrosoftTruststore (line 391) | func (db *DB) AddCertToMicrosoftTruststore(id int64) error {
  method AddCertToAppleTruststore (line 396) | func (db *DB) AddCertToAppleTruststore(id int64) error {
  method AddCertToAndroidTruststore (line 401) | func (db *DB) AddCertToAndroidTruststore(id int64) error {
  method RemoveCACertFromTruststore (line 408) | func (db *DB) RemoveCACertFromTruststore(trustedCerts []string, tsName s...
  method GetCertIDBySHA1Fingerprint (line 444) | func (db *DB) GetCertIDBySHA1Fingerprint(sha1 string) (id int64, err err...
  method GetCertIDBySHA256Fingerprint (line 461) | func (db *DB) GetCertIDBySHA256Fingerprint(sha256 string) (id int64, err...
  method GetCertIDFromTrust (line 478) | func (db *DB) GetCertIDFromTrust(trustID int64) (id int64, err error) {
  type Scannable (line 487) | type Scannable interface
  method scanCert (line 491) | func (db *DB) scanCert(row Scannable) (certificate.Certificate, error) {
  method GetCertByID (line 586) | func (db *DB) GetCertByID(certID int64) (*certificate.Certificate, error) {
  method GetAllCertsInStore (line 596) | func (db *DB) GetAllCertsInStore(store string) (out []certificate.Certif...
  method GetEECountForIssuerByID (line 625) | func (db *DB) GetEECountForIssuerByID(certID int64) (count int64, err er...
  method GetCertBySHA1Fingerprint (line 649) | func (db *DB) GetCertBySHA1Fingerprint(sha1 string) (*certificate.Certif...
  method GetCACertsBySubject (line 660) | func (db *DB) GetCACertsBySubject(subject certificate.Subject) (certs []...
  method InsertTrustToDB (line 695) | func (db *DB) InsertTrustToDB(cert certificate.Certificate, certID, parI...
  method UpdateTrust (line 714) | func (db *DB) UpdateTrust(trustID int64, cert certificate.Certificate) (...
  method GetCurrentTrustID (line 760) | func (db *DB) GetCurrentTrustID(certID, issuerID int64) (int64, error) {
  method GetCurrentTrustIDForCert (line 774) | func (db *DB) GetCurrentTrustIDForCert(certID int64) (int64, error) {
  method GetValidationMapForCert (line 794) | func (db *DB) GetValidationMapForCert(certID int64) (map[string]certific...
  method GetCertPaths (line 825) | func (db *DB) GetCertPaths(cert *certificate.Certificate) (paths certifi...
  method getCertPaths (line 845) | func (db *DB) getCertPaths(cert *certificate.Certificate, ancestors []st...
  method IsTrustValid (line 902) | func (db *DB) IsTrustValid(id int64) (bool, error) {

FILE: database/database.go
  type DB (line 17) | type DB struct
    method NewScan (line 78) | func (db *DB) NewScan(domain string, rplay int, jsonParams []byte) (Sc...
    method GetLastScanTimeForTarget (line 99) | func (db *DB) GetLastScanTimeForTarget(target string) (int64, time.Tim...
    method GetScanByID (line 122) | func (db *DB) GetScanByID(id int64) (Scan, error) {
    method GetAnalysisByScan (line 188) | func (db *DB) GetAnalysisByScan(id int64) ([]Analysis, error) {
    method UpdateScanCompletionPercentage (line 206) | func (db *DB) UpdateScanCompletionPercentage(id int64, p int) error {
    method InsertWorkerAnalysis (line 212) | func (db *DB) InsertWorkerAnalysis(scanid int64, jsonRes []byte, worke...
  type Scan (line 23) | type Scan struct
  type Analysis (line 42) | type Analysis struct
  type Analyses (line 49) | type Analyses
    method Len (line 53) | func (slice Analyses) Len() int {
    method Less (line 57) | func (slice Analyses) Less(i, j int) bool {
    method Swap (line 61) | func (slice Analyses) Swap(i, j int) {
  function RegisterConnection (line 65) | func RegisterConnection(dbname, user, password, hostport, sslmode string...

FILE: database/messaging.go
  method RegisterScanListener (line 18) | func (db *DB) RegisterScanListener(dbname, user, password, hostport, ssl...
  method acquireScan (line 103) | func (db *DB) acquireScan(id string) bool {

FILE: database/schema.sql
  type certificates (line 1) | CREATE TABLE certificates(
  type certificates_sha256_fingerprint_idx (line 50) | CREATE INDEX certificates_sha256_fingerprint_idx ON certificates(sha256_...
  type certificates_subject_idx (line 51) | CREATE INDEX certificates_subject_idx ON certificates(subject)
  type certificates_cisco_umbrella_rank (line 52) | CREATE INDEX certificates_cisco_umbrella_rank ON certificates(cisco_umbr...
  type certificates_first_seen_idx (line 53) | CREATE INDEX certificates_first_seen_idx ON certificates(first_seen)
  type certificates_last_seen_idx (line 54) | CREATE INDEX certificates_last_seen_idx ON certificates(last_seen)
  type trust (line 57) | CREATE TABLE trust (
  type trust_cert_id_idx (line 69) | CREATE INDEX trust_cert_id_idx ON trust(cert_id)
  type trust_issuer_id_idx (line 70) | CREATE INDEX trust_issuer_id_idx ON trust(issuer_id)
  type trust_is_current_idx (line 71) | CREATE INDEX trust_is_current_idx ON trust(is_current)
  type scans (line 73) | CREATE TABLE scans(
  type scans_completion_attempts_idx (line 90) | CREATE INDEX scans_completion_attempts_idx ON scans(completion_perc, att...
  type scans_ack_idx (line 91) | CREATE INDEX scans_ack_idx ON scans(ack)
  type scans_target_idx (line 92) | CREATE INDEX scans_target_idx ON scans(target)
  type scans_timestamp_idx (line 93) | CREATE INDEX scans_timestamp_idx ON scans(timestamp)
  type scans_cert_id_idx (line 94) | CREATE INDEX scans_cert_id_idx ON scans(cert_id)
  type scans_has_tls_idx (line 95) | CREATE INDEX scans_has_tls_idx ON scans(has_tls)
  type analysis (line 97) | CREATE TABLE analysis(
  type analysis_scan_id_idx (line 104) | CREATE INDEX analysis_scan_id_idx ON analysis(scan_id)
  type analysis_worker_name_idx (line 105) | CREATE INDEX analysis_worker_name_idx ON analysis(worker_name)

FILE: database/stats.go
  type Statistics (line 6) | type Statistics struct
  method GetLatestStatisticsFromView (line 25) | func (db *DB) GetLatestStatisticsFromView() (stats Statistics, err error) {
  method CountTableEntries (line 43) | func (db *DB) CountTableEntries() (scans, trusts, analyses, certificates...
  method CountPendingScans (line 64) | func (db *DB) CountPendingScans() (count int64, err error) {
  type HourlyScansCount (line 72) | type HourlyScansCount struct
  method CountLast24HoursScans (line 79) | func (db *DB) CountLast24HoursScans() (hourlyStats []HourlyScansCount, e...
  method CountTargetsLast24Hours (line 99) | func (db *DB) CountTargetsLast24Hours() (count, countDistinct int64, err...
  method CountDistinctCertsSeenLast24Hours (line 109) | func (db *DB) CountDistinctCertsSeenLast24Hours() (count int64, err erro...
  method CountDistinctCertsAddedLast24Hours (line 117) | func (db *DB) CountDistinctCertsAddedLast24Hours() (count int64, err err...
  method CountScansLast24Hours (line 125) | func (db *DB) CountScansLast24Hours() (count int64, err error) {

FILE: logger/logger.go
  function init_logger (line 7) | func init_logger() *log.Logger {
  function GetLogger (line 36) | func GetLogger() *log.Logger {
  function SetLevelToDebug (line 41) | func SetLevelToDebug() {
  function SetLevelToInfo (line 46) | func SetLevelToInfo() {
  function SetLevelToWarning (line 51) | func SetLevelToWarning() {

FILE: metrics/metrics.go
  type Sender (line 11) | type Sender struct
    method CompletedScan (line 24) | func (sender *Sender) CompletedScan() {
    method NewCertificate (line 39) | func (sender *Sender) NewCertificate() {
    method NewAnalysis (line 54) | func (sender *Sender) NewAnalysis() {
    method NewTrustRelation (line 69) | func (sender *Sender) NewTrustRelation() {
  function NewSender (line 15) | func NewSender() (*Sender, error) {

FILE: static/certsplainer.js
  function getParameterByName (line 18) | function getParameterByName(name, url) {
  function possiblyBinaryToPEM (line 36) | function possiblyBinaryToPEM(possiblyBinary) {
  function readfile (line 43) | function readfile(e) {
  function postCertificate (line 60) | function postCertificate(certificate) {
  function setField (line 92) | function setField(field, value) {
  function clearFields (line 113) | function clearFields() {
  function clearTable (line 127) | function clearTable(name) {
  function permanentLink (line 134) | function permanentLink(id, text) {
  function formatHTMLCommonName (line 141) | function formatHTMLCommonName(name, id) {
  function formatCommonName (line 145) | function formatCommonName(name) {
  function formatExtension (line 155) | function formatExtension(extensionName, extension) {
  function setFieldsFromJSON (line 172) | function setFieldsFromJSON(properties) {
  function addParentToCertPaths (line 284) | function addParentToCertPaths(current, parent, x, y) {
  function drawCertPaths (line 316) | function drawCertPaths(json) {
  function getCertPaths (line 373) | function getCertPaths(id) {
  function loadCert (line 394) | function loadCert(id, sha256) {
  function send (line 419) | function send(e) {

FILE: static/ev-checker.js
  function checkResult (line 6) | function checkResult(id) {
  function startScan (line 22) | function startScan(target, oid, rootCertificate) {
  function send (line 69) | function send(e) {
  function hostname_from (line 94) | function hostname_from(target) {
  function readfile (line 105) | function readfile(e) {

FILE: tlsobs-api/handlers.go
  type scanResponse (line 26) | type scanResponse struct
  function IndexHandler (line 30) | func IndexHandler(w http.ResponseWriter, r *http.Request) {
  function ScanHandler (line 36) | func ScanHandler(w http.ResponseWriter, r *http.Request) {
  function ResultHandler (line 125) | func ResultHandler(w http.ResponseWriter, r *http.Request) {
  function CertificateHandler (line 182) | func CertificateHandler(w http.ResponseWriter, r *http.Request) {
  function PostCertificateHandler (line 220) | func PostCertificateHandler(w http.ResponseWriter, r *http.Request) {
  function PathsHandler (line 318) | func PathsHandler(w http.ResponseWriter, r *http.Request) {
  function TruststoreHandler (line 378) | func TruststoreHandler(w http.ResponseWriter, r *http.Request) {
  type IssuerEECount (line 445) | type IssuerEECount struct
  function IssuerEECountHandler (line 455) | func IssuerEECountHandler(w http.ResponseWriter, r *http.Request) {
  function jsonCertFromID (line 507) | func jsonCertFromID(w http.ResponseWriter, r *http.Request, id int64) {
  function StatsHandler (line 538) | func StatsHandler(w http.ResponseWriter, r *http.Request) {
  function PreflightHandler (line 643) | func PreflightHandler(w http.ResponseWriter, r *http.Request) {
  function heartbeatHandler (line 648) | func heartbeatHandler(w http.ResponseWriter, r *http.Request) {
  function versionHandler (line 669) | func versionHandler(w http.ResponseWriter, r *http.Request) {
  function lbHeartbeatHandler (line 690) | func lbHeartbeatHandler(w http.ResponseWriter, r *http.Request) {
  function HeartbeatHandler (line 695) | func HeartbeatHandler(w http.ResponseWriter, r *http.Request) {
  function validateDomain (line 700) | func validateDomain(domain string) bool {

FILE: tlsobs-api/helpers.go
  function init (line 11) | func init() {
  function newRequestID (line 15) | func newRequestID() string {
  function httpError (line 24) | func httpError(w http.ResponseWriter, r *http.Request, errorCode int, er...

FILE: tlsobs-api/insert_test.go
  constant mozillaOrgCert (line 15) | mozillaOrgCert = `-----BEGIN CERTIFICATE-----
  function BenchmarkInsertNewCertificate (line 58) | func BenchmarkInsertNewCertificate(b *testing.B) {
  function cleanup (line 88) | func cleanup(db *database.DB, trustIds []int64, id int64) {
  function insert (line 105) | func insert(db *database.DB, certX509 *x509.Certificate) (id int64, trus...

FILE: tlsobs-api/main.go
  function init (line 17) | func init() {
  function main (line 23) | func main() {

FILE: tlsobs-api/middleware.go
  type Middleware (line 13) | type Middleware
  constant ctxDBKey (line 16) | ctxDBKey = "db"
  constant ctxReqID (line 17) | ctxReqID = "reqID"
  function logRequest (line 20) | func logRequest() Middleware {
  function addDB (line 35) | func addDB(db *pg.DB) Middleware {
  function setResponseHeaders (line 43) | func setResponseHeaders() Middleware {
  function addRequestID (line 59) | func addRequestID() Middleware {
  function HandleMiddlewares (line 69) | func HandleMiddlewares(h http.Handler, adapters ...Middleware) http.Hand...
  function addtoContext (line 80) | func addtoContext(r *http.Request, key string, value interface{}) *http....

FILE: tlsobs-api/router.go
  function NewRouter (line 10) | func NewRouter(conf config.Config) *mux.Router {
  type Route (line 30) | type Route struct
  type Routes (line 37) | type Routes

FILE: tlsobs-runner/assertions.go
  method AssertNotBefore (line 20) | func (r Run) AssertNotBefore(a Assertion, target string, cnb time.Time, ...
  method AssertNotAfter (line 44) | func (r Run) AssertNotAfter(a Assertion, target string, cna time.Time, n...
  function parseValidity (line 69) | func parseValidity(validity string) (mintime, maxtime time.Time, err err...
  method AssertAnalysis (line 102) | func (r Run) AssertAnalysis(a Assertion, results database.Scan, cert cer...

FILE: tlsobs-runner/main.go
  type Configuration (line 29) | type Configuration struct
  type Run (line 44) | type Run struct
    method start (line 96) | func (r Run) start(id int) {
    method scan (line 135) | func (r Run) scan(target string) (id int64, err error) {
    method evaluate (line 165) | func (r Run) evaluate(id int64, notifchan chan Notification, wg *sync....
  type Assertion (line 51) | type Assertion struct
  type NotificationsConf (line 64) | type NotificationsConf struct
  function main (line 83) | func main() {
  type scan (line 131) | type scan struct
  function getCert (line 214) | func getCert(id int64) (cert certificate.Certificate, err error) {
  function debugprint (line 236) | func debugprint(format string, a ...interface{}) {
  function getConf (line 245) | func getConf(cfg string) (c Configuration) {

FILE: tlsobs-runner/main_test.go
  function TestConf (line 11) | func TestConf(t *testing.T) {

FILE: tlsobs-runner/notifications.go
  type Notification (line 18) | type Notification struct
  function processNotifications (line 24) | func processNotifications(notifchan chan Notification, done chan bool) {
  function sendMail (line 71) | func sendMail(rcpt string, body []byte) (err error) {
  function sendSlackMessage (line 94) | func sendSlackMessage(rcpt string, body []byte) (err error) {

FILE: tlsobs-scanner/analyser.go
  function Setup (line 19) | func Setup(c config.Config) {
  function handleCertChain (line 188) | func handleCertChain(chain *certificate.Chain) (int64, int64, error) {
  function isChainValid (line 283) | func isChainValid(endEntity *x509.Certificate, intermediates []*x509.Cer...
  function storeCertificates (line 372) | func storeCertificates(certmap map[string]certificate.Certificate) (EECe...
  function getFirstParent (line 525) | func getFirstParent(cert *x509.Certificate, certs []*x509.Certificate) *...
  function updateCert (line 537) | func updateCert(cert *x509.Certificate, parentSignature string, domain, ...

FILE: tlsobs-scanner/main.go
  function main (line 24) | func main() {
  type scanner (line 121) | type scanner struct
    method scan (line 125) | func (s scanner) scan(scanID int64, cipherscan string) {

FILE: tlsobs-scanner/retriever.go
  type NoTLSCertsErr (line 18) | type NoTLSCertsErr
    method Error (line 20) | func (f NoTLSCertsErr) Error() string {
  function handleCert (line 27) | func handleCert(domain string) (int64, int64, *certificate.Chain, error) {
  function retrieveCertFromHost (line 65) | func retrieveCertFromHost(domainName, port string, skipVerify bool) ([]*...

FILE: tlsobs/main.go
  function usage (line 31) | func usage() {
  type scan (line 37) | type scan struct
  function main (line 54) | func main() {
  function printCert (line 163) | func printCert(id int64) {
  function printConnection (line 226) | func printConnection(c connection.Stored) {
  function printAnalysis (line 251) | func printAnalysis(ars []database.Analysis) {
  function getCert (line 284) | func getCert(id int64) (cert certificate.Certificate) {
  function getPaths (line 307) | func getPaths(id int64) (paths certificate.Paths) {

FILE: tools/extractCiphersuites.go
  type Cipher (line 15) | type Cipher struct
  type Encryption (line 27) | type Encryption struct
  type CiphersuiteNames (line 32) | type CiphersuiteNames struct
  function main (line 39) | func main() {

FILE: tools/fixDupCerts.go
  function main (line 10) | func main() {

FILE: tools/fixExtensions.go
  function main (line 16) | func main() {

FILE: tools/fixKeyInfo.go
  function main (line 17) | func main() {
  function getPublicKeyInfo (line 91) | func getPublicKeyInfo(cert *x509.Certificate) (certificate.SubjectPublic...

FILE: tools/fixSHA256SubjectSPKI.go
  function main (line 16) | func main() {

FILE: tools/fixSerial.go
  function main (line 14) | func main() {

FILE: tools/fixserialnumber.go
  type job (line 16) | type job struct
  type result (line 23) | type result struct
  function main (line 29) | func main() {
  function fetchNextBatchWithRetries (line 91) | func fetchNextBatchWithRetries(retries int, db *database.DB, minID int64...
  function fetchNextBatch (line 101) | func fetchNextBatch(db *database.DB, minID int64, batchSize int64) ([]jo...
  function b64RawCertToX509Cert (line 132) | func b64RawCertToX509Cert(b64Crt string) (*x509.Certificate, error) {
  function worker (line 144) | func worker(id int, jobs <-chan job, results chan result, db *database.D...
  function updateSerialNumberInDB (line 168) | func updateSerialNumberInDB(db *database.DB, id int64, correctSerialNumb...

FILE: tools/fixsubjectNames.go
  function main (line 15) | func main() {

FILE: tools/fixvalidity.go
  function main (line 15) | func main() {

FILE: tools/getPaths.go
  function main (line 11) | func main() {

FILE: tools/initMozPolicy.go
  constant listQuery (line 18) | listQuery = `SELECT id, raw_cert
  function main (line 23) | func main() {

FILE: tools/pullCTLogs.go
  function main (line 27) | func main() {

FILE: tools/pullCTLogsIntoDB.go
  constant CTBATCHSIZE (line 29) | CTBATCHSIZE = 100
  function main (line 31) | func main() {

FILE: tools/rescanDomains.go
  type scan (line 16) | type scan struct
  function main (line 20) | func main() {
  function contains (line 96) | func contains(list []string, test string) bool {

FILE: tools/retrieveIntermediatesFromCADatabase.go
  function main (line 20) | func main() {

FILE: tools/retrieveTruststoreFromCADatabase.go
  function main (line 12) | func main() {

FILE: tools/updateCertificate.go
  function main (line 16) | func main() {

FILE: vendor/github.com/BurntSushi/toml/decode.go
  function e (line 13) | func e(format string, args ...interface{}) error {
  type Unmarshaler (line 19) | type Unmarshaler interface
  function Unmarshal (line 24) | func Unmarshal(p []byte, v interface{}) error {
  type Primitive (line 41) | type Primitive struct
  function PrimitiveDecode (line 49) | func PrimitiveDecode(primValue Primitive, v interface{}) error {
  method PrimitiveDecode (line 65) | func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) ...
  function Decode (line 107) | func Decode(data string, v interface{}) (MetaData, error) {
  function DecodeFile (line 128) | func DecodeFile(fpath string, v interface{}) (MetaData, error) {
  function DecodeReader (line 138) | func DecodeReader(r io.Reader, v interface{}) (MetaData, error) {
  method unify (line 151) | func (md *MetaData) unify(data interface{}, rv reflect.Value) error {
  method unifyStruct (line 234) | func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) e...
  method unifyMap (line 279) | func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error {
  method unifyArray (line 307) | func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error {
  method unifySlice (line 323) | func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error {
  method unifySliceArray (line 339) | func (md *MetaData) unifySliceArray(data, rv reflect.Value) error {
  method unifyDatetime (line 351) | func (md *MetaData) unifyDatetime(data interface{}, rv reflect.Value) er...
  method unifyString (line 359) | func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error {
  method unifyFloat64 (line 367) | func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) err...
  method unifyInt (line 382) | func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error {
  method unifyBool (line 429) | func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error {
  method unifyAnything (line 437) | func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) er...
  method unifyText (line 442) | func (md *MetaData) unifyText(data interface{}, v TextUnmarshaler) error {
  function rvalue (line 471) | func rvalue(v interface{}) reflect.Value {
  function indirect (line 481) | func indirect(v reflect.Value) reflect.Value {
  function isUnifiable (line 497) | func isUnifiable(rv reflect.Value) bool {
  function badtype (line 507) | func badtype(expected string, data interface{}) error {

FILE: vendor/github.com/BurntSushi/toml/decode_meta.go
  type MetaData (line 8) | type MetaData struct
    method IsDefined (line 23) | func (md *MetaData) IsDefined(key ...string) bool {
    method Type (line 46) | func (md *MetaData) Type(key ...string) string {
    method Keys (line 98) | func (md *MetaData) Keys() []Key {
    method Undecoded (line 113) | func (md *MetaData) Undecoded() []Key {
  type Key (line 56) | type Key
    method String (line 58) | func (k Key) String() string {
    method maybeQuotedAll (line 62) | func (k Key) maybeQuotedAll() string {
    method maybeQuoted (line 70) | func (k Key) maybeQuoted(i int) string {
    method add (line 84) | func (k Key) add(piece string) Key {

FILE: vendor/github.com/BurntSushi/toml/encode.go
  type tomlEncodeError (line 15) | type tomlEncodeError struct
  type Encoder (line 45) | type Encoder struct
    method Encode (line 86) | func (enc *Encoder) Encode(v interface{}) error {
    method safeEncode (line 94) | func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) {
    method encode (line 108) | func (enc *Encoder) encode(key Key, rv reflect.Value) {
    method eElement (line 157) | func (enc *Encoder) eElement(rv reflect.Value) {
    method writeQuoted (line 207) | func (enc *Encoder) writeQuoted(s string) {
    method eArrayOrSliceElement (line 211) | func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) {
    method eArrayOfTables (line 224) | func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) {
    method eTable (line 241) | func (enc *Encoder) eTable(key Key, rv reflect.Value) {
    method eMapOrStruct (line 255) | func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value) {
    method eMap (line 266) | func (enc *Encoder) eMap(key Key, rv reflect.Value) {
    method eStruct (line 299) | func (enc *Encoder) eStruct(key Key, rv reflect.Value) {
    method newline (line 508) | func (enc *Encoder) newline() {
    method keyEqElement (line 514) | func (enc *Encoder) keyEqElement(key Key, val reflect.Value) {
    method wf (line 524) | func (enc *Encoder) wf(format string, v ...interface{}) {
    method indentStr (line 531) | func (enc *Encoder) indentStr(key Key) string {
  function NewEncoder (line 56) | func NewEncoder(w io.Writer) *Encoder {
  function floatAddDecimal (line 200) | func floatAddDecimal(fstr string) string {
  function tomlTypeOfGo (line 385) | func tomlTypeOfGo(rv reflect.Value) tomlType {
  function tomlArrayType (line 429) | func tomlArrayType(rv reflect.Value) tomlType {
  type tagOptions (line 460) | type tagOptions struct
  function getOptions (line 467) | func getOptions(tag reflect.StructTag) tagOptions {
  function isZero (line 486) | func isZero(rv reflect.Value) bool {
  function isEmpty (line 498) | func isEmpty(rv reflect.Value) bool {
  function encPanic (line 535) | func encPanic(err error) {
  function eindirect (line 539) | func eindirect(v reflect.Value) reflect.Value {
  function isNil (line 548) | func isNil(rv reflect.Value) bool {
  function panicIfInvalidKey (line 557) | func panicIfInvalidKey(key Key) {
  function isValidKeyName (line 566) | func isValidKeyName(s string) bool {

FILE: vendor/github.com/BurntSushi/toml/encoding_types.go
  type TextMarshaler (line 15) | type TextMarshaler
  type TextUnmarshaler (line 19) | type TextUnmarshaler

FILE: vendor/github.com/BurntSushi/toml/encoding_types_1.1.go
  type TextMarshaler (line 10) | type TextMarshaler interface
  type TextUnmarshaler (line 16) | type TextUnmarshaler interface

FILE: vendor/github.com/BurntSushi/toml/lex.go
  type itemType (line 10) | type itemType
    method String (line 915) | func (itype itemType) String() string {
  constant itemError (line 13) | itemError itemType = iota
  constant itemNIL (line 14) | itemNIL
  constant itemEOF (line 15) | itemEOF
  constant itemText (line 16) | itemText
  constant itemString (line 17) | itemString
  constant itemRawString (line 18) | itemRawString
  constant itemMultilineString (line 19) | itemMultilineString
  constant itemRawMultilineString (line 20) | itemRawMultilineString
  constant itemBool (line 21) | itemBool
  constant itemInteger (line 22) | itemInteger
  constant itemFloat (line 23) | itemFloat
  constant itemDatetime (line 24) | itemDatetime
  constant itemArray (line 25) | itemArray
  constant itemArrayEnd (line 26) | itemArrayEnd
  constant itemTableStart (line 27) | itemTableStart
  constant itemTableEnd (line 28) | itemTableEnd
  constant itemArrayTableStart (line 29) | itemArrayTableStart
  constant itemArrayTableEnd (line 30) | itemArrayTableEnd
  constant itemKeyStart (line 31) | itemKeyStart
  constant itemCommentStart (line 32) | itemCommentStart
  constant itemInlineTableStart (line 33) | itemInlineTableStart
  constant itemInlineTableEnd (line 34) | itemInlineTableEnd
  constant eof (line 38) | eof              = 0
  constant comma (line 39) | comma            = ','
  constant tableStart (line 40) | tableStart       = '['
  constant tableEnd (line 41) | tableEnd         = ']'
  constant arrayTableStart (line 42) | arrayTableStart  = '['
  constant arrayTableEnd (line 43) | arrayTableEnd    = ']'
  constant tableSep (line 44) | tableSep         = '.'
  constant keySep (line 45) | keySep           = '='
  constant arrayStart (line 46) | arrayStart       = '['
  constant arrayEnd (line 47) | arrayEnd         = ']'
  constant commentStart (line 48) | commentStart     = '#'
  constant stringStart (line 49) | stringStart      = '"'
  constant stringEnd (line 50) | stringEnd        = '"'
  constant rawStringStart (line 51) | rawStringStart   = '\''
  constant rawStringEnd (line 52) | rawStringEnd     = '\''
  constant inlineTableStart (line 53) | inlineTableStart = '{'
  constant inlineTableEnd (line 54) | inlineTableEnd   = '}'
  type stateFn (line 57) | type stateFn
  type lexer (line 59) | type lexer struct
    method nextItem (line 89) | func (lx *lexer) nextItem() item {
    method push (line 111) | func (lx *lexer) push(state stateFn) {
    method pop (line 115) | func (lx *lexer) pop() stateFn {
    method current (line 124) | func (lx *lexer) current() string {
    method emit (line 128) | func (lx *lexer) emit(typ itemType) {
    method emitTrim (line 133) | func (lx *lexer) emitTrim(typ itemType) {
    method next (line 138) | func (lx *lexer) next() (r rune) {
    method ignore (line 162) | func (lx *lexer) ignore() {
    method backup (line 167) | func (lx *lexer) backup() {
    method accept (line 186) | func (lx *lexer) accept(valid rune) bool {
    method peek (line 195) | func (lx *lexer) peek() rune {
    method skip (line 202) | func (lx *lexer) skip(pred func(rune) bool) {
    method errorf (line 217) | func (lx *lexer) errorf(format string, values ...interface{}) stateFn {
  type item (line 83) | type item struct
    method String (line 951) | func (item item) String() string {
  function lex (line 100) | func lex(input string) *lexer {
  function lexTop (line 227) | func lexTop(lx *lexer) stateFn {
  function lexTopEnd (line 256) | func lexTopEnd(lx *lexer) stateFn {
  function lexTableStart (line 281) | func lexTableStart(lx *lexer) stateFn {
  function lexTableEnd (line 293) | func lexTableEnd(lx *lexer) stateFn {
  function lexArrayTableEnd (line 298) | func lexArrayTableEnd(lx *lexer) stateFn {
  function lexTableNameStart (line 307) | func lexTableNameStart(lx *lexer) stateFn {
  function lexBareTableName (line 327) | func lexBareTableName(lx *lexer) stateFn {
  function lexTableNameEnd (line 339) | func lexTableNameEnd(lx *lexer) stateFn {
  function lexKeyStart (line 357) | func lexKeyStart(lx *lexer) stateFn {
  function lexBareKey (line 379) | func lexBareKey(lx *lexer) stateFn {
  function lexKeyEnd (line 398) | func lexKeyEnd(lx *lexer) stateFn {
  function lexValue (line 413) | func lexValue(lx *lexer) stateFn {
  function lexArrayValue (line 471) | func lexArrayValue(lx *lexer) stateFn {
  function lexArrayValueEnd (line 495) | func lexArrayValueEnd(lx *lexer) stateFn {
  function lexArrayEnd (line 517) | func lexArrayEnd(lx *lexer) stateFn {
  function lexInlineTableValue (line 525) | func lexInlineTableValue(lx *lexer) stateFn {
  function lexInlineTableValueEnd (line 548) | func lexInlineTableValueEnd(lx *lexer) stateFn {
  function lexInlineTableEnd (line 570) | func lexInlineTableEnd(lx *lexer) stateFn {
  function lexString (line 578) | func lexString(lx *lexer) stateFn {
  function lexMultilineString (line 600) | func lexMultilineString(lx *lexer) stateFn {
  function lexRawString (line 627) | func lexRawString(lx *lexer) stateFn {
  function lexMultilineRawString (line 647) | func lexMultilineRawString(lx *lexer) stateFn {
  function lexMultilineStringEscape (line 672) | func lexMultilineStringEscape(lx *lexer) stateFn {
  function lexStringEscape (line 682) | func lexStringEscape(lx *lexer) stateFn {
  function lexShortUnicodeEscape (line 709) | func lexShortUnicodeEscape(lx *lexer) stateFn {
  function lexLongUnicodeEscape (line 721) | func lexLongUnicodeEscape(lx *lexer) stateFn {
  function lexNumberOrDateStart (line 734) | func lexNumberOrDateStart(lx *lexer) stateFn {
  function lexNumberOrDate (line 751) | func lexNumberOrDate(lx *lexer) stateFn {
  function lexDatetime (line 772) | func lexDatetime(lx *lexer) stateFn {
  function lexNumberStart (line 790) | func lexNumberStart(lx *lexer) stateFn {
  function lexNumber (line 803) | func lexNumber(lx *lexer) stateFn {
  function lexFloat (line 823) | func lexFloat(lx *lexer) stateFn {
  function lexBool (line 839) | func lexBool(lx *lexer) stateFn {
  function lexCommentStart (line 860) | func lexCommentStart(lx *lexer) stateFn {
  function lexComment (line 869) | func lexComment(lx *lexer) stateFn {
  function lexSkip (line 880) | func lexSkip(lx *lexer, nextState stateFn) stateFn {
  function isWhitespace (line 889) | func isWhitespace(r rune) bool {
  function isNL (line 893) | func isNL(r rune) bool {
  function isDigit (line 897) | func isDigit(r rune) bool {
  function isHexadecimal (line 901) | func isHexadecimal(r rune) bool {
  function isBareKeyChar (line 907) | func isBareKeyChar(r rune) bool {

FILE: vendor/github.com/BurntSushi/toml/parse.go
  type parser (line 12) | type parser struct
    method panicf (line 68) | func (p *parser) panicf(format string, v ...interface{}) {
    method next (line 74) | func (p *parser) next() item {
    method bug (line 82) | func (p *parser) bug(format string, v ...interface{}) {
    method expect (line 86) | func (p *parser) expect(typ itemType) item {
    method assertEqual (line 92) | func (p *parser) assertEqual(expected, got itemType) {
    method topLevel (line 98) | func (p *parser) topLevel(item item) {
    method keyString (line 145) | func (p *parser) keyString(it item) string {
    method value (line 161) | func (p *parser) value(it item) (interface{}, tomlType) {
    method establishContext (line 347) | func (p *parser) establishContext(key Key, array bool) {
    method setValue (line 406) | func (p *parser) setValue(key string, value interface{}) {
    method setType (line 460) | func (p *parser) setType(key string, typ tomlType) {
    method addImplicit (line 472) | func (p *parser) addImplicit(key Key) {
    method removeImplicit (line 478) | func (p *parser) removeImplicit(key Key) {
    method isImplicit (line 484) | func (p *parser) isImplicit(key Key) bool {
    method current (line 489) | func (p *parser) current() string {
    method replaceEscapes (line 516) | func (p *parser) replaceEscapes(str string) string {
    method asciiEscapeToUnicode (line 576) | func (p *parser) asciiEscapeToUnicode(bs []byte) rune {
  type parseError (line 33) | type parseError
    method Error (line 35) | func (pe parseError) Error() string {
  function parse (line 39) | func parse(data string) (p *parser, err error) {
  function numUnderscoresOK (line 314) | func numUnderscoresOK(s string) bool {
  function numPeriodsOK (line 330) | func numPeriodsOK(s string) bool {
  function stripFirstNewline (line 499) | func stripFirstNewline(s string) string {
  function stripEscapedWhitespace (line 506) | func stripEscapedWhitespace(s string) string {
  function isStringType (line 589) | func isStringType(ty itemType) bool {

FILE: vendor/github.com/BurntSushi/toml/type_check.go
  type tomlType (line 7) | type tomlType interface
  function typeEqual (line 12) | func typeEqual(t1, t2 tomlType) bool {
  function typeIsHash (line 19) | func typeIsHash(t tomlType) bool {
  type tomlBaseType (line 23) | type tomlBaseType
    method typeString (line 25) | func (btype tomlBaseType) typeString() string {
    method String (line 29) | func (btype tomlBaseType) String() string {
  method typeOfPrimitive (line 49) | func (p *parser) typeOfPrimitive(lexItem item) tomlType {
  method typeOfArray (line 77) | func (p *parser) typeOfArray(types []tomlType) tomlType {

FILE: vendor/github.com/BurntSushi/toml/type_fields.go
  type field (line 16) | type field struct
  type byName (line 26) | type byName
    method Len (line 28) | func (x byName) Len() int { return len(x) }
    method Swap (line 30) | func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
    method Less (line 32) | func (x byName) Less(i, j int) bool {
  type byIndex (line 46) | type byIndex
    method Len (line 48) | func (x byIndex) Len() int { return len(x) }
    method Swap (line 50) | func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
    method Less (line 52) | func (x byIndex) Less(i, j int) bool {
  function typeFields (line 67) | func typeFields(t reflect.Type) []field {
  function dominantField (line 182) | func dominantField(fields []field) (field, bool) {
  function cachedTypeFields (line 220) | func cachedTypeFields(t reflect.Type) []field {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
  type Error (line 31) | type Error interface
  type BatchError (line 51) | type BatchError interface
  type BatchedErrors (line 70) | type BatchedErrors interface
  function New (line 82) | func New(code, message string, origErr error) Error {
  function NewBatchError (line 92) | func NewBatchError(code, message string, errs []error) BatchedErrors {
  type RequestFailure (line 129) | type RequestFailure interface
  function NewRequestFailure (line 147) | func NewRequestFailure(err Error, statusCode int, reqID string) RequestF...
  type UnmarshalError (line 152) | type UnmarshalError interface
  function NewUnmarshalError (line 159) | func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalErr...

FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
  function SprintError (line 12) | func SprintError(code, message, extra string, origErr error) string {
  type baseError (line 28) | type baseError struct
    method Error (line 65) | func (b baseError) Error() string {
    method String (line 76) | func (b baseError) String() string {
    method Code (line 81) | func (b baseError) Code() string {
    method Message (line 86) | func (b baseError) Message() string {
    method OrigErr (line 93) | func (b baseError) OrigErr() error {
    method OrigErrs (line 110) | func (b baseError) OrigErrs() []error {
  function newBaseError (line 50) | func newBaseError(code, message string, origErrs []error) *baseError {
  type awsError (line 116) | type awsError
  type requestError (line 121) | type requestError struct
    method Error (line 146) | func (r requestError) Error() string {
    method String (line 154) | func (r requestError) String() string {
    method StatusCode (line 159) | func (r requestError) StatusCode() int {
    method RequestID (line 164) | func (r requestError) RequestID() string {
    method OrigErrs (line 170) | func (r requestError) OrigErrs() []error {
  function newRequestError (line 136) | func newRequestError(err Error, statusCode int, requestID string) *reque...
  type unmarshalError (line 177) | type unmarshalError struct
    method Error (line 184) | func (e unmarshalError) Error() string {
    method String (line 191) | func (e unmarshalError) String() string {
    method Bytes (line 196) | func (e unmarshalError) Bytes() []byte {
  type errorList (line 201) | type errorList
    method Error (line 206) | func (e errorList) Error() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go
  function Copy (line 15) | func Copy(dst, src interface{}) {
  function CopyOf (line 26) | func CopyOf(src interface{}) (dst interface{}) {
  function rcopy (line 37) | func rcopy(dst, src reflect.Value, root bool) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go
  function DeepEqual (line 13) | func DeepEqual(a, b interface{}) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go
  function rValuesAtPath (line 16) | func rValuesAtPath(v interface{}, path string, createPath, caseSensitive...
  function ValuesAtPath (line 158) | func ValuesAtPath(i interface{}, path string) ([]interface{}, error) {
  function SetValueAtPath (line 187) | func SetValueAtPath(i interface{}, path string, v interface{}) {
  function setValue (line 197) | func setValue(dstVal reflect.Value, src interface{}) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go
  function Prettify (line 12) | func Prettify(i interface{}) string {
  function prettify (line 20) | func prettify(v reflect.Value, indent int, buf *bytes.Buffer) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
  function StringValue (line 11) | func StringValue(i interface{}) string {
  function stringValue (line 17) | func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/client.go
  type Config (line 12) | type Config struct
  type ConfigProvider (line 29) | type ConfigProvider interface
  type ConfigNoResolveEndpointProvider (line 36) | type ConfigNoResolveEndpointProvider interface
  type Client (line 42) | type Client struct
    method NewRequest (line 84) | func (c *Client) NewRequest(operation *request.Operation, params inter...
    method AddDebugHandlers (line 90) | func (c *Client) AddDebugHandlers() {
  function New (line 51) | func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Hand...

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go
  type DefaultRetryer (line 16) | type DefaultRetryer struct
    method MaxRetries (line 57) | func (d DefaultRetryer) MaxRetries() int {
    method setRetryerDefaults (line 62) | func (d *DefaultRetryer) setRetryerDefaults() {
    method RetryRules (line 78) | func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration {
    method ShouldRetry (line 131) | func (d DefaultRetryer) ShouldRetry(r *request.Request) bool {
  constant DefaultRetryerMaxNumRetries (line 40) | DefaultRetryerMaxNumRetries = 3
  constant DefaultRetryerMinRetryDelay (line 43) | DefaultRetryerMinRetryDelay = 30 * time.Millisecond
  constant DefaultRetryerMinThrottleDelay (line 46) | DefaultRetryerMinThrottleDelay = 500 * time.Millisecond
  constant DefaultRetryerMaxRetryDelay (line 49) | DefaultRetryerMaxRetryDelay = 300 * time.Second
  constant DefaultRetryerMaxThrottleDelay (line 52) | DefaultRetryerMaxThrottleDelay = 300 * time.Second
  function getJitterDelay (line 126) | func getJitterDelay(duration time.Duration) time.Duration {
  function getRetryAfterDelay (line 148) | func getRetryAfterDelay(r *request.Request) (time.Duration, bool) {
  function canUseRetryAfterHeader (line 168) | func canUseRetryAfterHeader(r *request.Request) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/logger.go
  constant logReqMsg (line 14) | logReqMsg = `DEBUG: Request %s/%s Details:
  constant logReqErrMsg (line 19) | logReqErrMsg = `DEBUG ERROR: Request %s/%s:
  type logWriter (line 24) | type logWriter struct
    method Write (line 31) | func (logger *logWriter) Write(b []byte) (int, error) {
  type teeReaderCloser (line 35) | type teeReaderCloser struct
    method Close (line 43) | func (reader *teeReaderCloser) Close() error {
  function logRequest (line 55) | func logRequest(r *request.Request) {
  function logRequestHeader (line 92) | func logRequestHeader(r *request.Request) {
  constant logRespMsg (line 104) | logRespMsg = `DEBUG: Response %s/%s Details:
  constant logRespErrMsg (line 109) | logRespErrMsg = `DEBUG ERROR: Response %s/%s:
  function logResponse (line 122) | func logResponse(r *request.Request) {
  function logResponseHeader (line 180) | func logResponseHeader(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go
  type ClientInfo (line 4) | type ClientInfo struct

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go
  type NoOpRetryer (line 11) | type NoOpRetryer struct
    method MaxRetries (line 15) | func (d NoOpRetryer) MaxRetries() int {
    method ShouldRetry (line 20) | func (d NoOpRetryer) ShouldRetry(_ *request.Request) bool {
    method RetryRules (line 26) | func (d NoOpRetryer) RetryRules(_ *request.Request) time.Duration {

FILE: vendor/github.com/aws/aws-sdk-go/aws/config.go
  constant UseServiceDefaultRetries (line 14) | UseServiceDefaultRetries = -1
  type RequestRetryer (line 18) | type RequestRetryer interface
  type Config (line 33) | type Config struct
    method WithCredentialsChainVerboseErrors (line 288) | func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *...
    method WithCredentials (line 295) | func (c *Config) WithCredentials(creds *credentials.Credentials) *Conf...
    method WithEndpoint (line 302) | func (c *Config) WithEndpoint(endpoint string) *Config {
    method WithEndpointResolver (line 309) | func (c *Config) WithEndpointResolver(resolver endpoints.Resolver) *Co...
    method WithRegion (line 316) | func (c *Config) WithRegion(region string) *Config {
    method WithDisableSSL (line 323) | func (c *Config) WithDisableSSL(disable bool) *Config {
    method WithHTTPClient (line 330) | func (c *Config) WithHTTPClient(client *http.Client) *Config {
    method WithMaxRetries (line 337) | func (c *Config) WithMaxRetries(max int) *Config {
    method WithDisableParamValidation (line 344) | func (c *Config) WithDisableParamValidation(disable bool) *Config {
    method WithDisableComputeChecksums (line 351) | func (c *Config) WithDisableComputeChecksums(disable bool) *Config {
    method WithLogLevel (line 358) | func (c *Config) WithLogLevel(level LogLevelType) *Config {
    method WithLogger (line 365) | func (c *Config) WithLogger(logger Logger) *Config {
    method WithS3ForcePathStyle (line 372) | func (c *Config) WithS3ForcePathStyle(force bool) *Config {
    method WithS3Disable100Continue (line 379) | func (c *Config) WithS3Disable100Continue(disable bool) *Config {
    method WithS3UseAccelerate (line 386) | func (c *Config) WithS3UseAccelerate(enable bool) *Config {
    method WithS3DisableContentMD5Validation (line 394) | func (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config {
    method WithS3UseARNRegion (line 402) | func (c *Config) WithS3UseARNRegion(enable bool) *Config {
    method WithUseDualStack (line 409) | func (c *Config) WithUseDualStack(enable bool) *Config {
    method WithEC2MetadataDisableTimeoutOverride (line 416) | func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *C...
    method WithSleepDelay (line 423) | func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
    method WithEndpointDiscovery (line 429) | func (c *Config) WithEndpointDiscovery(t bool) *Config {
    method WithDisableEndpointHostPrefix (line 436) | func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {
    method WithSTSRegionalEndpoint (line 443) | func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndp...
    method WithS3UsEast1RegionalEndpoint (line 450) | func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1...
    method WithLowerCaseHeaderMaps (line 457) | func (c *Config) WithLowerCaseHeaderMaps(t bool) *Config {
    method WithDisableRestProtocolURICleaning (line 464) | func (c *Config) WithDisableRestProtocolURICleaning(t bool) *Config {
    method MergeIn (line 470) | func (c *Config) MergeIn(cfgs ...*Config) {
    method Copy (line 596) | func (c *Config) Copy(cfgs ...*Config) *Config {
  function NewConfig (line 282) | func NewConfig() *Config {
  function mergeInConfig (line 476) | func mergeInConfig(dst *Config, other *Config) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go
  type Context (line 12) | type Context interface

FILE: vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go
  function BackgroundContext (line 20) | func BackgroundContext() Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go
  function BackgroundContext (line 18) | func BackgroundContext() Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go
  function SleepWithContext (line 12) | func SleepWithContext(ctx Context, dur time.Duration) error {

FILE: vendor/github.com/aws/aws-sdk-go/aws/convert_types.go
  function String (line 6) | func String(v string) *string {
  function StringValue (line 12) | func StringValue(v *string) string {
  function StringSlice (line 21) | func StringSlice(src []string) []*string {
  function StringValueSlice (line 31) | func StringValueSlice(src []*string) []string {
  function StringMap (line 43) | func StringMap(src map[string]string) map[string]*string {
  function StringValueMap (line 54) | func StringValueMap(src map[string]*string) map[string]string {
  function Bool (line 65) | func Bool(v bool) *bool {
  function BoolValue (line 71) | func BoolValue(v *bool) bool {
  function BoolSlice (line 80) | func BoolSlice(src []bool) []*bool {
  function BoolValueSlice (line 90) | func BoolValueSlice(src []*bool) []bool {
  function BoolMap (line 102) | func BoolMap(src map[string]bool) map[string]*bool {
  function BoolValueMap (line 113) | func BoolValueMap(src map[string]*bool) map[string]bool {
  function Int (line 124) | func Int(v int) *int {
  function IntValue (line 130) | func IntValue(v *int) int {
  function IntSlice (line 139) | func IntSlice(src []int) []*int {
  function IntValueSlice (line 149) | func IntValueSlice(src []*int) []int {
  function IntMap (line 161) | func IntMap(src map[string]int) map[string]*int {
  function IntValueMap (line 172) | func IntValueMap(src map[string]*int) map[string]int {
  function Uint (line 183) | func Uint(v uint) *uint {
  function UintValue (line 189) | func UintValue(v *uint) uint {
  function UintSlice (line 198) | func UintSlice(src []uint) []*uint {
  function UintValueSlice (line 208) | func UintValueSlice(src []*uint) []uint {
  function UintMap (line 220) | func UintMap(src map[string]uint) map[string]*uint {
  function UintValueMap (line 231) | func UintValueMap(src map[string]*uint) map[string]uint {
  function Int8 (line 242) | func Int8(v int8) *int8 {
  function Int8Value (line 248) | func Int8Value(v *int8) int8 {
  function Int8Slice (line 257) | func Int8Slice(src []int8) []*int8 {
  function Int8ValueSlice (line 267) | func Int8ValueSlice(src []*int8) []int8 {
  function Int8Map (line 279) | func Int8Map(src map[string]int8) map[string]*int8 {
  function Int8ValueMap (line 290) | func Int8ValueMap(src map[string]*int8) map[string]int8 {
  function Int16 (line 301) | func Int16(v int16) *int16 {
  function Int16Value (line 307) | func Int16Value(v *int16) int16 {
  function Int16Slice (line 316) | func Int16Slice(src []int16) []*int16 {
  function Int16ValueSlice (line 326) | func Int16ValueSlice(src []*int16) []int16 {
  function Int16Map (line 338) | func Int16Map(src map[string]int16) map[string]*int16 {
  function Int16ValueMap (line 349) | func Int16ValueMap(src map[string]*int16) map[string]int16 {
  function Int32 (line 360) | func Int32(v int32) *int32 {
  function Int32Value (line 366) | func Int32Value(v *int32) int32 {
  function Int32Slice (line 375) | func Int32Slice(src []int32) []*int32 {
  function Int32ValueSlice (line 385) | func Int32ValueSlice(src []*int32) []int32 {
  function Int32Map (line 397) | func Int32Map(src map[string]int32) map[string]*int32 {
  function Int32ValueMap (line 408) | func Int32ValueMap(src map[string]*int32) map[string]int32 {
  function Int64 (line 419) | func Int64(v int64) *int64 {
  function Int64Value (line 425) | func Int64Value(v *int64) int64 {
  function Int64Slice (line 434) | func Int64Slice(src []int64) []*int64 {
  function Int64ValueSlice (line 444) | func Int64ValueSlice(src []*int64) []int64 {
  function Int64Map (line 456) | func Int64Map(src map[string]int64) map[string]*int64 {
  function Int64ValueMap (line 467) | func Int64ValueMap(src map[string]*int64) map[string]int64 {
  function Uint8 (line 478) | func Uint8(v uint8) *uint8 {
  function Uint8Value (line 484) | func Uint8Value(v *uint8) uint8 {
  function Uint8Slice (line 493) | func Uint8Slice(src []uint8) []*uint8 {
  function Uint8ValueSlice (line 503) | func Uint8ValueSlice(src []*uint8) []uint8 {
  function Uint8Map (line 515) | func Uint8Map(src map[string]uint8) map[string]*uint8 {
  function Uint8ValueMap (line 526) | func Uint8ValueMap(src map[string]*uint8) map[string]uint8 {
  function Uint16 (line 537) | func Uint16(v uint16) *uint16 {
  function Uint16Value (line 543) | func Uint16Value(v *uint16) uint16 {
  function Uint16Slice (line 552) | func Uint16Slice(src []uint16) []*uint16 {
  function Uint16ValueSlice (line 562) | func Uint16ValueSlice(src []*uint16) []uint16 {
  function Uint16Map (line 574) | func Uint16Map(src map[string]uint16) map[string]*uint16 {
  function Uint16ValueMap (line 585) | func Uint16ValueMap(src map[string]*uint16) map[string]uint16 {
  function Uint32 (line 596) | func Uint32(v uint32) *uint32 {
  function Uint32Value (line 602) | func Uint32Value(v *uint32) uint32 {
  function Uint32Slice (line 611) | func Uint32Slice(src []uint32) []*uint32 {
  function Uint32ValueSlice (line 621) | func Uint32ValueSlice(src []*uint32) []uint32 {
  function Uint32Map (line 633) | func Uint32Map(src map[string]uint32) map[string]*uint32 {
  function Uint32ValueMap (line 644) | func Uint32ValueMap(src map[string]*uint32) map[string]uint32 {
  function Uint64 (line 655) | func Uint64(v uint64) *uint64 {
  function Uint64Value (line 661) | func Uint64Value(v *uint64) uint64 {
  function Uint64Slice (line 670) | func Uint64Slice(src []uint64) []*uint64 {
  function Uint64ValueSlice (line 680) | func Uint64ValueSlice(src []*uint64) []uint64 {
  function Uint64Map (line 692) | func Uint64Map(src map[string]uint64) map[string]*uint64 {
  function Uint64ValueMap (line 703) | func Uint64ValueMap(src map[string]*uint64) map[string]uint64 {
  function Float32 (line 714) | func Float32(v float32) *float32 {
  function Float32Value (line 720) | func Float32Value(v *float32) float32 {
  function Float32Slice (line 729) | func Float32Slice(src []float32) []*float32 {
  function Float32ValueSlice (line 739) | func Float32ValueSlice(src []*float32) []float32 {
  function Float32Map (line 751) | func Float32Map(src map[string]float32) map[string]*float32 {
  function Float32ValueMap (line 762) | func Float32ValueMap(src map[string]*float32) map[string]float32 {
  function Float64 (line 773) | func Float64(v float64) *float64 {
  function Float64Value (line 779) | func Float64Value(v *float64) float64 {
  function Float64Slice (line 788) | func Float64Slice(src []float64) []*float64 {
  function Float64ValueSlice (line 798) | func Float64ValueSlice(src []*float64) []float64 {
  function Float64Map (line 810) | func Float64Map(src map[string]float64) map[string]*float64 {
  function Float64ValueMap (line 821) | func Float64ValueMap(src map[string]*float64) map[string]float64 {
  function Time (line 832) | func Time(v time.Time) *time.Time {
  function TimeValue (line 838) | func TimeValue(v *time.Time) time.Time {
  function SecondsTimeValue (line 847) | func SecondsTimeValue(v *int64) time.Time {
  function MillisecondsTimeValue (line 856) | func MillisecondsTimeValue(v *int64) time.Time {
  function TimeUnixMilli (line 871) | func TimeUnixMilli(t time.Time) int64 {
  function TimeSlice (line 877) | func TimeSlice(src []time.Time) []*time.Time {
  function TimeValueSlice (line 887) | func TimeValueSlice(src []*time.Time) []time.Time {
  function TimeMap (line 899) | func TimeMap(src map[string]time.Time) map[string]*time.Time {
  function TimeValueMap (line 910) | func TimeValueMap(src map[string]*time.Time) map[string]time.Time {

FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
  type lener (line 20) | type lener interface
  function sendFollowRedirects (line 119) | func sendFollowRedirects(r *request.Request) (*http.Response, error) {
  function sendWithoutFollowRedirects (line 123) | func sendWithoutFollowRedirects(r *request.Request) (*http.Response, err...
  function handleSendError (line 132) | func handleSendError(r *request.Request, err error) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go
  constant execEnvVar (line 19) | execEnvVar = `AWS_EXECUTION_ENV`
  constant execEnvUAKey (line 20) | execEnvUAKey = `exec-env`

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
  type ChainProvider (line 53) | type ChainProvider struct
    method Retrieve (line 72) | func (c *ChainProvider) Retrieve() (Value, error) {
    method IsExpired (line 94) | func (c *ChainProvider) IsExpired() bool {
  function NewChainCredentials (line 61) | func NewChainCredentials(providers []Provider) *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.5.go
  function backgroundContext (line 20) | func backgroundContext() Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.7.go
  function backgroundContext (line 18) | func backgroundContext() Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.5.go
  type Context (line 14) | type Context interface

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
  type Value (line 74) | type Value struct
    method HasKeys (line 90) | func (v Value) HasKeys() bool {
  type Provider (line 100) | type Provider interface
  type ProviderWithContext (line 111) | type ProviderWithContext interface
  type Expirer (line 120) | type Expirer interface
  type ErrorProvider (line 128) | type ErrorProvider struct
    method Retrieve (line 137) | func (p ErrorProvider) Retrieve() (Value, error) {
    method IsExpired (line 142) | func (p ErrorProvider) IsExpired() bool {
  type Expiry (line 157) | type Expiry struct
    method SetExpiration (line 175) | func (e *Expiry) SetExpiration(expiration time.Time, window time.Durat...
    method IsExpired (line 185) | func (e *Expiry) IsExpired() bool {
    method ExpiresAt (line 194) | func (e *Expiry) ExpiresAt() time.Time {
  type Credentials (line 209) | type Credentials struct
    method GetWithContext (line 237) | func (c *Credentials) GetWithContext(ctx Context) (Value, error) {
    method singleRetrieve (line 266) | func (c *Credentials) singleRetrieve(ctx Context) (interface{}, error) {
    method Get (line 297) | func (c *Credentials) Get() (Value, error) {
    method Expire (line 306) | func (c *Credentials) Expire() {
    method IsExpired (line 318) | func (c *Credentials) IsExpired() bool {
    method asyncIsExpired (line 327) | func (c *Credentials) asyncIsExpired() <-chan Value {
    method isExpiredLocked (line 344) | func (c *Credentials) isExpiredLocked(creds interface{}) bool {
    method ExpiresAt (line 351) | func (c *Credentials) ExpiresAt() (time.Time, error) {
  function NewCredentials (line 218) | func NewCredentials(provider Provider) *Credentials {
  type suppressedContext (line 369) | type suppressedContext struct
    method Deadline (line 373) | func (s *suppressedContext) Deadline() (deadline time.Time, ok bool) {
    method Done (line 377) | func (s *suppressedContext) Done() <-chan struct{} {
    method Err (line 381) | func (s *suppressedContext) Err() error {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
  constant ProviderName (line 20) | ProviderName = "EC2RoleProvider"
  type EC2RoleProvider (line 39) | type EC2RoleProvider struct
    method Retrieve (line 90) | func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) {
    method RetrieveWithContext (line 97) | func (m *EC2RoleProvider) RetrieveWithContext(ctx credentials.Context)...
  function NewCredentials (line 60) | func NewCredentials(c client.ConfigProvider, options ...func(*EC2RolePro...
  function NewCredentialsWithClient (line 75) | func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ....
  type ec2RoleCredRespBody (line 125) | type ec2RoleCredRespBody struct
  constant iamSecurityCredsPath (line 137) | iamSecurityCredsPath = "iam/security-credentials/"
  function requestCredList (line 141) | func requestCredList(ctx aws.Context, client *ec2metadata.EC2Metadata) (...
  function requestCred (line 165) | func requestCred(ctx aws.Context, client *ec2metadata.EC2Metadata, creds...

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
  constant ProviderName (line 46) | ProviderName = `CredentialsEndpointProvider`
  type Provider (line 50) | type Provider struct
    method IsExpired (line 109) | func (p *Provider) IsExpired() bool {
    method Retrieve (line 118) | func (p *Provider) Retrieve() (credentials.Value, error) {
    method RetrieveWithContext (line 124) | func (p *Provider) RetrieveWithContext(ctx credentials.Context) (crede...
    method getCredentials (line 157) | func (p *Provider) getCredentials(ctx aws.Context) (*getCredentialsOut...
  function NewProviderClient (line 77) | func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoi...
  function NewCredentialsClient (line 103) | func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, end...
  type getCredentialsOutput (line 145) | type getCredentialsOutput struct
  type errorOutput (line 152) | type errorOutput struct
  function validateEndpointHandler (line 174) | func validateEndpointHandler(r *request.Request) {
  function unmarshalHandler (line 180) | func unmarshalHandler(r *request.Request) {
  function unmarshalError (line 192) | func unmarshalError(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
  constant EnvProviderName (line 10) | EnvProviderName = "EnvProvider"
  type EnvProvider (line 30) | type EnvProvider struct
    method Retrieve (line 41) | func (e *EnvProvider) Retrieve() (Value, error) {
    method IsExpired (line 72) | func (e *EnvProvider) IsExpired() bool {
  function NewEnvCredentials (line 36) | func NewEnvCredentials() *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
  constant ProviderName (line 99) | ProviderName = `ProcessProvider`
  constant ErrCodeProcessProviderParse (line 102) | ErrCodeProcessProviderParse = "ProcessProviderParseError"
  constant ErrCodeProcessProviderVersion (line 105) | ErrCodeProcessProviderVersion = "ProcessProviderVersionError"
  constant ErrCodeProcessProviderRequired (line 108) | ErrCodeProcessProviderRequired = "ProcessProviderRequiredError"
  constant ErrCodeProcessProviderExecution (line 111) | ErrCodeProcessProviderExecution = "ProcessProviderExecutionError"
  constant errMsgProcessProviderTimeout (line 114) | errMsgProcessProviderTimeout = "credential process timed out"
  constant errMsgProcessProviderProcess (line 117) | errMsgProcessProviderProcess = "error in credential_process"
  constant errMsgProcessProviderParse (line 120) | errMsgProcessProviderParse = "parse failed of credential_process output"
  constant errMsgProcessProviderVersion (line 123) | errMsgProcessProviderVersion = "wrong version in process output (not 1)"
  constant errMsgProcessProviderMissKey (line 126) | errMsgProcessProviderMissKey = "missing AccessKeyId in process output"
  constant errMsgProcessProviderMissSecret (line 129) | errMsgProcessProviderMissSecret = "missing SecretAccessKey in process ou...
  constant errMsgProcessProviderPrepareCmd (line 132) | errMsgProcessProviderPrepareCmd = "failed to prepare command"
  constant errMsgProcessProviderEmptyCmd (line 135) | errMsgProcessProviderEmptyCmd = "command must not be empty"
  constant errMsgProcessProviderPipe (line 138) | errMsgProcessProviderPipe = "failed to initialize pipe"
  constant DefaultDuration (line 142) | DefaultDuration = time.Duration(15) * time.Minute
  constant DefaultBufSize (line 146) | DefaultBufSize = int(8 * sdkio.KibiByte)
  constant DefaultTimeout (line 149) | DefaultTimeout = time.Duration(1) * time.Minute
  type ProcessProvider (line 154) | type ProcessProvider struct
    method Retrieve (line 238) | func (p *ProcessProvider) Retrieve() (credentials.Value, error) {
    method IsExpired (line 290) | func (p *ProcessProvider) IsExpired() bool {
    method prepareCommand (line 298) | func (p *ProcessProvider) prepareCommand() error {
    method executeCredentialProcess (line 332) | func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) {
  function NewCredentials (line 187) | func NewCredentials(command string, options ...func(*ProcessProvider)) *...
  function NewCredentialsTimeout (line 204) | func NewCredentialsTimeout(command string, timeout time.Duration) *crede...
  function NewCredentialsCommand (line 214) | func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessPr...
  type credentialProcessResponse (line 229) | type credentialProcessResponse struct
  function appendError (line 399) | func appendError(errors []error, err error) []error {
  function executeCommand (line 406) | func executeCommand(cmd exec.Cmd, exec chan error) {
  function readInput (line 416) | func readInput(r io.Reader, w io.Writer, read chan error) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
  constant SharedCredsProviderName (line 13) | SharedCredsProviderName = "SharedCredentialsProvider"
  type SharedCredentialsProvider (line 25) | type SharedCredentialsProvider struct
    method Retrieve (line 54) | func (p *SharedCredentialsProvider) Retrieve() (Value, error) {
    method IsExpired (line 72) | func (p *SharedCredentialsProvider) IsExpired() bool {
    method filename (line 118) | func (p *SharedCredentialsProvider) filename() (string, error) {
    method profile (line 142) | func (p *SharedCredentialsProvider) profile() string {
  function NewSharedCredentials (line 45) | func NewSharedCredentials(filename, profile string) *Credentials {
  function loadProfile (line 79) | func loadProfile(filename, profile string) (Value, error) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
  constant StaticProviderName (line 8) | StaticProviderName = "StaticProvider"
  type StaticProvider (line 17) | type StaticProvider struct
    method Retrieve (line 41) | func (s *StaticProvider) Retrieve() (Value, error) {
    method IsExpired (line 55) | func (s *StaticProvider) IsExpired() bool {
  function NewStaticCredentials (line 25) | func NewStaticCredentials(id, secret, token string) *Credentials {
  function NewStaticCredentialsFromCreds (line 36) | func NewStaticCredentialsFromCreds(creds Value) *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
  function StdinTokenProvider (line 106) | func StdinTokenProvider() (string, error) {
  constant ProviderName (line 115) | ProviderName = "AssumeRoleProvider"
  type AssumeRoler (line 118) | type AssumeRoler interface
  type assumeRolerWithContext (line 122) | type assumeRolerWithContext interface
  type AssumeRoleProvider (line 140) | type AssumeRoleProvider struct
    method Retrieve (line 299) | func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
    method RetrieveWithContext (line 304) | func (p *AssumeRoleProvider) RetrieveWithContext(ctx credentials.Conte...
  function NewCredentials (line 259) | func NewCredentials(c client.ConfigProvider, roleARN string, options ......
  function NewCredentialsWithClient (line 284) | func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ....

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go
  constant ErrCodeWebIdentity (line 20) | ErrCodeWebIdentity = "WebIdentityErr"
  constant WebIdentityProviderName (line 23) | WebIdentityProviderName = "WebIdentityCredentials"
  type TokenFetcher (line 32) | type TokenFetcher interface
  type FetchTokenPath (line 37) | type FetchTokenPath
    method FetchToken (line 40) | func (f FetchTokenPath) FetchToken(ctx credentials.Context) ([]byte, e...
  type WebIdentityRoleProvider (line 51) | type WebIdentityRoleProvider struct
    method Retrieve (line 103) | func (p *WebIdentityRoleProvider) Retrieve() (credentials.Value, error) {
    method RetrieveWithContext (line 110) | func (p *WebIdentityRoleProvider) RetrieveWithContext(ctx credentials....
  function NewWebIdentityCredentials (line 77) | func NewWebIdentityCredentials(c client.ConfigProvider, roleARN, roleSes...
  function NewWebIdentityRoleProvider (line 85) | func NewWebIdentityRoleProvider(svc stsiface.STSAPI, roleARN, roleSessio...
  function NewWebIdentityRoleProviderWithToken (line 91) | func NewWebIdentityRoleProviderWithToken(svc stsiface.STSAPI, roleARN, r...

FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go
  constant DefaultPort (line 15) | DefaultPort = "31000"
  constant DefaultHost (line 18) | DefaultHost = "127.0.0.1"
  function AddressWithDefaults (line 24) | func AddressWithDefaults(host, port string) string {
  function Start (line 58) | func Start(clientID string, url string) (*Reporter, error) {
  function Get (line 84) | func Get() *Reporter {

FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go
  type metricTime (line 10) | type metricTime
    method MarshalJSON (line 12) | func (t metricTime) MarshalJSON() ([]byte, error) {
  type metric (line 17) | type metric struct
    method TruncateFields (line 63) | func (m *metric) TruncateFields() {
    method SetException (line 89) | func (m *metric) SetException(e metricException) {
    method SetFinalException (line 100) | func (m *metric) SetFinalException(e metricException) {
  function truncateString (line 80) | func truncateString(v *string, l int) *string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go
  constant runningEnum (line 8) | runningEnum = iota
  constant pausedEnum (line 9) | pausedEnum
  type metricChan (line 17) | type metricChan struct
    method Pause (line 29) | func (ch *metricChan) Pause() {
    method Continue (line 33) | func (ch *metricChan) Continue() {
    method IsPaused (line 37) | func (ch *metricChan) IsPaused() bool {
    method Push (line 44) | func (ch *metricChan) Push(m metric) bool {
  function newMetricChan (line 22) | func newMetricChan(size int) metricChan {

FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go
  type metricException (line 3) | type metricException interface
  type requestException (line 8) | type requestException struct
    method Exception (line 13) | func (e requestException) Exception() string {
    method Message (line 16) | func (e requestException) Message() string {
  type awsException (line 20) | type awsException struct
  type sdkException (line 24) | type sdkException struct

FILE: vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
  type Reporter (line 15) | type Reporter struct
    method sendAPICallAttemptMetric (line 49) | func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) {
    method sendAPICallMetric (line 105) | func (rep *Reporter) sendAPICallMetric(r *request.Request) {
    method connect (line 142) | func (rep *Reporter) connect(network, url string) error {
    method close (line 157) | func (rep *Reporter) close() {
    method start (line 165) | func (rep *Reporter) start() {
    method Pause (line 190) | func (rep *Reporter) Pause() {
    method Continue (line 204) | func (rep *Reporter) Continue() {
    method InjectHandlers (line 241) | func (rep *Reporter) InjectHandlers(handlers *request.Handlers) {
  function connect (line 27) | func connect(url string) error {
  function newReporter (line 41) | func newReporter(clientID, url string) *Reporter {
  function getMetricException (line 87) | func getMetricException(err awserr.Error) metricException {
  constant APICallMetricHandlerName (line 220) | APICallMetricHandlerName        = "awscsm.SendAPICallMetric"
  constant APICallAttemptMetricHandlerName (line 221) | APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric"
  function boolIntValue (line 258) | func boolIntValue(b bool) int {

FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
  type Defaults (line 31) | type Defaults struct
  function Get (line 37) | func Get() Defaults {
  function Config (line 55) | func Config() *aws.Config {
  function Handlers (line 71) | func Handlers() request.Handlers {
  function CredChain (line 93) | func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials....
  function CredProviders (line 107) | func CredProviders(cfg *aws.Config, handlers request.Handlers) []credent...
  constant httpProviderAuthorizationEnvVar (line 116) | httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN"
  constant httpProviderEnvVar (line 117) | httpProviderEnvVar              = "AWS_CONTAINER_CREDENTIALS_FULL_URI"
  function RemoteCredProvider (line 122) | func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) crede...
  function isLoopbackHost (line 137) | func isLoopbackHost(host string) (bool, error) {
  function localHTTPCredProvider (line 157) | func localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u ...
  function httpCredProvider (line 187) | func httpCredProvider(cfg aws.Config, handlers request.Handlers, u strin...
  function ec2RoleProvider (line 196) | func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credenti...

FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go
  function SharedCredentialsFilename (line 14) | func SharedCredentialsFilename() string {
  function SharedConfigFilename (line 25) | func SharedConfigFilename() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
  method getToken (line 19) | func (c *EC2Metadata) getToken(ctx aws.Context, duration time.Duration) ...
  method GetMetadata (line 54) | func (c *EC2Metadata) GetMetadata(p string) (string, error) {
  method GetMetadataWithContext (line 61) | func (c *EC2Metadata) GetMetadataWithContext(ctx aws.Context, p string) ...
  method GetUserData (line 80) | func (c *EC2Metadata) GetUserData() (string, error) {
  method GetUserDataWithContext (line 87) | func (c *EC2Metadata) GetUserDataWithContext(ctx aws.Context) (string, e...
  method GetDynamicData (line 105) | func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
  method GetDynamicDataWithContext (line 112) | func (c *EC2Metadata) GetDynamicDataWithContext(ctx aws.Context, p strin...
  method GetInstanceIdentityDocument (line 130) | func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentity...
  method GetInstanceIdentityDocumentWithContext (line 137) | func (c *EC2Metadata) GetInstanceIdentityDocumentWithContext(ctx aws.Con...
  method IAMInfo (line 156) | func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {
  method IAMInfoWithContext (line 161) | func (c *EC2Metadata) IAMInfoWithContext(ctx aws.Context) (EC2IAMInfo, e...
  method Region (line 186) | func (c *EC2Metadata) Region() (string, error) {
  method RegionWithContext (line 191) | func (c *EC2Metadata) RegionWithContext(ctx aws.Context) (string, error) {
  method Available (line 208) | func (c *EC2Metadata) Available() bool {
  method AvailableWithContext (line 215) | func (c *EC2Metadata) AvailableWithContext(ctx aws.Context) bool {
  type EC2IAMInfo (line 225) | type EC2IAMInfo struct
  type EC2InstanceIdentityDocument (line 234) | type EC2InstanceIdentityDocument struct

FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
  constant ServiceName (line 35) | ServiceName          = "ec2metadata"
  constant disableServiceEnvVar (line 36) | disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED"
  constant ttlHeader (line 39) | ttlHeader   = "x-aws-ec2-metadata-token-ttl-seconds"
  constant tokenHeader (line 40) | tokenHeader = "x-aws-ec2-metadata-token"
  constant fetchTokenHandlerName (line 43) | fetchTokenHandlerName          = "FetchTokenHandler"
  constant unmarshalMetadataHandlerName (line 44) | unmarshalMetadataHandlerName   = "unmarshalMetadataHandler"
  constant unmarshalTokenHandlerName (line 45) | unmarshalTokenHandlerName      = "unmarshalTokenHandler"
  constant enableTokenProviderHandlerName (line 46) | enableTokenProviderHandlerName = "enableTokenProviderHandler"
  constant defaultTTL (line 49) | defaultTTL          = 21600 * time.Second
  constant ttlExpirationWindow (line 50) | ttlExpirationWindow = 30 * time.Second
  type EC2Metadata (line 54) | type EC2Metadata struct
  function New (line 68) | func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata {
  function NewClient (line 83) | func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, sign...
  function httpClientZero (line 163) | func httpClientZero(c *http.Client) bool {
  type metadataOutput (line 167) | type metadataOutput struct
  type tokenOutput (line 171) | type tokenOutput struct
  function unmarshalError (line 224) | func unmarshalError(r *request.Request) {
  function validateEndpointHandler (line 241) | func validateEndpointHandler(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go
  type tokenProvider (line 18) | type tokenProvider struct
    method fetchTokenHandler (line 37) | func (t *tokenProvider) fetchTokenHandler(r *request.Request) {
    method enableTokenProviderHandler (line 86) | func (t *tokenProvider) enableTokenProviderHandler(r *request.Request) {
  type ec2Token (line 26) | type ec2Token struct
  function newTokenProvider (line 32) | func newTokenProvider(c *EC2Metadata, duration time.Duration) *tokenProv...

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
  type modelDefinition (line 11) | type modelDefinition
  type DecodeModelOptions (line 15) | type DecodeModelOptions struct
    method Set (line 20) | func (d *DecodeModelOptions) Set(optFns ...func(*DecodeModelOptions)) {
  function DecodeModel (line 40) | func DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Reso...
  function decodeV3Endpoints (line 66) | func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions...
  function custAddS3DualStack (line 95) | func custAddS3DualStack(p *partition) {
  function custRegionalS3 (line 104) | func custRegionalS3(p *partition) {
  function custAddDualstack (line 131) | func custAddDualstack(p *partition, svcName string) {
  function custAddEC2Metadata (line 143) | func custAddEC2Metadata(p *partition) {
  function custRmIotDataService (line 156) | func custRmIotDataService(p *partition) {
  function custFixAppAutoscalingChina (line 160) | func custFixAppAutoscalingChina(p *partition) {
  function custFixAppAutoscalingUsGov (line 181) | func custFixAppAutoscalingUsGov(p *partition) {
  type decodeModelError (line 208) | type decodeModelError struct
  function newDecodeModelError (line 212) | func newDecodeModelError(msg string, err error) decodeModelError {

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
  constant AwsPartitionID (line 11) | AwsPartitionID      = "aws"
  constant AwsCnPartitionID (line 12) | AwsCnPartitionID    = "aws-cn"
  constant AwsUsGovPartitionID (line 13) | AwsUsGovPartitionID = "aws-us-gov"
  constant AwsIsoPartitionID (line 14) | AwsIsoPartitionID   = "aws-iso"
  constant AwsIsoBPartitionID (line 15) | AwsIsoBPartitionID  = "aws-iso-b"
  constant AfSouth1RegionID (line 20) | AfSouth1RegionID     = "af-south-1"
  constant ApEast1RegionID (line 21) | ApEast1RegionID      = "ap-east-1"
  constant ApNortheast1RegionID (line 22) | ApNortheast1RegionID = "ap-northeast-1"
  constant ApNortheast2RegionID (line 23) | ApNortheast2RegionID = "ap-northeast-2"
  constant ApSouth1RegionID (line 24) | ApSouth1RegionID     = "ap-south-1"
  constant ApSoutheast1RegionID (line 25) | ApSoutheast1RegionID = "ap-southeast-1"
  constant ApSoutheast2RegionID (line 26) | ApSoutheast2RegionID = "ap-southeast-2"
  constant CaCentral1RegionID (line 27) | CaCentral1RegionID   = "ca-central-1"
  constant EuCentral1RegionID (line 28) | EuCentral1RegionID   = "eu-central-1"
  constant EuNorth1RegionID (line 29) | EuNorth1RegionID     = "eu-north-1"
  constant EuSouth1RegionID (line 30) | EuSouth1RegionID     = "eu-south-1"
  constant EuWest1RegionID (line 31) | EuWest1RegionID      = "eu-west-1"
  constant EuWest2RegionID (line 32) | EuWest2RegionID      = "eu-west-2"
  constant EuWest3RegionID (line 33) | EuWest3RegionID      = "eu-west-3"
  constant MeSouth1RegionID (line 34) | MeSouth1RegionID     = "me-south-1"
  constant SaEast1RegionID (line 35) | SaEast1RegionID      = "sa-east-1"
  constant UsEast1RegionID (line 36) | UsEast1RegionID      = "us-east-1"
  constant UsEast2RegionID (line 37) | UsEast2RegionID      = "us-east-2"
  constant UsWest1RegionID (line 38) | UsWest1RegionID      = "us-west-1"
  constant UsWest2RegionID (line 39) | UsWest2RegionID      = "us-west-2"
  constant CnNorth1RegionID (line 44) | CnNorth1RegionID     = "cn-north-1"
  constant CnNorthwest1RegionID (line 45) | CnNorthwest1RegionID = "cn-northwest-1"
  constant UsGovEast1RegionID (line 50) | UsGovEast1RegionID = "us-gov-east-1"
  constant UsGovWest1RegionID (line 51) | UsGovWest1RegionID = "us-gov-west-1"
  constant UsIsoEast1RegionID (line 56) | UsIsoEast1RegionID = "us-iso-east-1"
  constant UsIsobEast1RegionID (line 61) | UsIsobEast1RegionID = "us-isob-east-1"
  function DefaultResolver (line 68) | func DefaultResolver() Resolver {
  function DefaultPartitions (line 79) | func DefaultPartitions() []Partition {
  function AwsPartition (line 92) | func AwsPartition() Partition {
  function AwsCnPartition (line 7000) | func AwsCnPartition() Partition {
  function AwsUsGovPartition (line 7855) | func AwsUsGovPartition() Partition {
  function AwsIsoPartition (line 9612) | func AwsIsoPartition() Partition {
  function AwsIsoBPartition (line 10011) | func AwsIsoBPartition() Partition {

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
  constant A4bServiceID (line 8) | A4bServiceID                          = "a4b"
  constant AcmServiceID (line 9) | AcmServiceID                          = "acm"
  constant AcmPcaServiceID (line 10) | AcmPcaServiceID                       = "acm-pca"
  constant ApiMediatailorServiceID (line 11) | ApiMediatailorServiceID               = "api.mediatailor"
  constant ApiPricingServiceID (line 12) | ApiPricingServiceID                   = "api.pricing"
  constant ApiSagemakerServiceID (line 13) | ApiSagemakerServiceID                 = "api.sagemaker"
  constant ApigatewayServiceID (line 14) | ApigatewayServiceID                   = "apigateway"
  constant ApplicationAutoscalingServiceID (line 15) | ApplicationAutoscalingServiceID       = "application-autoscaling"
  constant Appstream2ServiceID (line 16) | Appstream2ServiceID                   = "appstream2"
  constant AppsyncServiceID (line 17) | AppsyncServiceID                      = "appsync"
  constant AthenaServiceID (line 18) | AthenaServiceID                       = "athena"
  constant AutoscalingServiceID (line 19) | AutoscalingServiceID                  = "autoscaling"
  constant AutoscalingPlansServiceID (line 20) | AutoscalingPlansServiceID             = "autoscaling-plans"
  constant BatchServiceID (line 21) | BatchServiceID                        = "batch"
  constant BudgetsServiceID (line 22) | BudgetsServiceID                      = "budgets"
  constant CeServiceID (line 23) | CeServiceID                           = "ce"
  constant ChimeServiceID (line 24) | ChimeServiceID                        = "chime"
  constant Cloud9ServiceID (line 25) | Cloud9ServiceID                       = "cloud9"
  constant ClouddirectoryServiceID (line 26) | ClouddirectoryServiceID               = "clouddirectory"
  constant CloudformationServiceID (line 27) | CloudformationServiceID               = "cloudformation"
  constant CloudfrontServiceID (line 28) | CloudfrontServiceID                   = "cloudfront"
  constant CloudhsmServiceID (line 29) | CloudhsmServiceID                     = "cloudhsm"
  constant Cloudhsmv2ServiceID (line 30) | Cloudhsmv2ServiceID                   = "cloudhsmv2"
  constant CloudsearchServiceID (line 31) | CloudsearchServiceID                  = "cloudsearch"
  constant CloudtrailServiceID (line 32) | CloudtrailServiceID                   = "cloudtrail"
  constant CodebuildServiceID (line 33) | CodebuildServiceID                    = "codebuild"
  constant CodecommitServiceID (line 34) | CodecommitServiceID                   = "codecommit"
  constant CodedeployServiceID (line 35) | CodedeployServiceID                   = "codedeploy"
  constant CodepipelineServiceID (line 36) | CodepipelineServiceID                 = "codepipeline"
  constant CodestarServiceID (line 37) | CodestarServiceID                     = "codestar"
  constant CognitoIdentityServiceID (line 38) | CognitoIdentityServiceID              = "cognito-identity"
  constant CognitoIdpServiceID (line 39) | CognitoIdpServiceID                   = "cognito-idp"
  constant CognitoSyncServiceID (line 40) | CognitoSyncServiceID                  = "cognito-sync"
  constant ComprehendServiceID (line 41) | ComprehendServiceID                   = "comprehend"
  constant ConfigServiceID (line 42) | ConfigServiceID                       = "config"
  constant CurServiceID (line 43) | CurServiceID                          = "cur"
  constant DatapipelineServiceID (line 44) | DatapipelineServiceID                 = "datapipeline"
  constant DaxServiceID (line 45) | DaxServiceID                          = "dax"
  constant DevicefarmServiceID (line 46) | DevicefarmServiceID                   = "devicefarm"
  constant DirectconnectServiceID (line 47) | DirectconnectServiceID                = "directconnect"
  constant DiscoveryServiceID (line 48) | DiscoveryServiceID                    = "discovery"
  constant DmsServiceID (line 49) | DmsServiceID                          = "dms"
  constant DsServiceID (line 50) | DsServiceID                           = "ds"
  constant DynamodbServiceID (line 51) | DynamodbServiceID                     = "dynamodb"
  constant Ec2ServiceID (line 52) | Ec2ServiceID                          = "ec2"
  constant Ec2metadataServiceID (line 53) | Ec2metadataServiceID                  = "ec2metadata"
  constant EcrServiceID (line 54) | EcrServiceID                          = "ecr"
  constant EcsServiceID (line 55) | EcsServiceID                          = "ecs"
  constant ElasticacheServiceID (line 56) | ElasticacheServiceID                  = "elasticache"
  constant ElasticbeanstalkServiceID (line 57) | ElasticbeanstalkServiceID             = "elasticbeanstalk"
  constant ElasticfilesystemServiceID (line 58) | ElasticfilesystemServiceID            = "elasticfilesystem"
  constant ElasticloadbalancingServiceID (line 59) | ElasticloadbalancingServiceID         = "elasticloadbalancing"
  constant ElasticmapreduceServiceID (line 60) | ElasticmapreduceServiceID             = "elasticmapreduce"
  constant ElastictranscoderServiceID (line 61) | ElastictranscoderServiceID            = "elastictranscoder"
  constant EmailServiceID (line 62) | EmailServiceID                        = "email"
  constant EntitlementMarketplaceServiceID (line 63) | EntitlementMarketplaceServiceID       = "entitlement.marketplace"
  constant EsServiceID (line 64) | EsServiceID                           = "es"
  constant EventsServiceID (line 65) | EventsServiceID                       = "events"
  constant FirehoseServiceID (line 66) | FirehoseServiceID                     = "firehose"
  constant FmsServiceID (line 67) | FmsServiceID                          = "fms"
  constant GameliftServiceID (line 68) | GameliftServiceID                     = "gamelift"
  constant GlacierServiceID (line 69) | GlacierServiceID                      = "glacier"
  constant GlueServiceID (line 70) | GlueServiceID                         = "glue"
  constant GreengrassServiceID (line 71) | GreengrassServiceID                   = "greengrass"
  constant GuarddutyServiceID (line 72) | GuarddutyServiceID                    = "guardduty"
  constant HealthServiceID (line 73) | HealthServiceID                       = "health"
  constant IamServiceID (line 74) | IamServiceID                          = "iam"
  constant ImportexportServiceID (line 75) | ImportexportServiceID                 = "importexport"
  constant InspectorServiceID (line 76) | InspectorServiceID                    = "inspector"
  constant IotServiceID (line 77) | IotServiceID                          = "iot"
  constant IotanalyticsServiceID (line 78) | IotanalyticsServiceID                 = "iotanalytics"
  constant KinesisServiceID (line 79) | KinesisServiceID                      = "kinesis"
  constant KinesisanalyticsServiceID (line 80) | KinesisanalyticsServiceID             = "kinesisanalytics"
  constant KinesisvideoServiceID (line 81) | KinesisvideoServiceID                 = "kinesisvideo"
  constant KmsServiceID (line 82) | KmsServiceID                          = "kms"
  constant LambdaServiceID (line 83) | LambdaServiceID                       = "lambda"
  constant LightsailServiceID (line 84) | LightsailServiceID                    = "lightsail"
  constant LogsServiceID (line 85) | LogsServiceID                         = "logs"
  constant MachinelearningServiceID (line 86) | MachinelearningServiceID              = "machinelearning"
  constant MarketplacecommerceanalyticsServiceID (line 87) | MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics"
  constant MediaconvertServiceID (line 88) | MediaconvertServiceID                 = "mediaconvert"
  constant MedialiveServiceID (line 89) | MedialiveServiceID                    = "medialive"
  constant MediapackageServiceID (line 90) | MediapackageServiceID                 = "mediapackage"
  constant MediastoreServiceID (line 91) | MediastoreServiceID                   = "mediastore"
  constant MeteringMarketplaceServiceID (line 92) | MeteringMarketplaceServiceID          = "metering.marketplace"
  constant MghServiceID (line 93) | MghServiceID                          = "mgh"
  constant MobileanalyticsServiceID (line 94) | MobileanalyticsServiceID              = "mobileanalytics"
  constant ModelsLexServiceID (line 95) | ModelsLexServiceID                    = "models.lex"
  constant MonitoringServiceID (line 96) | MonitoringServiceID                   = "monitoring"
  constant MturkRequesterServiceID (line 97) | MturkRequesterServiceID               = "mturk-requester"
  constant NeptuneServiceID (line 98) | NeptuneServiceID                      = "neptune"
  constant OpsworksServiceID (line 99) | OpsworksServiceID                     = "opsworks"
  constant OpsworksCmServiceID (line 100) | OpsworksCmServiceID                   = "opsworks-cm"
  constant OrganizationsServiceID (line 101) | OrganizationsServiceID                = "organizations"
  constant PinpointServiceID (line 102) | PinpointServiceID                     = "pinpoint"
  constant PollyServiceID (line 103) | PollyServiceID                        = "polly"
  constant RdsServiceID (line 104) | RdsServiceID                          = "rds"
  constant RedshiftServiceID (line 105) | RedshiftServiceID                     = "redshift"
  constant RekognitionServiceID (line 106) | RekognitionServiceID                  = "rekognition"
  constant ResourceGroupsServiceID (line 107) | ResourceGroupsServiceID               = "resource-groups"
  constant Route53ServiceID (line 108) | Route53ServiceID                      = "route53"
  constant Route53domainsServiceID (line 109) | Route53domainsServiceID               = "route53domains"
  constant RuntimeLexServiceID (line 110) | RuntimeLexServiceID                   = "runtime.lex"
  constant RuntimeSagemakerServiceID (line 111) | RuntimeSagemakerServiceID             = "runtime.sagemaker"
  constant S3ServiceID (line 112) | S3ServiceID                           = "s3"
  constant S3ControlServiceID (line 113) | S3ControlServiceID                    = "s3-control"
  constant SagemakerServiceID (line 114) | SagemakerServiceID                    = "api.sagemaker"
  constant SdbServiceID (line 115) | SdbServiceID                          = "sdb"
  constant SecretsmanagerServiceID (line 116) | SecretsmanagerServiceID               = "secretsmanager"
  constant ServerlessrepoServiceID (line 117) | ServerlessrepoServiceID               = "serverlessrepo"
  constant ServicecatalogServiceID (line 118) | ServicecatalogServiceID               = "servicecatalog"
  constant ServicediscoveryServiceID (line 119) | ServicediscoveryServiceID             = "servicediscovery"
  constant ShieldServiceID (line 120) | ShieldServiceID                       = "shield"
  constant SmsServiceID (line 121) | SmsServiceID                          = "sms"
  constant SnowballServiceID (line 122) | SnowballServiceID                     = "snowball"
  constant SnsServiceID (line 123) | SnsServiceID                          = "sns"
  constant SqsServiceID (line 124) | SqsServiceID                          = "sqs"
  constant SsmServiceID (line 125) | SsmServiceID                          = "ssm"
  constant StatesServiceID (line 126) | StatesServiceID                       = "states"
  constant StoragegatewayServiceID (line 127) | StoragegatewayServiceID               = "storagegateway"
  constant StreamsDynamodbServiceID (line 128) | StreamsDynamodbServiceID              = "streams.dynamodb"
  constant StsServiceID (line 129) | StsServiceID                          = "sts"
  constant SupportServiceID (line 130) | SupportServiceID                      = "support"
  constant SwfServiceID (line 131) | SwfServiceID                          = "swf"
  constant TaggingServiceID (line 132) | TaggingServiceID                      = "tagging"
  constant TransferServiceID (line 133) | TransferServiceID                     = "transfer"
  constant TranslateServiceID (line 134) | TranslateServiceID                    = "translate"
  constant WafServiceID (line 135) | WafServiceID                          = "waf"
  constant WafRegionalServiceID (line 136) | WafRegionalServiceID                  = "waf-regional"
  constant WorkdocsServiceID (line 137) | WorkdocsServiceID                     = "workdocs"
  constant WorkmailServiceID (line 138) | WorkmailServiceID                     = "workmail"
  constant WorkspacesServiceID (line 139) | WorkspacesServiceID                   = "workspaces"
  constant XrayServiceID (line 140) | XrayServiceID                         = "xray"

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go
  type Options (line 13) | type Options struct
    method Set (line 155) | func (o *Options) Set(optFns ...func(*Options)) {
  type STSRegionalEndpoint (line 60) | type STSRegionalEndpoint
    method String (line 62) | func (e STSRegionalEndpoint) String() string {
  constant UnsetSTSEndpoint (line 78) | UnsetSTSEndpoint STSRegionalEndpoint = iota
  constant LegacySTSEndpoint (line 82) | LegacySTSEndpoint
  constant RegionalSTSEndpoint (line 86) | RegionalSTSEndpoint
  function GetSTSRegionalEndpoint (line 94) | func GetSTSRegionalEndpoint(s string) (STSRegionalEndpoint, error) {
  type S3UsEast1RegionalEndpoint (line 107) | type S3UsEast1RegionalEndpoint
    method String (line 109) | func (e S3UsEast1RegionalEndpoint) String() string {
  constant UnsetS3UsEast1Endpoint (line 126) | UnsetS3UsEast1Endpoint S3UsEast1RegionalEndpoint = iota
  constant LegacyS3UsEast1Endpoint (line 130) | LegacyS3UsEast1Endpoint
  constant RegionalS3UsEast1Endpoint (line 134) | RegionalS3UsEast1Endpoint
  function GetS3UsEast1RegionalEndpoint (line 142) | func GetS3UsEast1RegionalEndpoint(s string) (S3UsEast1RegionalEndpoint, ...
  function DisableSSLOption (line 163) | func DisableSSLOption(o *Options) {
  function UseDualStackOption (line 169) | func UseDualStackOption(o *Options) {
  function StrictMatchingOption (line 175) | func StrictMatchingOption(o *Options) {
  function ResolveUnknownServiceOption (line 181) | func ResolveUnknownServiceOption(o *Options) {
  function STSRegionalEndpointOption (line 187) | func STSRegionalEndpointOption(o *Options) {
  type Resolver (line 193) | type Resolver interface
  type ResolverFunc (line 200) | type ResolverFunc
    method EndpointFor (line 203) | func (fn ResolverFunc) EndpointFor(service, region string, opts ...fun...
  function AddScheme (line 214) | func AddScheme(endpoint string, disableSSL bool) string {
  type EnumPartitions (line 232) | type EnumPartitions interface
  function RegionsForService (line 245) | func RegionsForService(ps []Partition, partitionID, serviceID string) (m...
  function PartitionForRegion (line 269) | func PartitionForRegion(ps []Partition, regionID string) (Partition, boo...
  type Partition (line 281) | type Partition struct
    method DNSSuffix (line 287) | func (p Partition) DNSSuffix() string { return p.dnsSuffix }
    method ID (line 290) | func (p Partition) ID() string { return p.id }
    method EndpointFor (line 313) | func (p Partition) EndpointFor(service, region string, opts ...func(*O...
    method Regions (line 319) | func (p Partition) Regions() map[string]Region {
    method Services (line 334) | func (p Partition) Services() map[string]Service {
  type Region (line 348) | type Region struct
    method ID (line 354) | func (r Region) ID() string { return r.id }
    method Description (line 358) | func (r Region) Description() string { return r.desc }
    method ResolveEndpoint (line 362) | func (r Region) ResolveEndpoint(service string, opts ...func(*Options)...
    method Services (line 367) | func (r Region) Services() map[string]Service {
  type Service (line 383) | type Service struct
    method ID (line 389) | func (s Service) ID() string { return s.id }
    method ResolveEndpoint (line 393) | func (s Service) ResolveEndpoint(region string, opts ...func(*Options)...
    method Regions (line 401) | func (s Service) Regions() map[string]Region {
    method Endpoints (line 421) | func (s Service) Endpoints() map[string]Endpoint {
  type Endpoint (line 437) | type Endpoint struct
    method ID (line 444) | func (e Endpoint) ID() string { return e.id }
    method ServiceID (line 447) | func (e Endpoint) ServiceID() string { return e.serviceID }
    method ResolveEndpoint (line 452) | func (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEnd...
  type ResolvedEndpoint (line 458) | type ResolvedEndpoint struct
  type awsError (line 481) | type awsError
  type EndpointNotFoundError (line 485) | type EndpointNotFoundError struct
  type UnknownServiceError (line 495) | type UnknownServiceError struct
    method Error (line 514) | func (e UnknownServiceError) Error() string {
    method String (line 524) | func (e UnknownServiceError) String() string {
  function NewUnknownServiceError (line 503) | func NewUnknownServiceError(p, s string, known []string) UnknownServiceE...
  type UnknownEndpointError (line 531) | type UnknownEndpointError struct
    method Error (line 552) | func (e UnknownEndpointError) Error() string {
    method String (line 562) | func (e UnknownEndpointError) String() string {
  function NewUnknownEndpointError (line 540) | func NewUnknownEndpointError(p, s, r string, known []string) UnknownEndp...

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go
  type partitions (line 12) | type partitions
    method EndpointFor (line 14) | func (ps partitions) EndpointFor(service, region string, opts ...func(...
    method Partitions (line 38) | func (ps partitions) Partitions() []Partition {
  type partition (line 47) | type partition struct
    method Partition (line 57) | func (p partition) Partition() Partition {
    method canResolveEndpoint (line 65) | func (p partition) canResolveEndpoint(service, region string, strictMa...
    method EndpointFor (line 100) | func (p partition) EndpointFor(service, region string, opts ...func(*O...
  function allowLegacyEmptyRegion (line 80) | func allowLegacyEmptyRegion(service string) bool {
  function serviceList (line 132) | func serviceList(ss services) []string {
  function endpointList (line 139) | func endpointList(es endpoints) []string {
  type regionRegex (line 147) | type regionRegex struct
    method UnmarshalJSON (line 151) | func (rr *regionRegex) UnmarshalJSON(b []byte) (err error) {
  type regions (line 165) | type regions
  type region (line 167) | type region struct
  type services (line 171) | type services
  type service (line 173) | type service struct
    method endpointForRegion (line 180) | func (s *service) endpointForRegion(region string) (endpoint, bool) {
  type endpoints (line 194) | type endpoints
  type endpoint (line 196) | type endpoint struct
    method resolve (line 238) | func (e endpoint) resolve(service, partitionID, region, dnsSuffix stri...
    method mergeIn (line 294) | func (e *endpoint) mergeIn(other endpoint) {
  constant defaultProtocol (line 213) | defaultProtocol = "https"
  constant defaultSigner (line 214) | defaultSigner   = "v4"
  function getByPriority (line 222) | func getByPriority(s []string, p []string, def string) string {
  function getEndpointScheme (line 286) | func getEndpointScheme(protocols []string, disableSSL bool) string {
  type credentialScope (line 321) | type credentialScope struct
  type boxedBool (line 326) | type boxedBool
    method UnmarshalJSON (line 328) | func (b *boxedBool) UnmarshalJSON(buf []byte) error {
  constant boxedBoolUnset (line 344) | boxedBoolUnset boxedBool = iota
  constant boxedFalse (line 345) | boxedFalse
  constant boxedTrue (line 346) | boxedTrue
  function validateInputRegion (line 349) | func validateInputRegion(region string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go
  type CodeGenOptions (line 16) | type CodeGenOptions struct
    method Set (line 26) | func (d *CodeGenOptions) Set(optFns ...func(*CodeGenOptions)) {
  function CodeGenModel (line 35) | func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func...
  function toSymbol (line 62) | func toSymbol(v string) string {
  function quoteString (line 75) | func quoteString(v string) string {
  function regionConstName (line 79) | func regionConstName(p, r string) string {
  function partitionGetter (line 83) | func partitionGetter(id string) string {
  function partitionVarName (line 87) | func partitionVarName(id string) string {
  function listPartitionNames (line 91) | func listPartitionNames(ps partitions) string {
  function boxedBoolIfSet (line 110) | func boxedBoolIfSet(msg string, v boxedBool) string {
  function stringIfSet (line 121) | func stringIfSet(msg, v string) string {
  function stringSliceIfSet (line 129) | func stringSliceIfSet(msg string, vs []string) string {
  function endpointIsSet (line 142) | func endpointIsSet(v endpoint) bool {
  function serviceSet (line 146) | func serviceSet(ps partitions) map[string]struct{} {
  constant v3Tmpl (line 171) | v3Tmpl = `

FILE: vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go
  type JSONValue (line 12) | type JSONValue

FILE: vendor/github.com/aws/aws-sdk-go/aws/logger.go
  type LogLevelType (line 10) | type LogLevelType
    method Value (line 20) | func (l *LogLevelType) Value() LogLevelType {
    method Matches (line 30) | func (l *LogLevelType) Matches(v LogLevelType) bool {
    method AtLeast (line 38) | func (l *LogLevelType) AtLeast(v LogLevelType) bool {
  function LogLevel (line 14) | func LogLevel(l LogLevelType) *LogLevelType {
  constant LogOff (line 46) | LogOff LogLevelType = iota * 0x1000
  constant LogDebug (line 50) | LogDebug
  constant LogDebugWithSigning (line 58) | LogDebugWithSigning LogLevelType = LogDebug | (1 << iota)
  constant LogDebugWithHTTPBody (line 64) | LogDebugWithHTTPBody
  constant LogDebugWithRequestRetries (line 69) | LogDebugWithRequestRetries
  constant LogDebugWithRequestErrors (line 73) | LogDebugWithRequestErrors
  constant LogDebugWithEventStreamBody (line 79) | LogDebugWithEventStreamBody
  type Logger (line 84) | type Logger interface
  type LoggerFunc (line 95) | type LoggerFunc
    method Log (line 98) | func (f LoggerFunc) Log(args ...interface{}) {
  function NewDefaultLogger (line 104) | func NewDefaultLogger() Logger {
  type defaultLogger (line 111) | type defaultLogger struct
    method Log (line 116) | func (l defaultLogger) Log(args ...interface{}) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go
  function isErrConnectionReset (line 7) | func isErrConnectionReset(err error) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
  type Handlers (line 10) | type Handlers struct
    method Copy (line 28) | func (h *Handlers) Copy() Handlers {
    method Clear (line 48) | func (h *Handlers) Clear() {
    method IsEmpty (line 66) | func (h *Handlers) IsEmpty() bool {
  type HandlerListRunItem (line 115) | type HandlerListRunItem struct
  type HandlerList (line 122) | type HandlerList struct
    method copy (line 144) | func (l *HandlerList) copy() HandlerList {
    method Clear (line 157) | func (l *HandlerList) Clear() {
    method Len (line 162) | func (l *HandlerList) Len() int {
    method PushBack (line 167) | func (l *HandlerList) PushBack(f func(*Request)) {
    method PushBackNamed (line 172) | func (l *HandlerList) PushBackNamed(n NamedHandler) {
    method PushFront (line 180) | func (l *HandlerList) PushFront(f func(*Request)) {
    method PushFrontNamed (line 185) | func (l *HandlerList) PushFrontNamed(n NamedHandler) {
    method Remove (line 198) | func (l *HandlerList) Remove(n NamedHandler) {
    method RemoveByName (line 203) | func (l *HandlerList) RemoveByName(name string) {
    method SwapNamed (line 221) | func (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) {
    method Swap (line 234) | func (l *HandlerList) Swap(name string, replace NamedHandler) bool {
    method SetBackNamed (line 249) | func (l *HandlerList) SetBackNamed(n NamedHandler) {
    method SetFrontNamed (line 258) | func (l *HandlerList) SetFrontNamed(n NamedHandler) {
    method Run (line 265) | func (l *HandlerList) Run(r *Request) {
  type NamedHandler (line 138) | type NamedHandler struct
  function HandlerListLogItem (line 280) | func HandlerListLogItem(item HandlerListRunItem) bool {
  function HandlerListStopOnError (line 293) | func HandlerListStopOnError(item HandlerListRunItem) bool {
  function WithAppendUserAgent (line 299) | func WithAppendUserAgent(s string) Option {
  function MakeAddToUserAgentHandler (line 312) | func MakeAddToUserAgentHandler(name, version string, extra ...string) fu...
  function MakeAddToUserAgentFreeFormHandler (line 324) | func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {
  function WithSetRequestHeaders (line 333) | func WithSetRequestHeaders(h map[string]string) Option {
  type withRequestHeader (line 337) | type withRequestHeader
    method SetRequestHeaders (line 339) | func (h withRequestHeader) SetRequestHeaders(r *Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go
  function copyHTTPRequest (line 9) | func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go
  type offsetReader (line 12) | type offsetReader struct
    method Close (line 31) | func (o *offsetReader) Close() error {
    method Read (line 39) | func (o *offsetReader) Read(p []byte) (int, error) {
    method Seek (line 51) | func (o *offsetReader) Seek(offset int64, whence int) (int64, error) {
    method CloseAndCopy (line 60) | func (o *offsetReader) CloseAndCopy(offset int64) (*offsetReader, erro...
  function newOffsetReader (line 18) | func newOffsetReader(buf io.ReadSeeker, offset int64) (*offsetReader, er...

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request.go
  constant ErrCodeSerialization (line 22) | ErrCodeSerialization = "SerializationError"
  constant ErrCodeRead (line 25) | ErrCodeRead = "ReadError"
  constant ErrCodeResponseTimeout (line 29) | ErrCodeResponseTimeout = "ResponseTimeout"
  constant ErrCodeInvalidPresignExpire (line 33) | ErrCodeInvalidPresignExpire = "InvalidPresignExpireError"
  constant CanceledErrorCode (line 38) | CanceledErrorCode = "RequestCanceled"
  constant ErrCodeRequestError (line 42) | ErrCodeRequestError = "RequestError"
  type Request (line 46) | type Request struct
    method ApplyOptions (line 208) | func (r *Request) ApplyOptions(opts ...Option) {
    method Context (line 216) | func (r *Request) Context() aws.Context {
    method SetContext (line 239) | func (r *Request) SetContext(ctx aws.Context) {
    method WillRetry (line 247) | func (r *Request) WillRetry() bool {
    method ParamsFilled (line 261) | func (r *Request) ParamsFilled() bool {
    method DataFilled (line 268) | func (r *Request) DataFilled() bool {
    method SetBufferBody (line 274) | func (r *Request) SetBufferBody(buf []byte) {
    method SetStringBody (line 279) | func (r *Request) SetStringBody(s string) {
    method SetReaderBody (line 284) | func (r *Request) SetReaderBody(reader io.ReadSeeker) {
    method SetStreamingBody (line 303) | func (r *Request) SetStreamingBody(reader io.ReadCloser) {
    method Presign (line 315) | func (r *Request) Presign(expire time.Duration) (string, error) {
    method PresignRequest (line 341) | func (r *Request) PresignRequest(expire time.Duration) (string, http.H...
    method IsPresigned (line 347) | func (r *Request) IsPresigned() bool {
    method Build (line 398) | func (r *Request) Build() error {
    method Sign (line 420) | func (r *Request) Sign() error {
    method getNextRequestBody (line 433) | func (r *Request) getNextRequestBody() (body io.ReadCloser, err error) {
    method GetBody (line 494) | func (r *Request) GetBody() io.ReadSeeker {
    method Send (line 511) | func (r *Request) Send() error {
    method prepareRetry (line 548) | func (r *Request) prepareRetry() error {
    method sendRequest (line 574) | func (r *Request) sendRequest() (sendErr error) {
    method copy (line 609) | func (r *Request) copy() *Request {
  type Operation (line 98) | type Operation struct
  function New (line 117) | func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
  type Option (line 160) | type Option
  function WithGetResponseHeader (line 174) | func WithGetResponseHeader(key string, val *string) Option {
  function WithGetResponseHeaders (line 188) | func WithGetResponseHeaders(headers *http.Header) Option {
  function WithLogLevel (line 200) | func WithLogLevel(l aws.LogLevelType) Option {
  function fmtAttemptCount (line 254) | func fmtAttemptCount(retryCount, maxRetries int) string {
  function getPresignedURL (line 351) | func getPresignedURL(r *Request, expire time.Duration) (string, http.Hea...
  constant notRetrying (line 376) | notRetrying = "not retrying"
  function debugLogReqError (line 379) | func debugLogReqError(r *Request, stage, retryStr string, err error) {
  function AddToUserAgent (line 619) | func AddToUserAgent(r *Request, s string) {
  function SanitizeHostForHeader (line 628) | func SanitizeHostForHeader(r *http.Request) {
  function getHost (line 637) | func getHost(r *http.Request) string {
  function stripPort (line 656) | func stripPort(hostport string) string {
  function portOnly (line 671) | func portOnly(hostport string) string {
  function isDefaultPort (line 687) | func isDefaultPort(scheme, port string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go
  type noBody (line 13) | type noBody struct
    method Read (line 15) | func (noBody) Read([]byte) (int, error)         { return 0, io.EOF }
    method Close (line 16) | func (noBody) Close() error                     { return nil }
    method WriteTo (line 17) | func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil }
  method ResetBody (line 31) | func (r *Request) ResetBody() {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go
  method ResetBody (line 26) | func (r *Request) ResetBody() {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go
  function setRequestContext (line 11) | func setRequestContext(r *Request, ctx aws.Context) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go
  function setRequestContext (line 11) | func setRequestContext(r *Request, ctx aws.Context) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
  type Pagination (line 31) | type Pagination struct
    method HasNextPage (line 57) | func (p *Pagination) HasNextPage() bool {
    method Err (line 70) | func (p *Pagination) Err() error {
    method Page (line 77) | func (p *Pagination) Page() interface{} {
    method Next (line 89) | func (p *Pagination) Next() bool {
  type Paginator (line 127) | type Paginator struct
  method nextPageTokens (line 135) | func (r *Request) nextPageTokens() []interface{} {
  function logDeprecatedf (line 191) | func logDeprecatedf(logger aws.Logger, flag *int32, msg string) {
  method HasNextPage (line 209) | func (r *Request) HasNextPage() bool {
  method NextPage (line 220) | func (r *Request) NextPage() *Request {
  method EachPage (line 252) | func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (s...

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
  type Retryer (line 20) | type Retryer interface
  function WithRetryer (line 39) | func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config {
  type noOpRetryer (line 56) | type noOpRetryer struct
    method MaxRetries (line 60) | func (d noOpRetryer) MaxRetries() int {
    method ShouldRetry (line 65) | func (d noOpRetryer) ShouldRetry(_ *Request) bool {
    method RetryRules (line 71) | func (d noOpRetryer) RetryRules(_ *Request) time.Duration {
  function isCodeThrottle (line 107) | func isCodeThrottle(code string) bool {
  function isCodeRetryable (line 112) | func isCodeRetryable(code string) bool {
  function isCodeExpiredCreds (line 120) | func isCodeExpiredCreds(code string) bool {
  function isNestedErrorRetryable (line 130) | func isNestedErrorRetryable(parentErr awserr.Error) bool {
  function IsErrorRetryable (line 157) | func IsErrorRetryable(err error) bool {
  type temporary (line 164) | type temporary interface
  function shouldRetryError (line 168) | func shouldRetryError(origErr error) bool {
  function IsErrorThrottle (line 230) | func IsErrorThrottle(err error) bool {
  function IsErrorExpiredCreds (line 239) | func IsErrorExpiredCreds(err error) bool {
  method IsErrorRetryable (line 250) | func (r *Request) IsErrorRetryable() bool {
  method IsErrorThrottle (line 272) | func (r *Request) IsErrorThrottle() bool {
  function isErrCode (line 291) | func isErrCode(err error, codes []string) bool {
  method IsErrorExpired (line 307) | func (r *Request) IsErrorExpired() bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go
  type readResult (line 16) | type readResult struct
  type timeoutReadCloser (line 23) | type timeoutReadCloser struct
    method Read (line 31) | func (r *timeoutReadCloser) Read(b []byte) (int, error) {
    method Close (line 49) | func (r *timeoutReadCloser) Close() error {
  constant HandlerResponseTimeout (line 56) | HandlerResponseTimeout = "ResponseTimeoutHandler"
  function adaptToResponseTimeoutError (line 61) | func adaptToResponseTimeoutError(req *Request) {
  function WithResponseReadTimeout (line 75) | func WithResponseReadTimeout(duration time.Duration) Option {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
  constant InvalidParameterErrCode (line 12) | InvalidParameterErrCode = "InvalidParameter"
  constant ParamRequiredErrCode (line 14) | ParamRequiredErrCode = "ParamRequiredError"
  constant ParamMinValueErrCode (line 17) | ParamMinValueErrCode = "ParamMinValueError"
  constant ParamMinLenErrCode (line 19) | ParamMinLenErrCode = "ParamMinLenError"
  constant ParamMaxLenErrCode (line 21) | ParamMaxLenErrCode = "ParamMaxLenError"
  constant ParamFormatErrCode (line 25) | ParamFormatErrCode = "ParamFormatInvalidError"
  type Validator (line 31) | type Validator interface
  type ErrInvalidParams (line 37) | type ErrInvalidParams struct
    method Add (line 46) | func (e *ErrInvalidParams) Add(err ErrInvalidParam) {
    method AddNested (line 56) | func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInval...
    method Len (line 65) | func (e ErrInvalidParams) Len() int {
    method Code (line 70) | func (e ErrInvalidParams) Code() string {
    method Message (line 75) | func (e ErrInvalidParams) Message() string {
    method Error (line 80) | func (e ErrInvalidParams) Error() string {
    method OrigErr (line 92) | func (e ErrInvalidParams) OrigErr() error {
    method OrigErrs (line 98) | func (e ErrInvalidParams) OrigErrs() []error {
  type ErrInvalidParam (line 108) | type ErrInvalidParam interface
  type errInvalidParam (line 121) | type errInvalidParam struct
    method Code (line 130) | func (e *errInvalidParam) Code() string {
    method Message (line 135) | func (e *errInvalidParam) Message() string {
    method Error (line 140) | func (e *errInvalidParam) Error() string {
    method OrigErr (line 145) | func (e *errInvalidParam) OrigErr() error {
    method Field (line 150) | func (e *errInvalidParam) Field() string {
    method SetContext (line 164) | func (e *errInvalidParam) SetContext(ctx string) {
    method AddNestedContext (line 169) | func (e *errInvalidParam) AddNestedContext(ctx string) {
  type ErrParamRequired (line 179) | type ErrParamRequired struct
  function NewErrParamRequired (line 184) | func NewErrParamRequired(field string) *ErrParamRequired {
  type ErrParamMinValue (line 195) | type ErrParamMinValue struct
    method MinValue (line 215) | func (e *ErrParamMinValue) MinValue() float64 {
  function NewErrParamMinValue (line 201) | func NewErrParamMinValue(field string, min float64) *ErrParamMinValue {
  type ErrParamMinLen (line 220) | type ErrParamMinLen struct
    method MinLen (line 238) | func (e *ErrParamMinLen) MinLen() int {
  function NewErrParamMinLen (line 226) | func NewErrParamMinLen(field string, min int) *ErrParamMinLen {
  type ErrParamMaxLen (line 243) | type ErrParamMaxLen struct
    method MaxLen (line 261) | func (e *ErrParamMaxLen) MaxLen() int {
  function NewErrParamMaxLen (line 249) | func NewErrParamMaxLen(field string, max int, value string) *ErrParamMax...
  type ErrParamFormat (line 266) | type ErrParamFormat struct
    method Format (line 284) | func (e *ErrParamFormat) Format() string {
  function NewErrParamFormat (line 272) | func NewErrParamFormat(field string, format, value string) *ErrParamForm...

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go
  constant WaiterResourceNotReadyErrorCode (line 14) | WaiterResourceNotReadyErrorCode = "ResourceNotReady"
  type WaiterOption (line 18) | type WaiterOption
  function WithWaiterMaxAttempts (line 22) | func WithWaiterMaxAttempts(max int) WaiterOption {
  type WaiterDelay (line 34) | type WaiterDelay
  function ConstantWaiterDelay (line 39) | func ConstantWaiterDelay(delay time.Duration) WaiterDelay {
  function WithWaiterDelay (line 46) | func WithWaiterDelay(delayer WaiterDelay) WaiterOption {
  function WithWaiterLogger (line 54) | func WithWaiterLogger(logger aws.Logger) WaiterOption {
  function WithWaiterRequestOptions (line 63) | func WithWaiterRequestOptions(opts ...Option) WaiterOption {
  type Waiter (line 74) | type Waiter struct
    method ApplyOptions (line 88) | func (w *Waiter) ApplyOptions(opts ...WaiterOption) {
    method WaitWithContext (line 169) | func (w Waiter) WaitWithContext(ctx aws.Context) error {
  type WaiterState (line 96) | type WaiterState
    method String (line 99) | func (s WaiterState) String() string {
  constant SuccessWaiterState (line 114) | SuccessWaiterState WaiterState = iota
  constant FailureWaiterState (line 115) | FailureWaiterState
  constant RetryWaiterState (line 116) | RetryWaiterState
  type WaiterMatchMode (line 121) | type WaiterMatchMode
    method String (line 135) | func (m WaiterMatchMode) String() string {
  constant PathAllWaiterMatch (line 126) | PathAllWaiterMatch  WaiterMatchMode = iota
  constant PathWaiterMatch (line 127) | PathWaiterMatch
  constant PathAnyWaiterMatch (line 128) | PathAnyWaiterMatch
  constant PathListWaiterMatch (line 129) | PathListWaiterMatch
  constant StatusWaiterMatch (line 130) | StatusWaiterMatch
  constant ErrorWaiterMatch (line 131) | ErrorWaiterMatch
  type WaiterAcceptor (line 216) | type WaiterAcceptor struct
    method match (line 226) | func (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request...
  function waiterLogf (line 291) | func waiterLogf(logger aws.Logger, msg string, args ...interface{}) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go
  function resolveCredentials (line 18) | func resolveCredentials(cfg *aws.Config,
  function assumeWebIdentity (line 58) | func assumeWebIdentity(cfg *aws.Config, handlers request.Handlers,
  function resolveCredsFromProfile (line 84) | func resolveCredsFromProfile(cfg *aws.Config,
  constant credSourceEc2Metadata (line 156) | credSourceEc2Metadata  = "Ec2InstanceMetadata"
  constant credSourceEnvironment (line 157) | credSourceEnvironment  = "Environment"
  constant credSourceECSContainer (line 158) | credSourceECSContainer = "EcsContainer"
  function resolveCredsFromSource (line 161) | func resolveCredsFromSource(cfg *aws.Config,
  function credsFromAssumeRole (line 190) | func credsFromAssumeRole(cfg aws.Config,
  type AssumeRoleTokenProviderNotSetError (line 236) | type AssumeRoleTokenProviderNotSetError struct
    method Code (line 239) | func (e AssumeRoleTokenProviderNotSetError) Code() string {
    method Message (line 244) | func (e AssumeRoleTokenProviderNotSetError) Message() string {
    method OrigErr (line 249) | func (e AssumeRoleTokenProviderNotSetError) OrigErr() error {
    method Error (line 254) | func (e AssumeRoleTokenProviderNotSetError) Error() string {
  type credProviderError (line 258) | type credProviderError struct
    method Retrieve (line 262) | func (c credProviderError) Retrieve() (credentials.Value, error) {
    method IsExpired (line 265) | func (c credProviderError) IsExpired() bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport.go
  function getCustomTransport (line 13) | func getCustomTransport() *http.Transport {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.12.go
  function getCustomTransport (line 13) | func getCustomTransport() *http.Transport {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.5.go
  function getCustomTransport (line 13) | func getCustomTransport() *http.Transport {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/custom_transport_go1.6.go
  function getCustomTransport (line 13) | func getCustomTransport() *http.Transport {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
  constant EnvProviderName (line 16) | EnvProviderName = "EnvConfigCredentials"
  type envConfig (line 22) | type envConfig struct
  function loadEnvConfig (line 251) | func loadEnvConfig() (envConfig, error) {
  function loadSharedEnvConfig (line 262) | func loadSharedEnvConfig() (envConfig, error) {
  function envConfigLoad (line 266) | func envConfigLoad(enableSharedConfig bool) (envConfig, error) {
  function setFromEnvVal (line 371) | func setFromEnvVal(dst *string, keys []string) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/session.go
  constant ErrCodeSharedConfig (line 27) | ErrCodeSharedConfig = "SharedConfigErr"
  constant ErrCodeLoadCustomCABundle (line 30) | ErrCodeLoadCustomCABundle = "LoadCustomCABundleError"
  constant ErrCodeLoadClientTLSCert (line 34) | ErrCodeLoadClientTLSCert = "LoadClientTLSCertError"
  type Session (line 55) | type Session struct
    method Copy (line 801) | func (s *Session) Copy(cfgs ...*aws.Config) *Session {
    method ClientConfig (line 816) | func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) cl...
    method resolveEndpoint (line 846) | func (s *Session) resolveEndpoint(service, region string, cfg *aws.Con...
    method ClientConfigNoResolveEndpoint (line 884) | func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) c...
    method logDeprecatedNewSessionError (line 904) | func (s *Session) logDeprecatedNewSessionError(msg string, err error, ...
  function New (line 83) | func New(cfgs ...*aws.Config) *Session {
  function NewSession (line 147) | func NewSession(cfgs ...*aws.Config) (*Session, error) {
  type SharedConfigState (line 157) | type SharedConfigState
  constant SharedConfigStateFromEnv (line 163) | SharedConfigStateFromEnv SharedConfigState = iota
  constant SharedConfigDisable (line 167) | SharedConfigDisable
  constant SharedConfigEnable (line 171) | SharedConfigEnable
  type Options (line 177) | type Options struct
  function NewSessionWithOptions (line 332) | func NewSessionWithOptions(opts Options) (*Session, error) {
  function Must (line 368) | func Must(sess *Session, err error) *Session {
  function wrapEC2IMDSEndpoint (line 378) | func wrapEC2IMDSEndpoint(resolver endpoints.Resolver, endpoint string) e...
  function deprecatedNewSession (line 394) | func deprecatedNewSession(envCfg envConfig, cfgs ...*aws.Config) *Session {
  function enableCSM (line 428) | func enableCSM(handlers *request.Handlers, cfg csmConfig, logger aws.Log...
  function newSession (line 442) | func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*S...
  type csmConfig (line 514) | type csmConfig struct
  function loadCSMConfig (line 523) | func loadCSMConfig(envCfg envConfig, cfgFiles []string) (csmConfig, erro...
  function setTLSOptions (line 554) | func setTLSOptions(opts *Options, cfg *aws.Config, envCfg envConfig, sha...
  function getHTTPTransport (line 606) | func getHTTPTransport(client *http.Client) (*http.Transport, error) {
  function loadCustomCABundle (line 626) | func loadCustomCABundle(client *http.Client, bundle io.Reader) error {
  function loadCertPool (line 647) | func loadCertPool(r io.Reader) (*x509.CertPool, error) {
  function loadClientTLSCert (line 663) | func loadClientTLSCert(client *http.Client, certFile, keyFile io.Reader)...
  function mergeConfigSrcs (line 701) | func mergeConfigSrcs(cfg, userCfg *aws.Config,
  function mergeSTSRegionalEndpointConfig (line 769) | func mergeSTSRegionalEndpointConfig(cfg *aws.Config, values []endpoints....
  function mergeS3UsEast1RegionalEndpointConfig (line 778) | func mergeS3UsEast1RegionalEndpointConfig(cfg *aws.Config, values []endp...
  function initHandlers (line 787) | func initHandlers(s *Session) {
  constant ec2MetadataServiceID (line 844) | ec2MetadataServiceID = "ec2metadata"

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
  constant accessKeyIDKey (line 15) | accessKeyIDKey  = `aws_access_key_id`
  constant secretAccessKey (line 16) | secretAccessKey = `aws_secret_access_key`
  constant sessionTokenKey (line 17) | sessionTokenKey = `aws_session_token`
  constant roleArnKey (line 20) | roleArnKey             = `role_arn`
  constant sourceProfileKey (line 21) | sourceProfileKey       = `source_profile`
  constant credentialSourceKey (line 22) | credentialSourceKey    = `credential_source`
  constant externalIDKey (line 23) | externalIDKey          = `external_id`
  constant mfaSerialKey (line 24) | mfaSerialKey           = `mfa_serial`
  constant roleSessionNameKey (line 25) | roleSessionNameKey     = `role_session_name`
  constant roleDurationSecondsKey (line 26) | roleDurationSecondsKey = "duration_seconds"
  constant csmEnabledKey (line 29) | csmEnabledKey  = `csm_enabled`
  constant csmHostKey (line 30) | csmHostKey     = `csm_host`
  constant csmPortKey (line 31) | csmPortKey     = `csm_port`
  constant csmClientIDKey (line 32) | csmClientIDKey = `csm_client_id`
  constant regionKey (line 35) | regionKey = `region`
  constant customCABundleKey (line 38) | customCABundleKey = `ca_bundle`
  constant enableEndpointDiscoveryKey (line 41) | enableEndpointDiscoveryKey = `endpoint_discovery_enabled`
  constant credentialProcessKey (line 44) | credentialProcessKey = `credential_process`
  constant webIdentityTokenFileKey (line 47) | webIdentityTokenFileKey = `web_identity_token_file`
  constant stsRegionalEndpointSharedKey (line 50) | stsRegionalEndpointSharedKey = `sts_regional_endpoints`
  constant s3UsEast1RegionalSharedKey (line 53) | s3UsEast1RegionalSharedKey = `s3_us_east_1_regional_endpoint`
  constant DefaultSharedConfigProfile (line 58) | DefaultSharedConfigProfile = `default`
  constant s3UseARNRegionKey (line 61) | s3UseARNRegionKey = "s3_use_arn_region"
  type sharedConfig (line 65) | type sharedConfig struct
    method setFromIniFiles (line 191) | func (cfg *sharedConfig) setFromIniFiles(profiles map[string]struct{},...
    method setFromIniFile (line 272) | func (cfg *sharedConfig) setFromIniFile(profile string, file sharedCon...
    method validateCredentialsRequireARN (line 345) | func (cfg *sharedConfig) validateCredentialsRequireARN(profile string)...
    method validateCredentialType (line 367) | func (cfg *sharedConfig) validateCredentialType() error {
    method hasCredentials (line 381) | func (cfg *sharedConfig) hasCredentials() bool {
    method clearCredentialOptions (line 395) | func (cfg *sharedConfig) clearCredentialOptions() {
    method clearAssumeRoleOptions (line 402) | func (cfg *sharedConfig) clearAssumeRoleOptions() {
  type sharedConfigFile (line 136) | type sharedConfigFile struct
  function loadSharedConfig (line 152) | func loadSharedConfig(profile string, filenames []string, exOpts bool) (...
  function loadSharedConfigIniFiles (line 171) | func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, e...
  function oneOrNone (line 410) | func oneOrNone(bs ...bool) bool {
  function updateString (line 427) | func updateString(dst *string, section ini.Section, key string) {
  function updateBool (line 436) | func updateBool(dst *bool, section ini.Section, key string) {
  function updateBoolPtr (line 445) | func updateBoolPtr(dst **bool, section ini.Section, key string) {
  type SharedConfigLoadError (line 454) | type SharedConfigLoadError struct
    method Code (line 460) | func (e SharedConfigLoadError) Code() string {
    method Message (line 465) | func (e SharedConfigLoadError) Message() string {
    method OrigErr (line 470) | func (e SharedConfigLoadError) OrigErr() error {
    method Error (line 475) | func (e SharedConfigLoadError) Error() string {
  type SharedConfigProfileNotExistsError (line 481) | type SharedConfigProfileNotExistsError struct
    method Code (line 487) | func (e SharedConfigProfileNotExistsError) Code() string {
    method Message (line 492) | func (e SharedConfigProfileNotExistsError) Message() string {
    method OrigErr (line 497) | func (e SharedConfigProfileNotExistsError) OrigErr() error {
    method Error (line 502) | func (e SharedConfigProfileNotExistsError) Error() string {
  type SharedConfigAssumeRoleError (line 509) | type SharedConfigAssumeRoleError struct
    method Code (line 515) | func (e SharedConfigAssumeRoleError) Code() string {
    method Message (line 520) | func (e SharedConfigAssumeRoleError) Message() string {
    method OrigErr (line 528) | func (e SharedConfigAssumeRoleError) OrigErr() error {
    method Error (line 533) | func (e SharedConfigAssumeRoleError) Error() string {
  type CredentialRequiresARNError (line 539) | type CredentialRequiresARNError struct
    method Code (line 548) | func (e CredentialRequiresARNError) Code() string {
    method Message (line 553) | func (e CredentialRequiresARNError) Message() string {
    method OrigErr (line 561) | func (e CredentialRequiresARNError) OrigErr() error {
    method Error (line 566) | func (e CredentialRequiresARNError) Error() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go
  type rules (line 9) | type rules
    method IsValid (line 19) | func (r rules) IsValid(value string) bool {
  type rule (line 13) | type rule interface
  type mapRule (line 29) | type mapRule
    method IsValid (line 32) | func (m mapRule) IsValid(value string) bool {
  type whitelist (line 38) | type whitelist struct
    method IsValid (line 43) | func (w whitelist) IsValid(value string) bool {
  type blacklist (line 48) | type blacklist struct
    method IsValid (line 53) | func (b blacklist) IsValid(value string) bool {
  type patterns (line 57) | type patterns
    method IsValid (line 61) | func (p patterns) IsValid(value string) bool {
  type inclusiveRules (line 71) | type inclusiveRules
    method IsValid (line 74) | func (r inclusiveRules) IsValid(value string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go
  function WithUnsignedPayload (line 5) | func WithUnsignedPayload(v4 *Signer) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/request_context_go1.5.go
  function requestContext (line 11) | func requestContext(r *http.Request) aws.Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/request_context_go1.7.go
  function requestContext (line 11) | func requestContext(r *http.Request) aws.Context {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/stream.go
  type credentialValueProvider (line 11) | type credentialValueProvider interface
  type StreamSigner (line 16) | type StreamSigner struct
    method GetSignature (line 36) | func (s *StreamSigner) GetSignature(headers, payload []byte, date time...
  function NewStreamSigner (line 26) | func NewStreamSigner(region, service string, seedSignature []byte, crede...
  function buildEventStreamStringToSign (line 54) | func buildEventStreamStringToSign(headers, payload, prevSig []byte, scop...

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go
  function getURIPath (line 10) | func getURIPath(u *url.URL) string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
  constant authorizationHeader (line 79) | authorizationHeader     = "Authorization"
  constant authHeaderSignatureElem (line 80) | authHeaderSignatureElem = "Signature="
  constant signatureQueryKey (line 81) | signatureQueryKey       = "X-Amz-Signature"
  constant authHeaderPrefix (line 83) | authHeaderPrefix = "AWS4-HMAC-SHA256"
  constant timeFormat (line 84) | timeFormat       = "20060102T150405Z"
  constant shortTimeFormat (line 85) | shortTimeFormat  = "20060102"
  constant awsV4Request (line 86) | awsV4Request     = "aws4_request"
  constant emptyStringSHA256 (line 89) | emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca49...
  type Signer (line 159) | type Signer struct
    method Sign (line 276) | func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, re...
    method Presign (line 310) | func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service,...
    method signWithBody (line 314) | func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, ser...
    method logSigningInfo (line 504) | func (v4 *Signer) logSigningInfo(ctx *signingCtx) {
  function NewSigner (line 213) | func NewSigner(credentials *credentials.Credentials, options ...func(*Si...
  type signingCtx (line 225) | type signingCtx struct
    method sanitizeHostForHeader (line 375) | func (ctx *signingCtx) sanitizeHostForHeader() {
    method handlePresignRemoval (line 379) | func (ctx *signingCtx) handlePresignRemoval() {
    method assignAmzQueryValues (line 393) | func (ctx *signingCtx) assignAmzQueryValues() {
    method build (line 513) | func (ctx *signingCtx) build(disableHeaderHoisting bool) error {
    method buildTime (line 576) | func (ctx *signingCtx) buildTime() {
    method buildCredentialString (line 586) | func (ctx *signingCtx) buildCredentialString() {
    method buildCanonicalHeaders (line 607) | func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Heade...
    method buildCanonicalString (line 653) | func (ctx *signingCtx) buildCanonicalString() {
    method buildStringToSign (line 672) | func (ctx *signingCtx) buildStringToSign() {
    method buildSignature (line 681) | func (ctx *signingCtx) buildSignature() {
    method buildBodyDigest (line 687) | func (ctx *signingCtx) buildBodyDigest() error {
    method isRequestSigned (line 722) | func (ctx *signingCtx) isRequestSigned() bool {
    method removePresign (line 734) | func (ctx *signingCtx) removePresign() {
  function SignSDKRequest (line 427) | func SignSDKRequest(req *request.Request) {
  function BuildNamedHandler (line 432) | func BuildNamedHandler(name string, opts ...func(*Signer)) request.Named...
  function SignSDKRequestWithCurrentTime (line 444) | func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func(...
  constant logSignInfoMsg (line 494) | logSignInfoMsg = `DEBUG: Request Signature:
  constant logSignedURLMsg (line 500) | logSignedURLMsg = `
  function GetSignedRequestSignature (line 554) | func GetSignedRequestSignature(r *http.Request) ([]byte, error) {
  function buildQuery (line 594) | func buildQuery(r rule, header http.Header) (url.Values, http.Header) {
  function hmacSHA256 (line 744) | func hmacSHA256(key []byte, data []byte) []byte {
  function hashSHA256 (line 750) | func hashSHA256(data []byte) []byte {
  function makeSha256Reader (line 756) | func makeSha256Reader(reader io.ReadSeeker) (hashBytes []byte, err error) {
  constant doubleSpace (line 779) | doubleSpace = "  "
  function stripExcessSpaces (line 783) | func stripExcessSpaces(vals []string) {
  function buildSigningScope (line 823) | func buildSigningScope(region, service string, dt time.Time) string {
  function deriveSigningKey (line 832) | func deriveSigningKey(region, service, secretKey string, dt time.Time) [...
  function formatShortTime (line 840) | func formatShortTime(dt time.Time) string {
  function formatTime (line 844) | func formatTime(dt time.Time) string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/types.go
  function ReadSeekCloser (line 23) | func ReadSeekCloser(r io.Reader) ReaderSeekerCloser {
  type ReaderSeekerCloser (line 29) | type ReaderSeekerCloser struct
    method Read (line 56) | func (r ReaderSeekerCloser) Read(p []byte) (int, error) {
    method Seek (line 70) | func (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, err...
    method IsSeeker (line 79) | func (r ReaderSeekerCloser) IsSeeker() bool {
    method HasLen (line 86) | func (r ReaderSeekerCloser) HasLen() (int, bool) {
    method GetLen (line 103) | func (r ReaderSeekerCloser) GetLen() (int64, error) {
    method Close (line 152) | func (r ReaderSeekerCloser) Close() error {
  function IsReaderSeekable (line 36) | func IsReaderSeekable(r io.Reader) bool {
  function SeekerLen (line 117) | func SeekerLen(s io.Seeker) (int64, error) {
  function seekerLen (line 130) | func seekerLen(s io.Seeker) (int64, error) {
  type WriteAtBuffer (line 163) | type WriteAtBuffer struct
    method WriteAt (line 183) | func (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) {
    method Bytes (line 204) | func (b *WriteAtBuffer) Bytes() []byte {
  function NewWriteAtBuffer (line 176) | func NewWriteAtBuffer(buf []byte) *WriteAtBuffer {
  type MultiCloser (line 212) | type MultiCloser
    method Close (line 217) | func (m MultiCloser) Close() error {
  type errors (line 232) | type errors
    method Error (line 234) | func (es errors) Error() string {
  function CopySeekableBody (line 244) | func CopySeekableBody(dst io.Writer, src io.ReadSeeker) (int64, error) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/url.go
  function URLHostname (line 10) | func URLHostname(url *url.URL) string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go
  function URLHostname (line 13) | func URLHostname(url *url.URL) string {
  function stripPort (line 20) | func stripPort(hostport string) string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/version.go
  constant SDKName (line 5) | SDKName = "aws-sdk-go"
  constant SDKVersion (line 8) | SDKVersion = "1.36.30"

FILE: vendor/github.com/aws/aws-sdk-go/internal/context/background_go1.5.go
  type emptyCtx (line 13) | type emptyCtx
    method Deadline (line 15) | func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
    method Done (line 19) | func (*emptyCtx) Done() <-chan struct{} {
    method Err (line 23) | func (*emptyCtx) Err() error {
    method Value (line 27) | func (*emptyCtx) Value(key interface{}) interface{} {
    method String (line 31) | func (e *emptyCtx) String() string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go
  type ASTKind (line 5) | type ASTKind
    method String (line 24) | func (k ASTKind) String() string {
  constant ASTKindNone (line 10) | ASTKindNone = ASTKind(iota)
  constant ASTKindStart (line 11) | ASTKindStart
  constant ASTKindExpr (line 12) | ASTKindExpr
  constant ASTKindEqualExpr (line 13) | ASTKindEqualExpr
  constant ASTKindStatement (line 14) | ASTKindStatement
  constant ASTKindSkipStatement (line 15) | ASTKindSkipStatement
  constant ASTKindExprStatement (line 16) | ASTKindExprStatement
  constant ASTKindSectionStatement (line 17) | ASTKindSectionStatement
  constant ASTKindNestedSectionStatement (line 18) | ASTKindNestedSectionStatement
  constant ASTKindCompletedNestedSectionStatement (line 19) | ASTKindCompletedNestedSectionStatement
  constant ASTKindCommentStatement (line 20) | ASTKindCommentStatement
  constant ASTKindCompletedSectionStatement (line 21) | ASTKindCompletedSectionStatement
  type AST (line 55) | type AST struct
    method AppendChild (line 79) | func (a *AST) AppendChild(child AST) {
    method GetRoot (line 85) | func (a *AST) GetRoot() AST {
    method GetChildren (line 98) | func (a *AST) GetChildren() []AST {
    method SetChildren (line 111) | func (a *AST) SetChildren(children []AST) {
  function newAST (line 62) | func newAST(kind ASTKind, root AST, children ...AST) AST {
  function newASTWithRootToken (line 69) | func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go
  function isComma (line 5) | func isComma(b rune) bool {
  function newCommaToken (line 9) | func newCommaToken() Token {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go
  function isComment (line 5) | func isComment(b []rune) bool {
  function newCommentToken (line 22) | func newCommentToken(b []rune) (Token, int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go
  function newExpression (line 8) | func newExpression(tok Token) AST {
  function newEqualExpr (line 12) | func newEqualExpr(left AST, tok Token) AST {
  function EqualExprKey (line 17) | func EqualExprKey(ast AST) string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go
  function Fuzz (line 9) | func Fuzz(data []byte) int {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go
  function OpenFile (line 12) | func OpenFile(path string) (Sections, error) {
  function Parse (line 24) | func Parse(f io.Reader) (Sections, error) {
  function ParseBytes (line 39) | func ParseBytes(b []byte) (Sections, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go
  constant ErrCodeUnableToReadFile (line 14) | ErrCodeUnableToReadFile = "FailedRead"
  type TokenType (line 18) | type TokenType
    method String (line 20) | func (t TokenType) String() string {
  constant TokenNone (line 45) | TokenNone = TokenType(iota)
  constant TokenLit (line 46) | TokenLit
  constant TokenSep (line 47) | TokenSep
  constant TokenComma (line 48) | TokenComma
  constant TokenOp (line 49) | TokenOp
  constant TokenWS (line 50) | TokenWS
  constant TokenNL (line 51) | TokenNL
  constant TokenComment (line 52) | TokenComment
  type iniLexer (line 55) | type iniLexer struct
    method Tokenize (line 59) | func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) {
    method tokenize (line 68) | func (l *iniLexer) tokenize(b []byte) ([]Token, error) {
  function countTokens (line 106) | func countTokens(runes []rune) int {
  type Token (line 140) | type Token struct
    method Raw (line 158) | func (tok Token) Raw() []rune {
    method Type (line 163) | func (tok Token) Type() TokenType {
  function newToken (line 149) | func newToken(t TokenType, raw []rune, v ValueType) Token {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
  constant InvalidState (line 10) | InvalidState = iota
  constant StatementState (line 12) | StatementState
  constant StatementPrimeState (line 14) | StatementPrimeState
  constant ValueState (line 16) | ValueState
  constant OpenScopeState (line 18) | OpenScopeState
  constant SectionState (line 20) | SectionState
  constant CloseScopeState (line 22) | CloseScopeState
  constant SkipState (line 24) | SkipState
  constant SkipTokenState (line 27) | SkipTokenState
  constant CommentState (line 30) | CommentState
  constant MarkCompleteState (line 33) | MarkCompleteState
  constant TerminalState (line 35) | TerminalState
  function ParseAST (line 116) | func ParseAST(r io.Reader) ([]AST, error) {
  function ParseASTBytes (line 128) | func ParseASTBytes(b []byte) ([]AST, error) {
  function parse (line 138) | func parse(tokens []Token) ([]AST, error) {
  function trimSpaces (line 336) | func trimSpaces(k AST) AST {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go
  function isBoolValue (line 19) | func isBoolValue(b []rune) bool {
  function isLitValue (line 28) | func isLitValue(want, have []rune) bool {
  function isNumberValue (line 48) | func isNumberValue(b []rune) bool {
  function isValid (line 104) | func isValid(b []rune) (bool, int, error) {
  function isValidRune (line 113) | func isValidRune(r rune) bool {
  type ValueType (line 119) | type ValueType
    method String (line 121) | func (v ValueType) String() string {
  constant NoneType (line 140) | NoneType = ValueType(iota)
  constant DecimalType (line 141) | DecimalType
  constant IntegerType (line 142) | IntegerType
  constant StringType (line 143) | StringType
  constant QuotedStringType (line 144) | QuotedStringType
  constant BoolType (line 145) | BoolType
  type Value (line 149) | type Value struct
    method Append (line 198) | func (v *Value) Append(tok Token) {
    method String (line 211) | func (v Value) String() string {
    method IntValue (line 267) | func (v Value) IntValue() int64 {
    method FloatValue (line 272) | func (v Value) FloatValue() float64 {
    method BoolValue (line 277) | func (v Value) BoolValue() bool {
    method StringValue (line 290) | func (v Value) StringValue() string {
  function newValue (line 159) | func newValue(t ValueType, base int, raw []rune) (Value, error) {
  function newLitToken (line 228) | func newLitToken(b []rune) (Token, int, error) {
  function isTrimmable (line 281) | func isTrimmable(r rune) bool {
  function contains (line 302) | func contains(runes []rune, c rune) bool {
  function runeCompare (line 312) | func runeCompare(v1 []rune, v2 []rune) bool {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go
  function isNewline (line 3) | func isNewline(b []rune) bool {
  function newNewlineToken (line 19) | func newNewlineToken(b []rune) (Token, int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go
  constant none (line 10) | none = numberFormat(iota)
  constant binary (line 11) | binary
  constant octal (line 12) | octal
  constant decimal (line 13) | decimal
  constant hex (line 14) | hex
  constant exponent (line 15) | exponent
  type numberFormat (line 18) | type numberFormat
  type numberHelper (line 23) | type numberHelper struct
    method Exists (line 30) | func (b numberHelper) Exists() bool {
    method IsNegative (line 34) | func (b numberHelper) IsNegative() bool {
    method Determine (line 38) | func (b *numberHelper) Determine(c rune) error {
    method CorrectByte (line 67) | func (b numberHelper) CorrectByte(c rune) bool {
    method Base (line 106) | func (b numberHelper) Base() int {
    method String (line 119) | func (b numberHelper) String() string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go
  function isOp (line 12) | func isOp(b []rune) bool {
  function newOpToken (line 27) | func newOpToken(b []rune) (Token, int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go
  constant ErrCodeParseError (line 8) | ErrCodeParseError = "INIParseError"
  type ParseError (line 13) | type ParseError struct
    method Code (line 26) | func (err *ParseError) Code() string {
    method Message (line 31) | func (err *ParseError) Message() string {
    method OrigError (line 37) | func (err *ParseError) OrigError() error {
    method Error (line 41) | func (err *ParseError) Error() string {
  function NewParseError (line 19) | func NewParseError(message string) *ParseError {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go
  type ParseStack (line 11) | type ParseStack struct
    method Pop (line 26) | func (s *ParseStack) Pop() AST {
    method Push (line 32) | func (s *ParseStack) Push(ast AST) {
    method MarkComplete (line 38) | func (s *ParseStack) MarkComplete(ast AST) {
    method List (line 44) | func (s ParseStack) List() []AST {
    method Len (line 49) | func (s *ParseStack) Len() int {
    method String (line 53) | func (s ParseStack) String() string {
  function newParseStack (line 18) | func newParseStack(sizeContainer, sizeList int) ParseStack {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go
  function isSep (line 11) | func isSep(b []rune) bool {
  function newSepToken (line 29) | func newSepToken(b []rune) (Token, int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go
  type skipper (line 12) | type skipper struct
    method ShouldSkip (line 24) | func (s *skipper) ShouldSkip(tok Token) bool {
    method Skip (line 37) | func (s *skipper) Skip() {
    method Continue (line 41) | func (s *skipper) Continue() {
  function newSkipper (line 18) | func newSkipper() skipper {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go
  function newStatement (line 4) | func newStatement() AST {
  function newSectionStatement (line 9) | func newSectionStatement(tok Token) AST {
  function newExprStatement (line 14) | func newExprStatement(ast AST) AST {
  function newCommentStatement (line 23) | func newCommentStatement(tok Token) AST {
  function newCompletedSectionStatement (line 28) | func newCompletedSectionStatement(ast AST) AST {
  function newSkipStatement (line 33) | func newSkipStatement(ast AST) AST {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go
  function getStringValue (line 11) | func getStringValue(b []rune) (int, error) {
  function getBoolValue (line 49) | func getBoolValue(b []rune) (int, error) {
  function getNumericalValue (line 77) | func getNumericalValue(b []rune) (int, int, error) {
  function isDigit (line 153) | func isDigit(b rune) bool {
  function hasExponent (line 157) | func hasExponent(v []rune) bool {
  function isBinaryByte (line 161) | func isBinaryByte(b rune) bool {
  function isOctalByte (line 170) | func isOctalByte(b rune) bool {
  function isHexByte (line 179) | func isHexByte(b rune) bool {
  function getValue (line 187) | func getValue(b []rune) (int, error) {
  function getNegativeNumber (line 217) | func getNegativeNumber(b []rune) int {
  function isEscaped (line 234) | func isEscaped(value []rune, b rune) bool {
  function getEscapedByte (line 252) | func getEscapedByte(b rune) (rune, error) {
  function removeEscapedCharacters (line 269) | func removeEscapedCharacters(b []rune) []rune {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go
  type Visitor (line 10) | type Visitor interface
  type DefaultVisitor (line 20) | type DefaultVisitor struct
    method VisitExpr (line 35) | func (v *DefaultVisitor) VisitExpr(expr AST) error {
    method VisitStatement (line 76) | func (v *DefaultVisitor) VisitStatement(stmt AST) error {
  function NewDefaultVisitor (line 26) | func NewDefaultVisitor() *DefaultVisitor {
  type Sections (line 96) | type Sections struct
    method GetSection (line 102) | func (t Sections) GetSection(p string) (Section, bool) {
    method List (line 112) | func (t Sections) List() []string {
  type values (line 108) | type values
  type Section (line 126) | type Section struct
    method Has (line 132) | func (t Section) Has(k string) bool {
    method ValueType (line 139) | func (t Section) ValueType(k string) (ValueType, bool) {
    method Bool (line 145) | func (t Section) Bool(k string) bool {
    method Int (line 150) | func (t Section) Int(k string) int64 {
    method Float64 (line 155) | func (t Section) Float64(k string) float64 {
    method String (line 160) | func (t Section) String(k string) string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go
  function Walk (line 4) | func Walk(tree []AST, v Visitor) error {

FILE: vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go
  function isWhitespace (line 11) | func isWhitespace(c rune) bool {
  function newWSToken (line 15) | func newWSToken(b []rune) (Token, int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go
  constant Byte (line 5) | Byte int64 = 1
  constant KibiByte (line 7) | KibiByte = Byte * 1024
  constant MebiByte (line 9) | MebiByte = KibiByte * 1024
  constant GibiByte (line 11) | GibiByte = MebiByte * 1024

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go
  constant SeekStart (line 7) | SeekStart   = 0
  constant SeekCurrent (line 8) | SeekCurrent = 1
  constant SeekEnd (line 9) | SeekEnd     = 2

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go
  constant SeekStart (line 9) | SeekStart   = io.SeekStart
  constant SeekCurrent (line 10) | SeekCurrent = io.SeekCurrent
  constant SeekEnd (line 11) | SeekEnd     = io.SeekEnd

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go
  function Round (line 13) | func Round(x float64) float64 {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go
  constant uvone (line 10) | uvone    = 0x3FF0000000000000
  constant mask (line 11) | mask     = 0x7FF
  constant shift (line 12) | shift    = 64 - 11 - 1
  constant bias (line 13) | bias     = 1023
  constant signMask (line 14) | signMask = 1 << 63
  constant fracMask (line 15) | fracMask = 1<<shift - 1
  function Round (line 27) | func Round(x float64) float64 {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go
  type lockedSource (line 10) | type lockedSource struct
    method Int63 (line 15) | func (r *lockedSource) Int63() (n int64) {
    method Seed (line 22) | func (r *lockedSource) Seed(seed int64) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go
  function Read (line 9) | func Read(r *rand.Rand, p []byte) (int, error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go
  function Read (line 8) | func Read(r *rand.Rand, p []byte) (n int, err error) {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
  function PathJoin (line 11) | func PathJoin(elems ...string) string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go
  constant ECSCredsProviderEnvVar (line 6) | ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

FILE: vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go
  function SharedCredentialsFilename (line 16) | func SharedCredentialsFilename() string {
  function SharedConfigFilename (line 27) | func SharedConfigFilename() string {
  function UserHomeDir (line 33) | func UserHomeDir() string {

FILE: vendor/github.com/aws/aws-sdk-go/internal/strings/strings.go
  function HasPrefixFold (line 9) | func HasPrefixFold(s, prefix string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/internal/sync/singleflight/singleflight.go
  type call (line 12) | type call struct
  type Group (line 33) | type Group struct
    method Do (line 51) | func (g *Group) Do(key string, fn func() (interface{}, error)) (v inte...
    method DoChan (line 73) | func (g *Group) DoChan(key string, fn func() (interface{}, error)) <-c...
    method doCall (line 96) | func (g *Group) doCall(c *call, key string, fn func() (interface{}, er...
    method Forget (line 113) | func (g *Group) Forget(key string) {
  type Result (line 40) | type Result struct

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
  function ValidateEndpointHost (line 24) | func ValidateEndpointHost(opName, host string) error {
  function ValidHostLabel (line 75) | func ValidHostLabel(label string) bool {
  function ValidPortNumber (line 94) | func ValidPortNumber(port string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go
  constant HostPrefixHandlerName (line 12) | HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler"
  function NewHostPrefixHandler (line 15) | func NewHostPrefixHandler(prefix string, labelsFn func() map[string]stri...
  type HostPrefixBuilder (line 29) | type HostPrefixBuilder struct
    method Build (line 35) | func (h HostPrefixBuilder) Build(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go
  constant idempotencyTokenFillTag (line 13) | idempotencyTokenFillTag = `idempotencyToken`
  function CanSetIdempotencyToken (line 20) | func CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool {
  function GetIdempotencyToken (line 34) | func GetIdempotencyToken() string {
  function SetIdempotencyToken (line 43) | func SetIdempotencyToken(v reflect.Value) {
  function UUIDVersion4 (line 67) | func UUIDVersion4(u []byte) string {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
  function BuildJSON (line 23) | func BuildJSON(v interface{}) ([]byte, error) {
  function buildAny (line 30) | func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
  function buildStruct (line 75) | func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.Str...
  function buildList (line 152) | func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.Struc...
  type sortedValues (line 168) | type sortedValues
    method Len (line 170) | func (sv sortedValues) Len() int           { return len(sv) }
    method Swap (line 171) | func (sv sortedValues) Swap(i, j int)      { sv[i], sv[j] = sv[j], sv[...
    method Less (line 172) | func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < s...
  function buildMap (line 174) | func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
  function buildScalar (line 196) | func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructT...
  function writeString (line 262) | func writeString(s string, buf *bytes.Buffer) {
  function elemOf (line 291) | func elemOf(value reflect.Value) reflect.Value {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
  function UnmarshalJSONError (line 24) | func UnmarshalJSONError(v interface{}, stream io.Reader) error {
  function UnmarshalJSON (line 42) | func UnmarshalJSON(v interface{}, stream io.Reader) error {
  function UnmarshalJSONCaseInsensitive (line 59) | func UnmarshalJSONCaseInsensitive(v interface{}, stream io.Reader) error {
  type unmarshaler (line 76) | type unmarshaler struct
    method unmarshalAny (line 80) | func (u unmarshaler) unmarshalAny(value reflect.Value, data interface{...
    method unmarshalStruct (line 122) | func (u unmarshaler) unmarshalStruct(value reflect.Value, data interfa...
    method unmarshalList (line 180) | func (u unmarshaler) unmarshalList(value reflect.Value, data interface...
    method unmarshalMap (line 204) | func (u unmarshaler) unmarshalMap(value reflect.Value, data interface{...
    method unmarshalScalar (line 228) | func (u unmarshaler) unmarshalScalar(value reflect.Value, data interfa...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go
  type EscapeMode (line 13) | type EscapeMode
  constant NoEscape (line 17) | NoEscape EscapeMode = iota
  constant Base64Escape (line 18) | Base64Escape
  constant QuotedEscape (line 19) | QuotedEscape
  function EncodeJSONValue (line 26) | func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) {
  function DecodeJSONValue (line 48) | func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go
  type PayloadUnmarshaler (line 15) | type PayloadUnmarshaler interface
  type HandlerPayloadUnmarshal (line 22) | type HandlerPayloadUnmarshal struct
    method UnmarshalPayload (line 29) | func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v inter...
  type PayloadMarshaler (line 47) | type PayloadMarshaler interface
  type HandlerPayloadMarshal (line 54) | type HandlerPayloadMarshal struct
    method MarshalPayload (line 61) | func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/protocol.go
  type RequireHTTPMinProtocol (line 13) | type RequireHTTPMinProtocol struct
    method Handler (line 20) | func (p RequireHTTPMinProtocol) Handler(r *request.Request) {
  constant ErrCodeMinimumHTTPProtocolError (line 36) | ErrCodeMinimumHTTPProtocolError = "MinimumHTTPProtocolError"
  function newMinHTTPProtoError (line 38) | func newMinHTTPProtoError(major, minor int, r *request.Request) error {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go
  function Build (line 18) | func Build(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
  function Parse (line 18) | func Parse(body url.Values, i interface{}, isEC2 bool) error {
  function elemOf (line 23) | func elemOf(value reflect.Value) reflect.Value {
  type queryParser (line 30) | type queryParser struct
    method parseValue (line 34) | func (q *queryParser) parseValue(v url.Values, value reflect.Value, pr...
    method parseStruct (line 66) | func (q *queryParser) parseStruct(v url.Values, value reflect.Value, p...
    method parseList (line 117) | func (q *queryParser) parseList(v url.Values, value reflect.Value, pre...
    method parseMap (line 151) | func (q *queryParser) parseMap(v url.Values, value reflect.Value, pref...
    method parseScalar (line 216) | func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name ...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
  function Unmarshal (line 20) | func Unmarshal(r *request.Request) {
  function UnmarshalMeta (line 37) | func UnmarshalMeta(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
  type xmlErrorResponse (line 15) | type xmlErrorResponse struct
  type xmlResponseError (line 21) | type xmlResponseError struct
    method UnmarshalXML (line 25) | func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.Star...
  function UnmarshalError (line 44) | func UnmarshalError(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
  function init (line 30) | func init() {
  function Build (line 47) | func Build(r *request.Request) {
  function BuildAsGET (line 57) | func BuildAsGET(r *request.Request) {
  function buildLocationElements (line 65) | func buildLocationElements(r *request.Request, v reflect.Value, buildGET...
  function buildBody (line 135) | func buildBody(r *request.Request, v reflect.Value) {
  function buildHeader (line 160) | func buildHeader(header *http.Header, v reflect.Value, name string, tag ...
  function buildHeaderMap (line 176) | func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.St...
  function buildURI (line 194) | func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.Stru...
  function buildQueryString (line 211) | func buildQueryString(query url.Values, v reflect.Value, name string, ta...
  function cleanPath (line 240) | func cleanPath(u *url.URL) {
  function EscapePath (line 254) | func EscapePath(path string, encodeSep bool) string {
  function convertType (line 267) | func convertType(v reflect.Value, tag reflect.StructTag) (str string, er...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
  function PayloadMember (line 6) | func PayloadMember(i interface{}) interface{} {
  function PayloadType (line 32) | func PayloadType(i interface{}) string {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
  function Unmarshal (line 29) | func Unmarshal(r *request.Request) {
  function UnmarshalMeta (line 39) | func UnmarshalMeta(r *request.Request) {
  function UnmarshalResponse (line 55) | func UnmarshalResponse(resp *http.Response, data interface{}, lowerCaseH...
  function unmarshalBody (line 60) | func unmarshalBody(r *request.Request, v reflect.Value) error {
  function unmarshalLocationElements (line 116) | func unmarshalLocationElements(resp *http.Response, v reflect.Value, low...
  function unmarshalStatusCode (line 152) | func unmarshalStatusCode(v reflect.Value, statusCode int) {
  function unmarshalHeaderMap (line 164) | func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix str...
  function unmarshalHeader (line 189) | func unmarshalHeader(v reflect.Value, header string, tag reflect.StructT...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
  constant RFC822TimeFormatName (line 13) | RFC822TimeFormatName  = "rfc822"
  constant ISO8601TimeFormatName (line 14) | ISO8601TimeFormatName = "iso8601"
  constant UnixTimeFormatName (line 15) | UnixTimeFormatName    = "unixTimestamp"
  constant RFC822TimeFormat (line 22) | RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT"
  constant RFC822OutputTimeFormat (line 25) | RFC822OutputTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
  constant ISO8601TimeFormat (line 28) | ISO8601TimeFormat = "2006-01-02T15:04:05.999999999Z"
  constant ISO8601OutputTimeFormat (line 31) | ISO8601OutputTimeFormat = "2006-01-02T15:04:05.999999999Z"
  function IsKnownTimestampFormat (line 36) | func IsKnownTimestampFormat(name string) bool {
  function FormatTime (line 50) | func FormatTime(name string, t time.Time) string {
  function ParseTime (line 68) | func ParseTime(formatName, value string) (time.Time, error) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go
  function UnmarshalDiscardBody (line 14) | func UnmarshalDiscardBody(r *request.Request) {
  type ResponseMetadata (line 24) | type ResponseMetadata struct

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal_error.go
  type UnmarshalErrorHandler (line 12) | type UnmarshalErrorHandler struct
    method NamedHandler (line 35) | func (u *UnmarshalErrorHandler) NamedHandler() request.NamedHandler {
    method UnmarshalError (line 45) | func (u *UnmarshalErrorHandler) UnmarshalError(r *request.Request) {
  type ErrorUnmarshaler (line 18) | type ErrorUnmarshaler interface
  function NewUnmarshalErrorHandler (line 24) | func NewUnmarshalErrorHandler(unmarshaler ErrorUnmarshaler) *UnmarshalEr...
  constant UnmarshalErrorHandlerName (line 31) | UnmarshalErrorHandlerName = "awssdk.protocol.UnmarshalError"

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
  function BuildXML (line 19) | func BuildXML(params interface{}, e *xml.Encoder) error {
  function buildXML (line 23) | func buildXML(params interface{}, e *xml.Encoder, sorted bool) error {
  function elemOf (line 38) | func elemOf(value reflect.Value) reflect.Value {
  type xmlBuilder (line 46) | type xmlBuilder struct
    method buildValue (line 56) | func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode,...
    method buildStruct (line 101) | func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode...
    method buildList (line 180) | func (b *xmlBuilder) buildList(value reflect.Value, current *XMLNode, ...
    method buildMap (line 222) | func (b *xmlBuilder) buildMap(value reflect.Value, current *XMLNode, t...
    method buildScalar (line 276) | func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go
  type xmlAttrSlice (line 8) | type xmlAttrSlice
    method Len (line 10) | func (x xmlAttrSlice) Len() int {
    method Less (line 14) | func (x xmlAttrSlice) Less(i, j int) bool {
    method Swap (line 30) | func (x xmlAttrSlice) Swap(i, j int) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
  function UnmarshalXMLError (line 22) | func UnmarshalXMLError(v interface{}, stream io.Reader) error {
  function UnmarshalXML (line 38) | func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error {
  function parse (line 66) | func parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {
  function parseStruct (line 115) | func parseStruct(r reflect.Value, node *XMLNode, tag reflect.StructTag) ...
  function parseList (line 170) | func parseList(r reflect.Value, node *XMLNode, tag reflect.StructTag) er...
  function parseMap (line 209) | func parseMap(r reflect.Value, node *XMLNode, tag reflect.StructTag) err...
  function parseMapEntry (line 226) | func parseMap
Copy disabled (too large) Download .json
Condensed preview — 2890 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (31,536K chars).
[
  {
    "path": ".circleci/config.yml",
    "chars": 2686,
    "preview": "version: 2\njobs:\n  build:\n    working_directory: /go/src/github.com/mozilla/tls-observatory\n    docker:\n      - image: g"
  },
  {
    "path": ".gitignore",
    "chars": 397,
    "preview": "# 3rd party\nsrc/github.com/*\nsrc/code.google.com/*\n\n# configuration\nconf/api_prod.cfg\n\n# local builds\nbin/\ntmp/\ntmppkg/\n"
  },
  {
    "path": ".gitmodules",
    "chars": 210,
    "preview": "[submodule \"truststores\"]\n\tpath = truststores\n\turl = https://github.com/kirei/catt.git\n\tbranch = master\n[submodule \"ciph"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 691,
    "preview": "# Community Participation Guidelines\n\nThis repository is governed by Mozilla's code of conduct and etiquette guidelines."
  },
  {
    "path": "Dockerfile",
    "chars": 2229,
    "preview": "# docker build --force-rm --squash -t {REPO}/{NAME}:{TAG} .\n# --squash requires the expermimental flag to be set.\n# http"
  },
  {
    "path": "LICENSE",
    "chars": 15921,
    "preview": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that"
  },
  {
    "path": "Makefile",
    "chars": 2756,
    "preview": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not di"
  },
  {
    "path": "PULL_REQUEST_TEMPLATE.md",
    "chars": 988,
    "preview": "<Describe your changes here, add references to any issue>\n\n## Checklist\n* [ ] Run `make`, `gofmt` and `golint` your code"
  },
  {
    "path": "README.md",
    "chars": 26358,
    "preview": "# Mozilla TLS Observatory\n\n[![What's Deployed](https://img.shields.io/badge/whatsdeployed-stage,prod-green.svg)](https:/"
  },
  {
    "path": "certificate/certificate.go",
    "chars": 19749,
    "preview": "package certificate\n\nimport (\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/md5\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n"
  },
  {
    "path": "certificate/certificate_test.go",
    "chars": 7389,
    "preview": "package certificate\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"math/big\"\n\t\"testing\"\n)\n\nfunc TestGetHexASN1Serial(t *test"
  },
  {
    "path": "certificate/constraints/constraints.go",
    "chars": 4109,
    "preview": "package certconstraints\n\nimport (\n\t// constraintsx509 \"constraintcrypto/x509\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n)\n\nty"
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/cert_pool.go",
    "chars": 3197,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/example_test.go",
    "chars": 5356,
    "preview": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt.go",
    "chars": 6656,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pem_decrypt_test.go",
    "chars": 8953,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pkcs1.go",
    "chars": 2959,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pkcs8.go",
    "chars": 1592,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pkcs8_test.go",
    "chars": 2526,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/pkix/pkix.go",
    "chars": 6065,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root.go",
    "chars": 432,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_bsd.go",
    "chars": 472,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_cgo_darwin.go",
    "chars": 5412,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_darwin.go",
    "chars": 704,
    "preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_darwin_arm_gen.go",
    "chars": 4502,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_darwin_armx.go",
    "chars": 297982,
    "preview": "// Created by root_darwin_arm_gen --output root_darwin_armx.go; DO NOT EDIT\n\n// Copyright 2015 The Go Authors. All right"
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_darwin_test.go",
    "chars": 1565,
    "preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_linux.go",
    "chars": 481,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_nacl.go",
    "chars": 256,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_nocgo_darwin.go",
    "chars": 264,
    "preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_plan9.go",
    "chars": 800,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_solaris.go",
    "chars": 419,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_unix.go",
    "chars": 1426,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/root_windows.go",
    "chars": 7668,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/sec1.go",
    "chars": 3433,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/sec1_test.go",
    "chars": 2363,
    "preview": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/sha2_windows_test.go",
    "chars": 463,
    "preview": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/verify.go",
    "chars": 14504,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/verify_test.go",
    "chars": 51552,
    "preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/x509.go",
    "chars": 66390,
    "preview": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/x509_test.go",
    "chars": 56177,
    "preview": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/constraints/vendor/constraintcrypto/x509/x509_test_import.go",
    "chars": 1622,
    "preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
  },
  {
    "path": "certificate/paths.go",
    "chars": 1805,
    "preview": "package certificate\n\nimport \"fmt\"\n\n// Paths represent the chain of trust between a given certificate\n// and one of multi"
  },
  {
    "path": "conf/api.cfg",
    "chars": 808,
    "preview": "[General]\n# disable by default, this can be overridden with the env variable\n# export TLSOBS_API_ENABLE=1\nEnable        "
  },
  {
    "path": "conf/runner.yaml",
    "chars": 26054,
    "preview": "runs:\n    # Cloud Services\n    - targets:\n        # absearch\n        - search.services.mozilla.com\n\n        # AMO\n      "
  },
  {
    "path": "conf/runner_env.sh",
    "chars": 302,
    "preview": "export TLSOBS_RUNNER_SMTP_HOST=\"email-smtp.us-east-1.amazonaws.com\"\nexport TLSOBS_RUNNER_SMTP_PORT=587\nexport TLSOBS_RUN"
  },
  {
    "path": "conf/scanner.cfg",
    "chars": 1242,
    "preview": "[General]\n# disable by default, this can be overridden with the env variable\n# export TLSOBS_SCANNER_ENABLE=on\nEnable   "
  },
  {
    "path": "conf/truststores/CA_AOSP.crt",
    "chars": 72865,
    "preview": "# Operating CA: DigiCert\n# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust\n# Subject: CN=Baltimore CyberT"
  },
  {
    "path": "conf/truststores/CA_apple_10.10.0.crt",
    "chars": 336983,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\nETAPBgNVBAcTCEJ1ZGFwZXN0MSc"
  },
  {
    "path": "conf/truststores/CA_apple_10.8.5.crt",
    "chars": 312194,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\nETAPBgNVBAcTCEJ1ZGFwZXN0MSc"
  },
  {
    "path": "conf/truststores/CA_apple_10.9.5.crt",
    "chars": 350132,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\nETAPBgNVBAcTCEJ1ZGFwZXN0MSc"
  },
  {
    "path": "conf/truststores/CA_apple_latest.crt",
    "chars": 310795,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\nETAPBgNVBAcTCEJ1ZGFwZXN0MSc"
  },
  {
    "path": "conf/truststores/CA_java.crt",
    "chars": 111552,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU\nMBIGA1UEChMLQWRkVHJ1c3QgQUI"
  },
  {
    "path": "conf/truststores/CA_microsoft.crt",
    "chars": 685226,
    "preview": "PEM Info\n-----BEGIN CERTIFICATE-----\nMIIFzDCCA7SgAwIBAgIEU/TqiTANBgkqhkiG9w0BAQsFADCBizELMAkGA1UEBhMC\nQVQxSDBGBgNVBAoMP0"
  },
  {
    "path": "conf/truststores/CA_mozilla_nss.crt",
    "chars": 215670,
    "preview": "PEM Info\n-----BEGIN CERTIFICATE-----\nMIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn\nMCUGA1UEChMeQUMgQ2"
  },
  {
    "path": "conf/truststores/CA_ubuntu_12.04.crt",
    "chars": 255550,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB\nVDFIMEYGA1UECgw/QS1UcnVzdCB"
  },
  {
    "path": "conf/truststores/CA_ubuntu_latest.crt",
    "chars": 274340,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE\nAwwJQUNDVlJBSVoxMRAwDgYDVQQ"
  },
  {
    "path": "config/config.go",
    "chars": 2263,
    "preview": "package config\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"gopkg.in/gcfg.v1\"\n)\n\ntype Config struct {\n\tGeneral struct {\n\t\tEnable   "
  },
  {
    "path": "connection/connection.go",
    "chars": 3968,
    "preview": "package connection\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/mozilla/tls-observatory/consta"
  },
  {
    "path": "connection/retriever.go",
    "chars": 1717,
    "preview": "package connection\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"math/rand\"\n\t\"net\"\n\t\"os/exec\"\n\t\"time\"\n)\n\ntype NoTL"
  },
  {
    "path": "constants/ciphersuites.go",
    "chars": 42239,
    "preview": "package constants\n\ntype CipherSuite struct {\n\tIANAName     string     `json:\"iana_name\"`\n\tGnuTLSName   string     `json:"
  },
  {
    "path": "constants/curves.go",
    "chars": 3419,
    "preview": "package constants\n\n// Curve is the definition of an elliptic curve\ntype Curve struct {\n\tName        string `json:\"iana_n"
  },
  {
    "path": "constants/protocols.go",
    "chars": 391,
    "preview": "package constants\n\ntype Protocol struct {\n\tOpenSSLName string `json:\"openssl_name\"`\n\tCode        int    `json:\"code\"`\n}\n"
  },
  {
    "path": "database/certificate.go",
    "chars": 29183,
    "preview": "package database\n\nimport (\n\t\"crypto/x509\"\n\t\"database/sql\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github"
  },
  {
    "path": "database/database.go",
    "chars": 5547,
    "preview": "package database\n\nimport (\n\t\"database/sql\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"time\"\n\n\tlru \"github.com/hashicorp/golang"
  },
  {
    "path": "database/messaging.go",
    "chars": 3754,
    "preview": "package database\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/lib/pq\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"g"
  },
  {
    "path": "database/migrations/1.3.3.sql",
    "chars": 332,
    "preview": "ALTER TABLE certificates ADD COLUMN x509_extendedKeyUsageOID jsonb NULL;\nUPDATE certificates SET x509_extendedkeyusageoi"
  },
  {
    "path": "database/migrations/1.3.5.sql",
    "chars": 140,
    "preview": "ALTER TABLE certificates RENAME COLUMN sha256_subject_spki TO sha256_spki;\nALTER TABLE certificates ADD COLUMN sha256_su"
  },
  {
    "path": "database/schema.sql",
    "chars": 7225,
    "preview": "CREATE TABLE certificates(\n    id                          serial primary key,\n    sha1_fingerprint            varchar N"
  },
  {
    "path": "database/stats.go",
    "chars": 5558,
    "preview": "package database\n\nimport \"time\"\n\n// Statistics is a set of counters maintained in the database\ntype Statistics struct {\n"
  },
  {
    "path": "go.mod",
    "chars": 1113,
    "preview": "module github.com/mozilla/tls-observatory\n\ngo 1.15\n\nrequire (\n\tgithub.com/aws/aws-sdk-go v1.36.30\n\tgithub.com/fatih/colo"
  },
  {
    "path": "go.sum",
    "chars": 72100,
    "preview": "bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M=\ncloud.google.com/go v0.26."
  },
  {
    "path": "kubernetes/README.md",
    "chars": 1441,
    "preview": "WARNING: It's possible for these files to become out of date, as we don't expect contributors to check these files still"
  },
  {
    "path": "kubernetes/deployment.yaml",
    "chars": 2007,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  labels:\n    service: db\n  name: postgres\nspec:\n  replicas: 1\n  selector"
  },
  {
    "path": "kubernetes/setup_db.yaml",
    "chars": 593,
    "preview": "apiVersion: batch/v1\nkind: Job\nmetadata:\n  name: setup-db\nspec:\n  template:\n    metadata:\n      name: setup-db\n    spec:"
  },
  {
    "path": "logger/logger.go",
    "chars": 1118,
    "preview": "package logger\n\nimport log \"github.com/sirupsen/logrus\"\n\nvar logger = init_logger()\n\nfunc init_logger() *log.Logger {\n\n\t"
  },
  {
    "path": "metrics/metrics.go",
    "chars": 2395,
    "preview": "package metrics\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"github.com"
  },
  {
    "path": "static/.eslintrc.js",
    "chars": 138,
    "preview": "module.exports = {\n    \"env\": {\n        \"browser\": true\n    },\n    \"extends\": \"fxa\",\n    rules: {\n        'indent': ['er"
  },
  {
    "path": "static/certsplainer.css",
    "chars": 238,
    "preview": "body {\n    width: 2500px;\n    height: 1400px;\n}\n\n#main {\n    float: left;\n    width: 40%;\n    height: 100%;\n}\n\n#side {\n "
  },
  {
    "path": "static/certsplainer.html",
    "chars": 3816,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n    <link rel=\"stylesheet\" t"
  },
  {
    "path": "static/certsplainer.js",
    "chars": 16230,
    "preview": "/*jshint esnext: true */\n\nvar logs = undefined;\n\nwindow.onload = function() {\n    document.form.addEventListener('change"
  },
  {
    "path": "static/custom.css",
    "chars": 146,
    "preview": "aside {\n      background: red;\n      margin: 1em 0;\n      padding: 0.3em 1em;\n      border-radius: 3px;\n      color: #ff"
  },
  {
    "path": "static/ev-checker.html",
    "chars": 1128,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n  <link rel=\"stylesheet\" type="
  },
  {
    "path": "static/ev-checker.js",
    "chars": 3813,
    "preview": "window.onload = function() {\n    document.form.addEventListener(\"submit\", send, false);\n    document.form.addEventListen"
  },
  {
    "path": "static/index.html",
    "chars": 1633,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n    <link rel=\"stylesheet\" t"
  },
  {
    "path": "static/style.css",
    "chars": 17291,
    "preview": "/*!\nPure v0.6.0\nCopyright 2014 Yahoo! Inc. All rights reserved.\nLicensed under the BSD License.\nhttps://github.com/yahoo"
  },
  {
    "path": "tlsobs/main.go",
    "chars": 8832,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\t\"text/tabwriter"
  },
  {
    "path": "tlsobs-api/handlers.go",
    "chars": 20416,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/json\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"pa"
  },
  {
    "path": "tlsobs-api/helpers.go",
    "chars": 722,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"time\"\n)\n\nfunc init() {\n\trand.Seed(time.Now().UnixNano())"
  },
  {
    "path": "tlsobs-api/insert_test.go",
    "chars": 4817,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/mozilla/tls-observato"
  },
  {
    "path": "tlsobs-api/main.go",
    "chars": 1956,
    "preview": "package main\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/mozilla/tls-observatory/config\""
  },
  {
    "path": "tlsobs-api/middleware.go",
    "chars": 2692,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"net/http\"\n\n\tpg \"github.com/mozilla/tls-observatory/database\"\n)\n\n// Middleware"
  },
  {
    "path": "tlsobs-api/router.go",
    "chars": 2252,
    "preview": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/mozilla/tls-observatory/config\"\n)\n\nfunc NewRo"
  },
  {
    "path": "tlsobs-runner/assertions.go",
    "chars": 3810,
    "preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n   License, v. 2.0. If a copy of the MPL was not "
  },
  {
    "path": "tlsobs-runner/main.go",
    "chars": 7166,
    "preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n   License, v. 2.0. If a copy of the MPL was not "
  },
  {
    "path": "tlsobs-runner/main_test.go",
    "chars": 4472,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"testing\"\n)\n\n// ensure environment variables override smtp & slack aut"
  },
  {
    "path": "tlsobs-runner/notifications.go",
    "chars": 3087,
    "preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n   License, v. 2.0. If a copy of the MPL was not "
  },
  {
    "path": "tlsobs-scanner/analyser.go",
    "chars": 18545,
    "preview": "package main\n\nimport (\n\t// stdlib packages\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/pem\"\n\t\"io/ioutil\"\n\n\t\"github.com/"
  },
  {
    "path": "tlsobs-scanner/main.go",
    "chars": 9112,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github"
  },
  {
    "path": "tlsobs-scanner/retriever.go",
    "chars": 2021,
    "preview": "package main\n\nimport (\n\t// stdlib packages\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"str"
  },
  {
    "path": "tlsobs-scanner/workerconfig.go",
    "chars": 643,
    "preview": "package main\n\nimport (\n\t_ \"github.com/mozilla/tls-observatory/worker/awsCertlint\"\n\t_ \"github.com/mozilla/tls-observatory"
  },
  {
    "path": "tools/MakeMarkdownTOC.rb",
    "chars": 379,
    "preview": "#!/usr/bin/env ruby\n\nFile.open(\"README.md\", 'r') do |f|\n  f.each_line do |line|\n    forbidden_words = ['Table of content"
  },
  {
    "path": "tools/aws_create_env.sh",
    "chars": 6900,
    "preview": "#!/usr/bin/env bash\n\n# requires: pip install awscli awsebcli\n\n# uncomment to debug\n#set -x\n\nfail() {\n    echo configurat"
  },
  {
    "path": "tools/ciphersuites_names.json",
    "chars": 54503,
    "preview": "{\n  \"0x00,0x00\": {\n    \"GnuTLS\": \"\", \n    \"NSS\": \"TLS_NULL_WITH_NULL_NULL\", \n    \"IANA\": \"TLS_NULL_WITH_NULL_NULL\", \n   "
  },
  {
    "path": "tools/ebs-api-options.json",
    "chars": 1110,
    "preview": "[\n    {\n        \"Namespace\": \"aws:elasticbeanstalk:application:environment\", \n        \"OptionName\": \"TLSOBS_API_ENABLE\","
  },
  {
    "path": "tools/ebs-worker-options.json",
    "chars": 2142,
    "preview": "[\n    {\n        \"Namespace\": \"aws:elasticbeanstalk:application:environment\", \n        \"OptionName\": \"TLSOBS_SCANNER_ENAB"
  },
  {
    "path": "tools/extractCiphersuites.go",
    "chars": 3922,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nty"
  },
  {
    "path": "tools/fixDupCerts.go",
    "chars": 2251,
    "preview": "package main\n\nimport (\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/mozilla/tls-observatory/database\"\n)\n\nfunc main() {\n\tdb, err := databas"
  },
  {
    "path": "tools/fixExtensions.go",
    "chars": 3490,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/lib/pq\"\n\t\"github.c"
  },
  {
    "path": "tools/fixKeyInfo.go",
    "chars": 3181,
    "preview": "package main\n\nimport (\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\""
  },
  {
    "path": "tools/fixSHA256SubjectSPKI.go",
    "chars": 2443,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/mozil"
  },
  {
    "path": "tools/fixSerial.go",
    "chars": 1620,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/mozilla/t"
  },
  {
    "path": "tools/fixserialnumber.go",
    "chars": 4364,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/mozilla/tls-o"
  },
  {
    "path": "tools/fixsubjectNames.go",
    "chars": 2770,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/mozilla/"
  },
  {
    "path": "tools/fixvalidity.go",
    "chars": 1960,
    "preview": "// This is a script that fixes the validity dates of certificates\n// in the database by retrieving the raw cert and upda"
  },
  {
    "path": "tools/getPaths.go",
    "chars": 1166,
    "preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\n\tpg \"github.com/mozilla/tls-observatory/database\"\n)\n\nfunc main() {\n\tcertid"
  },
  {
    "path": "tools/initMozPolicy.go",
    "chars": 2517,
    "preview": "package main\n\nimport (\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\n\t"
  },
  {
    "path": "tools/monthly_report.sql",
    "chars": 3889,
    "preview": "# Supported ciphers statistics for the past month\n\nSELECT  ciphersuites->>'cipher' as Ciphersuite,\n        COUNT(DISTINC"
  },
  {
    "path": "tools/pullCTLogs.go",
    "chars": 4547,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"mime/multipart\"\n\t"
  },
  {
    "path": "tools/pullCTLogsIntoDB.go",
    "chars": 5002,
    "preview": "/* Script that pulls certificates from the CT log\n   and inserts them into the observatory database\n\n   usage: TLSOBS_DB"
  },
  {
    "path": "tools/rescanDomains.go",
    "chars": 2339,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/m"
  },
  {
    "path": "tools/retrieveIntermediatesFromCADatabase.go",
    "chars": 2171,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"mime/multipart\"\n\t\"ne"
  },
  {
    "path": "tools/retrieveTruststoreFromCADatabase.go",
    "chars": 891,
    "preview": "package main\n\nimport (\n\t\"encoding/csv\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc main() {\n\tvar (\n\t\ttruststore, "
  },
  {
    "path": "tools/tls-observatory-api-elasticbeanstalk.json",
    "chars": 240,
    "preview": "{\n  \"AWSEBDockerrunVersion\": \"1\",\n  \"Image\": {\n    \"Name\": \"hub.prod.mozaws.net/tls-observatory-api\",\n    \"Update\": \"tru"
  },
  {
    "path": "tools/tls-observatory-scanner-elasticbeanstalk.json",
    "chars": 242,
    "preview": "{\n  \"AWSEBDockerrunVersion\": \"1\",\n  \"Image\": {\n    \"Name\": \"hub.prod.mozaws.net/tls-observatory-scanner\",\n    \"Update\": "
  },
  {
    "path": "tools/updateCertificate.go",
    "chars": 2485,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/mozilla/tls-observatory/certificate"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/.gitignore",
    "chars": 47,
    "preview": "TAGS\ntags\n.*.swp\ntomlcheck/tomlcheck\ntoml.test\n"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/.travis.yml",
    "chars": 209,
    "preview": "language: go\ngo:\n  - 1.1\n  - 1.2\n  - 1.3\n  - 1.4\n  - 1.5\n  - 1.6\n  - tip\ninstall:\n  - go install ./...\n  - go get github"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/COMPATIBLE",
    "chars": 113,
    "preview": "Compatible with TOML version\n[v0.4.0](https://github.com/toml-lang/toml/blob/v0.4.0/versions/en/toml-v0.4.0.md)\n\n"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/COPYING",
    "chars": 1079,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2013 TOML authors\n\nPermission is hereby granted, free of charge, to any person obta"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/Makefile",
    "chars": 289,
    "preview": "install:\n\tgo install ./...\n\ntest: install\n\tgo test -v\n\ttoml-test toml-test-decoder\n\ttoml-test -encoder toml-test-encoder"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/README.md",
    "chars": 4335,
    "preview": "## TOML parser and encoder for Go with reflection\n\nTOML stands for Tom's Obvious, Minimal Language. This Go package prov"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/decode.go",
    "chars": 14412,
    "preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc e(format string, args ..."
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/decode_meta.go",
    "chars": 3202,
    "preview": "package toml\n\nimport \"strings\"\n\n// MetaData allows access to meta information about TOML data that may not\n// be inferra"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/doc.go",
    "chars": 1104,
    "preview": "/*\nPackage toml provides facilities for decoding and encoding TOML configuration\nfiles via reflection. There is also sup"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/encode.go",
    "chars": 14971,
    "preview": "package toml\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype tomlEnco"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/encoding_types.go",
    "chars": 541,
    "preview": "// +build go1.2\n\npackage toml\n\n// In order to support Go 1.1, we define our own TextMarshaler and\n// TextUnmarshaler typ"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/encoding_types_1.1.go",
    "chars": 507,
    "preview": "// +build !go1.2\n\npackage toml\n\n// These interfaces were introduced in Go 1.2, so we add them manually when\n// compiling"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/lex.go",
    "chars": 22215,
    "preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype itemType int\n\nconst (\n\titemError itemType = "
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/parse.go",
    "chars": 15656,
    "preview": "package toml\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype parser struct {\n\tmapping "
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/session.vim",
    "chars": 55,
    "preview": "au BufWritePost *.go silent!make tags > /dev/null 2>&1\n"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/type_check.go",
    "chars": 2498,
    "preview": "package toml\n\n// tomlType represents any Go type that corresponds to a TOML type.\n// While the first draft of the TOML s"
  },
  {
    "path": "vendor/github.com/BurntSushi/toml/type_fields.go",
    "chars": 6471,
    "preview": "package toml\n\n// Struct field handling is adapted from code in encoding/json:\n//\n// Copyright 2010 The Go Authors.  All "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/LICENSE.txt",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/NOTICE.txt",
    "chars": 120,
    "preview": "AWS SDK for Go\nCopyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.\nCopyright 2014-2015 Stripe, Inc.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go",
    "chars": 5427,
    "preview": "// Package awserr represents API error interface accessors for the SDK.\npackage awserr\n\n// An Error wraps lower level er"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go",
    "chars": 6025,
    "preview": "package awserr\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// SprintError returns a string of the formatted error code.\n//\n// Bo"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go",
    "chars": 2779,
    "preview": "package awsutil\n\nimport (\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Copy deeply copies a src structure to dst. Useful for copying r"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go",
    "chars": 925,
    "preview": "package awsutil\n\nimport (\n\t\"reflect\"\n)\n\n// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go",
    "chars": 5379,
    "preview": "package awsutil\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jmespath/go-jmespath\"\n)\n\nvar indexRe "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go",
    "chars": 2511,
    "preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Prettify returns the string representation o"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go",
    "chars": 1925,
    "preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// StringValue returns the string representation of a"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/client.go",
    "chars": 2908,
    "preview": "package client\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"git"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go",
    "chars": 4798,
    "preview": "package client\n\nimport (\n\t\"math\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-g"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/logger.go",
    "chars": 5569,
    "preview": "package client\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http/httputil\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"git"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go",
    "chars": 312,
    "preview": "package metadata\n\n// ClientInfo wraps immutable data from the client.Client structure.\ntype ClientInfo struct {\n\tService"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go",
    "chars": 822,
    "preview": "package client\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// NoOpRetryer provides a retryer that per"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/config.go",
    "chars": 20043,
    "preview": "package aws\n\nimport (\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go",
    "chars": 1536,
    "preview": "// +build !go1.9\n\npackage aws\n\nimport \"time\"\n\n// Context is an copy of the Go v1.7 stdlib's context.Context interface.\n/"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go",
    "chars": 285,
    "preview": "// +build go1.9\n\npackage aws\n\nimport \"context\"\n\n// Context is an alias of the Go stdlib's context.Context interface.\n// "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go",
    "chars": 658,
    "preview": "// +build !go1.7\n\npackage aws\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/context\"\n)\n\n// BackgroundContext returns a "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go",
    "chars": 616,
    "preview": "// +build go1.7\n\npackage aws\n\nimport \"context\"\n\n// BackgroundContext returns a context that will never be canceled, has "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go",
    "chars": 500,
    "preview": "package aws\n\nimport (\n\t\"time\"\n)\n\n// SleepWithContext will wait for the timer duration to expire, or the context\n// is ca"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/convert_types.go",
    "chars": 20491,
    "preview": "package aws\n\nimport \"time\"\n\n// String returns a pointer to the string value passed in.\nfunc String(v string) *string {\n\t"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go",
    "chars": 7484,
    "preview": "package corehandlers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"githu"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go",
    "chars": 512,
    "preview": "package corehandlers\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\n// ValidateParametersHandler is a request handler "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go",
    "chars": 1004,
    "preview": "package corehandlers\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/reques"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go",
    "chars": 3263,
    "preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar (\n\t// ErrNoValidProvidersFoundInChain Is re"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.5.go",
    "chars": 666,
    "preview": "// +build !go1.7\n\npackage credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/context\"\n)\n\n// backgroundContext re"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_background_go1.7.go",
    "chars": 624,
    "preview": "// +build go1.7\n\npackage credentials\n\nimport \"context\"\n\n// backgroundContext returns a context that will never be cancel"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.5.go",
    "chars": 1610,
    "preview": "// +build !go1.9\n\npackage credentials\n\nimport \"time\"\n\n// Context is an copy of the Go v1.7 stdlib's context.Context inte"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/context_go1.9.go",
    "chars": 359,
    "preview": "// +build go1.9\n\npackage credentials\n\nimport \"context\"\n\n// Context is an alias of the Go stdlib's context.Context interf"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go",
    "chars": 11914,
    "preview": "// Package credentials provides credential retrieval and management\n//\n// The Credentials is the primary method of getti"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go",
    "chars": 6175,
    "preview": "package ec2rolecreds\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"g"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go",
    "chars": 6592,
    "preview": "// Package endpointcreds provides support for retrieving credentials from an\n// arbitrary HTTP endpoint.\n//\n// The crede"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go",
    "chars": 2042,
    "preview": "package credentials\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// EnvProviderName provides a name of En"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini",
    "chars": 243,
    "preview": "[default]\naws_access_key_id = accessKey\naws_secret_access_key = secret\naws_session_token = token\n\n[no_token]\naws_access_"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go",
    "chars": 12805,
    "preview": "/*\nPackage processcreds is a credential Provider to retrieve `credential_process`\ncredentials.\n\nWARNING: The following d"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go",
    "chars": 4902,
    "preview": "package credentials\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/internal"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go",
    "chars": 1841,
    "preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// StaticProviderName provides a name of Static"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go",
    "chars": 15120,
    "preview": "/*\nPackage stscreds are credential Providers to retrieve STS AWS credentials.\n\nSTS provides multiple ways to retrieve cr"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go",
    "chars": 5540,
    "preview": "package stscreds\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go",
    "chars": 2603,
    "preview": "// Package csm provides the Client Side Monitoring (CSM) client which enables\n// sending metrics via UDP connection to t"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go",
    "chars": 2092,
    "preview": "package csm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tlock sync.Mutex\n)\n\nconst (\n\t// DefaultPort is used when no por"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go",
    "chars": 3818,
    "preview": "package csm\n\nimport (\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\ntype metricTime time.Time\n\nfunc (t metricT"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go",
    "chars": 857,
    "preview": "package csm\n\nimport (\n\t\"sync/atomic\"\n)\n\nconst (\n\trunningEnum = iota\n\tpausedEnum\n)\n\nvar (\n\t// MetricsChannelSize of metri"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go",
    "chars": 387,
    "preview": "package csm\n\ntype metricException interface {\n\tException() string\n\tMessage() string\n}\n\ntype requestException struct {\n\te"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go",
    "chars": 5981,
    "preview": "package csm\n\nimport (\n\t\"encoding/json\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go",
    "chars": 6835,
    "preview": "// Package defaults is a collection of helpers to retrieve the SDK's default\n// configuration and handlers.\n//\n// Genera"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go",
    "chars": 768,
    "preview": "package defaults\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\n// SharedCredentialsFilename returns "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/doc.go",
    "chars": 2381,
    "preview": "// Package aws provides the core SDK's utilities and shared types. Use this package's\n// utilities to simplify setting a"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go",
    "chars": 8614,
    "preview": "package ec2metadata\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sd"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go",
    "chars": 7946,
    "preview": "// Package ec2metadata provides the client for making API calls to the\n// EC2 Metadata service.\n//\n// This package's cli"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go",
    "chars": 2774,
    "preview": "package ec2metadata\n\nimport (\n\t\"net/http\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/a"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go",
    "chars": 5182,
    "preview": "package endpoints\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\ntype modelDefiniti"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go",
    "chars": 269554,
    "preview": "// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT.\n\npackage endpoints\n\nimport (\n\t\"regexp\"\n)\n\n// Partiti"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go",
    "chars": 11645,
    "preview": "package endpoints\n\n// Service identifiers\n//\n// Deprecated: Use client package's EndpointsID value instead of these\n// S"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go",
    "chars": 2812,
    "preview": "// Package endpoints provides the types and functionality for defining regions\n// and endpoints, as well as querying tho"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go",
    "chars": 18607,
    "preview": "package endpoints\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// Options provide t"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go",
    "chars": 485,
    "preview": "package endpoints\n\nvar legacyGlobalRegions = map[string]map[string]struct{}{\n\t\"sts\": {\n\t\t\"ap-northeast-1\": {},\n\t\t\"ap-sou"
  }
]

// ... and 2690 more files (download for full content)

About this extraction

This page contains the full source code of the mozilla/tls-observatory GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2890 files (71.7 MB), approximately 7.5M tokens, and a symbol index with 107676 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!