Skip to content

Instantly share code, notes, and snippets.

@x-yuri
Created October 6, 2022 20:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save x-yuri/985f8289b15e07fe1038c1eafe679b0b to your computer and use it in GitHub Desktop.
Save x-yuri/985f8289b15e07fe1038c1eafe679b0b to your computer and use it in GitHub Desktop.
[Trace - 23:10:28.743 PM] Sending request 'initialize - (0)'.
Params: {"processId":213781,"clientInfo":{"name":"Code - OSS","version":"1.71.2"},"locale":"en-us","rootPath":"/home/yuri/go/src/github.com/docker/docker","rootUri":"file:///home/yuri/go/src/github.com/docker/docker","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional","normalizesLineEndings":true,"changeAnnotationSupport":{"groupsOnLabel":true}},"configuration":true,"didChangeWatchedFiles":{"dynamicRegistration":true,"relativePatternSupport":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]},"resolveSupport":{"properties":["location.range"]}},"codeLens":{"refreshSupport":true},"executeCommand":{"dynamicRegistration":true},"didChangeConfiguration":{"dynamicRegistration":true},"workspaceFolders":true,"semanticTokens":{"refreshSupport":true},"fileOperations":{"dynamicRegistration":true,"didCreate":true,"didRename":true,"didDelete":true,"willCreate":true,"willRename":true,"willDelete":true},"inlineValue":{"refreshSupport":true},"inlayHint":{"refreshSupport":true},"diagnostics":{"refreshSupport":true}},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]},"codeDescriptionSupport":true,"dataSupport":true},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true,"tagSupport":{"valueSet":[1]},"insertReplaceSupport":true,"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"insertTextModeSupport":{"valueSet":[1,2]},"labelDetailsSupport":true},"insertTextMode":2,"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},"completionList":{"itemDefaults":["commitCharacters","editRange","insertTextFormat","insertTextMode"]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true},"activeParameterSupport":true},"contextSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"hierarchicalDocumentSymbolSupport":true,"tagSupport":{"valueSet":[1]},"labelSupport":true},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"disabledSupport":true,"dataSupport":true,"resolveSupport":{"properties":["edit"]},"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"honorsChangeAnnotations":false},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true,"prepareSupportDefaultBehavior":1,"honorsChangeAnnotations":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true,"foldingRangeKind":{"valueSet":["comment","imports","region"]},"foldingRange":{"collapsedText":false}},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator"],"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"formats":["relative"],"requests":{"range":true,"full":{"delta":true}},"multilineTokenSupport":false,"overlappingTokenSupport":false,"serverCancelSupport":true,"augmentsSyntaxTokens":true},"linkedEditingRange":{"dynamicRegistration":true},"typeHierarchy":{"dynamicRegistration":true},"inlineValue":{"dynamicRegistration":true},"inlayHint":{"dynamicRegistration":true,"resolveSupport":{"properties":["tooltip","textEdits","label.tooltip","label.location","label.command"]}},"diagnostic":{"dynamicRegistration":true,"relatedDocumentSupport":false}},"window":{"showMessage":{"messageActionItem":{"additionalPropertiesSupport":true}},"showDocument":{"support":true},"workDoneProgress":true},"general":{"staleRequestSupport":{"cancel":true,"retryOnContentModified":["textDocument/semanticTokens/full","textDocument/semanticTokens/range","textDocument/semanticTokens/full/delta"]},"regularExpressions":{"engine":"ECMAScript","version":"ES2020"},"markdown":{"parser":"marked","version":"1.1.0"},"positionEncodings":["utf-16"]},"notebookDocument":{"synchronization":{"dynamicRegistration":true,"executionSummarySupport":true}}},"initializationOptions":{"ui.inlayhint.hints":{"assignVariableTypes":false,"compositeLiteralFields":false,"compositeLiteralTypes":false,"constantValues":false,"functionTypeParameters":false,"parameterNames":false,"rangeVariableTypes":false}},"trace":"off","workspaceFolders":[{"uri":"file:///home/yuri/go/src/github.com/docker/docker","name":"docker"}]}
[Trace - 23:10:28.745 PM] Received response 'initialize - (0)' in 1ms.
Result: {"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"save":{}},"completionProvider":{"triggerCharacters":["."]},"hoverProvider":true,"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"typeDefinitionProvider":true,"implementationProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":{"codeActionKinds":["quickfix","refactor.extract","refactor.rewrite","source.fixAll","source.organizeImports"]},"codeLensProvider":{},"documentLinkProvider":{},"workspaceSymbolProvider":true,"documentFormattingProvider":true,"renameProvider":{"prepareProvider":true},"foldingRangeProvider":true,"executeCommandProvider":{"commands":["gopls.add_dependency","gopls.add_import","gopls.apply_fix","gopls.check_upgrades","gopls.edit_go_directive","gopls.gc_details","gopls.generate","gopls.generate_gopls_mod","gopls.go_get_package","gopls.list_imports","gopls.list_known_packages","gopls.regenerate_cgo","gopls.remove_dependency","gopls.reset_go_mod_diagnostics","gopls.run_tests","gopls.run_vulncheck_exp","gopls.start_debugging","gopls.test","gopls.tidy","gopls.toggle_gc_details","gopls.update_go_sum","gopls.upgrade_dependency","gopls.vendor"]},"callHierarchyProvider":true,"inlayHintProvider":{},"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"workspace/didChangeWorkspaceFolders"},"fileOperations":{}}},"serverInfo":{"name":"gopls","version":"{\"GoVersion\":\"go1.19.1\",\"Path\":\"golang.org/x/tools/gopls\",\"Main\":{\"Path\":\"golang.org/x/tools/gopls\",\"Version\":\"(devel)\",\"Sum\":\"\",\"Replace\":null},\"Deps\":[{\"Path\":\"github.com/BurntSushi/toml\",\"Version\":\"v1.2.0\",\"Sum\":\"h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=\",\"Replace\":null},{\"Path\":\"github.com/google/go-cmp\",\"Version\":\"v0.5.8\",\"Sum\":\"h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=\",\"Replace\":null},{\"Path\":\"github.com/sergi/go-diff\",\"Version\":\"v1.1.0\",\"Sum\":\"h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=\",\"Replace\":null},{\"Path\":\"golang.org/x/exp\",\"Version\":\"v0.0.0-20220722155223-a9213eeb770e\",\"Sum\":\"h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=\",\"Replace\":null},{\"Path\":\"golang.org/x/exp/typeparams\",\"Version\":\"v0.0.0-20220722155223-a9213eeb770e\",\"Sum\":\"h1:7Xs2YCOpMlNqSQSmrrnhlzBXIE/bpMecZplbLePTJvE=\",\"Replace\":null},{\"Path\":\"golang.org/x/mod\",\"Version\":\"v0.6.0-dev.0.20220419223038-86c51ed26bb4\",\"Sum\":\"h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=\",\"Replace\":null},{\"Path\":\"golang.org/x/sync\",\"Version\":\"v0.0.0-20220722155255-886fb9371eb4\",\"Sum\":\"h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=\",\"Replace\":null},{\"Path\":\"golang.org/x/sys\",\"Version\":\"v0.0.0-20220808155132-1c4a2a72c664\",\"Sum\":\"h1:v1W7bwXHsnLLloWYTVEdvGvA7BHMeBYsPcF0GLDxIRs=\",\"Replace\":null},{\"Path\":\"golang.org/x/text\",\"Version\":\"v0.3.7\",\"Sum\":\"h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=\",\"Replace\":null},{\"Path\":\"golang.org/x/tools\",\"Version\":\"v0.1.13-0.20220928184430-f80e98464e27\",\"Sum\":\"\",\"Replace\":{\"Path\":\"../\",\"Version\":\"(devel)\",\"Sum\":\"\",\"Replace\":null}},{\"Path\":\"golang.org/x/vuln\",\"Version\":\"v0.0.0-20221004232641-2aa0553d353b\",\"Sum\":\"h1:8Tu9pgIV7kt8ulNtzidzpLl9E9l1i+U4QLdKG0ZzHyE=\",\"Replace\":null},{\"Path\":\"honnef.co/go/tools\",\"Version\":\"v0.3.3\",\"Sum\":\"h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA=\",\"Replace\":null},{\"Path\":\"mvdan.cc/gofumpt\",\"Version\":\"v0.3.1\",\"Sum\":\"h1:avhhrOmv0IuvQVK7fvwV91oFSGAk5/6Po8GXTzICeu8=\",\"Replace\":null},{\"Path\":\"mvdan.cc/xurls/v2\",\"Version\":\"v2.4.0\",\"Sum\":\"h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=\",\"Replace\":null}],\"Settings\":[{\"Key\":\"-compiler\",\"Value\":\"gc\"},{\"Key\":\"CGO_ENABLED\",\"Value\":\"1\"},{\"Key\":\"CGO_CFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_CPPFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_CXXFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_LDFLAGS\",\"Value\":\"\"},{\"Key\":\"GOARCH\",\"Value\":\"amd64\"},{\"Key\":\"GOOS\",\"Value\":\"linux\"},{\"Key\":\"GOAMD64\",\"Value\":\"v1\"},{\"Key\":\"vcs\",\"Value\":\"git\"},{\"Key\":\"vcs.revision\",\"Value\":\"bd8c28ff5c76b957a23f93a67337acc0c5a4f67e\"},{\"Key\":\"vcs.time\",\"Value\":\"2022-10-06T14:25:42Z\"},{\"Key\":\"vcs.modified\",\"Value\":\"false\"}],\"Version\":\"master\"}"}}
[Trace - 23:10:28.757 PM] Sending notification 'initialized'.
Params: {}
[Trace - 23:10:28.757 PM] Received request 'window/workDoneProgress/create - (1)'.
Params: {"token":"5577006791947779410"}
[Trace - 23:10:28.790 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go","languageId":"go","version":1,"text":"package distribution // import \"github.com/docker/docker/distribution\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/containerd/containerd/log\"\n\t\"github.com/containerd/containerd/platforms\"\n\t\"github.com/docker/distribution\"\n\t\"github.com/docker/distribution/manifest/manifestlist\"\n\t\"github.com/docker/distribution/manifest/ocischema\"\n\t\"github.com/docker/distribution/manifest/schema1\"\n\t\"github.com/docker/distribution/manifest/schema2\"\n\t\"github.com/docker/distribution/reference\"\n\t\"github.com/docker/distribution/registry/client/transport\"\n\t\"github.com/docker/docker/distribution/metadata\"\n\t\"github.com/docker/docker/distribution/xfer\"\n\t\"github.com/docker/docker/image\"\n\tv1 \"github.com/docker/docker/image/v1\"\n\t\"github.com/docker/docker/layer\"\n\t\"github.com/docker/docker/pkg/ioutils\"\n\t\"github.com/docker/docker/pkg/progress\"\n\t\"github.com/docker/docker/pkg/stringid\"\n\t\"github.com/docker/docker/pkg/system\"\n\trefstore \"github.com/docker/docker/reference\"\n\t\"github.com/docker/docker/registry\"\n\t\"github.com/opencontainers/go-digest\"\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n\t\"github.com/pkg/errors\"\n\t\"github.com/sirupsen/logrus\"\n\tarchvariant \"github.com/tonistiigi/go-archvariant\"\n)\n\nvar (\n\terrRootFSMismatch = errors.New(\"layers from manifest don't match image configuration\")\n\terrRootFSInvalid = errors.New(\"invalid rootfs in image configuration\")\n)\n\n// imageConfigPullError is an error pulling the image config blob\n// (only applies to schema2).\ntype imageConfigPullError struct {\n\tErr error\n}\n\n// Error returns the error string for imageConfigPullError.\nfunc (e imageConfigPullError) Error() string {\n\treturn \"error pulling image configuration: \" + e.Err.Error()\n}\n\n// newPuller returns a puller to pull from a v2 registry.\nfunc newPuller(endpoint registry.APIEndpoint, repoInfo *registry.RepositoryInfo, config *ImagePullConfig, local ContentStore) *puller {\n\treturn &puller{\n\t\tmetadataService: metadata.NewV2MetadataService(config.MetadataStore),\n\t\tendpoint: endpoint,\n\t\tconfig: config,\n\t\trepoInfo: repoInfo,\n\t\tmanifestStore: &manifestStore{\n\t\t\tlocal: local,\n\t\t},\n\t}\n}\n\ntype puller struct {\n\tmetadataService metadata.V2MetadataService\n\tendpoint registry.APIEndpoint\n\tconfig *ImagePullConfig\n\trepoInfo *registry.RepositoryInfo\n\trepo distribution.Repository\n\tmanifestStore *manifestStore\n}\n\nfunc (p *puller) pull(ctx context.Context, ref reference.Named) (err error) {\n\t// TODO(tiborvass): was ReceiveTimeout\n\tp.repo, err = newRepository(ctx, p.repoInfo, p.endpoint, p.config.MetaHeaders, p.config.AuthConfig, \"pull\")\n\tif err != nil {\n\t\tlogrus.Warnf(\"Error getting v2 registry: %v\", err)\n\t\treturn err\n\t}\n\n\tp.manifestStore.remote, err = p.repo.Manifests(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err = p.pullRepository(ctx, ref); err != nil {\n\t\tif _, ok := err.(fallbackError); ok {\n\t\t\treturn err\n\t\t}\n\t\tif continueOnError(err, p.endpoint.Mirror) {\n\t\t\treturn fallbackError{\n\t\t\t\terr: err,\n\t\t\t\ttransportOK: true,\n\t\t\t}\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (p *puller) pullRepository(ctx context.Context, ref reference.Named) (err error) {\n\tvar layersDownloaded bool\n\tif !reference.IsNameOnly(ref) {\n\t\tlayersDownloaded, err = p.pullTag(ctx, ref, p.config.Platform)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\ttags, err := p.repo.Tags(ctx).All(ctx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, tag := range tags {\n\t\t\ttagRef, err := reference.WithTag(ref, tag)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpulledNew, err := p.pullTag(ctx, tagRef, p.config.Platform)\n\t\t\tif err != nil {\n\t\t\t\t// Since this is the pull-all-tags case, don't\n\t\t\t\t// allow an error pulling a particular tag to\n\t\t\t\t// make the whole pull fall back to v1.\n\t\t\t\tif fallbackErr, ok := err.(fallbackError); ok {\n\t\t\t\t\treturn fallbackErr.err\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// pulledNew is true if either new layers were downloaded OR if existing images were newly tagged\n\t\t\t// TODO(tiborvass): should we change the name of `layersDownload`? What about message in WriteStatus?\n\t\t\tlayersDownloaded = layersDownloaded || pulledNew\n\t\t}\n\t}\n\n\tp.writeStatus(reference.FamiliarString(ref), layersDownloaded)\n\n\treturn nil\n}\n\n// writeStatus writes a status message to out. If layersDownloaded is true, the\n// status message indicates that a newer image was downloaded. Otherwise, it\n// indicates that the image is up to date. requestedTag is the tag the message\n// will refer to.\nfunc (p *puller) writeStatus(requestedTag string, layersDownloaded bool) {\n\tif layersDownloaded {\n\t\tprogress.Message(p.config.ProgressOutput, \"\", \"Status: Downloaded newer image for \"+requestedTag)\n\t} else {\n\t\tprogress.Message(p.config.ProgressOutput, \"\", \"Status: Image is up to date for \"+requestedTag)\n\t}\n}\n\ntype layerDescriptor struct {\n\tdigest digest.Digest\n\tdiffID layer.DiffID\n\trepoInfo *registry.RepositoryInfo\n\trepo distribution.Repository\n\tmetadataService metadata.V2MetadataService\n\ttmpFile *os.File\n\tverifier digest.Verifier\n\tsrc distribution.Descriptor\n}\n\nfunc (ld *layerDescriptor) Key() string {\n\treturn \"v2:\" + ld.digest.String()\n}\n\nfunc (ld *layerDescriptor) ID() string {\n\treturn stringid.TruncateID(ld.digest.String())\n}\n\nfunc (ld *layerDescriptor) DiffID() (layer.DiffID, error) {\n\tif ld.diffID != \"\" {\n\t\treturn ld.diffID, nil\n\t}\n\treturn ld.metadataService.GetDiffID(ld.digest)\n}\n\nfunc (ld *layerDescriptor) Download(ctx context.Context, progressOutput progress.Output) (io.ReadCloser, int64, error) {\n\tlogrus.Debugf(\"pulling blob %q\", ld.digest)\n\n\tvar (\n\t\terr error\n\t\toffset int64\n\t)\n\n\tif ld.tmpFile == nil {\n\t\tld.tmpFile, err = createDownloadFile()\n\t\tif err != nil {\n\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t}\n\t} else {\n\t\toffset, err = ld.tmpFile.Seek(0, io.SeekEnd)\n\t\tif err != nil {\n\t\t\tlogrus.Debugf(\"error seeking to end of download file: %v\", err)\n\t\t\toffset = 0\n\n\t\t\tld.tmpFile.Close()\n\t\t\tif err := os.Remove(ld.tmpFile.Name()); err != nil {\n\t\t\t\tlogrus.Errorf(\"Failed to remove temp file: %s\", ld.tmpFile.Name())\n\t\t\t}\n\t\t\tld.tmpFile, err = createDownloadFile()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t\t}\n\t\t} else if offset != 0 {\n\t\t\tlogrus.Debugf(\"attempting to resume download of %q from %d bytes\", ld.digest, offset)\n\t\t}\n\t}\n\n\ttmpFile := ld.tmpFile\n\n\tlayerDownload, err := ld.open(ctx)\n\tif err != nil {\n\t\tlogrus.Errorf(\"Error initiating layer download: %v\", err)\n\t\treturn nil, 0, retryOnError(err)\n\t}\n\n\tif offset != 0 {\n\t\t_, err := layerDownload.Seek(offset, io.SeekStart)\n\t\tif err != nil {\n\t\t\tif err := ld.truncateDownloadFile(); err != nil {\n\t\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t\t}\n\t\t\treturn nil, 0, err\n\t\t}\n\t}\n\tsize, err := layerDownload.Seek(0, io.SeekEnd)\n\tif err != nil {\n\t\t// Seek failed, perhaps because there was no Content-Length\n\t\t// header. This shouldn't fail the download, because we can\n\t\t// still continue without a progress bar.\n\t\tsize = 0\n\t} else {\n\t\tif size != 0 && offset > size {\n\t\t\tlogrus.Debug(\"Partial download is larger than full blob. Starting over\")\n\t\t\toffset = 0\n\t\t\tif err := ld.truncateDownloadFile(); err != nil {\n\t\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t\t}\n\t\t}\n\n\t\t// Restore the seek offset either at the beginning of the\n\t\t// stream, or just after the last byte we have from previous\n\t\t// attempts.\n\t\t_, err = layerDownload.Seek(offset, io.SeekStart)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t}\n\n\treader := progress.NewProgressReader(ioutils.NewCancelReadCloser(ctx, layerDownload), progressOutput, size-offset, ld.ID(), \"Downloading\")\n\tdefer reader.Close()\n\n\tif ld.verifier == nil {\n\t\tld.verifier = ld.digest.Verifier()\n\t}\n\n\t_, err = io.Copy(tmpFile, io.TeeReader(reader, ld.verifier))\n\tif err != nil {\n\t\tif err == transport.ErrWrongCodeForByteRange {\n\t\t\tif err := ld.truncateDownloadFile(); err != nil {\n\t\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t\t}\n\t\t\treturn nil, 0, err\n\t\t}\n\t\treturn nil, 0, retryOnError(err)\n\t}\n\n\tprogress.Update(progressOutput, ld.ID(), \"Verifying Checksum\")\n\n\tif !ld.verifier.Verified() {\n\t\terr = fmt.Errorf(\"filesystem layer verification failed for digest %s\", ld.digest)\n\t\tlogrus.Error(err)\n\n\t\t// Allow a retry if this digest verification error happened\n\t\t// after a resumed download.\n\t\tif offset != 0 {\n\t\t\tif err := ld.truncateDownloadFile(); err != nil {\n\t\t\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t\t\t}\n\n\t\t\treturn nil, 0, err\n\t\t}\n\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t}\n\n\tprogress.Update(progressOutput, ld.ID(), \"Download complete\")\n\n\tlogrus.Debugf(\"Downloaded %s to tempfile %s\", ld.ID(), tmpFile.Name())\n\n\t_, err = tmpFile.Seek(0, io.SeekStart)\n\tif err != nil {\n\t\ttmpFile.Close()\n\t\tif err := os.Remove(tmpFile.Name()); err != nil {\n\t\t\tlogrus.Errorf(\"Failed to remove temp file: %s\", tmpFile.Name())\n\t\t}\n\t\tld.tmpFile = nil\n\t\tld.verifier = nil\n\t\treturn nil, 0, xfer.DoNotRetry{Err: err}\n\t}\n\n\t// hand off the temporary file to the download manager, so it will only\n\t// be closed once\n\tld.tmpFile = nil\n\n\treturn ioutils.NewReadCloserWrapper(tmpFile, func() error {\n\t\ttmpFile.Close()\n\t\terr := os.RemoveAll(tmpFile.Name())\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Failed to remove temp file: %s\", tmpFile.Name())\n\t\t}\n\t\treturn err\n\t}), size, nil\n}\n\nfunc (ld *layerDescriptor) Close() {\n\tif ld.tmpFile != nil {\n\t\tld.tmpFile.Close()\n\t\tif err := os.RemoveAll(ld.tmpFile.Name()); err != nil {\n\t\t\tlogrus.Errorf(\"Failed to remove temp file: %s\", ld.tmpFile.Name())\n\t\t}\n\t}\n}\n\nfunc (ld *layerDescriptor) truncateDownloadFile() error {\n\t// Need a new hash context since we will be redoing the download\n\tld.verifier = nil\n\n\tif _, err := ld.tmpFile.Seek(0, io.SeekStart); err != nil {\n\t\tlogrus.Errorf(\"error seeking to beginning of download file: %v\", err)\n\t\treturn err\n\t}\n\n\tif err := ld.tmpFile.Truncate(0); err != nil {\n\t\tlogrus.Errorf(\"error truncating download file: %v\", err)\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (ld *layerDescriptor) Registered(diffID layer.DiffID) {\n\t// Cache mapping from this layer's DiffID to the blobsum\n\t_ = ld.metadataService.Add(diffID, metadata.V2Metadata{Digest: ld.digest, SourceRepository: ld.repoInfo.Name.Name()})\n}\n\nfunc (p *puller) pullTag(ctx context.Context, ref reference.Named, platform *specs.Platform) (tagUpdated bool, err error) {\n\tvar (\n\t\ttagOrDigest string // Used for logging/progress only\n\t\tdgst digest.Digest\n\t\tmt string\n\t\tsize int64\n\t\ttagged reference.NamedTagged\n\t\tisTagged bool\n\t)\n\tif digested, isDigested := ref.(reference.Canonical); isDigested {\n\t\tdgst = digested.Digest()\n\t\ttagOrDigest = digested.String()\n\t} else if tagged, isTagged = ref.(reference.NamedTagged); isTagged {\n\t\ttagService := p.repo.Tags(ctx)\n\t\tdesc, err := tagService.Get(ctx, tagged.Tag())\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\tdgst = desc.Digest\n\t\ttagOrDigest = tagged.Tag()\n\t\tmt = desc.MediaType\n\t\tsize = desc.Size\n\t} else {\n\t\treturn false, fmt.Errorf(\"internal error: reference has neither a tag nor a digest: %s\", reference.FamiliarString(ref))\n\t}\n\n\tctx = log.WithLogger(ctx, logrus.WithFields(\n\t\tlogrus.Fields{\n\t\t\t\"digest\": dgst,\n\t\t\t\"remote\": ref,\n\t\t}))\n\n\tdesc := specs.Descriptor{\n\t\tMediaType: mt,\n\t\tDigest: dgst,\n\t\tSize: size,\n\t}\n\tmanifest, err := p.manifestStore.Get(ctx, desc)\n\tif err != nil {\n\t\tif isTagged && isNotFound(errors.Cause(err)) {\n\t\t\tlogrus.WithField(\"ref\", ref).WithError(err).Debug(\"Falling back to pull manifest by tag\")\n\n\t\t\tmsg := `%s Failed to pull manifest by the resolved digest. This registry does not\n\tappear to conform to the distribution registry specification; falling back to\n\tpull by tag. This fallback is DEPRECATED, and will be removed in a future\n\trelease. Please contact admins of %s. %s\n`\n\n\t\t\twarnEmoji := \"\\U000026A0\\U0000FE0F\"\n\t\t\tprogress.Messagef(p.config.ProgressOutput, \"WARNING\", msg, warnEmoji, p.endpoint.URL, warnEmoji)\n\n\t\t\t// Fetch by tag worked, but fetch by digest didn't.\n\t\t\t// This is a broken registry implementation.\n\t\t\t// We'll fallback to the old behavior and get the manifest by tag.\n\t\t\tvar ms distribution.ManifestService\n\t\t\tms, err = p.repo.Manifests(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\n\t\t\tmanifest, err = ms.Get(ctx, \"\", distribution.WithTag(tagged.Tag()))\n\t\t\terr = errors.Wrap(err, \"error after falling back to get manifest by tag\")\n\t\t}\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t}\n\n\tif manifest == nil {\n\t\treturn false, fmt.Errorf(\"image manifest does not exist for tag or digest %q\", tagOrDigest)\n\t}\n\n\tif m, ok := manifest.(*schema2.DeserializedManifest); ok {\n\t\tif err := p.validateMediaType(m.Manifest.Config.MediaType); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t}\n\n\tlogrus.Debugf(\"Pulling ref from V2 registry: %s\", reference.FamiliarString(ref))\n\tprogress.Message(p.config.ProgressOutput, tagOrDigest, \"Pulling from \"+reference.FamiliarName(p.repo.Named()))\n\n\tvar (\n\t\tid digest.Digest\n\t\tmanifestDigest digest.Digest\n\t)\n\n\tswitch v := manifest.(type) {\n\tcase *schema1.SignedManifest:\n\t\tif p.config.RequireSchema2 {\n\t\t\treturn false, fmt.Errorf(\"invalid manifest: not schema2\")\n\t\t}\n\n\t\t// give registries time to upgrade to schema2 and only warn if we know a registry has been upgraded long time ago\n\t\t// TODO: condition to be removed\n\t\tif reference.Domain(ref) == \"docker.io\" {\n\t\t\tmsg := fmt.Sprintf(\"Image %s uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/\", ref)\n\t\t\tlogrus.Warn(msg)\n\t\t\tprogress.Message(p.config.ProgressOutput, \"\", msg)\n\t\t}\n\n\t\tid, manifestDigest, err = p.pullSchema1(ctx, ref, v, platform)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\tcase *schema2.DeserializedManifest:\n\t\tid, manifestDigest, err = p.pullSchema2(ctx, ref, v, platform)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\tcase *ocischema.DeserializedManifest:\n\t\tid, manifestDigest, err = p.pullOCI(ctx, ref, v, platform)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\tcase *manifestlist.DeserializedManifestList:\n\t\tid, manifestDigest, err = p.pullManifestList(ctx, ref, v, platform)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\tdefault:\n\t\treturn false, invalidManifestFormatError{}\n\t}\n\n\tprogress.Message(p.config.ProgressOutput, \"\", \"Digest: \"+manifestDigest.String())\n\n\tif p.config.ReferenceStore != nil {\n\t\toldTagID, err := p.config.ReferenceStore.Get(ref)\n\t\tif err == nil {\n\t\t\tif oldTagID == id {\n\t\t\t\treturn false, addDigestReference(p.config.ReferenceStore, ref, manifestDigest, id)\n\t\t\t}\n\t\t} else if err != refstore.ErrDoesNotExist {\n\t\t\treturn false, err\n\t\t}\n\n\t\tif canonical, ok := ref.(reference.Canonical); ok {\n\t\t\tif err = p.config.ReferenceStore.AddDigest(canonical, id, true); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t} else {\n\t\t\tif err = addDigestReference(p.config.ReferenceStore, ref, manifestDigest, id); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tif err = p.config.ReferenceStore.AddTag(ref, id, true); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t}\n\t}\n\treturn true, nil\n}\n\n// validateMediaType validates if the given mediaType is accepted by the puller's\n// configuration.\nfunc (p *puller) validateMediaType(mediaType string) error {\n\tvar allowedMediaTypes []string\n\tif len(p.config.Schema2Types) > 0 {\n\t\tallowedMediaTypes = p.config.Schema2Types\n\t} else {\n\t\tallowedMediaTypes = defaultImageTypes\n\t}\n\tfor _, t := range allowedMediaTypes {\n\t\tif mediaType == t {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tconfigClass := mediaTypeClasses[mediaType]\n\tif configClass == \"\" {\n\t\tconfigClass = \"unknown\"\n\t}\n\treturn invalidManifestClassError{mediaType, configClass}\n}\n\nfunc (p *puller) pullSchema1(ctx context.Context, ref reference.Reference, unverifiedManifest *schema1.SignedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error) {\n\tif platform != nil {\n\t\t// Early bath if the requested OS doesn't match that of the configuration.\n\t\t// This avoids doing the download, only to potentially fail later.\n\t\tif !system.IsOSSupported(platform.OS) {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"cannot download image with operating system %q when requesting %q\", runtime.GOOS, platform.OS)\n\t\t}\n\t}\n\n\tvar verifiedManifest *schema1.Manifest\n\tverifiedManifest, err = verifySchema1Manifest(unverifiedManifest, ref)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\trootFS := image.NewRootFS()\n\n\t// remove duplicate layers and check parent chain validity\n\terr = fixManifestLayers(verifiedManifest)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tvar descriptors []xfer.DownloadDescriptor\n\n\t// Image history converted to the new format\n\tvar history []image.History\n\n\t// Note that the order of this loop is in the direction of bottom-most\n\t// to top-most, so that the downloads slice gets ordered correctly.\n\tfor i := len(verifiedManifest.FSLayers) - 1; i >= 0; i-- {\n\t\tblobSum := verifiedManifest.FSLayers[i].BlobSum\n\t\tif err = blobSum.Validate(); err != nil {\n\t\t\treturn \"\", \"\", errors.Wrapf(err, \"could not validate layer digest %q\", blobSum)\n\t\t}\n\n\t\tvar throwAway struct {\n\t\t\tThrowAway bool `json:\"throwaway,omitempty\"`\n\t\t}\n\t\tif err := json.Unmarshal([]byte(verifiedManifest.History[i].V1Compatibility), &throwAway); err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\n\t\th, err := v1.HistoryFromConfig([]byte(verifiedManifest.History[i].V1Compatibility), throwAway.ThrowAway)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\t\thistory = append(history, h)\n\n\t\tif throwAway.ThrowAway {\n\t\t\tcontinue\n\t\t}\n\n\t\tlayerDescriptor := &layerDescriptor{\n\t\t\tdigest: blobSum,\n\t\t\trepoInfo: p.repoInfo,\n\t\t\trepo: p.repo,\n\t\t\tmetadataService: p.metadataService,\n\t\t}\n\n\t\tdescriptors = append(descriptors, layerDescriptor)\n\t}\n\n\tresultRootFS, release, err := p.config.DownloadManager.Download(ctx, *rootFS, descriptors, p.config.ProgressOutput)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tdefer release()\n\n\tconfig, err := v1.MakeConfigFromV1Config([]byte(verifiedManifest.History[0].V1Compatibility), &resultRootFS, history)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\timageID, err := p.config.ImageStore.Put(ctx, config)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tmanifestDigest = digest.FromBytes(unverifiedManifest.Canonical)\n\n\treturn imageID, manifestDigest, nil\n}\n\nfunc (p *puller) pullSchema2Layers(ctx context.Context, target distribution.Descriptor, layers []distribution.Descriptor, platform *specs.Platform) (id digest.Digest, err error) {\n\tif _, err := p.config.ImageStore.Get(ctx, target.Digest); err == nil {\n\t\t// If the image already exists locally, no need to pull\n\t\t// anything.\n\t\treturn target.Digest, nil\n\t}\n\n\tvar descriptors []xfer.DownloadDescriptor\n\n\t// Note that the order of this loop is in the direction of bottom-most\n\t// to top-most, so that the downloads slice gets ordered correctly.\n\tfor _, d := range layers {\n\t\tif err := d.Digest.Validate(); err != nil {\n\t\t\treturn \"\", errors.Wrapf(err, \"could not validate layer digest %q\", d.Digest)\n\t\t}\n\t\tlayerDescriptor := &layerDescriptor{\n\t\t\tdigest: d.Digest,\n\t\t\trepo: p.repo,\n\t\t\trepoInfo: p.repoInfo,\n\t\t\tmetadataService: p.metadataService,\n\t\t\tsrc: d,\n\t\t}\n\n\t\tdescriptors = append(descriptors, layerDescriptor)\n\t}\n\n\tconfigChan := make(chan []byte, 1)\n\tconfigErrChan := make(chan error, 1)\n\tlayerErrChan := make(chan error, 1)\n\tdownloadsDone := make(chan struct{})\n\tvar cancel func()\n\tctx, cancel = context.WithCancel(ctx)\n\tdefer cancel()\n\n\t// Pull the image config\n\tgo func() {\n\t\tconfigJSON, err := p.pullSchema2Config(ctx, target.Digest)\n\t\tif err != nil {\n\t\t\tconfigErrChan <- imageConfigPullError{Err: err}\n\t\t\tcancel()\n\t\t\treturn\n\t\t}\n\t\tconfigChan <- configJSON\n\t}()\n\n\tvar (\n\t\tconfigJSON []byte // raw serialized image config\n\t\tdownloadedRootFS *image.RootFS // rootFS from registered layers\n\t\tconfigRootFS *image.RootFS // rootFS from configuration\n\t\trelease func() // release resources from rootFS download\n\t\tconfigPlatform *specs.Platform // for LCOW when registering downloaded layers\n\t)\n\n\tlayerStoreOS := runtime.GOOS\n\tif platform != nil {\n\t\tlayerStoreOS = platform.OS\n\t}\n\n\t// https://github.com/docker/docker/issues/24766 - Err on the side of caution,\n\t// explicitly blocking images intended for linux from the Windows daemon. On\n\t// Windows, we do this before the attempt to download, effectively serialising\n\t// the download slightly slowing it down. We have to do it this way, as\n\t// chances are the download of layers itself would fail due to file names\n\t// which aren't suitable for NTFS. At some point in the future, if a similar\n\t// check to block Windows images being pulled on Linux is implemented, it\n\t// may be necessary to perform the same type of serialisation.\n\tif runtime.GOOS == \"windows\" {\n\t\tconfigJSON, configRootFS, configPlatform, err = receiveConfig(configChan, configErrChan)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif configRootFS == nil {\n\t\t\treturn \"\", errRootFSInvalid\n\t\t}\n\t\tif err := checkImageCompatibility(configPlatform.OS, configPlatform.OSVersion); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tif len(descriptors) != len(configRootFS.DiffIDs) {\n\t\t\treturn \"\", errRootFSMismatch\n\t\t}\n\t\tif platform == nil {\n\t\t\t// Early bath if the requested OS doesn't match that of the configuration.\n\t\t\t// This avoids doing the download, only to potentially fail later.\n\t\t\tif !system.IsOSSupported(configPlatform.OS) {\n\t\t\t\treturn \"\", fmt.Errorf(\"cannot download image with operating system %q when requesting %q\", configPlatform.OS, layerStoreOS)\n\t\t\t}\n\t\t\tlayerStoreOS = configPlatform.OS\n\t\t}\n\n\t\t// Populate diff ids in descriptors to avoid downloading foreign layers\n\t\t// which have been side loaded\n\t\tfor i := range descriptors {\n\t\t\tdescriptors[i].(*layerDescriptor).diffID = configRootFS.DiffIDs[i]\n\t\t}\n\t}\n\n\t// Assume that the operating system is the host OS if blank, and validate it\n\t// to ensure we don't cause a panic by an invalid index into the layerstores.\n\tif layerStoreOS != \"\" && !system.IsOSSupported(layerStoreOS) {\n\t\treturn \"\", system.ErrNotSupportedOperatingSystem\n\t}\n\n\tif p.config.DownloadManager != nil {\n\t\tgo func() {\n\t\t\tvar (\n\t\t\t\terr error\n\t\t\t\trootFS image.RootFS\n\t\t\t)\n\t\t\tdownloadRootFS := *image.NewRootFS()\n\t\t\trootFS, release, err = p.config.DownloadManager.Download(ctx, downloadRootFS, descriptors, p.config.ProgressOutput)\n\t\t\tif err != nil {\n\t\t\t\t// Intentionally do not cancel the config download here\n\t\t\t\t// as the error from config download (if there is one)\n\t\t\t\t// is more interesting than the layer download error\n\t\t\t\tlayerErrChan <- err\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tdownloadedRootFS = &rootFS\n\t\t\tclose(downloadsDone)\n\t\t}()\n\t} else {\n\t\t// We have nothing to download\n\t\tclose(downloadsDone)\n\t}\n\n\tif configJSON == nil {\n\t\tconfigJSON, configRootFS, _, err = receiveConfig(configChan, configErrChan)\n\t\tif err == nil && configRootFS == nil {\n\t\t\terr = errRootFSInvalid\n\t\t}\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t\tselect {\n\t\t\tcase <-downloadsDone:\n\t\t\tcase <-layerErrChan:\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\n\tselect {\n\tcase <-downloadsDone:\n\tcase err = <-layerErrChan:\n\t\treturn \"\", err\n\t}\n\n\tif release != nil {\n\t\tdefer release()\n\t}\n\n\tif downloadedRootFS != nil {\n\t\t// The DiffIDs returned in rootFS MUST match those in the config.\n\t\t// Otherwise the image config could be referencing layers that aren't\n\t\t// included in the manifest.\n\t\tif len(downloadedRootFS.DiffIDs) != len(configRootFS.DiffIDs) {\n\t\t\treturn \"\", errRootFSMismatch\n\t\t}\n\n\t\tfor i := range downloadedRootFS.DiffIDs {\n\t\t\tif downloadedRootFS.DiffIDs[i] != configRootFS.DiffIDs[i] {\n\t\t\t\treturn \"\", errRootFSMismatch\n\t\t\t}\n\t\t}\n\t}\n\n\timageID, err := p.config.ImageStore.Put(ctx, configJSON)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn imageID, nil\n}\n\nfunc (p *puller) pullSchema2(ctx context.Context, ref reference.Named, mfst *schema2.DeserializedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error) {\n\tmanifestDigest, err = schema2ManifestDigest(ref, mfst)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tid, err = p.pullSchema2Layers(ctx, mfst.Target(), mfst.Layers, platform)\n\treturn id, manifestDigest, err\n}\n\nfunc (p *puller) pullOCI(ctx context.Context, ref reference.Named, mfst *ocischema.DeserializedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error) {\n\tmanifestDigest, err = schema2ManifestDigest(ref, mfst)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tid, err = p.pullSchema2Layers(ctx, mfst.Target(), mfst.Layers, platform)\n\treturn id, manifestDigest, err\n}\n\nfunc receiveConfig(configChan <-chan []byte, errChan <-chan error) ([]byte, *image.RootFS, *specs.Platform, error) {\n\tselect {\n\tcase configJSON := <-configChan:\n\t\trootfs, err := rootFSFromConfig(configJSON)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, err\n\t\t}\n\t\tplatform, err := platformFromConfig(configJSON)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, err\n\t\t}\n\t\treturn configJSON, rootfs, platform, nil\n\tcase err := <-errChan:\n\t\treturn nil, nil, nil, err\n\t\t// Don't need a case for ctx.Done in the select because cancellation\n\t\t// will trigger an error in p.pullSchema2ImageConfig.\n\t}\n}\n\n// pullManifestList handles \"manifest lists\" which point to various\n// platform-specific manifests.\nfunc (p *puller) pullManifestList(ctx context.Context, ref reference.Named, mfstList *manifestlist.DeserializedManifestList, pp *specs.Platform) (id digest.Digest, manifestListDigest digest.Digest, err error) {\n\tmanifestListDigest, err = schema2ManifestDigest(ref, mfstList)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tvar platform specs.Platform\n\tif pp != nil {\n\t\tplatform = *pp\n\t}\n\tlogrus.Debugf(\"%s resolved to a manifestList object with %d entries; looking for a %s/%s match\", ref, len(mfstList.Manifests), platforms.Format(platform), runtime.GOARCH)\n\n\tmanifestMatches := filterManifests(mfstList.Manifests, platform)\n\n\tfor _, match := range manifestMatches {\n\t\tif err := checkImageCompatibility(match.Platform.OS, match.Platform.OSVersion); err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\n\t\tdesc := specs.Descriptor{\n\t\t\tDigest: match.Digest,\n\t\t\tSize: match.Size,\n\t\t\tMediaType: match.MediaType,\n\t\t}\n\t\tmanifest, err := p.manifestStore.Get(ctx, desc)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\n\t\tmanifestRef, err := reference.WithDigest(reference.TrimNamed(ref), match.Digest)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\n\t\tswitch v := manifest.(type) {\n\t\tcase *schema1.SignedManifest:\n\t\t\tmsg := fmt.Sprintf(\"[DEPRECATION NOTICE] v2 schema1 manifests in manifest lists are not supported and will break in a future release. Suggest author of %s to upgrade to v2 schema2. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/\", ref)\n\t\t\tlogrus.Warn(msg)\n\t\t\tprogress.Message(p.config.ProgressOutput, \"\", msg)\n\n\t\t\tplatform := toOCIPlatform(match.Platform)\n\t\t\tid, _, err = p.pullSchema1(ctx, manifestRef, v, platform)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", \"\", err\n\t\t\t}\n\t\tcase *schema2.DeserializedManifest:\n\t\t\tplatform := toOCIPlatform(match.Platform)\n\t\t\tid, _, err = p.pullSchema2(ctx, manifestRef, v, platform)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", \"\", err\n\t\t\t}\n\t\tcase *ocischema.DeserializedManifest:\n\t\t\tplatform := toOCIPlatform(match.Platform)\n\t\t\tid, _, err = p.pullOCI(ctx, manifestRef, v, platform)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", \"\", err\n\t\t\t}\n\t\tcase *manifestlist.DeserializedManifestList:\n\t\t\tid, _, err = p.pullManifestList(ctx, manifestRef, v, pp)\n\t\t\tif err != nil {\n\t\t\t\tvar noMatches noMatchesErr\n\t\t\t\tif !errors.As(err, &noMatches) {\n\t\t\t\t\t// test the next match\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\t// OCI spec requires to skip unknown manifest types\n\t\t\tcontinue\n\t\t}\n\t\treturn id, manifestListDigest, err\n\t}\n\treturn \"\", \"\", noMatchesErr{platform: platform}\n}\n\nconst (\n\tdefaultSchemaPullBackoff = 250 * time.Millisecond\n\tdefaultMaxSchemaPullAttempts = 5\n)\n\nfunc (p *puller) pullSchema2Config(ctx context.Context, dgst digest.Digest) (configJSON []byte, err error) {\n\tblobs := p.repo.Blobs(ctx)\n\terr = retry(ctx, defaultMaxSchemaPullAttempts, defaultSchemaPullBackoff, func(ctx context.Context) (err error) {\n\t\tconfigJSON, err = blobs.Get(ctx, dgst)\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Verify image config digest\n\tverifier := dgst.Verifier()\n\tif _, err := verifier.Write(configJSON); err != nil {\n\t\treturn nil, err\n\t}\n\tif !verifier.Verified() {\n\t\terr := fmt.Errorf(\"image config verification failed for digest %s\", dgst)\n\t\tlogrus.Error(err)\n\t\treturn nil, err\n\t}\n\n\treturn configJSON, nil\n}\n\ntype noMatchesErr struct {\n\tplatform specs.Platform\n}\n\nfunc (e noMatchesErr) Error() string {\n\treturn fmt.Sprintf(\"no matching manifest for %s in the manifest list entries\", formatPlatform(e.platform))\n}\n\nfunc retry(ctx context.Context, maxAttempts int, sleep time.Duration, f func(ctx context.Context) error) (err error) {\n\tattempt := 0\n\tfor ; attempt < maxAttempts; attempt++ {\n\t\terr = retryOnError(f(ctx))\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif xfer.IsDoNotRetryError(err) {\n\t\t\tbreak\n\t\t}\n\n\t\tif attempt+1 < maxAttempts {\n\t\t\ttimer := time.NewTimer(sleep)\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\ttimer.Stop()\n\t\t\t\treturn ctx.Err()\n\t\t\tcase <-timer.C:\n\t\t\t\tlogrus.WithError(err).WithField(\"attempts\", attempt+1).Debug(\"retrying after error\")\n\t\t\t\tsleep *= 2\n\t\t\t}\n\t\t}\n\t}\n\treturn errors.Wrapf(err, \"download failed after attempts=%d\", attempt+1)\n}\n\n// schema2ManifestDigest computes the manifest digest, and, if pulling by\n// digest, ensures that it matches the requested digest.\nfunc schema2ManifestDigest(ref reference.Named, mfst distribution.Manifest) (digest.Digest, error) {\n\t_, canonical, err := mfst.Payload()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// If pull by digest, then verify the manifest digest.\n\tif digested, isDigested := ref.(reference.Canonical); isDigested {\n\t\tverifier := digested.Digest().Verifier()\n\t\tif _, err := verifier.Write(canonical); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif !verifier.Verified() {\n\t\t\terr := fmt.Errorf(\"manifest verification failed for digest %s\", digested.Digest())\n\t\t\tlogrus.Error(err)\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn digested.Digest(), nil\n\t}\n\n\treturn digest.FromBytes(canonical), nil\n}\n\nfunc verifySchema1Manifest(signedManifest *schema1.SignedManifest, ref reference.Reference) (m *schema1.Manifest, err error) {\n\t// If pull by digest, then verify the manifest digest. NOTE: It is\n\t// important to do this first, before any other content validation. If the\n\t// digest cannot be verified, don't even bother with those other things.\n\tif digested, isCanonical := ref.(reference.Canonical); isCanonical {\n\t\tverifier := digested.Digest().Verifier()\n\t\tif _, err := verifier.Write(signedManifest.Canonical); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !verifier.Verified() {\n\t\t\terr := fmt.Errorf(\"image verification failed for digest %s\", digested.Digest())\n\t\t\tlogrus.Error(err)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tm = &signedManifest.Manifest\n\n\tif m.SchemaVersion != 1 {\n\t\treturn nil, fmt.Errorf(\"unsupported schema version %d for %q\", m.SchemaVersion, reference.FamiliarString(ref))\n\t}\n\tif len(m.FSLayers) != len(m.History) {\n\t\treturn nil, fmt.Errorf(\"length of history not equal to number of layers for %q\", reference.FamiliarString(ref))\n\t}\n\tif len(m.FSLayers) == 0 {\n\t\treturn nil, fmt.Errorf(\"no FSLayers in manifest for %q\", reference.FamiliarString(ref))\n\t}\n\treturn m, nil\n}\n\n// fixManifestLayers removes repeated layers from the manifest and checks the\n// correctness of the parent chain.\nfunc fixManifestLayers(m *schema1.Manifest) error {\n\timgs := make([]*image.V1Image, len(m.FSLayers))\n\tfor i := range m.FSLayers {\n\t\timg := &image.V1Image{}\n\n\t\tif err := json.Unmarshal([]byte(m.History[i].V1Compatibility), img); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\timgs[i] = img\n\t\tif err := v1.ValidateID(img.ID); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif imgs[len(imgs)-1].Parent != \"\" && runtime.GOOS != \"windows\" {\n\t\t// Windows base layer can point to a base layer parent that is not in manifest.\n\t\treturn errors.New(\"invalid parent ID in the base layer of the image\")\n\t}\n\n\t// check general duplicates to error instead of a deadlock\n\tidmap := make(map[string]struct{})\n\n\tvar lastID string\n\tfor _, img := range imgs {\n\t\t// skip IDs that appear after each other, we handle those later\n\t\tif _, exists := idmap[img.ID]; img.ID != lastID && exists {\n\t\t\treturn fmt.Errorf(\"ID %+v appears multiple times in manifest\", img.ID)\n\t\t}\n\t\tlastID = img.ID\n\t\tidmap[lastID] = struct{}{}\n\t}\n\n\t// backwards loop so that we keep the remaining indexes after removing items\n\tfor i := len(imgs) - 2; i >= 0; i-- {\n\t\tif imgs[i].ID == imgs[i+1].ID { // repeated ID. remove and continue\n\t\t\tm.FSLayers = append(m.FSLayers[:i], m.FSLayers[i+1:]...)\n\t\t\tm.History = append(m.History[:i], m.History[i+1:]...)\n\t\t} else if imgs[i].Parent != imgs[i+1].ID {\n\t\t\treturn fmt.Errorf(\"invalid parent ID. Expected %v, got %v\", imgs[i+1].ID, imgs[i].Parent)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc createDownloadFile() (*os.File, error) {\n\treturn os.CreateTemp(\"\", \"GetImageBlob\")\n}\n\nfunc toOCIPlatform(p manifestlist.PlatformSpec) *specs.Platform {\n\t// distribution pkg does define platform as pointer so this hack for empty struct\n\t// is necessary. This is temporary until correct OCI image-spec package is used.\n\tif p.OS == \"\" && p.Architecture == \"\" && p.Variant == \"\" && p.OSVersion == \"\" && p.OSFeatures == nil && p.Features == nil {\n\t\treturn nil\n\t}\n\treturn &specs.Platform{\n\t\tOS: p.OS,\n\t\tArchitecture: p.Architecture,\n\t\tVariant: p.Variant,\n\t\tOSFeatures: p.OSFeatures,\n\t\tOSVersion: p.OSVersion,\n\t}\n}\n\n// maximumSpec returns the distribution platform with maximum compatibility for the current node.\nfunc maximumSpec() specs.Platform {\n\tp := platforms.DefaultSpec()\n\tif p.Architecture == \"amd64\" {\n\t\tp.Variant = archvariant.AMD64Variant()\n\t}\n\treturn p\n}\n"}}
[Trace - 23:10:28.791 PM] Sending response 'window/workDoneProgress/create - (1)' in 34ms.
Result:
[Trace - 23:10:28.792 PM] Received notification '$/progress'.
Params: {"token":"5577006791947779410","value":{"kind":"begin","title":"Setting up workspace","message":"Loading packages..."}}
[Trace - 23:10:28.792 PM] Received request 'workspace/configuration - (2)'.
Params: {"items":[{"scopeUri":"file:///home/yuri/go/src/github.com/docker/docker","section":"gopls"}]}
[Trace - 23:10:28.804 PM] Sending response 'workspace/configuration - (2)' in 11ms.
Result: [{"ui.inlayhint.hints":{"assignVariableTypes":false,"compositeLiteralFields":false,"compositeLiteralTypes":false,"constantValues":false,"functionTypeParameters":false,"parameterNames":false,"rangeVariableTypes":false}}]
[Trace - 23:10:28.851 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2022/10/06 23:10:28 go env for /home/yuri/go/src/github.com/docker/docker\n(root /home/yuri/go/src/github.com/docker/docker)\n(go version go version go1.19.1 linux/amd64)\n(valid build configuration = true)\n(build flags: [])\nGOMOD=/dev/null\nGOPATH=/home/yuri/go\nGO111MODULE=\nGOFLAGS=\nGONOPROXY=\nGOSUMDB=sum.golang.org\nGOMODCACHE=/home/yuri/go/pkg/mod\nGONOSUMDB=\nGOWORK=\nGOPRIVATE=\nGOPROXY=https://proxy.golang.org,direct\nGOCACHE=/home/yuri/.cache/go-build\nGOINSECURE=\nGOROOT=/usr/lib/go\n\n"}
[Info - 11:10:28 PM] 2022/10/06 23:10:28 go env for /home/yuri/go/src/github.com/docker/docker
(root /home/yuri/go/src/github.com/docker/docker)
(go version go version go1.19.1 linux/amd64)
(valid build configuration = true)
(build flags: [])
GOMOD=/dev/null
GOPATH=/home/yuri/go
GO111MODULE=
GOFLAGS=
GONOPROXY=
GOSUMDB=sum.golang.org
GOMODCACHE=/home/yuri/go/pkg/mod
GONOSUMDB=
GOWORK=
GOPRIVATE=
GOPROXY=https://proxy.golang.org,direct
GOCACHE=/home/yuri/.cache/go-build
GOINSECURE=
GOROOT=/usr/lib/go
[Trace - 23:10:28.898 PM] Sending request 'textDocument/codeAction - (1)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"range":{"start":{"line":902,"character":19},"end":{"line":902,"character":19}},"context":{"diagnostics":[],"triggerKind":2}}
[Trace - 23:10:28.910 PM] Sending request 'textDocument/documentLink - (2)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"}}
[Trace - 23:10:28.910 PM] Sending request 'textDocument/inlayHint - (3)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"range":{"start":{"line":849,"character":0},"end":{"line":966,"character":0}}}
[Trace - 23:10:29.657 PM] Sending notification '$/cancelRequest'.
Params: {"id":1}
[Trace - 23:10:29.657 PM] Sending request 'textDocument/codeAction - (4)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"range":{"start":{"line":902,"character":19},"end":{"line":902,"character":19}},"context":{"diagnostics":[],"triggerKind":2}}
[Trace - 23:10:29.714 PM] Sending request 'textDocument/documentSymbol - (5)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"}}
[Trace - 23:10:30.269 PM] Sending request 'textDocument/codeLens - (6)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"}}
[Trace - 23:10:30.356 PM] Sending request 'textDocument/foldingRange - (7)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"}}
[Trace - 23:10:30.534 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2022/10/06 23:10:30 go/packages.Load #1\n\tsnapshot=0\n\tdirectory=/home/yuri/go/src/github.com/docker/docker\n\tquery=[./... builtin]\n\tpackages=648\n"}
[Info - 11:10:30 PM] 2022/10/06 23:10:30 go/packages.Load #1
snapshot=0
directory=/home/yuri/go/src/github.com/docker/docker
query=[./... builtin]
packages=648
[Trace - 23:10:30.550 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2022/10/06 23:10:30 go/packages.Load #1: updating metadata for 1398 packages\n"}
[Info - 11:10:30 PM] 2022/10/06 23:10:30 go/packages.Load #1: updating metadata for 1398 packages
[Trace - 23:10:31.202 PM] Received notification '$/progress'.
Params: {"token":"5577006791947779410","value":{"kind":"end","message":"Finished loading packages."}}
[Trace - 23:10:31.205 PM] Received request 'client/registerCapability - (3)'.
Params: {"registrations":[{"id":"workspace/didChangeWatchedFiles-0","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"**/*.{go,mod,sum,work}","kind":7},{"globPattern":"{/home/yuri/go/src/github.com/docker/docker/api,/home/yuri/go/src/github.com/docker/docker/api/server,/home/yuri/go/src/github.com/docker/docker/api/server/backend,/home/yuri/go/src/github.com/docker/docker/api/server/backend/build,/home/yuri/go/src/github.com/docker/docker/api/server/httpstatus,/home/yuri/go/src/github.com/docker/docker/api/server/httputils,/home/yuri/go/src/github.com/docker/docker/api/server/middleware,/home/yuri/go/src/github.com/docker/docker/api/server/router,/home/yuri/go/src/github.com/docker/docker/api/server/router/build,/home/yuri/go/src/github.com/docker/docker/api/server/router/checkpoint,/home/yuri/go/src/github.com/docker/docker/api/server/router/container,/home/yuri/go/src/github.com/docker/docker/api/server/router/debug,/home/yuri/go/src/github.com/docker/docker/api/server/router/distribution,/home/yuri/go/src/github.com/docker/docker/api/server/router/grpc,/home/yuri/go/src/github.com/docker/docker/api/server/router/image,/home/yuri/go/src/github.com/docker/docker/api/server/router/network,/home/yuri/go/src/github.com/docker/docker/api/server/router/plugin,/home/yuri/go/src/github.com/docker/docker/api/server/router/session,/home/yuri/go/src/github.com/docker/docker/api/server/router/swarm,/home/yuri/go/src/github.com/docker/docker/api/server/router/system,/home/yuri/go/src/github.com/docker/docker/api/server/router/volume,/home/yuri/go/src/github.com/docker/docker/api/types,/home/yuri/go/src/github.com/docker/docker/api/types/backend,/home/yuri/go/src/github.com/docker/docker/api/types/blkiodev,/home/yuri/go/src/github.com/docker/docker/api/types/container,/home/yuri/go/src/github.com/docker/docker/api/types/events,/home/yuri/go/src/github.com/docker/docker/api/types/filters,/home/yuri/go/src/github.com/docker/docker/api/types/image,/home/yuri/go/src/github.com/docker/docker/api/types/mount,/home/yuri/go/src/github.com/docker/docker/api/types/network,/home/yuri/go/src/github.com/docker/docker/api/types/plugins,/home/yuri/go/src/github.com/docker/docker/api/types/plugins/logdriver,/home/yuri/go/src/github.com/docker/docker/api/types/registry,/home/yuri/go/src/github.com/docker/docker/api/types/strslice,/home/yuri/go/src/github.com/docker/docker/api/types/swarm,/home/yuri/go/src/github.com/docker/docker/api/types/swarm/runtime,/home/yuri/go/src/github.com/docker/docker/api/types/time,/home/yuri/go/src/github.com/docker/docker/api/types/versions,/home/yuri/go/src/github.com/docker/docker/api/types/versions/v1p19,/home/yuri/go/src/github.com/docker/docker/api/types/versions/v1p20,/home/yuri/go/src/github.com/docker/docker/api/types/volume,/home/yuri/go/src/github.com/docker/docker/builder,/home/yuri/go/src/github.com/docker/docker/builder/builder-next,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/adapters,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/adapters/containerimage,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/adapters/localinlinecache,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/adapters/snapshot,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/exporter,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/imagerefchecker,/home/yuri/go/src/github.com/docker/docker/builder/builder-next/worker,/home/yuri/go/src/github.com/docker/docker/builder/dockerfile,/home/yuri/go/src/github.com/docker/docker/builder/remotecontext,/home/yuri/go/src/github.com/docker/docker/builder/remotecontext/git,/home/yuri/go/src/github.com/docker/docker/builder/remotecontext/urlutil,/home/yuri/go/src/github.com/docker/docker/cli,/home/yuri/go/src/github.com/docker/docker/cli/config,/home/yuri/go/src/github.com/docker/docker/cli/debug,/home/yuri/go/src/github.com/docker/docker/cli/winresources,/home/yuri/go/src/github.com/docker/docker/cli/winresources/docker-proxy,/home/yuri/go/src/github.com/docker/docker/cli/winresources/dockerd,/home/yuri/go/src/github.com/docker/docker/client,/home/yuri/go/src/github.com/docker/docker/cmd,/home/yuri/go/src/github.com/docker/docker/cmd/docker-proxy,/home/yuri/go/src/github.com/docker/docker/cmd/dockerd,/home/yuri/go/src/github.com/docker/docker/cmd/dockerd/trap,/home/yuri/go/src/github.com/docker/docker/cmd/dockerd/trap/testfiles,/home/yuri/go/src/github.com/docker/docker/container,/home/yuri/go/src/github.com/docker/docker/container/stream,/home/yuri/go/src/github.com/docker/docker/contrib,/home/yuri/go/src/github.com/docker/docker/contrib/apparmor,/home/yuri/go/src/github.com/docker/docker/contrib/docker-device-tool,/home/yuri/go/src/github.com/docker/docker/contrib/httpserver,/home/yuri/go/src/github.com/docker/docker/daemon,/home/yuri/go/src/github.com/docker/docker/daemon/cluster,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/controllers,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/controllers/plugin,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/convert,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/executor,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/executor/container,/home/yuri/go/src/github.com/docker/docker/daemon/cluster/provider,/home/yuri/go/src/github.com/docker/docker/daemon/config,/home/yuri/go/src/github.com/docker/docker/daemon/containerd,/home/yuri/go/src/github.com/docker/docker/daemon/events,/home/yuri/go/src/github.com/docker/docker/daemon/events/testutils,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/aufs,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/btrfs,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/copy,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/devmapper,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/fuse-overlayfs,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/graphtest,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/overlay,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/overlay2,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/overlayutils,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/register,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/vfs,/home/yuri/go/src/github.com/docker/docker/daemon/graphdriver/zfs,/home/yuri/go/src/github.com/docker/docker/daemon/images,/home/yuri/go/src/github.com/docker/docker/daemon/initlayer,/home/yuri/go/src/github.com/docker/docker/daemon/links,/home/yuri/go/src/github.com/docker/docker/daemon/listeners,/home/yuri/go/src/github.com/docker/docker/daemon/logger,/home/yuri/go/src/github.com/docker/docker/daemon/logger/awslogs,/home/yuri/go/src/github.com/docker/docker/daemon/logger/fluentd,/home/yuri/go/src/github.com/docker/docker/daemon/logger/gcplogs,/home/yuri/go/src/github.com/docker/docker/daemon/logger/gelf,/home/yuri/go/src/github.com/docker/docker/daemon/logger/journald,/home/yuri/go/src/github.com/docker/docker/daemon/logger/journald/internal,/home/yuri/go/src/github.com/docker/docker/daemon/logger/journald/internal/export,/home/yuri/go/src/github.com/docker/docker/daemon/logger/journald/internal/fake,/home/yuri/go/src/github.com/docker/docker/daemon/logger/journald/internal/sdjournal,/home/yuri/go/src/github.com/docker/docker/daemon/logger/jsonfilelog,/home/yuri/go/src/github.com/docker/docker/daemon/logger/jsonfilelog/jsonlog,/home/yuri/go/src/github.com/docker/docker/daemon/logger/local,/home/yuri/go/src/github.com/docker/docker/daemon/logger/logentries,/home/yuri/go/src/github.com/docker/docker/daemon/logger/loggertest,/home/yuri/go/src/github.com/docker/docker/daemon/logger/loggerutils,/home/yuri/go/src/github.com/docker/docker/daemon/logger/loggerutils/cache,/home/yuri/go/src/github.com/docker/docker/daemon/logger/splunk,/home/yuri/go/src/github.com/docker/docker/daemon/logger/syslog,/home/yuri/go/src/github.com/docker/docker/daemon/logger/templates,/home/yuri/go/src/github.com/docker/docker/daemon/names,/home/yuri/go/src/github.com/docker/docker/daemon/network,/home/yuri/go/src/github.com/docker/docker/daemon/stats,/home/yuri/go/src/github.com/docker/docker/distribution,/home/yuri/go/src/github.com/docker/docker/distribution/metadata,/home/yuri/go/src/github.com/docker/docker/distribution/utils,/home/yuri/go/src/github.com/docker/docker/distribution/xfer,/home/yuri/go/src/github.com/docker/docker/dockerversion,/home/yuri/go/src/github.com/docker/docker/errdefs,/home/yuri/go/src/github.com/docker/docker/image,/home/yuri/go/src/github.com/docker/docker/image/cache,/home/yuri/go/src/github.com/docker/docker/image/tarexport,/home/yuri/go/src/github.com/docker/docker/image/v1,/home/yuri/go/src/github.com/docker/docker/integration,/home/yuri/go/src/github.com/docker/docker/integration-cli,/home/yuri/go/src/github.com/docker/docker/integration-cli/checker,/home/yuri/go/src/github.com/docker/docker/integration-cli/cli,/home/yuri/go/src/github.com/docker/docker/integration-cli/cli/build,/home/yuri/go/src/github.com/docker/docker/integration-cli/daemon,/home/yuri/go/src/github.com/docker/docker/integration-cli/environment,/home/yuri/go/src/github.com/docker/docker/integration-cli/requirement,/home/yuri/go/src/github.com/docker/docker/integration/build,/home/yuri/go/src/github.com/docker/docker/integration/config,/home/yuri/go/src/github.com/docker/docker/integration/container,/home/yuri/go/src/github.com/docker/docker/integration/daemon,/home/yuri/go/src/github.com/docker/docker/integration/image,/home/yuri/go/src/github.com/docker/docker/integration/internal,/home/yuri/go/src/github.com/docker/docker/integration/internal/container,/home/yuri/go/src/github.com/docker/docker/integration/internal/network,/home/yuri/go/src/github.com/docker/docker/integration/internal/requirement,/home/yuri/go/src/github.com/docker/docker/integration/internal/swarm,/home/yuri/go/src/github.com/docker/docker/integration/internal/termtest,/home/yuri/go/src/github.com/docker/docker/integration/network,/home/yuri/go/src/github.com/docker/docker/integration/network/ipvlan,/home/yuri/go/src/github.com/docker/docker/integration/network/macvlan,/home/yuri/go/src/github.com/docker/docker/integration/plugin,/home/yuri/go/src/github.com/docker/docker/integration/plugin/authz,/home/yuri/go/src/github.com/docker/docker/integration/plugin/common,/home/yuri/go/src/github.com/docker/docker/integration/plugin/graphdriver,/home/yuri/go/src/github.com/docker/docker/integration/plugin/logging,/home/yuri/go/src/github.com/docker/docker/integration/plugin/logging/cmd,/home/yuri/go/src/github.com/docker/docker/integration/plugin/logging/cmd/close_on_start,/home/yuri/go/src/github.com/docker/docker/integration/plugin/logging/cmd/discard,/home/yuri/go/src/github.com/docker/docker/integration/plugin/logging/cmd/dummy,/home/yuri/go/src/github.com/docker/docker/integration/plugin/volumes,/home/yuri/go/src/github.com/docker/docker/integration/plugin/volumes/cmd,/home/yuri/go/src/github.com/docker/docker/integration/plugin/volumes/cmd/dummy,/home/yuri/go/src/github.com/docker/docker/integration/secret,/home/yuri/go/src/github.com/docker/docker/integration/service,/home/yuri/go/src/github.com/docker/docker/integration/session,/home/yuri/go/src/github.com/docker/docker/integration/system,/home/yuri/go/src/github.com/docker/docker/integration/volume,/home/yuri/go/src/github.com/docker/docker/internal,/home/yuri/go/src/github.com/docker/docker/internal/test,/home/yuri/go/src/github.com/docker/docker/internal/test/suite,/home/yuri/go/src/github.com/docker/docker/layer,/home/yuri/go/src/github.com/docker/docker/libcontainerd,/home/yuri/go/src/github.com/docker/docker/libcontainerd/queue,/home/yuri/go/src/github.com/docker/docker/libcontainerd/remote,/home/yuri/go/src/github.com/docker/docker/libcontainerd/supervisor,/home/yuri/go/src/github.com/docker/docker/libcontainerd/types,/home/yuri/go/src/github.com/docker/docker/libnetwork,/home/yuri/go/src/github.com/docker/docker/libnetwork/bitseq,/home/yuri/go/src/github.com/docker/docker/libnetwork/cluster,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/diagnostic,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/networkdb-test,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/networkdb-test/dbclient,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/networkdb-test/dbserver,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/networkdb-test/dummyclient,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/ovrouter,/home/yuri/go/src/github.com/docker/docker/libnetwork/cmd/readme_test,/home/yuri/go/src/github.com/docker/docker/libnetwork/config,/home/yuri/go/src/github.com/docker/docker/libnetwork/datastore,/home/yuri/go/src/github.com/docker/docker/libnetwork/diagnostic,/home/yuri/go/src/github.com/docker/docker/libnetwork/discoverapi,/home/yuri/go/src/github.com/docker/docker/libnetwork/driverapi,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/bridge,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/bridge/brmanager,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/host,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ivmanager,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/macvlan,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/macvlan/mvmanager,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/null,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/overlay,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/overlay/overlayutils,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/overlay/ovmanager,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/remote,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/remote/api,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/windows,/home/yuri/go/src/github.com/docker/docker/libnetwork/drivers/windows/overlay,/home/yuri/go/src/github.com/docker/docker/libnetwork/drvregistry,/home/yuri/go/src/github.com/docker/docker/libnetwork/etchosts,/home/yuri/go/src/github.com/docker/docker/libnetwork/idm,/home/yuri/go/src/github.com/docker/docker/libnetwork/internal,/home/yuri/go/src/github.com/docker/docker/libnetwork/internal/caller,/home/yuri/go/src/github.com/docker/docker/libnetwork/internal/setmatrix,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipam,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipamapi,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams/builtin,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams/null,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams/remote,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams/remote/api,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipams/windowsipam,/home/yuri/go/src/github.com/docker/docker/libnetwork/ipamutils,/home/yuri/go/src/github.com/docker/docker/libnetwork/iptables,/home/yuri/go/src/github.com/docker/docker/libnetwork/netlabel,/home/yuri/go/src/github.com/docker/docker/libnetwork/netutils,/home/yuri/go/src/github.com/docker/docker/libnetwork/networkdb,/home/yuri/go/src/github.com/docker/docker/libnetwork/ns,/home/yuri/go/src/github.com/docker/docker/libnetwork/options,/home/yuri/go/src/github.com/docker/docker/libnetwork/osl,/home/yuri/go/src/github.com/docker/docker/libnetwork/osl/kernel,/home/yuri/go/src/github.com/docker/docker/libnetwork/portallocator,/home/yuri/go/src/github.com/docker/docker/libnetwork/portmapper,/home/yuri/go/src/github.com/docker/docker/libnetwork/resolvconf,/home/yuri/go/src/github.com/docker/docker/libnetwork/testutils,/home/yuri/go/src/github.com/docker/docker/libnetwork/types,/home/yuri/go/src/github.com/docker/docker/oci,/home/yuri/go/src/github.com/docker/docker/oci/caps,/home/yuri/go/src/github.com/docker/docker/opts,/home/yuri/go/src/github.com/docker/docker/pkg,/home/yuri/go/src/github.com/docker/docker/pkg/aaparser,/home/yuri/go/src/github.com/docker/docker/pkg/archive,/home/yuri/go/src/github.com/docker/docker/pkg/authorization,/home/yuri/go/src/github.com/docker/docker/pkg/broadcaster,/home/yuri/go/src/github.com/docker/docker/pkg/capabilities,/home/yuri/go/src/github.com/docker/docker/pkg/chrootarchive,/home/yuri/go/src/github.com/docker/docker/pkg/containerfs,/home/yuri/go/src/github.com/docker/docker/pkg/devicemapper,/home/yuri/go/src/github.com/docker/docker/pkg/directory,/home/yuri/go/src/github.com/docker/docker/pkg/dmesg,/home/yuri/go/src/github.com/docker/docker/pkg/fileutils,/home/yuri/go/src/github.com/docker/docker/pkg/fsutils,/home/yuri/go/src/github.com/docker/docker/pkg/homedir,/home/yuri/go/src/github.com/docker/docker/pkg/idtools,/home/yuri/go/src/github.com/docker/docker/pkg/ioutils,/home/yuri/go/src/github.com/docker/docker/pkg/jsonmessage,/home/yuri/go/src/github.com/docker/docker/pkg/longpath,/home/yuri/go/src/github.com/docker/docker/pkg/loopback,/home/yuri/go/src/github.com/docker/docker/pkg/namesgenerator,/home/yuri/go/src/github.com/docker/docker/pkg/parsers,/home/yuri/go/src/github.com/docker/docker/pkg/parsers/kernel,/home/yuri/go/src/github.com/docker/docker/pkg/parsers/operatingsystem,/home/yuri/go/src/github.com/docker/docker/pkg/pidfile,/home/yuri/go/src/github.com/docker/docker/pkg/platform,/home/yuri/go/src/github.com/docker/docker/pkg/plugingetter,/home/yuri/go/src/github.com/docker/docker/pkg/plugins,/home/yuri/go/src/github.com/docker/docker/pkg/plugins/pluginrpc-gen,/home/yuri/go/src/github.com/docker/docker/pkg/plugins/pluginrpc-gen/fixtures,/home/yuri/go/src/github.com/docker/docker/pkg/plugins/pluginrpc-gen/fixtures/otherfixture,/home/yuri/go/src/github.com/docker/docker/pkg/plugins/transport,/home/yuri/go/src/github.com/docker/docker/pkg/pools,/home/yuri/go/src/github.com/docker/docker/pkg/progress,/home/yuri/go/src/github.com/docker/docker/pkg/pubsub,/home/yuri/go/src/github.com/docker/docker/pkg/reexec,/home/yuri/go/src/github.com/docker/docker/pkg/stack,/home/yuri/go/src/github.com/docker/docker/pkg/stdcopy,/home/yuri/go/src/github.com/docker/docker/pkg/streamformatter,/home/yuri/go/src/github.com/docker/docker/pkg/stringid,/home/yuri/go/src/github.com/docker/docker/pkg/sysinfo,/home/yuri/go/src/github.com/docker/docker/pkg/system,/home/yuri/go/src/github.com/docker/docker/pkg/tailfile,/home/yuri/go/src/github.com/docker/docker/pkg/tarsum,/home/yuri/go/src/github.com/docker/docker/pkg/urlutil,/home/yuri/go/src/github.com/docker/docker/pkg/useragent,/home/yuri/go/src/github.com/docker/docker/plugin,/home/yuri/go/src/github.com/docker/docker/plugin/executor,/home/yuri/go/src/github.com/docker/docker/plugin/executor/containerd,/home/yuri/go/src/github.com/docker/docker/plugin/v2,/home/yuri/go/src/github.com/docker/docker/profiles,/home/yuri/go/src/github.com/docker/docker/profiles/apparmor,/home/yuri/go/src/github.com/docker/docker/profiles/seccomp,/home/yuri/go/src/github.com/docker/docker/quota,/home/yuri/go/src/github.com/docker/docker/reference,/home/yuri/go/src/github.com/docker/docker/registry,/home/yuri/go/src/github.com/docker/docker/registry/resumable,/home/yuri/go/src/github.com/docker/docker/restartmanager,/home/yuri/go/src/github.com/docker/docker/rootless,/home/yuri/go/src/github.com/docker/docker/rootless/specconv,/home/yuri/go/src/github.com/docker/docker/runconfig,/home/yuri/go/src/github.com/docker/docker/runconfig/opts,/home/yuri/go/src/github.com/docker/docker/testutil,/home/yuri/go/src/github.com/docker/docker/testutil/daemon,/home/yuri/go/src/github.com/docker/docker/testutil/environment,/home/yuri/go/src/github.com/docker/docker/testutil/fakecontext,/home/yuri/go/src/github.com/docker/docker/testutil/fakegit,/home/yuri/go/src/github.com/docker/docker/testutil/fakestorage,/home/yuri/go/src/github.com/docker/docker/testutil/fixtures,/home/yuri/go/src/github.com/docker/docker/testutil/fixtures/load,/home/yuri/go/src/github.com/docker/docker/testutil/fixtures/plugin,/home/yuri/go/src/github.com/docker/docker/testutil/fixtures/plugin/basic,/home/yuri/go/src/github.com/docker/docker/testutil/registry,/home/yuri/go/src/github.com/docker/docker/testutil/request,/home/yuri/go/src/github.com/docker/docker/vendor,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/compute,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/compute/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/internal,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/internal/version,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/logging,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/logging/apiv2,/home/yuri/go/src/github.com/docker/docker/vendor/cloud.google.com/go/logging/internal,/home/yuri/go/src/github.com/docker/docker/vendor/code.cloudfoundry.org,/home/yuri/go/src/github.com/docker/docker/vendor/code.cloudfoundry.org/clock,/home/yuri/go/src/github.com/docker/docker/vendor/github.com,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Azure,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Azure/go-ansiterm,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Graylog2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Graylog2/go-gelf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Graylog2/go-gelf/gelf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Microsoft,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Microsoft/hcsshim,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/Microsoft/hcsshim/osversion,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/RackSec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/RackSec/srslog,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/agext,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/agext/levenshtein,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/armon,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/armon/circbuf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/armon/go-metrics,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/armon/go-radix,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/awserr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/awsutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/client/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/corehandlers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/credentials,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/csm,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/defaults,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/endpoints,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/request,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/session,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/signer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/aws/signer/v4,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/ini,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sdkio,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sdkmath,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sdkrand,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sdkuri,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/strings,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sync,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/internal/sync/singleflight,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/json,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/query,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/rest,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/xml,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/service,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/service/cloudwatchlogs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/service/sts,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/beorn7,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/beorn7/perks,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/beorn7/perks/quantile,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/bsphere,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/bsphere/le_go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cespare,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cespare/xxhash,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cespare/xxhash/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf/asm,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf/internal/btf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf/internal/unix,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cilium/ebpf/link,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/auth,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/certdb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/config,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/crypto,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/crypto/pkcs7,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/csr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/errors,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/helpers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/helpers/derhelpers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/info,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/initca,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/log,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/ocsp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/ocsp/config,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/signer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cloudflare/cfssl/signer/local,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/container-storage-interface,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/container-storage-interface/spec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/container-storage-interface/spec/lib,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/container-storage-interface/spec/lib/go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/container-storage-interface/spec/lib/go/csi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/cgroups,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/cgroups/stats,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/cgroups/stats/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/cgroups/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/cgroups/v2/stats,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/console,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/events,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/containers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/containers/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/content,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/content/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/diff,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/diff/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/events,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/events/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/images,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/images/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/introspection,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/introspection/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/leases,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/leases/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/namespaces,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/namespaces/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/snapshots,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/snapshots/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/tasks,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/tasks/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/ttrpc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/ttrpc/events,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/ttrpc/events/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/version,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/services/version/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/api/types/task,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/archive,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/archive/compression,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/cio,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/containers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/content,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/content/local,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/content/proxy,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/contrib,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/contrib/nvidia,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/defaults,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/diff,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/diff/walking,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/errdefs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/events,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/events/exchange,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/filters,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/gc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/identifiers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/images,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/images/archive,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/images/converter,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/labels,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/leases,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/leases/proxy,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/log,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/metadata/boltutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/mount,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/namespaces,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/oci,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/apparmor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/cap,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/dialer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/kmutex,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/seccomp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/shutdown,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/ttrpcutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/pkg/userns,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/platforms,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/plugin,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/reference,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/reference/docker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/remotes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/remotes/docker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/remotes/docker/auth,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/remotes/docker/schema1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/remotes/errors,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/rootfs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/linux,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/linux/runctypes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/v2/runc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/v2/runc/options,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/v2/shim,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/runtime/v2/task,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services/content,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services/content/contentserver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services/introspection,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services/server,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/services/server/config,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/snapshots,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/snapshots/proxy,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/sys,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/sys/reaper,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/containerd/version,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/continuity,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/continuity/devices,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/continuity/driver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/continuity/fs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/continuity/sysx,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/fifo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/go-runc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/stargz-snapshotter,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/stargz-snapshotter/estargz,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/stargz-snapshotter/estargz/errorutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/stargz-snapshotter/snapshot,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/stargz-snapshotter/snapshot/overlayutils,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/ttrpc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/containerd/typeurl,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd/v22,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd/v22/activation,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd/v22/daemon,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd/v22/dbus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/coreos/go-systemd/v22/journal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/creack,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/creack/pty,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cyphar,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/cyphar/filepath-securejoin,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/deckarep,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/deckarep/golang-set,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/digestset,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/manifest,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/manifest/manifestlist,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/manifest/ocischema,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/manifest/schema1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/manifest/schema2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/metrics,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/reference,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/api/errcode,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/api/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/client/auth,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/client/auth/challenge,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/client/transport,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/storage,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/storage/cache,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/distribution/registry/storage/cache/memory,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-connections,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-connections/nat,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-connections/sockets,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-connections/tlsconfig,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-events,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-metrics,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/go-units,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/libkv,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/libkv/store,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/libkv/store/boltdb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/docker/libtrust,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/dustin,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/dustin/go-humanize,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/felixge,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/felixge/httpsnoop,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/fernet,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/fernet/fernet-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/fluent,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/fluent/fluent-logger-golang,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/fluent/fluent-logger-golang/fluent,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/go-logr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/go-logr/logr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/go-logr/logr/funcr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/go-logr/stdr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/godbus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/godbus/dbus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/godbus/dbus/v5,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gofrs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gofrs/flock,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/googleapis,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/googleapis/google,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/googleapis/google/rpc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/gogoproto,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/io,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/proto,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/protoc-gen-gogo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/sortkeys,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gogo/protobuf/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/gddo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/gddo/httputil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/gddo/httputil/header,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/groupcache,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/groupcache/lru,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/descriptor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/jsonpb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/proto,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/protoc-gen-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes/any,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes/duration,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes/struct,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes/timestamp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/golang/protobuf/ptypes/wrappers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/btree,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/asn1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/client/configpb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/jsonclient,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/tls,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/x509,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency-go/x509/pkix,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/cmpopts,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/internal/diff,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/internal/flags,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/internal/function,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/go-cmp/cmp/internal/value,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/shlex,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/google/uuid,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/googleapis,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/googleapis/gax-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/googleapis/gax-go/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gorilla,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/gorilla/mux,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/go-grpc-middleware,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/go-grpc-prometheus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/grpc-gateway,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/grpc-gateway/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/errwrap,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-immutable-radix,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-memdb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-msgpack,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-msgpack/codec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-multierror,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/go-sockaddr,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/golang-lru,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/golang-lru/simplelru,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/memberlist,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/serf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/serf/coordinate,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/hashicorp/serf/serf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/imdario,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/imdario/mergo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/ishidawataru,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/ishidawataru/sctp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/jmespath,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/jmespath/go-jmespath,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/fse,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/huff0,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/internal/cpuinfo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/internal/snapref,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/zstd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/zstd/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/klauspost/compress/zstd/internal/xxhash,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/matttproud,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/matttproud/golang_protobuf_extensions,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/miekg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/miekg/dns,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/mistifyio,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/mistifyio/go-zfs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/mitchellh,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/mitchellh/hashstructure,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/mitchellh/hashstructure/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/api/services,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/api/services/control,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/api/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/config,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/contenthash,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/remotecache,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/remotecache/inline,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/remotecache/local,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/remotecache/registry,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/remotecache/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/util,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client/buildid,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client/connhelper,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client/llb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client/llb/imagemetaresolver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/client/ociindex,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/control,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/control/gateway,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/executor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/executor/oci,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/executor/runcexecutor,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/exporter,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/exporter/containerimage,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/exporter/containerimage/exptypes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/exporter/local,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/exporter/tar,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/builder,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/command,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerignore,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/instructions,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/parser,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/dockerfile/shell,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/gateway,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/gateway/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/gateway/forwarder,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/gateway/grpcclient,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/gateway/pb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/frontend/subrequests,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/identity,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/auth,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/content,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/filesync,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/grpchijack,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/secrets,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/sshforward,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/session/upload,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/snapshot,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/snapshot/containerd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/bboltcachestorage,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/errdefs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/internal/pipe,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver/errdefs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver/file,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver/mounts,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver/ops,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/llbsolver/ops/fileoptypes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/solver/pb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/source,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/source/git,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/source/http,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/source/local,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/source/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/apicaps,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/apicaps/pb,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/appdefaults,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/archutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/bklog,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/buildinfo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/buildinfo/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/compression,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/cond,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/contentutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/entitlements,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/entitlements/security,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/estargz,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/gitutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/grpcerrors,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/imageutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/leaseutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/network,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/overlay,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/progress,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/progress/controller,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/progress/logs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/pull,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/pull/pullprogress,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/push,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/resolver,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/resolver/config,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/resolver/limited,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/resolver/retryhandler,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/rootless,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/rootless/specconv,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/sshutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/stack,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/suggest,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/system,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/throttle,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/tracing,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/tracing/exec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/tracing/otlptracegrpc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/tracing/transform,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/urlutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/winlayers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/version,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/worker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/ipvs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/locker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/patternmatcher,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/pubsub,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent/configs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent/csi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent/csi/plugin,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent/exec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/agent/secrets,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/deepcopy,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/defaults,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/equality,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/genericresource,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/naming,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/api/validation,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/ca,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/ca/keyutils,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/ca/pkcs8,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/connectionbroker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/identity,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/ioutils,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/log,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/allocator,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/allocator/networkallocator,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/constraint,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/controlapi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/csi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/dispatcher,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/dispatcher/heartbeat,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/drivers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/encryption,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/health,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/keymanager,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/logbroker,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/metrics,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/constraintenforcer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/global,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/jobs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/jobs/global,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/jobs/replicated,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/replicated,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/restart,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/taskinit,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/taskreaper,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/update,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/orchestrator/volumeenforcer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/raftselector,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/resourceapi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/scheduler,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state/raft,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state/raft/membership,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state/raft/storage,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state/raft/transport,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/state/store,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/manager/watchapi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/node,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/protobuf,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/protobuf/plugin,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/protobuf/ptypes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/remotes,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/template,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/volumequeue,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/watch,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/watch/queue,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/swarmkit/v2/xnet,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys/mount,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys/mountinfo,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys/sequential,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys/signal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/sys/symlink,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/moby/term,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/morikuni,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/morikuni/aec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/go-digest,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/image-spec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/image-spec/identity,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/image-spec/specs-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/image-spec/specs-go/v1,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/cgroups,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/configs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/devices,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/user,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/userns,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runtime-spec,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/runtime-spec/specs-go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/selinux,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/selinux/go-selinux,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/selinux/go-selinux/label,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/selinux/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/opencontainers/selinux/pkg/pwalkdir,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/pelletier,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/pelletier/go-toml,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/philhofer,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/philhofer/fwd,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/pkg/errors,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_golang,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_golang/prometheus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_golang/prometheus/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_golang/prometheus/promhttp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_model,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/client_model/go,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/expfmt,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/internal/bitbucket.org,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/internal/bitbucket.org/ww,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/common/model,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/procfs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/procfs/internal,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/procfs/internal/fs,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/prometheus/procfs/internal/util,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers/rootlesskit,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers/rootlesskit/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers/rootlesskit/pkg/api,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers/rootlesskit/pkg/api/client,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/rootless-containers/rootlesskit/pkg/port,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/sean-,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/sean-/seed,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/sirupsen,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/sirupsen/logrus,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/spf13,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/spf13/cobra,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/spf13/pflag,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tinylib,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tinylib/msgp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tinylib/msgp/msgp,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi/fsutil,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi/fsutil/copy,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi/fsutil/types,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi/go-archvariant,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/tonistiigi/units,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split/archive,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split/archive/tar,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split/tar,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split/tar/asm,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vbatts/tar-split/tar/storage,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vishvananda,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vishvananda/netlink,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vishvananda/netlink/nl,/home/yuri/go/src/github.com/docker/docker/vendor/github.com/vishvananda/netns,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/bbolt,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/client,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/client/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/client/pkg/v3,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/client/pkg/v3/fileutil,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg/v3,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg/v3/crc,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg/v3/idutil,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg/v3/ioutil,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/pkg/v3/pbutil,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft/v3,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft/v3/confchange,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft/v3/quorum,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft/v3/raftpb,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/raft/v3/tracker,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/etcdserver,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/etcdserver/api,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/etcdserver/api/snap,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/etcdserver/api/snap/snappb,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/wal,/home/yuri/go/src/github.com/docker/docker/vendor/go.etcd.io/etcd/server/v3/wal/walpb,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/internal/tagencoding,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/metric,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/metric/metricdata,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/metric/metricproducer,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/plugin,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/plugin/ocgrpc,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/resource,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/stats,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/stats/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/stats/view,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/tag,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/trace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/trace/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/trace/propagation,/home/yuri/go/src/github.com/docker/docker/vendor/go.opencensus.io/trace/tracestate,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/net,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/net/http,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/httptrace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/attribute,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/baggage,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/codes,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/exporters,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/exporters/otlp,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal/baggage,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal/global,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal/metric,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal/metric/global,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/internal/metric/registry,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/metric,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/metric/global,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/metric/number,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/metric/sdkapi,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/metric/unit,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/propagation,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk/instrumentation,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk/internal/env,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk/resource,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/sdk/trace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/semconv,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/semconv/v1.7.0,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/otel/trace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/collector,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/collector/trace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/collector/trace/v1,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/common,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/common/v1,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/resource,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/resource/v1,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/trace,/home/yuri/go/src/github.com/docker/docker/vendor/go.opentelemetry.io/proto/otlp/trace/v1,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/atomic,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/multierr,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/buffer,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/internal,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/internal/bufferpool,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/internal/color,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/internal/exit,/home/yuri/go/src/github.com/docker/docker/vendor/go.uber.org/zap/zapcore,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/blowfish,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/chacha20,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/cryptobyte,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/cryptobyte/asn1,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/curve25519,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/curve25519/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/curve25519/internal/field,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/ed25519,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/internal/poly1305,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/internal/subtle,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/nacl,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/nacl/secretbox,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/nacl/sign,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/ocsp,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/pbkdf2,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/pkcs12,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/pkcs12/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/pkcs12/internal/rc2,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/salsa20,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/salsa20/salsa,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/ssh,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/ssh/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/bpf,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/context,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/context/ctxhttp,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/http,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/http/httpguts,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/http2,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/http2/hpack,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/idna,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/internal/iana,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/internal/socket,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/internal/socks,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/internal/timeseries,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/ipv4,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/ipv6,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/proxy,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/trace,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/net/websocket,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/authhandler,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/google,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/google/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/google/internal/externalaccount,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/jws,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/oauth2/jwt,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sync,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sync/errgroup,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sync/semaphore,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sync/singleflight,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sync/syncmap,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sys,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sys/execabs,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sys/internal,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sys/internal/unsafeheader,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/sys/unix,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/secure,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/secure/bidirule,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/transform,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/unicode,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/unicode/bidi,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/text/unicode/norm,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/time,/home/yuri/go/src/github.com/docker/docker/vendor/golang.org/x/time/rate,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/internal,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/internal/impersonate,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/iterator,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/option,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/option/internaloption,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/support,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/support/bundler,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/transport,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/transport/cert,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/transport/grpc,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/transport/internal,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/api/transport/internal/dca,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/annotations,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/distribution,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/httpbody,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/label,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/metric,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/api/monitoredres,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/logging,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/logging/type,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/logging/v2,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/rpc,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/googleapis/rpc/status,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/protobuf,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/genproto/protobuf/field_mask,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/attributes,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/backoff,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer/base,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer/grpclb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer/grpclb/grpc_lb_v1,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer/grpclb/state,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/balancer/roundrobin,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/binarylog,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/codes,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/connectivity,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/authinfo,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/conn,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/handshaker/service,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/proto,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/google,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/insecure,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/credentials/oauth,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/encoding,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/encoding/proto,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/grpclog,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/health,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/health/grpc_health_v1,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/backoff,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/balancerload,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/binarylog,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/buffer,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/channelz,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/credentials,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/envconfig,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/googlecloud,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/grpclog,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/grpcrand,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/grpcsync,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/grpcutil,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/resolver,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/resolver/dns,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/resolver/passthrough,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/resolver/unix,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/serviceconfig,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/status,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/syscall,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/transport,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/internal/transport/networktype,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/keepalive,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/metadata,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/peer,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/resolver,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/serviceconfig,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/stats,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/status,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/grpc/tap,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/encoding,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/encoding/protojson,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/encoding/prototext,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/encoding/protowire,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/descfmt,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/descopts,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/detrand,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding/defval,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding/json,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding/messageset,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding/tag,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/encoding/text,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/errors,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/filedesc,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/filetype,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/flags,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/genid,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/impl,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/order,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/pragma,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/set,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/strs,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/internal/version,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/proto,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/reflect,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/reflect/protodesc,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/reflect/protoreflect,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/reflect/protoregistry,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/runtime,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/runtime/protoiface,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/runtime/protoimpl,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/descriptorpb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/anypb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/durationpb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/emptypb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/fieldmaskpb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/structpb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/timestamppb,/home/yuri/go/src/github.com/docker/docker/vendor/google.golang.org/protobuf/types/known/wrapperspb,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/assert,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/assert/cmp,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/assert/opt,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/env,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/fs,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/golden,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/icmd,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal/assert,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal/cleanup,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal/difflib,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal/format,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/internal/source,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/poll,/home/yuri/go/src/github.com/docker/docker/vendor/gotest.tools/v3/skip,/home/yuri/go/src/github.com/docker/docker/volume,/home/yuri/go/src/github.com/docker/docker/volume/drivers,/home/yuri/go/src/github.com/docker/docker/volume/local,/home/yuri/go/src/github.com/docker/docker/volume/mounts,/home/yuri/go/src/github.com/docker/docker/volume/service,/home/yuri/go/src/github.com/docker/docker/volume/service/opts,/home/yuri/go/src/github.com/docker/docker/volume/testutils}","kind":7}]}}]}
[Trace - 23:10:31.306 PM] Sending response 'client/registerCapability - (3)' in 100ms.
Result:
[Trace - 23:10:31.306 PM] Received request 'client/registerCapability - (4)'.
Params: {"registrations":[{"id":"workspace/didChangeConfiguration","method":"workspace/didChangeConfiguration"}]}
[Trace - 23:10:31.306 PM] Sending response 'client/registerCapability - (4)' in 0ms.
Result:
[Error - Received] 23:10:31.324 PM #1 JSON RPC cancelled
[Trace - 23:10:31.725 PM] Received response 'textDocument/documentLink - (2)' in 2815ms.
Result: [{"range":{"start":{"line":3,"character":2},"end":{"line":3,"character":9}},"target":"https://pkg.go.dev/context"},{"range":{"start":{"line":4,"character":2},"end":{"line":4,"character":15}},"target":"https://pkg.go.dev/encoding/json"},{"range":{"start":{"line":5,"character":2},"end":{"line":5,"character":5}},"target":"https://pkg.go.dev/fmt"},{"range":{"start":{"line":6,"character":2},"end":{"line":6,"character":4}},"target":"https://pkg.go.dev/io"},{"range":{"start":{"line":7,"character":2},"end":{"line":7,"character":4}},"target":"https://pkg.go.dev/os"},{"range":{"start":{"line":8,"character":2},"end":{"line":8,"character":9}},"target":"https://pkg.go.dev/runtime"},{"range":{"start":{"line":9,"character":2},"end":{"line":9,"character":6}},"target":"https://pkg.go.dev/time"},{"range":{"start":{"line":11,"character":2},"end":{"line":11,"character":38}},"target":"https://pkg.go.dev/github.com/containerd/containerd/log"},{"range":{"start":{"line":12,"character":2},"end":{"line":12,"character":44}},"target":"https://pkg.go.dev/github.com/containerd/containerd/platforms"},{"range":{"start":{"line":13,"character":2},"end":{"line":13,"character":32}},"target":"https://pkg.go.dev/github.com/docker/distribution"},{"range":{"start":{"line":14,"character":2},"end":{"line":14,"character":54}},"target":"https://pkg.go.dev/github.com/docker/distribution/manifest/manifestlist"},{"range":{"start":{"line":15,"character":2},"end":{"line":15,"character":51}},"target":"https://pkg.go.dev/github.com/docker/distribution/manifest/ocischema"},{"range":{"start":{"line":16,"character":2},"end":{"line":16,"character":49}},"target":"https://pkg.go.dev/github.com/docker/distribution/manifest/schema1"},{"range":{"start":{"line":17,"character":2},"end":{"line":17,"character":49}},"target":"https://pkg.go.dev/github.com/docker/distribution/manifest/schema2"},{"range":{"start":{"line":18,"character":2},"end":{"line":18,"character":42}},"target":"https://pkg.go.dev/github.com/docker/distribution/reference"},{"range":{"start":{"line":19,"character":2},"end":{"line":19,"character":58}},"target":"https://pkg.go.dev/github.com/docker/distribution/registry/client/transport"},{"range":{"start":{"line":20,"character":2},"end":{"line":20,"character":48}},"target":"https://pkg.go.dev/github.com/docker/docker/distribution/metadata"},{"range":{"start":{"line":21,"character":2},"end":{"line":21,"character":44}},"target":"https://pkg.go.dev/github.com/docker/docker/distribution/xfer"},{"range":{"start":{"line":22,"character":2},"end":{"line":22,"character":32}},"target":"https://pkg.go.dev/github.com/docker/docker/image"},{"range":{"start":{"line":23,"character":5},"end":{"line":23,"character":38}},"target":"https://pkg.go.dev/github.com/docker/docker/image/v1"},{"range":{"start":{"line":24,"character":2},"end":{"line":24,"character":32}},"target":"https://pkg.go.dev/github.com/docker/docker/layer"},{"range":{"start":{"line":25,"character":2},"end":{"line":25,"character":38}},"target":"https://pkg.go.dev/github.com/docker/docker/pkg/ioutils"},{"range":{"start":{"line":26,"character":2},"end":{"line":26,"character":39}},"target":"https://pkg.go.dev/github.com/docker/docker/pkg/progress"},{"range":{"start":{"line":27,"character":2},"end":{"line":27,"character":39}},"target":"https://pkg.go.dev/github.com/docker/docker/pkg/stringid"},{"range":{"start":{"line":28,"character":2},"end":{"line":28,"character":37}},"target":"https://pkg.go.dev/github.com/docker/docker/pkg/system"},{"range":{"start":{"line":29,"character":11},"end":{"line":29,"character":45}},"target":"https://pkg.go.dev/github.com/docker/docker/reference"},{"range":{"start":{"line":30,"character":2},"end":{"line":30,"character":35}},"target":"https://pkg.go.dev/github.com/docker/docker/registry"},{"range":{"start":{"line":31,"character":2},"end":{"line":31,"character":37}},"target":"https://pkg.go.dev/github.com/opencontainers/go-digest"},{"range":{"start":{"line":32,"character":8},"end":{"line":32,"character":56}},"target":"https://pkg.go.dev/github.com/opencontainers/image-spec/specs-go/v1"},{"range":{"start":{"line":33,"character":2},"end":{"line":33,"character":23}},"target":"https://pkg.go.dev/github.com/pkg/errors"},{"range":{"start":{"line":34,"character":2},"end":{"line":34,"character":28}},"target":"https://pkg.go.dev/github.com/sirupsen/logrus"},{"range":{"start":{"line":35,"character":14},"end":{"line":35,"character":50}},"target":"https://pkg.go.dev/github.com/tonistiigi/go-archvariant"},{"range":{"start":{"line":444,"character":31},"end":{"line":444,"character":40}},"target":"https://docker.io"},{"range":{"start":{"line":445,"character":158},"end":{"line":445,"character":217}},"target":"https://docs.docker.com/registry/spec/deprecated-schema-v1/"},{"range":{"start":{"line":857,"character":204},"end":{"line":857,"character":263}},"target":"https://docs.docker.com/registry/spec/deprecated-schema-v1/"},{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":69}},"target":"https://github.com/docker/docker/distribution"},{"range":{"start":{"line":665,"character":4},"end":{"line":665,"character":49}},"target":"https://github.com/docker/docker/issues/24766"}]
[Trace - 23:10:31.725 PM] Received response 'textDocument/inlayHint - (3)' in 2815ms.
Result: null
[Trace - 23:10:31.740 PM] Received response 'textDocument/codeAction - (4)' in 2083ms.
Result: null
[Trace - 23:10:31.740 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go","version":1,"diagnostics":[]}
[Trace - 23:10:31.740 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go","diagnostics":[{"range":{"start":{"line":417,"character":6},"end":{"line":417,"character":46}},"severity":2,"source":"deepequalerrors","message":"avoid using reflect.DeepEqual with errors"}]}
[Trace - 23:10:31.740 PM] Received response 'textDocument/documentSymbol - (5)' in 2026ms.
Result: [{"name":"errRootFSMismatch","kind":13,"range":{"start":{"line":39,"character":1},"end":{"line":39,"character":87}},"selectionRange":{"start":{"line":39,"character":1},"end":{"line":39,"character":18}}},{"name":"errRootFSInvalid","kind":13,"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":72}},"selectionRange":{"start":{"line":40,"character":1},"end":{"line":40,"character":17}}},{"name":"imageConfigPullError","detail":"struct{...}","kind":23,"range":{"start":{"line":45,"character":5},"end":{"line":47,"character":1}},"selectionRange":{"start":{"line":45,"character":5},"end":{"line":45,"character":25}},"children":[{"name":"Err","detail":"error","kind":8,"range":{"start":{"line":46,"character":1},"end":{"line":46,"character":10}},"selectionRange":{"start":{"line":46,"character":1},"end":{"line":46,"character":4}}}]},{"name":"(imageConfigPullError).Error","detail":"func() string","kind":6,"range":{"start":{"line":50,"character":0},"end":{"line":52,"character":1}},"selectionRange":{"start":{"line":50,"character":30},"end":{"line":50,"character":35}}},{"name":"newPuller","detail":"func(endpoint registry.APIEndpoint, repoInfo *registry.RepositoryInfo, config *ImagePullConfig, local ContentStore) *puller","kind":12,"range":{"start":{"line":55,"character":0},"end":{"line":65,"character":1}},"selectionRange":{"start":{"line":55,"character":5},"end":{"line":55,"character":14}}},{"name":"puller","detail":"struct{...}","kind":23,"range":{"start":{"line":67,"character":5},"end":{"line":74,"character":1}},"selectionRange":{"start":{"line":67,"character":5},"end":{"line":67,"character":11}},"children":[{"name":"metadataService","detail":"metadata.V2MetadataService","kind":8,"range":{"start":{"line":68,"character":1},"end":{"line":68,"character":43}},"selectionRange":{"start":{"line":68,"character":1},"end":{"line":68,"character":16}}},{"name":"endpoint","detail":"registry.APIEndpoint","kind":8,"range":{"start":{"line":69,"character":1},"end":{"line":69,"character":37}},"selectionRange":{"start":{"line":69,"character":1},"end":{"line":69,"character":9}}},{"name":"config","detail":"*ImagePullConfig","kind":8,"range":{"start":{"line":70,"character":1},"end":{"line":70,"character":33}},"selectionRange":{"start":{"line":70,"character":1},"end":{"line":70,"character":7}}},{"name":"repoInfo","detail":"*registry.RepositoryInfo","kind":8,"range":{"start":{"line":71,"character":1},"end":{"line":71,"character":41}},"selectionRange":{"start":{"line":71,"character":1},"end":{"line":71,"character":9}}},{"name":"repo","detail":"distribution.Repository","kind":8,"range":{"start":{"line":72,"character":1},"end":{"line":72,"character":40}},"selectionRange":{"start":{"line":72,"character":1},"end":{"line":72,"character":5}}},{"name":"manifestStore","detail":"*manifestStore","kind":8,"range":{"start":{"line":73,"character":1},"end":{"line":73,"character":31}},"selectionRange":{"start":{"line":73,"character":1},"end":{"line":73,"character":14}}}]},{"name":"(*puller).pull","detail":"func(ctx context.Context, ref reference.Named) (err error)","kind":6,"range":{"start":{"line":76,"character":0},"end":{"line":101,"character":1}},"selectionRange":{"start":{"line":76,"character":17},"end":{"line":76,"character":21}}},{"name":"(*puller).pullRepository","detail":"func(ctx context.Context, ref reference.Named) (err error)","kind":6,"range":{"start":{"line":103,"character":0},"end":{"line":140,"character":1}},"selectionRange":{"start":{"line":103,"character":17},"end":{"line":103,"character":31}}},{"name":"(*puller).writeStatus","detail":"func(requestedTag string, layersDownloaded bool)","kind":6,"range":{"start":{"line":146,"character":0},"end":{"line":152,"character":1}},"selectionRange":{"start":{"line":146,"character":17},"end":{"line":146,"character":28}}},{"name":"layerDescriptor","detail":"struct{...}","kind":23,"range":{"start":{"line":154,"character":5},"end":{"line":163,"character":1}},"selectionRange":{"start":{"line":154,"character":5},"end":{"line":154,"character":20}},"children":[{"name":"digest","detail":"digest.Digest","kind":8,"range":{"start":{"line":155,"character":1},"end":{"line":155,"character":30}},"selectionRange":{"start":{"line":155,"character":1},"end":{"line":155,"character":7}}},{"name":"diffID","detail":"layer.DiffID","kind":8,"range":{"start":{"line":156,"character":1},"end":{"line":156,"character":29}},"selectionRange":{"start":{"line":156,"character":1},"end":{"line":156,"character":7}}},{"name":"repoInfo","detail":"*registry.RepositoryInfo","kind":8,"range":{"start":{"line":157,"character":1},"end":{"line":157,"character":41}},"selectionRange":{"start":{"line":157,"character":1},"end":{"line":157,"character":9}}},{"name":"repo","detail":"distribution.Repository","kind":8,"range":{"start":{"line":158,"character":1},"end":{"line":158,"character":40}},"selectionRange":{"start":{"line":158,"character":1},"end":{"line":158,"character":5}}},{"name":"metadataService","detail":"metadata.V2MetadataService","kind":8,"range":{"start":{"line":159,"character":1},"end":{"line":159,"character":43}},"selectionRange":{"start":{"line":159,"character":1},"end":{"line":159,"character":16}}},{"name":"tmpFile","detail":"*os.File","kind":8,"range":{"start":{"line":160,"character":1},"end":{"line":160,"character":25}},"selectionRange":{"start":{"line":160,"character":1},"end":{"line":160,"character":8}}},{"name":"verifier","detail":"digest.Verifier","kind":8,"range":{"start":{"line":161,"character":1},"end":{"line":161,"character":32}},"selectionRange":{"start":{"line":161,"character":1},"end":{"line":161,"character":9}}},{"name":"src","detail":"distribution.Descriptor","kind":8,"range":{"start":{"line":162,"character":1},"end":{"line":162,"character":40}},"selectionRange":{"start":{"line":162,"character":1},"end":{"line":162,"character":4}}}]},{"name":"(*layerDescriptor).Key","detail":"func() string","kind":6,"range":{"start":{"line":165,"character":0},"end":{"line":167,"character":1}},"selectionRange":{"start":{"line":165,"character":27},"end":{"line":165,"character":30}}},{"name":"(*layerDescriptor).ID","detail":"func() string","kind":6,"range":{"start":{"line":169,"character":0},"end":{"line":171,"character":1}},"selectionRange":{"start":{"line":169,"character":27},"end":{"line":169,"character":29}}},{"name":"(*layerDescriptor).DiffID","detail":"func() (layer.DiffID, error)","kind":6,"range":{"start":{"line":173,"character":0},"end":{"line":178,"character":1}},"selectionRange":{"start":{"line":173,"character":27},"end":{"line":173,"character":33}}},{"name":"(*layerDescriptor).Download","detail":"func(ctx context.Context, progressOutput progress.Output) (io.ReadCloser, int64, error)","kind":6,"range":{"start":{"line":180,"character":0},"end":{"line":316,"character":1}},"selectionRange":{"start":{"line":180,"character":27},"end":{"line":180,"character":35}}},{"name":"(*layerDescriptor).Close","detail":"func()","kind":6,"range":{"start":{"line":318,"character":0},"end":{"line":325,"character":1}},"selectionRange":{"start":{"line":318,"character":27},"end":{"line":318,"character":32}}},{"name":"(*layerDescriptor).truncateDownloadFile","detail":"func() error","kind":6,"range":{"start":{"line":327,"character":0},"end":{"line":342,"character":1}},"selectionRange":{"start":{"line":327,"character":27},"end":{"line":327,"character":47}}},{"name":"(*layerDescriptor).Registered","detail":"func(diffID layer.DiffID)","kind":6,"range":{"start":{"line":344,"character":0},"end":{"line":347,"character":1}},"selectionRange":{"start":{"line":344,"character":27},"end":{"line":344,"character":37}}},{"name":"(*puller).pullTag","detail":"func(ctx context.Context, ref reference.Named, platform *specs.Platform) (tagUpdated bool, err error)","kind":6,"range":{"start":{"line":349,"character":0},"end":{"line":499,"character":1}},"selectionRange":{"start":{"line":349,"character":17},"end":{"line":349,"character":24}}},{"name":"(*puller).validateMediaType","detail":"func(mediaType string) error","kind":6,"range":{"start":{"line":503,"character":0},"end":{"line":521,"character":1}},"selectionRange":{"start":{"line":503,"character":17},"end":{"line":503,"character":34}}},{"name":"(*puller).pullSchema1","detail":"func(ctx context.Context, ref reference.Reference, unverifiedManifest *schema1.SignedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error)","kind":6,"range":{"start":{"line":523,"character":0},"end":{"line":605,"character":1}},"selectionRange":{"start":{"line":523,"character":17},"end":{"line":523,"character":28}}},{"name":"(*puller).pullSchema2Layers","detail":"func(ctx context.Context, target distribution.Descriptor, layers []distribution.Descriptor, platform *specs.Platform) (id digest.Digest, err error)","kind":6,"range":{"start":{"line":607,"character":0},"end":{"line":780,"character":1}},"selectionRange":{"start":{"line":607,"character":17},"end":{"line":607,"character":34}}},{"name":"(*puller).pullSchema2","detail":"func(ctx context.Context, ref reference.Named, mfst *schema2.DeserializedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error)","kind":6,"range":{"start":{"line":782,"character":0},"end":{"line":789,"character":1}},"selectionRange":{"start":{"line":782,"character":17},"end":{"line":782,"character":28}}},{"name":"(*puller).pullOCI","detail":"func(ctx context.Context, ref reference.Named, mfst *ocischema.DeserializedManifest, platform *specs.Platform) (id digest.Digest, manifestDigest digest.Digest, err error)","kind":6,"range":{"start":{"line":791,"character":0},"end":{"line":798,"character":1}},"selectionRange":{"start":{"line":791,"character":17},"end":{"line":791,"character":24}}},{"name":"receiveConfig","detail":"func(configChan \u003c-chan []byte, errChan \u003c-chan error) ([]byte, *image.RootFS, *specs.Platform, error)","kind":12,"range":{"start":{"line":800,"character":0},"end":{"line":817,"character":1}},"selectionRange":{"start":{"line":800,"character":5},"end":{"line":800,"character":18}}},{"name":"(*puller).pullManifestList","detail":"func(ctx context.Context, ref reference.Named, mfstList *manifestlist.DeserializedManifestList, pp *specs.Platform) (id digest.Digest, manifestListDigest digest.Digest, err error)","kind":6,"range":{"start":{"line":821,"character":0},"end":{"line":894,"character":1}},"selectionRange":{"start":{"line":821,"character":17},"end":{"line":821,"character":33}}},{"name":"defaultSchemaPullBackoff","kind":14,"range":{"start":{"line":897,"character":1},"end":{"line":897,"character":54}},"selectionRange":{"start":{"line":897,"character":1},"end":{"line":897,"character":25}}},{"name":"defaultMaxSchemaPullAttempts","kind":14,"range":{"start":{"line":898,"character":1},"end":{"line":898,"character":33}},"selectionRange":{"start":{"line":898,"character":1},"end":{"line":898,"character":29}}},{"name":"(*puller).pullSchema2Config","detail":"func(ctx context.Context, dgst digest.Digest) (configJSON []byte, err error)","kind":6,"range":{"start":{"line":901,"character":0},"end":{"line":923,"character":1}},"selectionRange":{"start":{"line":901,"character":17},"end":{"line":901,"character":34}}},{"name":"noMatchesErr","detail":"struct{...}","kind":23,"range":{"start":{"line":925,"character":5},"end":{"line":927,"character":1}},"selectionRange":{"start":{"line":925,"character":5},"end":{"line":925,"character":17}},"children":[{"name":"platform","detail":"specs.Platform","kind":8,"range":{"start":{"line":926,"character":1},"end":{"line":926,"character":24}},"selectionRange":{"start":{"line":926,"character":1},"end":{"line":926,"character":9}}}]},{"name":"(noMatchesErr).Error","detail":"func() string","kind":6,"range":{"start":{"line":929,"character":0},"end":{"line":931,"character":1}},"selectionRange":{"start":{"line":929,"character":22},"end":{"line":929,"character":27}}},{"name":"retry","detail":"func(ctx context.Context, maxAttempts int, sleep time.Duration, f func(ctx context.Context) error) (err error)","kind":12,"range":{"start":{"line":933,"character":0},"end":{"line":957,"character":1}},"selectionRange":{"start":{"line":933,"character":5},"end":{"line":933,"character":10}}},{"name":"schema2ManifestDigest","detail":"func(ref reference.Named, mfst distribution.Manifest) (digest.Digest, error)","kind":12,"range":{"start":{"line":961,"character":0},"end":{"line":982,"character":1}},"selectionRange":{"start":{"line":961,"character":5},"end":{"line":961,"character":26}}},{"name":"verifySchema1Manifest","detail":"func(signedManifest *schema1.SignedManifest, ref reference.Reference) (m *schema1.Manifest, err error)","kind":12,"range":{"start":{"line":984,"character":0},"end":{"line":1011,"character":1}},"selectionRange":{"start":{"line":984,"character":5},"end":{"line":984,"character":26}}},{"name":"fixManifestLayers","detail":"func(m *schema1.Manifest) error","kind":12,"range":{"start":{"line":1015,"character":0},"end":{"line":1059,"character":1}},"selectionRange":{"start":{"line":1015,"character":5},"end":{"line":1015,"character":22}}},{"name":"createDownloadFile","detail":"func() (*os.File, error)","kind":12,"range":{"start":{"line":1061,"character":0},"end":{"line":1063,"character":1}},"selectionRange":{"start":{"line":1061,"character":5},"end":{"line":1061,"character":23}}},{"name":"toOCIPlatform","detail":"func(p manifestlist.PlatformSpec) *specs.Platform","kind":12,"range":{"start":{"line":1065,"character":0},"end":{"line":1078,"character":1}},"selectionRange":{"start":{"line":1065,"character":5},"end":{"line":1065,"character":18}}},{"name":"maximumSpec","detail":"func() specs.Platform","kind":12,"range":{"start":{"line":1081,"character":0},"end":{"line":1087,"character":1}},"selectionRange":{"start":{"line":1081,"character":5},"end":{"line":1081,"character":16}}}]
[Trace - 23:10:31.740 PM] Received response 'textDocument/codeLens - (6)' in 1471ms.
Result: null
[Trace - 23:10:31.748 PM] Received response 'textDocument/foldingRange - (7)' in 1391ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":35,"endCharacter":51,"kind":"imports"},{"startLine":38,"startCharacter":5,"endLine":40,"endCharacter":72},{"startLine":43,"startCharacter":65,"endLine":44,"endCharacter":29,"kind":"comment"},{"startLine":45,"startCharacter":34,"endLine":46,"endCharacter":10},{"startLine":50,"startCharacter":46,"endLine":51,"endCharacter":61},{"startLine":55,"startCharacter":135,"endLine":64,"endCharacter":2},{"startLine":56,"startCharacter":16,"endLine":63,"endCharacter":3},{"startLine":61,"startCharacter":32,"endLine":62,"endCharacter":15},{"startLine":67,"startCharacter":20,"endLine":73,"endCharacter":31},{"startLine":76,"startCharacter":77,"endLine":100,"endCharacter":11},{"startLine":79,"startCharacter":16,"endLine":81,"endCharacter":12},{"startLine":85,"startCharacter":16,"endLine":86,"endCharacter":12},{"startLine":89,"startCharacter":50,"endLine":98,"endCharacter":3},{"startLine":90,"startCharacter":39,"endLine":91,"endCharacter":13},{"startLine":93,"startCharacter":46,"endLine":97,"endCharacter":4},{"startLine":94,"startCharacter":24,"endLine":96,"endCharacter":21},{"startLine":103,"startCharacter":87,"endLine":139,"endCharacter":11},{"startLine":105,"startCharacter":32,"endLine":109,"endCharacter":3},{"startLine":107,"startCharacter":17,"endLine":108,"endCharacter":13},{"startLine":110,"startCharacter":9,"endLine":134,"endCharacter":3},{"startLine":112,"startCharacter":17,"endLine":113,"endCharacter":13},{"startLine":116,"startCharacter":28,"endLine":133,"endCharacter":51},{"startLine":118,"startCharacter":18,"endLine":119,"endCharacter":14},{"startLine":122,"startCharacter":18,"endLine":129,"endCharacter":14},{"startLine":123,"startCharacter":50,"endLine":125,"endCharacter":43,"kind":"comment"},{"startLine":126,"startCharacter":51,"endLine":127,"endCharacter":27},{"startLine":131,"startCharacter":100,"endLine":132,"endCharacter":104,"kind":"comment"},{"startLine":142,"startCharacter":79,"endLine":145,"endCharacter":17,"kind":"comment"},{"startLine":146,"startCharacter":74,"endLine":151,"endCharacter":2},{"startLine":147,"startCharacter":22,"endLine":148,"endCharacter":99},{"startLine":149,"startCharacter":9,"endLine":150,"endCharacter":96},{"startLine":154,"startCharacter":29,"endLine":162,"endCharacter":40},{"startLine":165,"startCharacter":41,"endLine":166,"endCharacter":34},{"startLine":169,"startCharacter":40,"endLine":170,"endCharacter":47},{"startLine":173,"startCharacter":59,"endLine":177,"endCharacter":47},{"startLine":174,"startCharacter":21,"endLine":175,"endCharacter":23},{"startLine":180,"startCharacter":120,"endLine":315,"endCharacter":14},{"startLine":183,"startCharacter":6,"endLine":185,"endCharacter":14},{"startLine":188,"startCharacter":23,"endLine":192,"endCharacter":3},{"startLine":190,"startCharacter":17,"endLine":191,"endCharacter":43},{"startLine":193,"startCharacter":9,"endLine":209,"endCharacter":3},{"startLine":195,"startCharacter":17,"endLine":206,"endCharacter":4},{"startLine":200,"startCharacter":55,"endLine":201,"endCharacter":70},{"startLine":204,"startCharacter":18,"endLine":205,"endCharacter":44},{"startLine":207,"startCharacter":25,"endLine":208,"endCharacter":88},{"startLine":215,"startCharacter":16,"endLine":217,"endCharacter":34},{"startLine":220,"startCharacter":17,"endLine":227,"endCharacter":3},{"startLine":222,"startCharacter":17,"endLine":226,"endCharacter":21},{"startLine":223,"startCharacter":52,"endLine":224,"endCharacter":44},{"startLine":230,"startCharacter":16,"endLine":234,"endCharacter":10},{"startLine":231,"startCharacter":61,"endLine":233,"endCharacter":43,"kind":"comment"},{"startLine":235,"startCharacter":9,"endLine":250,"endCharacter":3},{"startLine":236,"startCharacter":33,"endLine":241,"endCharacter":4},{"startLine":239,"startCharacter":52,"endLine":240,"endCharacter":44},{"startLine":244,"startCharacter":59,"endLine":246,"endCharacter":14,"kind":"comment"},{"startLine":248,"startCharacter":17,"endLine":249,"endCharacter":21},{"startLine":256,"startCharacter":24,"endLine":257,"endCharacter":36},{"startLine":261,"startCharacter":16,"endLine":268,"endCharacter":34},{"startLine":262,"startCharacter":48,"endLine":266,"endCharacter":21},{"startLine":263,"startCharacter":52,"endLine":264,"endCharacter":44},{"startLine":273,"startCharacter":29,"endLine":286,"endCharacter":42},{"startLine":277,"startCharacter":61,"endLine":278,"endCharacter":30,"kind":"comment"},{"startLine":279,"startCharacter":18,"endLine":284,"endCharacter":21},{"startLine":280,"startCharacter":52,"endLine":281,"endCharacter":44},{"startLine":294,"startCharacter":16,"endLine":301,"endCharacter":42},{"startLine":296,"startCharacter":51,"endLine":297,"endCharacter":66},{"startLine":304,"startCharacter":72,"endLine":305,"endCharacter":18,"kind":"comment"},{"startLine":308,"startCharacter":37,"endLine":315,"endCharacter":2},{"startLine":308,"startCharacter":60,"endLine":314,"endCharacter":12},{"startLine":311,"startCharacter":17,"endLine":312,"endCharacter":66},{"startLine":318,"startCharacter":36,"endLine":324,"endCharacter":2},{"startLine":319,"startCharacter":23,"endLine":323,"endCharacter":3},{"startLine":321,"startCharacter":57,"endLine":322,"endCharacter":69},{"startLine":327,"startCharacter":57,"endLine":341,"endCharacter":11},{"startLine":331,"startCharacter":60,"endLine":333,"endCharacter":12},{"startLine":336,"startCharacter":47,"endLine":338,"endCharacter":12},{"startLine":344,"startCharacter":60,"endLine":346,"endCharacter":118},{"startLine":349,"startCharacter":123,"endLine":498,"endCharacter":17},{"startLine":350,"startCharacter":6,"endLine":356,"endCharacter":18},{"startLine":358,"startCharacter":67,"endLine":360,"endCharacter":33},{"startLine":361,"startCharacter":69,"endLine":371,"endCharacter":18},{"startLine":364,"startCharacter":17,"endLine":365,"endCharacter":20},{"startLine":372,"startCharacter":9,"endLine":373,"endCharacter":121},{"startLine":376,"startCharacter":22,"endLine":380,"endCharacter":4},{"startLine":376,"startCharacter":45,"endLine":380,"endCharacter":3},{"startLine":377,"startCharacter":16,"endLine":379,"endCharacter":16},{"startLine":382,"startCharacter":26,"endLine":385,"endCharacter":17},{"startLine":388,"startCharacter":16,"endLine":415,"endCharacter":3},{"startLine":389,"startCharacter":48,"endLine":411,"endCharacter":76},{"startLine":392,"startCharacter":10,"endLine":396,"endCharacter":1},{"startLine":401,"startCharacter":54,"endLine":403,"endCharacter":69,"kind":"comment"},{"startLine":406,"startCharacter":18,"endLine":407,"endCharacter":21},{"startLine":413,"startCharacter":17,"endLine":414,"endCharacter":20},{"startLine":418,"startCharacter":21,"endLine":419,"endCharacter":93},{"startLine":422,"startCharacter":59,"endLine":425,"endCharacter":3},{"startLine":423,"startCharacter":74,"endLine":424,"endCharacter":20},{"startLine":431,"startCharacter":6,"endLine":433,"endCharacter":30},{"startLine":436,"startCharacter":30,"endLine":470,"endCharacter":44},{"startLine":437,"startCharacter":30,"endLine":453,"endCharacter":3},{"startLine":438,"startCharacter":30,"endLine":439,"endCharacter":60},{"startLine":442,"startCharacter":115,"endLine":443,"endCharacter":34,"kind":"comment"},{"startLine":444,"startCharacter":43,"endLine":447,"endCharacter":53},{"startLine":451,"startCharacter":17,"endLine":452,"endCharacter":20},{"startLine":454,"startCharacter":36,"endLine":458,"endCharacter":3},{"startLine":456,"startCharacter":17,"endLine":457,"endCharacter":20},{"startLine":459,"startCharacter":38,"endLine":463,"endCharacter":3},{"startLine":461,"startCharacter":17,"endLine":462,"endCharacter":20},{"startLine":464,"startCharacter":45,"endLine":468,"endCharacter":3},{"startLine":466,"startCharacter":17,"endLine":467,"endCharacter":20},{"startLine":469,"startCharacter":9,"endLine":470,"endCharacter":44},{"startLine":475,"startCharacter":36,"endLine":496,"endCharacter":3},{"startLine":477,"startCharacter":17,"endLine":480,"endCharacter":4},{"startLine":478,"startCharacter":22,"endLine":479,"endCharacter":86},{"startLine":481,"startCharacter":45,"endLine":482,"endCharacter":20},{"startLine":485,"startCharacter":53,"endLine":488,"endCharacter":4},{"startLine":486,"startCharacter":80,"endLine":487,"endCharacter":21},{"startLine":489,"startCharacter":10,"endLine":495,"endCharacter":4},{"startLine":490,"startCharacter":94,"endLine":491,"endCharacter":21},{"startLine":493,"startCharacter":71,"endLine":494,"endCharacter":21},{"startLine":501,"startCharacter":81,"endLine":502,"endCharacter":17,"kind":"comment"},{"startLine":503,"startCharacter":60,"endLine":520,"endCharacter":57},{"startLine":505,"startCharacter":36,"endLine":506,"endCharacter":43},{"startLine":507,"startCharacter":9,"endLine":508,"endCharacter":39},{"startLine":510,"startCharacter":38,"endLine":513,"endCharacter":3},{"startLine":511,"startCharacter":21,"endLine":512,"endCharacter":13},{"startLine":517,"startCharacter":23,"endLine":518,"endCharacter":25},{"startLine":523,"startCharacter":206,"endLine":604,"endCharacter":36},{"startLine":524,"startCharacter":21,"endLine":529,"endCharacter":3},{"startLine":525,"startCharacter":76,"endLine":526,"endCharacter":68,"kind":"comment"},{"startLine":527,"startCharacter":41,"endLine":528,"endCharacter":124},{"startLine":534,"startCharacter":16,"endLine":535,"endCharacter":20},{"startLine":542,"startCharacter":16,"endLine":543,"endCharacter":20},{"startLine":551,"startCharacter":71,"endLine":552,"endCharacter":68,"kind":"comment"},{"startLine":553,"startCharacter":59,"endLine":583,"endCharacter":52},{"startLine":555,"startCharacter":43,"endLine":556,"endCharacter":82},{"startLine":559,"startCharacter":24,"endLine":560,"endCharacter":46},{"startLine":562,"startCharacter":105,"endLine":563,"endCharacter":21},{"startLine":567,"startCharacter":17,"endLine":568,"endCharacter":21},{"startLine":572,"startCharacter":26,"endLine":573,"endCharacter":11},{"startLine":576,"startCharacter":38,"endLine":580,"endCharacter":37},{"startLine":587,"startCharacter":16,"endLine":588,"endCharacter":20},{"startLine":593,"startCharacter":16,"endLine":594,"endCharacter":20},{"startLine":598,"startCharacter":16,"endLine":599,"endCharacter":20},{"startLine":607,"startCharacter":179,"endLine":779,"endCharacter":20},{"startLine":608,"startCharacter":71,"endLine":611,"endCharacter":27},{"startLine":609,"startCharacter":57,"endLine":610,"endCharacter":14,"kind":"comment"},{"startLine":616,"startCharacter":71,"endLine":617,"endCharacter":68,"kind":"comment"},{"startLine":618,"startCharacter":27,"endLine":630,"endCharacter":52},{"startLine":619,"startCharacter":45,"endLine":620,"endCharacter":79},{"startLine":622,"startCharacter":38,"endLine":627,"endCharacter":21},{"startLine":642,"startCharacter":12,"endLine":649,"endCharacter":26},{"startLine":644,"startCharacter":17,"endLine":647,"endCharacter":9},{"startLine":652,"startCharacter":6,"endLine":657,"endCharacter":34},{"startLine":661,"startCharacter":21,"endLine":662,"endCharacter":28},{"startLine":665,"startCharacter":79,"endLine":672,"endCharacter":63,"kind":"comment"},{"startLine":673,"startCharacter":31,"endLine":701,"endCharacter":3},{"startLine":675,"startCharacter":17,"endLine":676,"endCharacter":17},{"startLine":678,"startCharacter":26,"endLine":679,"endCharacter":30},{"startLine":681,"startCharacter":94,"endLine":682,"endCharacter":17},{"startLine":685,"startCharacter":52,"endLine":686,"endCharacter":31},{"startLine":688,"startCharacter":22,"endLine":694,"endCharacter":35},{"startLine":689,"startCharacter":77,"endLine":690,"endCharacter":69,"kind":"comment"},{"startLine":691,"startCharacter":48,"endLine":692,"endCharacter":127},{"startLine":697,"startCharacter":73,"endLine":698,"endCharacter":32,"kind":"comment"},{"startLine":699,"startCharacter":30,"endLine":700,"endCharacter":69},{"startLine":704,"startCharacter":77,"endLine":705,"endCharacter":78,"kind":"comment"},{"startLine":706,"startCharacter":63,"endLine":707,"endCharacter":50},{"startLine":710,"startCharacter":37,"endLine":728,"endCharacter":5},{"startLine":711,"startCharacter":13,"endLine":727,"endCharacter":23},{"startLine":712,"startCharacter":8,"endLine":714,"endCharacter":23},{"startLine":718,"startCharacter":18,"endLine":723,"endCharacter":10},{"startLine":719,"startCharacter":59,"endLine":721,"endCharacter":56,"kind":"comment"},{"startLine":729,"startCharacter":9,"endLine":731,"endCharacter":22},{"startLine":734,"startCharacter":23,"endLine":746,"endCharacter":3},{"startLine":736,"startCharacter":40,"endLine":737,"endCharacter":25},{"startLine":739,"startCharacter":17,"endLine":745,"endCharacter":17},{"startLine":741,"startCharacter":11,"endLine":743,"endCharacter":23},{"startLine":749,"startCharacter":9,"endLine":752,"endCharacter":16},{"startLine":751,"startCharacter":27,"endLine":752,"endCharacter":16},{"startLine":755,"startCharacter":20,"endLine":756,"endCharacter":17},{"startLine":759,"startCharacter":29,"endLine":771,"endCharacter":3},{"startLine":760,"startCharacter":67,"endLine":762,"endCharacter":30,"kind":"comment"},{"startLine":763,"startCharacter":65,"endLine":764,"endCharacter":31},{"startLine":767,"startCharacter":43,"endLine":770,"endCharacter":4},{"startLine":768,"startCharacter":62,"endLine":769,"endCharacter":32},{"startLine":775,"startCharacter":16,"endLine":776,"endCharacter":16},{"startLine":782,"startCharacter":194,"endLine":788,"endCharacter":31},{"startLine":784,"startCharacter":16,"endLine":785,"endCharacter":20},{"startLine":791,"startCharacter":192,"endLine":797,"endCharacter":31},{"startLine":793,"startCharacter":16,"endLine":794,"endCharacter":20},{"startLine":800,"startCharacter":116,"endLine":816,"endCharacter":2},{"startLine":801,"startCharacter":9,"endLine":813,"endCharacter":27},{"startLine":802,"startCharacter":33,"endLine":811,"endCharacter":42},{"startLine":804,"startCharacter":17,"endLine":805,"endCharacter":28},{"startLine":808,"startCharacter":17,"endLine":809,"endCharacter":28},{"startLine":812,"startCharacter":23,"endLine":813,"endCharacter":27},{"startLine":814,"startCharacter":70,"endLine":815,"endCharacter":55,"kind":"comment"},{"startLine":819,"startCharacter":67,"endLine":820,"endCharacter":31,"kind":"comment"},{"startLine":821,"startCharacter":210,"endLine":893,"endCharacter":48},{"startLine":823,"startCharacter":16,"endLine":824,"endCharacter":20},{"startLine":828,"startCharacter":15,"endLine":829,"endCharacter":16},{"startLine":835,"startCharacter":40,"endLine":891,"endCharacter":36},{"startLine":836,"startCharacter":94,"endLine":837,"endCharacter":21},{"startLine":840,"startCharacter":27,"endLine":843,"endCharacter":29},{"startLine":846,"startCharacter":17,"endLine":847,"endCharacter":21},{"startLine":851,"startCharacter":17,"endLine":852,"endCharacter":21},{"startLine":855,"startCharacter":31,"endLine":889,"endCharacter":11},{"startLine":856,"startCharacter":31,"endLine":865,"endCharacter":4},{"startLine":863,"startCharacter":18,"endLine":864,"endCharacter":22},{"startLine":866,"startCharacter":37,"endLine":871,"endCharacter":4},{"startLine":869,"startCharacter":18,"endLine":870,"endCharacter":22},{"startLine":872,"startCharacter":39,"endLine":877,"endCharacter":4},{"startLine":875,"startCharacter":18,"endLine":876,"endCharacter":22},{"startLine":878,"startCharacter":46,"endLine":886,"endCharacter":4},{"startLine":880,"startCharacter":18,"endLine":885,"endCharacter":5},{"startLine":882,"startCharacter":36,"endLine":884,"endCharacter":13},{"startLine":887,"startCharacter":10,"endLine":889,"endCharacter":11},{"startLine":896,"startCharacter":7,"endLine":898,"endCharacter":33},{"startLine":901,"startCharacter":108,"endLine":922,"endCharacter":23},{"startLine":903,"startCharacter":13,"endLine":906,"endCharacter":2},{"startLine":903,"startCharacter":113,"endLine":905,"endCharacter":12},{"startLine":907,"startCharacter":16,"endLine":908,"endCharacter":17},{"startLine":913,"startCharacter":54,"endLine":914,"endCharacter":17},{"startLine":916,"startCharacter":26,"endLine":919,"endCharacter":17},{"startLine":925,"startCharacter":26,"endLine":926,"endCharacter":24},{"startLine":929,"startCharacter":38,"endLine":930,"endCharacter":107},{"startLine":933,"startCharacter":118,"endLine":956,"endCharacter":73},{"startLine":935,"startCharacter":41,"endLine":954,"endCharacter":3},{"startLine":937,"startCharacter":17,"endLine":938,"endCharacter":13},{"startLine":940,"startCharacter":34,"endLine":941,"endCharacter":8},{"startLine":944,"startCharacter":30,"endLine":953,"endCharacter":4},{"startLine":946,"startCharacter":11,"endLine":952,"endCharacter":14},{"startLine":947,"startCharacter":21,"endLine":949,"endCharacter":20},{"startLine":950,"startCharacter":18,"endLine":952,"endCharacter":14},{"startLine":959,"startCharacter":73,"endLine":960,"endCharacter":56,"kind":"comment"},{"startLine":961,"startCharacter":100,"endLine":981,"endCharacter":40},{"startLine":963,"startCharacter":16,"endLine":964,"endCharacter":16},{"startLine":968,"startCharacter":67,"endLine":978,"endCharacter":31},{"startLine":970,"startCharacter":54,"endLine":971,"endCharacter":17},{"startLine":973,"startCharacter":27,"endLine":976,"endCharacter":17},{"startLine":984,"startCharacter":126,"endLine":1010,"endCharacter":14},{"startLine":985,"startCharacter":67,"endLine":987,"endCharacter":73,"kind":"comment"},{"startLine":988,"startCharacter":69,"endLine":997,"endCharacter":3},{"startLine":990,"startCharacter":69,"endLine":991,"endCharacter":18},{"startLine":993,"startCharacter":27,"endLine":996,"endCharacter":18},{"startLine":1001,"startCharacter":26,"endLine":1002,"endCharacter":112},{"startLine":1004,"startCharacter":39,"endLine":1005,"endCharacter":113},{"startLine":1007,"startCharacter":26,"endLine":1008,"endCharacter":89},{"startLine":1013,"startCharacter":77,"endLine":1014,"endCharacter":35,"kind":"comment"},{"startLine":1015,"startCharacter":51,"endLine":1058,"endCharacter":11},{"startLine":1017,"startCharacter":28,"endLine":1027,"endCharacter":3},{"startLine":1020,"startCharacter":83,"endLine":1021,"endCharacter":13},{"startLine":1025,"startCharacter":47,"endLine":1026,"endCharacter":13},{"startLine":1030,"startCharacter":65,"endLine":1032,"endCharacter":71},{"startLine":1039,"startCharacter":27,"endLine":1045,"endCharacter":28},{"startLine":1041,"startCharacter":61,"endLine":1042,"endCharacter":73},{"startLine":1049,"startCharacter":38,"endLine":1055,"endCharacter":3},{"startLine":1050,"startCharacter":33,"endLine":1052,"endCharacter":56},{"startLine":1053,"startCharacter":44,"endLine":1054,"endCharacter":92},{"startLine":1061,"startCharacter":45,"endLine":1062,"endCharacter":41},{"startLine":1065,"startCharacter":65,"endLine":1077,"endCharacter":2},{"startLine":1066,"startCharacter":82,"endLine":1067,"endCharacter":81,"kind":"comment"},{"startLine":1068,"startCharacter":124,"endLine":1069,"endCharacter":12},{"startLine":1071,"startCharacter":24,"endLine":1076,"endCharacter":27},{"startLine":1081,"startCharacter":35,"endLine":1086,"endCharacter":9},{"startLine":1083,"startCharacter":31,"endLine":1084,"endCharacter":40}]
[Trace - 23:10:35.601 PM] Sending request 'textDocument/hover - (8)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"position":{"line":903,"character":19}}
[Trace - 23:10:35.602 PM] Received response 'textDocument/hover - (8)' in 0ms.
Result: {"contents":{"kind":"markdown","value":"```go\nconst defaultMaxSchemaPullAttempts untyped int = 5\n```"},"range":{"start":{"line":903,"character":18},"end":{"line":903,"character":46}}}
[Trace - 23:10:36.165 PM] Sending request 'textDocument/hover - (9)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"position":{"line":902,"character":19}}
[Trace - 23:10:36.166 PM] Received response 'textDocument/hover - (9)' in 0ms.
Result: {"contents":{"kind":"markdown","value":"```go\nfunc (distribution.Repository).Blobs(ctx context.Context) distribution.BlobStore\n```\n\nBlobs returns a reference to this repository's blob service.\n\n\n[`(distribution.Repository).Blobs` on pkg.go.dev](https://pkg.go.dev/github.com/docker/distribution#Repository.Blobs)"},"range":{"start":{"line":902,"character":17},"end":{"line":902,"character":22}}}
[Trace - 23:10:39.751 PM] Sending request 'textDocument/implementation - (10)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"position":{"line":902,"character":19}}
[Trace - 23:10:39.904 PM] Received response 'textDocument/implementation - (10)' in 152ms.
Result: [{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go","range":{"start":{"line":558,"character":27},"end":{"line":558,"character":32}}},{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go","range":{"start":{"line":651,"character":19},"end":{"line":651,"character":24}}}]
[Trace - 23:10:39.995 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go","languageId":"go","version":1,"text":"package distribution // import \"github.com/docker/docker/distribution\"\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/docker/distribution\"\n\t\"github.com/docker/distribution/manifest/schema2\"\n\t\"github.com/docker/distribution/reference\"\n\t\"github.com/docker/distribution/registry/api/errcode\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/distribution/metadata\"\n\t\"github.com/docker/docker/layer\"\n\t\"github.com/docker/docker/pkg/progress\"\n\trefstore \"github.com/docker/docker/reference\"\n\tregistrypkg \"github.com/docker/docker/registry\"\n\t\"github.com/opencontainers/go-digest\"\n)\n\nfunc TestGetRepositoryMountCandidates(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tname string\n\t\thmacKey string\n\t\ttargetRepo string\n\t\tmaxCandidates int\n\t\tmetadata []metadata.V2Metadata\n\t\tcandidates []metadata.V2Metadata\n\t}{\n\t\t{\n\t\t\tname: \"empty metadata\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{},\n\t\t\tcandidates: []metadata.V2Metadata{},\n\t\t},\n\t\t{\n\t\t\tname: \"one item not matching\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{taggedMetadata(\"key\", \"dgst\", \"127.0.0.1/repo\")},\n\t\t\tcandidates: []metadata.V2Metadata{},\n\t\t},\n\t\t{\n\t\t\tname: \"one item matching\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{taggedMetadata(\"hash\", \"1\", \"docker.io/library/hello-world\")},\n\t\t\tcandidates: []metadata.V2Metadata{taggedMetadata(\"hash\", \"1\", \"docker.io/library/hello-world\")},\n\t\t},\n\t\t{\n\t\t\tname: \"allow missing SourceRepository\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"1\")},\n\t\t\t\t{Digest: digest.Digest(\"3\")},\n\t\t\t\t{Digest: digest.Digest(\"2\")},\n\t\t\t},\n\t\t\tcandidates: []metadata.V2Metadata{},\n\t\t},\n\t\t{\n\t\t\tname: \"handle docker.io\",\n\t\t\ttargetRepo: \"user/app\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"1\"), SourceRepository: \"docker.io/user/foo\"},\n\t\t\t\t{Digest: digest.Digest(\"3\"), SourceRepository: \"docker.io/user/bar\"},\n\t\t\t\t{Digest: digest.Digest(\"2\"), SourceRepository: \"docker.io/library/app\"},\n\t\t\t},\n\t\t\tcandidates: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"3\"), SourceRepository: \"docker.io/user/bar\"},\n\t\t\t\t{Digest: digest.Digest(\"1\"), SourceRepository: \"docker.io/user/foo\"},\n\t\t\t\t{Digest: digest.Digest(\"2\"), SourceRepository: \"docker.io/library/app\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"sort more items\",\n\t\t\thmacKey: \"abcd\",\n\t\t\ttargetRepo: \"127.0.0.1/foo/bar\",\n\t\t\tmaxCandidates: -1,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"hash\", \"1\", \"docker.io/library/hello-world\"),\n\t\t\t\ttaggedMetadata(\"efgh\", \"2\", \"127.0.0.1/hello-world\"),\n\t\t\t\ttaggedMetadata(\"abcd\", \"3\", \"docker.io/library/busybox\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"4\", \"docker.io/library/busybox\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"5\", \"127.0.0.1/foo\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"6\", \"127.0.0.1/bar\"),\n\t\t\t\ttaggedMetadata(\"efgh\", \"7\", \"127.0.0.1/foo/bar\"),\n\t\t\t\ttaggedMetadata(\"abcd\", \"8\", \"127.0.0.1/xyz\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"9\", \"127.0.0.1/foo/app\"),\n\t\t\t},\n\t\t\tcandidates: []metadata.V2Metadata{\n\t\t\t\t// first by matching hash\n\t\t\t\ttaggedMetadata(\"abcd\", \"8\", \"127.0.0.1/xyz\"),\n\t\t\t\t// then by longest matching prefix\n\t\t\t\ttaggedMetadata(\"hash\", \"9\", \"127.0.0.1/foo/app\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"5\", \"127.0.0.1/foo\"),\n\t\t\t\t// sort the rest of the matching items in reversed order\n\t\t\t\ttaggedMetadata(\"hash\", \"6\", \"127.0.0.1/bar\"),\n\t\t\t\ttaggedMetadata(\"efgh\", \"2\", \"127.0.0.1/hello-world\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"limit max candidates\",\n\t\t\thmacKey: \"abcd\",\n\t\t\ttargetRepo: \"user/app\",\n\t\t\tmaxCandidates: 3,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"abcd\", \"1\", \"docker.io/user/app1\"),\n\t\t\t\ttaggedMetadata(\"abcd\", \"2\", \"docker.io/user/app/base\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"3\", \"docker.io/user/app\"),\n\t\t\t\ttaggedMetadata(\"abcd\", \"4\", \"127.0.0.1/user/app\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"5\", \"docker.io/user/foo\"),\n\t\t\t\ttaggedMetadata(\"hash\", \"6\", \"docker.io/app/bar\"),\n\t\t\t},\n\t\t\tcandidates: []metadata.V2Metadata{\n\t\t\t\t// first by matching hash\n\t\t\t\ttaggedMetadata(\"abcd\", \"2\", \"docker.io/user/app/base\"),\n\t\t\t\ttaggedMetadata(\"abcd\", \"1\", \"docker.io/user/app1\"),\n\t\t\t\t// then by longest matching prefix\n\t\t\t\t// \"docker.io/usr/app\" is excluded since candidates must\n\t\t\t\t// be from a different repository\n\t\t\t\ttaggedMetadata(\"hash\", \"5\", \"docker.io/user/foo\"),\n\t\t\t},\n\t\t},\n\t} {\n\t\trepoInfo, err := reference.ParseNormalizedNamed(tc.targetRepo)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"[%s] failed to parse reference name: %v\", tc.name, err)\n\t\t}\n\t\tcandidates := getRepositoryMountCandidates(repoInfo, []byte(tc.hmacKey), tc.maxCandidates, tc.metadata)\n\t\tif len(candidates) != len(tc.candidates) {\n\t\t\tt.Errorf(\"[%s] got unexpected number of candidates: %d != %d\", tc.name, len(candidates), len(tc.candidates))\n\t\t}\n\t\tfor i := 0; i < len(candidates) && i < len(tc.candidates); i++ {\n\t\t\tif !reflect.DeepEqual(candidates[i], tc.candidates[i]) {\n\t\t\t\tt.Errorf(\"[%s] candidate %d does not match expected: %#+v != %#+v\", tc.name, i, candidates[i], tc.candidates[i])\n\t\t\t}\n\t\t}\n\t\tfor i := len(candidates); i < len(tc.candidates); i++ {\n\t\t\tt.Errorf(\"[%s] missing expected candidate at position %d (%#+v)\", tc.name, i, tc.candidates[i])\n\t\t}\n\t\tfor i := len(tc.candidates); i < len(candidates); i++ {\n\t\t\tt.Errorf(\"[%s] got unexpected candidate at position %d (%#+v)\", tc.name, i, candidates[i])\n\t\t}\n\t}\n}\n\nfunc TestLayerAlreadyExists(t *testing.T) {\n\tfor _, tc := range []struct {\n\t\tname string\n\t\tmetadata []metadata.V2Metadata\n\t\ttargetRepo string\n\t\thmacKey string\n\t\tmaxExistenceChecks int\n\t\tcheckOtherRepositories bool\n\t\tremoteBlobs map[digest.Digest]distribution.Descriptor\n\t\tremoteErrors map[digest.Digest]error\n\t\texpectedDescriptor distribution.Descriptor\n\t\texpectedExists bool\n\t\texpectedError error\n\t\texpectedRequests []string\n\t\texpectedAdditions []metadata.V2Metadata\n\t\texpectedRemovals []metadata.V2Metadata\n\t}{\n\t\t{\n\t\t\tname: \"empty metadata\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tcheckOtherRepositories: true,\n\t\t},\n\t\t{\n\t\t\tname: \"single not existent metadata\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\texpectedRequests: []string{\"pear\"},\n\t\t\texpectedRemovals: []metadata.V2Metadata{{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t},\n\t\t{\n\t\t\tname: \"access denied\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxExistenceChecks: 1,\n\t\t\tmetadata: []metadata.V2Metadata{{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\tremoteErrors: map[digest.Digest]error{digest.Digest(\"apple\"): distribution.ErrAccessDenied},\n\t\t\texpectedError: nil,\n\t\t\texpectedRequests: []string{\"apple\"},\n\t\t},\n\t\t{\n\t\t\tname: \"not matching repositories\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/hello-world\"},\n\t\t\t\t{Digest: digest.Digest(\"orange\"), SourceRepository: \"docker.io/library/busybox/subapp\"},\n\t\t\t\t{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"banana\"), SourceRepository: \"127.0.0.1/busybox\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"check other repositories\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmaxExistenceChecks: 10,\n\t\t\tcheckOtherRepositories: true,\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/hello-world\"},\n\t\t\t\t{Digest: digest.Digest(\"orange\"), SourceRepository: \"docker.io/busybox/subapp\"},\n\t\t\t\t{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/library/busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"banana\"), SourceRepository: \"127.0.0.1/busybox\"},\n\t\t\t},\n\t\t\texpectedRequests: []string{\"plum\", \"apple\", \"pear\", \"orange\", \"banana\"},\n\t\t\texpectedRemovals: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/library/busybox\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"find existing blob\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"apple\"): {Digest: digest.Digest(\"apple\")}},\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"apple\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"apple\"},\n\t\t},\n\t\t{\n\t\t\tname: \"find existing blob with different hmac\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{{SourceRepository: \"docker.io/library/busybox\", Digest: digest.Digest(\"apple\"), HMAC: \"dummyhmac\"}},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"apple\"): {Digest: digest.Digest(\"apple\")}},\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"apple\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"apple\"},\n\t\t\texpectedAdditions: []metadata.V2Metadata{{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t},\n\t\t{\n\t\t\tname: \"overwrite media types\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\thmacKey: \"key\",\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"apple\"): {Digest: digest.Digest(\"apple\"), MediaType: \"custom-media-type\"}},\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"apple\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"apple\"},\n\t\t\texpectedAdditions: []metadata.V2Metadata{taggedMetadata(\"key\", \"apple\", \"docker.io/library/busybox\")},\n\t\t},\n\t\t{\n\t\t\tname: \"find existing blob among many\",\n\t\t\ttargetRepo: \"127.0.0.1/myapp\",\n\t\t\thmacKey: \"key\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"someotherkey\", \"pear\", \"127.0.0.1/myapp\"),\n\t\t\t\ttaggedMetadata(\"key\", \"apple\", \"127.0.0.1/myapp\"),\n\t\t\t\ttaggedMetadata(\"\", \"plum\", \"127.0.0.1/myapp\"),\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"pear\"): {Digest: digest.Digest(\"pear\")}},\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"pear\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"apple\", \"plum\", \"pear\"},\n\t\t\texpectedAdditions: []metadata.V2Metadata{taggedMetadata(\"key\", \"pear\", \"127.0.0.1/myapp\")},\n\t\t\texpectedRemovals: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"key\", \"apple\", \"127.0.0.1/myapp\"),\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"127.0.0.1/myapp\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"reach maximum existence checks\",\n\t\t\ttargetRepo: \"user/app\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"banana\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"pear\"): {Digest: digest.Digest(\"pear\")}},\n\t\t\texpectedExists: false,\n\t\t\texpectedRequests: []string{\"banana\", \"plum\", \"apple\"},\n\t\t\texpectedRemovals: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"banana\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"zero allowed existence checks\",\n\t\t\ttargetRepo: \"user/app\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"apple\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t\t{Digest: digest.Digest(\"banana\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t},\n\t\t\tmaxExistenceChecks: 0,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"pear\"): {Digest: digest.Digest(\"pear\")}},\n\t\t},\n\t\t{\n\t\t\tname: \"stat single digest just once\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"key1\", \"pear\", \"docker.io/library/busybox\"),\n\t\t\t\ttaggedMetadata(\"key2\", \"apple\", \"docker.io/library/busybox\"),\n\t\t\t\ttaggedMetadata(\"key3\", \"apple\", \"docker.io/library/busybox\"),\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"pear\"): {Digest: digest.Digest(\"pear\")}},\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"pear\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"apple\", \"pear\"},\n\t\t\texpectedAdditions: []metadata.V2Metadata{{Digest: digest.Digest(\"pear\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\texpectedRemovals: []metadata.V2Metadata{taggedMetadata(\"key3\", \"apple\", \"docker.io/library/busybox\")},\n\t\t},\n\t\t{\n\t\t\tname: \"don't stop on first error\",\n\t\t\ttargetRepo: \"user/app\",\n\t\t\thmacKey: \"key\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"key\", \"banana\", \"docker.io/user/app\"),\n\t\t\t\ttaggedMetadata(\"key\", \"orange\", \"docker.io/user/app\"),\n\t\t\t\ttaggedMetadata(\"key\", \"plum\", \"docker.io/user/app\"),\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteErrors: map[digest.Digest]error{\"orange\": distribution.ErrAccessDenied},\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"apple\"): {}},\n\t\t\texpectedError: nil,\n\t\t\texpectedRequests: []string{\"plum\", \"orange\", \"banana\"},\n\t\t\texpectedRemovals: []metadata.V2Metadata{\n\t\t\t\ttaggedMetadata(\"key\", \"plum\", \"docker.io/user/app\"),\n\t\t\t\ttaggedMetadata(\"key\", \"banana\", \"docker.io/user/app\"),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"remove outdated metadata\",\n\t\t\ttargetRepo: \"docker.io/user/app\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"plum\"), SourceRepository: \"docker.io/library/busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"orange\"), SourceRepository: \"docker.io/user/app\"},\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\tremoteErrors: map[digest.Digest]error{\"orange\": distribution.ErrBlobUnknown},\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"plum\"): {}},\n\t\t\texpectedExists: false,\n\t\t\texpectedRequests: []string{\"orange\"},\n\t\t\texpectedRemovals: []metadata.V2Metadata{{Digest: digest.Digest(\"orange\"), SourceRepository: \"docker.io/user/app\"}},\n\t\t},\n\t\t{\n\t\t\tname: \"missing SourceRepository\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"1\")},\n\t\t\t\t{Digest: digest.Digest(\"3\")},\n\t\t\t\t{Digest: digest.Digest(\"2\")},\n\t\t\t},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\texpectedExists: false,\n\t\t\texpectedRequests: []string{\"2\", \"3\", \"1\"},\n\t\t},\n\n\t\t{\n\t\t\tname: \"with and without SourceRepository\",\n\t\t\ttargetRepo: \"busybox\",\n\t\t\tmetadata: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"1\")},\n\t\t\t\t{Digest: digest.Digest(\"2\"), SourceRepository: \"docker.io/library/busybox\"},\n\t\t\t\t{Digest: digest.Digest(\"3\")},\n\t\t\t},\n\t\t\tremoteBlobs: map[digest.Digest]distribution.Descriptor{digest.Digest(\"1\"): {Digest: digest.Digest(\"1\")}},\n\t\t\tmaxExistenceChecks: 3,\n\t\t\texpectedDescriptor: distribution.Descriptor{Digest: digest.Digest(\"1\"), MediaType: schema2.MediaTypeLayer},\n\t\t\texpectedExists: true,\n\t\t\texpectedRequests: []string{\"2\", \"3\", \"1\"},\n\t\t\texpectedAdditions: []metadata.V2Metadata{{Digest: digest.Digest(\"1\"), SourceRepository: \"docker.io/library/busybox\"}},\n\t\t\texpectedRemovals: []metadata.V2Metadata{\n\t\t\t\t{Digest: digest.Digest(\"2\"), SourceRepository: \"docker.io/library/busybox\"},\n\t\t\t},\n\t\t},\n\t} {\n\t\trepoInfo, err := reference.ParseNormalizedNamed(tc.targetRepo)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"[%s] failed to parse reference name: %v\", tc.name, err)\n\t\t}\n\t\trepo := &mockRepo{\n\t\t\tt: t,\n\t\t\terrors: tc.remoteErrors,\n\t\t\tblobs: tc.remoteBlobs,\n\t\t\trequests: []string{},\n\t\t}\n\t\tctx := context.Background()\n\t\tms := &mockV2MetadataService{}\n\t\tpd := &pushDescriptor{\n\t\t\thmacKey: []byte(tc.hmacKey),\n\t\t\trepoInfo: repoInfo,\n\t\t\tlayer: &storeLayer{\n\t\t\t\tLayer: layer.EmptyLayer,\n\t\t\t},\n\t\t\trepo: repo,\n\t\t\tmetadataService: ms,\n\t\t\tpushState: &pushState{remoteLayers: make(map[layer.DiffID]distribution.Descriptor)},\n\t\t\tcheckedDigests: make(map[digest.Digest]struct{}),\n\t\t}\n\n\t\tdesc, exists, err := pd.layerAlreadyExists(ctx, &progressSink{t}, layer.EmptyLayer.DiffID(), tc.checkOtherRepositories, tc.maxExistenceChecks, tc.metadata)\n\n\t\tif !reflect.DeepEqual(desc, tc.expectedDescriptor) {\n\t\t\tt.Errorf(\"[%s] got unexpected descriptor: %#+v != %#+v\", tc.name, desc, tc.expectedDescriptor)\n\t\t}\n\t\tif exists != tc.expectedExists {\n\t\t\tt.Errorf(\"[%s] got unexpected exists: %t != %t\", tc.name, exists, tc.expectedExists)\n\t\t}\n\t\tif !reflect.DeepEqual(err, tc.expectedError) {\n\t\t\tt.Errorf(\"[%s] got unexpected error: %#+v != %#+v\", tc.name, err, tc.expectedError)\n\t\t}\n\n\t\tif len(repo.requests) != len(tc.expectedRequests) {\n\t\t\tt.Errorf(\"[%s] got unexpected number of requests: %d != %d\", tc.name, len(repo.requests), len(tc.expectedRequests))\n\t\t}\n\t\tfor i := 0; i < len(repo.requests) && i < len(tc.expectedRequests); i++ {\n\t\t\tif repo.requests[i] != tc.expectedRequests[i] {\n\t\t\t\tt.Errorf(\"[%s] request %d does not match expected: %q != %q\", tc.name, i, repo.requests[i], tc.expectedRequests[i])\n\t\t\t}\n\t\t}\n\t\tfor i := len(repo.requests); i < len(tc.expectedRequests); i++ {\n\t\t\tt.Errorf(\"[%s] missing expected request at position %d (%q)\", tc.name, i, tc.expectedRequests[i])\n\t\t}\n\t\tfor i := len(tc.expectedRequests); i < len(repo.requests); i++ {\n\t\t\tt.Errorf(\"[%s] got unexpected request at position %d (%q)\", tc.name, i, repo.requests[i])\n\t\t}\n\n\t\tif len(ms.added) != len(tc.expectedAdditions) {\n\t\t\tt.Errorf(\"[%s] got unexpected number of additions: %d != %d\", tc.name, len(ms.added), len(tc.expectedAdditions))\n\t\t}\n\t\tfor i := 0; i < len(ms.added) && i < len(tc.expectedAdditions); i++ {\n\t\t\tif ms.added[i] != tc.expectedAdditions[i] {\n\t\t\t\tt.Errorf(\"[%s] added metadata at %d does not match expected: %q != %q\", tc.name, i, ms.added[i], tc.expectedAdditions[i])\n\t\t\t}\n\t\t}\n\t\tfor i := len(ms.added); i < len(tc.expectedAdditions); i++ {\n\t\t\tt.Errorf(\"[%s] missing expected addition at position %d (%q)\", tc.name, i, tc.expectedAdditions[i])\n\t\t}\n\t\tfor i := len(tc.expectedAdditions); i < len(ms.added); i++ {\n\t\t\tt.Errorf(\"[%s] unexpected metadata addition at position %d (%q)\", tc.name, i, ms.added[i])\n\t\t}\n\n\t\tif len(ms.removed) != len(tc.expectedRemovals) {\n\t\t\tt.Errorf(\"[%s] got unexpected number of removals: %d != %d\", tc.name, len(ms.removed), len(tc.expectedRemovals))\n\t\t}\n\t\tfor i := 0; i < len(ms.removed) && i < len(tc.expectedRemovals); i++ {\n\t\t\tif ms.removed[i] != tc.expectedRemovals[i] {\n\t\t\t\tt.Errorf(\"[%s] removed metadata at %d does not match expected: %q != %q\", tc.name, i, ms.removed[i], tc.expectedRemovals[i])\n\t\t\t}\n\t\t}\n\t\tfor i := len(ms.removed); i < len(tc.expectedRemovals); i++ {\n\t\t\tt.Errorf(\"[%s] missing expected removal at position %d (%q)\", tc.name, i, tc.expectedRemovals[i])\n\t\t}\n\t\tfor i := len(tc.expectedRemovals); i < len(ms.removed); i++ {\n\t\t\tt.Errorf(\"[%s] removed unexpected metadata at position %d (%q)\", tc.name, i, ms.removed[i])\n\t\t}\n\t}\n}\n\ntype mockReferenceStore struct {\n}\n\nfunc (s *mockReferenceStore) References(id digest.Digest) []reference.Named {\n\treturn []reference.Named{}\n}\nfunc (s *mockReferenceStore) ReferencesByName(ref reference.Named) []refstore.Association {\n\treturn []refstore.Association{}\n}\nfunc (s *mockReferenceStore) AddTag(ref reference.Named, id digest.Digest, force bool) error {\n\treturn nil\n}\nfunc (s *mockReferenceStore) AddDigest(ref reference.Canonical, id digest.Digest, force bool) error {\n\treturn nil\n}\nfunc (s *mockReferenceStore) Delete(ref reference.Named) (bool, error) {\n\treturn true, nil\n}\nfunc (s *mockReferenceStore) Get(ref reference.Named) (digest.Digest, error) {\n\treturn \"\", nil\n}\n\nfunc TestWhenEmptyAuthConfig(t *testing.T) {\n\tfor _, authInfo := range []struct {\n\t\tusername string\n\t\tpassword string\n\t\tregistryToken string\n\t\texpected bool\n\t}{\n\t\t{\n\t\t\tusername: \"\",\n\t\t\tpassword: \"\",\n\t\t\tregistryToken: \"\",\n\t\t\texpected: false,\n\t\t},\n\t\t{\n\t\t\tusername: \"username\",\n\t\t\tpassword: \"password\",\n\t\t\tregistryToken: \"\",\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\tusername: \"\",\n\t\t\tpassword: \"\",\n\t\t\tregistryToken: \"token\",\n\t\t\texpected: true,\n\t\t},\n\t} {\n\t\timagePushConfig := &ImagePushConfig{}\n\t\timagePushConfig.AuthConfig = &registry.AuthConfig{\n\t\t\tUsername: authInfo.username,\n\t\t\tPassword: authInfo.password,\n\t\t\tRegistryToken: authInfo.registryToken,\n\t\t}\n\t\timagePushConfig.ReferenceStore = &mockReferenceStore{}\n\t\trepoInfo, _ := reference.ParseNormalizedNamed(\"xujihui1985/test.img\")\n\t\tpusher := &pusher{\n\t\t\tconfig: imagePushConfig,\n\t\t\trepoInfo: &registrypkg.RepositoryInfo{\n\t\t\t\tName: repoInfo,\n\t\t\t},\n\t\t\tendpoint: registrypkg.APIEndpoint{\n\t\t\t\tURL: &url.URL{\n\t\t\t\t\tScheme: \"https\",\n\t\t\t\t\tHost: \"index.docker.io\",\n\t\t\t\t},\n\t\t\t\tVersion: registrypkg.APIVersion2,\n\t\t\t\tTrimHostname: true,\n\t\t\t},\n\t\t}\n\t\tpusher.push(context.Background())\n\t\tif pusher.pushState.hasAuthInfo != authInfo.expected {\n\t\t\tt.Errorf(\"hasAuthInfo does not match expected: %t != %t\", authInfo.expected, pusher.pushState.hasAuthInfo)\n\t\t}\n\t}\n}\n\ntype mockBlobStoreWithCreate struct {\n\tmockBlobStore\n\trepo *mockRepoWithBlob\n}\n\nfunc (blob *mockBlobStoreWithCreate) Create(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error) {\n\treturn nil, errcode.Errors([]error{errcode.ErrorCodeUnauthorized.WithMessage(\"unauthorized\")})\n}\n\ntype mockRepoWithBlob struct {\n\tmockRepo\n}\n\nfunc (m *mockRepoWithBlob) Blobs(ctx context.Context) distribution.BlobStore {\n\tblob := &mockBlobStoreWithCreate{}\n\tblob.mockBlobStore.repo = &m.mockRepo\n\tblob.repo = m\n\treturn blob\n}\n\ntype mockMetadataService struct {\n\tmockV2MetadataService\n}\n\nfunc (m *mockMetadataService) GetMetadata(diffID layer.DiffID) ([]metadata.V2Metadata, error) {\n\treturn []metadata.V2Metadata{\n\t\ttaggedMetadata(\"abcd\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28\", \"docker.io/user/app1\"),\n\t\ttaggedMetadata(\"abcd\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e22\", \"docker.io/user/app/base\"),\n\t\ttaggedMetadata(\"hash\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e23\", \"docker.io/user/app\"),\n\t\ttaggedMetadata(\"abcd\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e24\", \"127.0.0.1/user/app\"),\n\t\ttaggedMetadata(\"hash\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e25\", \"docker.io/user/foo\"),\n\t\ttaggedMetadata(\"hash\", \"sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e26\", \"docker.io/app/bar\"),\n\t}, nil\n}\n\nvar removeMetadata bool\n\nfunc (m *mockMetadataService) Remove(metadata metadata.V2Metadata) error {\n\tremoveMetadata = true\n\treturn nil\n}\n\nfunc TestPushRegistryWhenAuthInfoEmpty(t *testing.T) {\n\trepoInfo, _ := reference.ParseNormalizedNamed(\"user/app\")\n\tms := &mockMetadataService{}\n\tremoteErrors := map[digest.Digest]error{digest.Digest(\"sha256:apple\"): distribution.ErrAccessDenied}\n\tremoteBlobs := map[digest.Digest]distribution.Descriptor{digest.Digest(\"sha256:apple\"): {Digest: digest.Digest(\"shar256:apple\")}}\n\trepo := &mockRepoWithBlob{\n\t\tmockRepo: mockRepo{\n\t\t\tt: t,\n\t\t\terrors: remoteErrors,\n\t\t\tblobs: remoteBlobs,\n\t\t\trequests: []string{},\n\t\t},\n\t}\n\tpd := &pushDescriptor{\n\t\thmacKey: []byte(\"abcd\"),\n\t\trepoInfo: repoInfo,\n\t\tlayer: &storeLayer{\n\t\t\tLayer: layer.EmptyLayer,\n\t\t},\n\t\trepo: repo,\n\t\tmetadataService: ms,\n\t\tpushState: &pushState{\n\t\t\tremoteLayers: make(map[layer.DiffID]distribution.Descriptor),\n\t\t\thasAuthInfo: false,\n\t\t},\n\t\tcheckedDigests: make(map[digest.Digest]struct{}),\n\t}\n\tpd.Upload(context.Background(), &progressSink{t})\n\tif removeMetadata {\n\t\tt.Fatalf(\"expect remove not be called but called\")\n\t}\n}\n\nfunc taggedMetadata(key string, dgst string, sourceRepo string) metadata.V2Metadata {\n\tmeta := metadata.V2Metadata{\n\t\tDigest: digest.Digest(dgst),\n\t\tSourceRepository: sourceRepo,\n\t}\n\n\tmeta.HMAC = metadata.ComputeV2MetadataHMAC([]byte(key), &meta)\n\treturn meta\n}\n\ntype mockRepo struct {\n\tt *testing.T\n\terrors map[digest.Digest]error\n\tblobs map[digest.Digest]distribution.Descriptor\n\trequests []string\n}\n\nvar _ distribution.Repository = &mockRepo{}\n\nfunc (m *mockRepo) Named() reference.Named {\n\tm.t.Fatalf(\"Named() not implemented\")\n\treturn nil\n}\nfunc (m *mockRepo) Manifests(ctc context.Context, options ...distribution.ManifestServiceOption) (distribution.ManifestService, error) {\n\tm.t.Fatalf(\"Manifests() not implemented\")\n\treturn nil, nil\n}\nfunc (m *mockRepo) Tags(ctc context.Context) distribution.TagService {\n\tm.t.Fatalf(\"Tags() not implemented\")\n\treturn nil\n}\nfunc (m *mockRepo) Blobs(ctx context.Context) distribution.BlobStore {\n\treturn &mockBlobStore{\n\t\trepo: m,\n\t}\n}\n\ntype mockBlobStore struct {\n\trepo *mockRepo\n}\n\nvar _ distribution.BlobStore = &mockBlobStore{}\n\nfunc (m *mockBlobStore) Stat(ctx context.Context, dgst digest.Digest) (distribution.Descriptor, error) {\n\tm.repo.requests = append(m.repo.requests, dgst.String())\n\tif err, exists := m.repo.errors[dgst]; exists {\n\t\treturn distribution.Descriptor{}, err\n\t}\n\tif desc, exists := m.repo.blobs[dgst]; exists {\n\t\treturn desc, nil\n\t}\n\treturn distribution.Descriptor{}, distribution.ErrBlobUnknown\n}\nfunc (m *mockBlobStore) Get(ctx context.Context, dgst digest.Digest) ([]byte, error) {\n\tm.repo.t.Fatal(\"Get() not implemented\")\n\treturn nil, nil\n}\n\nfunc (m *mockBlobStore) Open(ctx context.Context, dgst digest.Digest) (distribution.ReadSeekCloser, error) {\n\tm.repo.t.Fatal(\"Open() not implemented\")\n\treturn nil, nil\n}\n\nfunc (m *mockBlobStore) Put(ctx context.Context, mediaType string, p []byte) (distribution.Descriptor, error) {\n\tm.repo.t.Fatal(\"Put() not implemented\")\n\treturn distribution.Descriptor{}, nil\n}\n\nfunc (m *mockBlobStore) Create(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error) {\n\tm.repo.t.Fatal(\"Create() not implemented\")\n\treturn nil, nil\n}\nfunc (m *mockBlobStore) Resume(ctx context.Context, id string) (distribution.BlobWriter, error) {\n\tm.repo.t.Fatal(\"Resume() not implemented\")\n\treturn nil, nil\n}\nfunc (m *mockBlobStore) Delete(ctx context.Context, dgst digest.Digest) error {\n\tm.repo.t.Fatal(\"Delete() not implemented\")\n\treturn nil\n}\nfunc (m *mockBlobStore) ServeBlob(ctx context.Context, w http.ResponseWriter, r *http.Request, dgst digest.Digest) error {\n\tm.repo.t.Fatalf(\"ServeBlob() not implemented\")\n\treturn nil\n}\n\ntype mockV2MetadataService struct {\n\tadded []metadata.V2Metadata\n\tremoved []metadata.V2Metadata\n}\n\nvar _ metadata.V2MetadataService = &mockV2MetadataService{}\n\nfunc (*mockV2MetadataService) GetMetadata(diffID layer.DiffID) ([]metadata.V2Metadata, error) {\n\treturn nil, nil\n}\nfunc (*mockV2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {\n\treturn \"\", nil\n}\nfunc (m *mockV2MetadataService) Add(diffID layer.DiffID, metadata metadata.V2Metadata) error {\n\tm.added = append(m.added, metadata)\n\treturn nil\n}\nfunc (m *mockV2MetadataService) TagAndAdd(diffID layer.DiffID, hmacKey []byte, meta metadata.V2Metadata) error {\n\tmeta.HMAC = metadata.ComputeV2MetadataHMAC(hmacKey, &meta)\n\tm.Add(diffID, meta)\n\treturn nil\n}\nfunc (m *mockV2MetadataService) Remove(metadata metadata.V2Metadata) error {\n\tm.removed = append(m.removed, metadata)\n\treturn nil\n}\n\ntype progressSink struct {\n\tt *testing.T\n}\n\nfunc (s *progressSink) WriteProgress(p progress.Progress) error {\n\ts.t.Logf(\"progress update: %#+v\", p)\n\treturn nil\n}\n"}}
[Trace - 23:10:39.995 PM] Sending request 'textDocument/codeAction - (11)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[],"triggerKind":2}}
[Trace - 23:10:39.997 PM] Sending request 'textDocument/documentLink - (12)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}}
[Trace - 23:10:40.010 PM] Sending request 'textDocument/documentSymbol - (13)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}}
[Trace - 23:10:40.037 PM] Received response 'textDocument/codeAction - (11)' in 41ms.
Result: null
[Trace - 23:10:40.051 PM] Received response 'textDocument/documentLink - (12)' in 53ms.
Result: [{"range":{"start":{"line":3,"character":2},"end":{"line":3,"character":9}},"target":"https://pkg.go.dev/context"},{"range":{"start":{"line":4,"character":2},"end":{"line":4,"character":10}},"target":"https://pkg.go.dev/net/http"},{"range":{"start":{"line":5,"character":2},"end":{"line":5,"character":9}},"target":"https://pkg.go.dev/net/url"},{"range":{"start":{"line":6,"character":2},"end":{"line":6,"character":9}},"target":"https://pkg.go.dev/reflect"},{"range":{"start":{"line":7,"character":2},"end":{"line":7,"character":9}},"target":"https://pkg.go.dev/testing"},{"range":{"start":{"line":9,"character":2},"end":{"line":9,"character":32}},"target":"https://pkg.go.dev/github.com/docker/distribution"},{"range":{"start":{"line":10,"character":2},"end":{"line":10,"character":49}},"target":"https://pkg.go.dev/github.com/docker/distribution/manifest/schema2"},{"range":{"start":{"line":11,"character":2},"end":{"line":11,"character":42}},"target":"https://pkg.go.dev/github.com/docker/distribution/reference"},{"range":{"start":{"line":12,"character":2},"end":{"line":12,"character":53}},"target":"https://pkg.go.dev/github.com/docker/distribution/registry/api/errcode"},{"range":{"start":{"line":13,"character":2},"end":{"line":13,"character":45}},"target":"https://pkg.go.dev/github.com/docker/docker/api/types/registry"},{"range":{"start":{"line":14,"character":2},"end":{"line":14,"character":48}},"target":"https://pkg.go.dev/github.com/docker/docker/distribution/metadata"},{"range":{"start":{"line":15,"character":2},"end":{"line":15,"character":32}},"target":"https://pkg.go.dev/github.com/docker/docker/layer"},{"range":{"start":{"line":16,"character":2},"end":{"line":16,"character":39}},"target":"https://pkg.go.dev/github.com/docker/docker/pkg/progress"},{"range":{"start":{"line":17,"character":11},"end":{"line":17,"character":45}},"target":"https://pkg.go.dev/github.com/docker/docker/reference"},{"range":{"start":{"line":18,"character":14},"end":{"line":18,"character":47}},"target":"https://pkg.go.dev/github.com/docker/docker/registry"},{"range":{"start":{"line":19,"character":2},"end":{"line":19,"character":37}},"target":"https://pkg.go.dev/github.com/opencontainers/go-digest"},{"range":{"start":{"line":42,"character":71},"end":{"line":42,"character":85}},"target":"https://127.0.0.1/repo"},{"range":{"start":{"line":49,"character":69},"end":{"line":49,"character":98}},"target":"https://docker.io/library/hello-world"},{"range":{"start":{"line":50,"character":69},"end":{"line":50,"character":98}},"target":"https://docker.io/library/hello-world"},{"range":{"start":{"line":64,"character":26},"end":{"line":64,"character":35}},"target":"https://docker.io"},{"range":{"start":{"line":68,"character":52},"end":{"line":68,"character":70}},"target":"https://docker.io/user/foo"},{"range":{"start":{"line":69,"character":52},"end":{"line":69,"character":70}},"target":"https://docker.io/user/bar"},{"range":{"start":{"line":70,"character":52},"end":{"line":70,"character":73}},"target":"https://docker.io/library/app"},{"range":{"start":{"line":73,"character":52},"end":{"line":73,"character":70}},"target":"https://docker.io/user/bar"},{"range":{"start":{"line":74,"character":52},"end":{"line":74,"character":70}},"target":"https://docker.io/user/foo"},{"range":{"start":{"line":75,"character":52},"end":{"line":75,"character":73}},"target":"https://docker.io/library/app"},{"range":{"start":{"line":81,"character":19},"end":{"line":81,"character":36}},"target":"https://127.0.0.1/foo/bar"},{"range":{"start":{"line":84,"character":33},"end":{"line":84,"character":62}},"target":"https://docker.io/library/hello-world"},{"range":{"start":{"line":85,"character":33},"end":{"line":85,"character":54}},"target":"https://127.0.0.1/hello-world"},{"range":{"start":{"line":86,"character":33},"end":{"line":86,"character":58}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":87,"character":33},"end":{"line":87,"character":58}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":88,"character":33},"end":{"line":88,"character":46}},"target":"https://127.0.0.1/foo"},{"range":{"start":{"line":89,"character":33},"end":{"line":89,"character":46}},"target":"https://127.0.0.1/bar"},{"range":{"start":{"line":90,"character":33},"end":{"line":90,"character":50}},"target":"https://127.0.0.1/foo/bar"},{"range":{"start":{"line":91,"character":33},"end":{"line":91,"character":46}},"target":"https://127.0.0.1/xyz"},{"range":{"start":{"line":92,"character":33},"end":{"line":92,"character":50}},"target":"https://127.0.0.1/foo/app"},{"range":{"start":{"line":96,"character":33},"end":{"line":96,"character":46}},"target":"https://127.0.0.1/xyz"},{"range":{"start":{"line":98,"character":33},"end":{"line":98,"character":50}},"target":"https://127.0.0.1/foo/app"},{"range":{"start":{"line":99,"character":33},"end":{"line":99,"character":46}},"target":"https://127.0.0.1/foo"},{"range":{"start":{"line":101,"character":33},"end":{"line":101,"character":46}},"target":"https://127.0.0.1/bar"},{"range":{"start":{"line":102,"character":33},"end":{"line":102,"character":54}},"target":"https://127.0.0.1/hello-world"},{"range":{"start":{"line":111,"character":33},"end":{"line":111,"character":52}},"target":"https://docker.io/user/app1"},{"range":{"start":{"line":112,"character":33},"end":{"line":112,"character":56}},"target":"https://docker.io/user/app/base"},{"range":{"start":{"line":113,"character":33},"end":{"line":113,"character":51}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":114,"character":33},"end":{"line":114,"character":51}},"target":"https://127.0.0.1/user/app"},{"range":{"start":{"line":115,"character":33},"end":{"line":115,"character":51}},"target":"https://docker.io/user/foo"},{"range":{"start":{"line":116,"character":33},"end":{"line":116,"character":50}},"target":"https://docker.io/app/bar"},{"range":{"start":{"line":120,"character":33},"end":{"line":120,"character":56}},"target":"https://docker.io/user/app/base"},{"range":{"start":{"line":121,"character":33},"end":{"line":121,"character":52}},"target":"https://docker.io/user/app1"},{"range":{"start":{"line":125,"character":33},"end":{"line":125,"character":51}},"target":"https://docker.io/user/foo"},{"range":{"start":{"line":177,"character":96},"end":{"line":177,"character":121}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":180,"character":96},"end":{"line":180,"character":121}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":186,"character":97},"end":{"line":186,"character":122}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":196,"character":56},"end":{"line":196,"character":85}},"target":"https://docker.io/library/hello-world"},{"range":{"start":{"line":197,"character":57},"end":{"line":197,"character":89}},"target":"https://docker.io/library/busybox/subapp"},{"range":{"start":{"line":198,"character":55},"end":{"line":198,"character":72}},"target":"https://docker.io/busybox"},{"range":{"start":{"line":200,"character":57},"end":{"line":200,"character":74}},"target":"https://127.0.0.1/busybox"},{"range":{"start":{"line":209,"character":56},"end":{"line":209,"character":85}},"target":"https://docker.io/library/hello-world"},{"range":{"start":{"line":210,"character":57},"end":{"line":210,"character":81}},"target":"https://docker.io/busybox/subapp"},{"range":{"start":{"line":211,"character":55},"end":{"line":211,"character":72}},"target":"https://docker.io/busybox"},{"range":{"start":{"line":212,"character":55},"end":{"line":212,"character":80}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":213,"character":57},"end":{"line":213,"character":74}},"target":"https://127.0.0.1/busybox"},{"range":{"start":{"line":217,"character":55},"end":{"line":217,"character":80}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":223,"character":97},"end":{"line":223,"character":122}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":233,"character":65},"end":{"line":233,"character":90}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":239,"character":97},"end":{"line":239,"character":122}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":244,"character":97},"end":{"line":244,"character":122}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":251,"character":77},"end":{"line":251,"character":102}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":255,"character":16},"end":{"line":255,"character":31}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":258,"character":44},"end":{"line":258,"character":59}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":259,"character":36},"end":{"line":259,"character":51}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":260,"character":32},"end":{"line":260,"character":47}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":267,"character":76},"end":{"line":267,"character":91}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":269,"character":36},"end":{"line":269,"character":51}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":270,"character":55},"end":{"line":270,"character":70}},"target":"https://127.0.0.1/myapp"},{"range":{"start":{"line":277,"character":55},"end":{"line":277,"character":73}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":278,"character":56},"end":{"line":278,"character":74}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":279,"character":55},"end":{"line":279,"character":73}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":280,"character":57},"end":{"line":280,"character":75}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":287,"character":57},"end":{"line":287,"character":75}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":288,"character":55},"end":{"line":288,"character":73}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":289,"character":56},"end":{"line":289,"character":74}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":296,"character":55},"end":{"line":296,"character":73}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":297,"character":56},"end":{"line":297,"character":74}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":298,"character":55},"end":{"line":298,"character":73}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":299,"character":57},"end":{"line":299,"character":75}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":308,"character":36},"end":{"line":308,"character":61}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":309,"character":37},"end":{"line":309,"character":62}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":310,"character":37},"end":{"line":310,"character":62}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":317,"character":96},"end":{"line":317,"character":121}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":318,"character":78},"end":{"line":318,"character":103}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":325,"character":37},"end":{"line":325,"character":55}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":326,"character":37},"end":{"line":326,"character":55}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":327,"character":35},"end":{"line":327,"character":53}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":335,"character":35},"end":{"line":335,"character":53}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":336,"character":37},"end":{"line":336,"character":55}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":341,"character":16},"end":{"line":341,"character":34}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":343,"character":55},"end":{"line":343,"character":80}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":344,"character":57},"end":{"line":344,"character":75}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":351,"character":98},"end":{"line":351,"character":116}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":371,"character":52},"end":{"line":371,"character":77}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":379,"character":93},"end":{"line":379,"character":118}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":381,"character":52},"end":{"line":381,"character":77}},"target":"https://docker.io/library/busybox"},{"range":{"start":{"line":532,"character":14},"end":{"line":532,"character":29}},"target":"https://index.docker.io"},{"range":{"start":{"line":571,"character":101},"end":{"line":571,"character":120}},"target":"https://docker.io/user/app1"},{"range":{"start":{"line":572,"character":101},"end":{"line":572,"character":124}},"target":"https://docker.io/user/app/base"},{"range":{"start":{"line":573,"character":101},"end":{"line":573,"character":119}},"target":"https://docker.io/user/app"},{"range":{"start":{"line":574,"character":101},"end":{"line":574,"character":119}},"target":"https://127.0.0.1/user/app"},{"range":{"start":{"line":575,"character":101},"end":{"line":575,"character":119}},"target":"https://docker.io/user/foo"},{"range":{"start":{"line":576,"character":101},"end":{"line":576,"character":118}},"target":"https://docker.io/app/bar"},{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":69}},"target":"https://github.com/docker/docker/distribution"},{"range":{"start":{"line":123,"character":8},"end":{"line":123,"character":25}},"target":"https://docker.io/usr/app"}]
[Trace - 23:10:40.052 PM] Received response 'textDocument/documentSymbol - (13)' in 41ms.
Result: [{"name":"TestGetRepositoryMountCandidates","detail":"func(t *testing.T)","kind":12,"range":{"start":{"line":22,"character":0},"end":{"line":149,"character":1}},"selectionRange":{"start":{"line":22,"character":5},"end":{"line":22,"character":37}}},{"name":"TestLayerAlreadyExists","detail":"func(t *testing.T)","kind":12,"range":{"start":{"line":151,"character":0},"end":{"line":466,"character":1}},"selectionRange":{"start":{"line":151,"character":5},"end":{"line":151,"character":27}}},{"name":"mockReferenceStore","detail":"struct{}","kind":23,"range":{"start":{"line":468,"character":5},"end":{"line":469,"character":1}},"selectionRange":{"start":{"line":468,"character":5},"end":{"line":468,"character":23}}},{"name":"(*mockReferenceStore).References","detail":"func(id digest.Digest) []reference.Named","kind":6,"range":{"start":{"line":471,"character":0},"end":{"line":473,"character":1}},"selectionRange":{"start":{"line":471,"character":29},"end":{"line":471,"character":39}}},{"name":"(*mockReferenceStore).ReferencesByName","detail":"func(ref reference.Named) []refstore.Association","kind":6,"range":{"start":{"line":474,"character":0},"end":{"line":476,"character":1}},"selectionRange":{"start":{"line":474,"character":29},"end":{"line":474,"character":45}}},{"name":"(*mockReferenceStore).AddTag","detail":"func(ref reference.Named, id digest.Digest, force bool) error","kind":6,"range":{"start":{"line":477,"character":0},"end":{"line":479,"character":1}},"selectionRange":{"start":{"line":477,"character":29},"end":{"line":477,"character":35}}},{"name":"(*mockReferenceStore).AddDigest","detail":"func(ref reference.Canonical, id digest.Digest, force bool) error","kind":6,"range":{"start":{"line":480,"character":0},"end":{"line":482,"character":1}},"selectionRange":{"start":{"line":480,"character":29},"end":{"line":480,"character":38}}},{"name":"(*mockReferenceStore).Delete","detail":"func(ref reference.Named) (bool, error)","kind":6,"range":{"start":{"line":483,"character":0},"end":{"line":485,"character":1}},"selectionRange":{"start":{"line":483,"character":29},"end":{"line":483,"character":35}}},{"name":"(*mockReferenceStore).Get","detail":"func(ref reference.Named) (digest.Digest, error)","kind":6,"range":{"start":{"line":486,"character":0},"end":{"line":488,"character":1}},"selectionRange":{"start":{"line":486,"character":29},"end":{"line":486,"character":32}}},{"name":"TestWhenEmptyAuthConfig","detail":"func(t *testing.T)","kind":12,"range":{"start":{"line":490,"character":0},"end":{"line":543,"character":1}},"selectionRange":{"start":{"line":490,"character":5},"end":{"line":490,"character":28}}},{"name":"mockBlobStoreWithCreate","detail":"struct{...}","kind":23,"range":{"start":{"line":545,"character":5},"end":{"line":548,"character":1}},"selectionRange":{"start":{"line":545,"character":5},"end":{"line":545,"character":28}},"children":[{"name":"mockBlobStore","detail":"mockBlobStore","kind":8,"range":{"start":{"line":546,"character":1},"end":{"line":546,"character":14}},"selectionRange":{"start":{"line":546,"character":1},"end":{"line":546,"character":14}}},{"name":"repo","detail":"*mockRepoWithBlob","kind":8,"range":{"start":{"line":547,"character":1},"end":{"line":547,"character":23}},"selectionRange":{"start":{"line":547,"character":1},"end":{"line":547,"character":5}}}]},{"name":"(*mockBlobStoreWithCreate).Create","detail":"func(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error)","kind":6,"range":{"start":{"line":550,"character":0},"end":{"line":552,"character":1}},"selectionRange":{"start":{"line":550,"character":37},"end":{"line":550,"character":43}}},{"name":"mockRepoWithBlob","detail":"struct{...}","kind":23,"range":{"start":{"line":554,"character":5},"end":{"line":556,"character":1}},"selectionRange":{"start":{"line":554,"character":5},"end":{"line":554,"character":21}},"children":[{"name":"mockRepo","detail":"mockRepo","kind":8,"range":{"start":{"line":555,"character":1},"end":{"line":555,"character":9}},"selectionRange":{"start":{"line":555,"character":1},"end":{"line":555,"character":9}}}]},{"name":"(*mockRepoWithBlob).Blobs","detail":"func(ctx context.Context) distribution.BlobStore","kind":6,"range":{"start":{"line":558,"character":0},"end":{"line":563,"character":1}},"selectionRange":{"start":{"line":558,"character":27},"end":{"line":558,"character":32}}},{"name":"mockMetadataService","detail":"struct{...}","kind":23,"range":{"start":{"line":565,"character":5},"end":{"line":567,"character":1}},"selectionRange":{"start":{"line":565,"character":5},"end":{"line":565,"character":24}},"children":[{"name":"mockV2MetadataService","detail":"mockV2MetadataService","kind":8,"range":{"start":{"line":566,"character":1},"end":{"line":566,"character":22}},"selectionRange":{"start":{"line":566,"character":1},"end":{"line":566,"character":22}}}]},{"name":"(*mockMetadataService).GetMetadata","detail":"func(diffID layer.DiffID) ([]metadata.V2Metadata, error)","kind":6,"range":{"start":{"line":569,"character":0},"end":{"line":578,"character":1}},"selectionRange":{"start":{"line":569,"character":30},"end":{"line":569,"character":41}}},{"name":"removeMetadata","detail":"bool","kind":13,"range":{"start":{"line":580,"character":4},"end":{"line":580,"character":23}},"selectionRange":{"start":{"line":580,"character":4},"end":{"line":580,"character":18}}},{"name":"(*mockMetadataService).Remove","detail":"func(metadata metadata.V2Metadata) error","kind":6,"range":{"start":{"line":582,"character":0},"end":{"line":585,"character":1}},"selectionRange":{"start":{"line":582,"character":30},"end":{"line":582,"character":36}}},{"name":"TestPushRegistryWhenAuthInfoEmpty","detail":"func(t *testing.T)","kind":12,"range":{"start":{"line":587,"character":0},"end":{"line":618,"character":1}},"selectionRange":{"start":{"line":587,"character":5},"end":{"line":587,"character":38}}},{"name":"taggedMetadata","detail":"func(key string, dgst string, sourceRepo string) metadata.V2Metadata","kind":12,"range":{"start":{"line":620,"character":0},"end":{"line":628,"character":1}},"selectionRange":{"start":{"line":620,"character":5},"end":{"line":620,"character":19}}},{"name":"mockRepo","detail":"struct{...}","kind":23,"range":{"start":{"line":630,"character":5},"end":{"line":635,"character":1}},"selectionRange":{"start":{"line":630,"character":5},"end":{"line":630,"character":13}},"children":[{"name":"t","detail":"*testing.T","kind":8,"range":{"start":{"line":631,"character":1},"end":{"line":631,"character":20}},"selectionRange":{"start":{"line":631,"character":1},"end":{"line":631,"character":2}}},{"name":"errors","detail":"map[digest.Digest]error","kind":8,"range":{"start":{"line":632,"character":1},"end":{"line":632,"character":33}},"selectionRange":{"start":{"line":632,"character":1},"end":{"line":632,"character":7}}},{"name":"blobs","detail":"map[digest.Digest]distribution.Descriptor","kind":8,"range":{"start":{"line":633,"character":1},"end":{"line":633,"character":51}},"selectionRange":{"start":{"line":633,"character":1},"end":{"line":633,"character":6}}},{"name":"requests","detail":"[]string","kind":8,"range":{"start":{"line":634,"character":1},"end":{"line":634,"character":18}},"selectionRange":{"start":{"line":634,"character":1},"end":{"line":634,"character":9}}}]},{"name":"(*mockRepo).Named","detail":"func() reference.Named","kind":6,"range":{"start":{"line":639,"character":0},"end":{"line":642,"character":1}},"selectionRange":{"start":{"line":639,"character":19},"end":{"line":639,"character":24}}},{"name":"(*mockRepo).Manifests","detail":"func(ctc context.Context, options ...distribution.ManifestServiceOption) (distribution.ManifestService, error)","kind":6,"range":{"start":{"line":643,"character":0},"end":{"line":646,"character":1}},"selectionRange":{"start":{"line":643,"character":19},"end":{"line":643,"character":28}}},{"name":"(*mockRepo).Tags","detail":"func(ctc context.Context) distribution.TagService","kind":6,"range":{"start":{"line":647,"character":0},"end":{"line":650,"character":1}},"selectionRange":{"start":{"line":647,"character":19},"end":{"line":647,"character":23}}},{"name":"(*mockRepo).Blobs","detail":"func(ctx context.Context) distribution.BlobStore","kind":6,"range":{"start":{"line":651,"character":0},"end":{"line":655,"character":1}},"selectionRange":{"start":{"line":651,"character":19},"end":{"line":651,"character":24}}},{"name":"mockBlobStore","detail":"struct{...}","kind":23,"range":{"start":{"line":657,"character":5},"end":{"line":659,"character":1}},"selectionRange":{"start":{"line":657,"character":5},"end":{"line":657,"character":18}},"children":[{"name":"repo","detail":"*mockRepo","kind":8,"range":{"start":{"line":658,"character":1},"end":{"line":658,"character":15}},"selectionRange":{"start":{"line":658,"character":1},"end":{"line":658,"character":5}}}]},{"name":"(*mockBlobStore).Stat","detail":"func(ctx context.Context, dgst digest.Digest) (distribution.Descriptor, error)","kind":6,"range":{"start":{"line":663,"character":0},"end":{"line":672,"character":1}},"selectionRange":{"start":{"line":663,"character":24},"end":{"line":663,"character":28}}},{"name":"(*mockBlobStore).Get","detail":"func(ctx context.Context, dgst digest.Digest) ([]byte, error)","kind":6,"range":{"start":{"line":673,"character":0},"end":{"line":676,"character":1}},"selectionRange":{"start":{"line":673,"character":24},"end":{"line":673,"character":27}}},{"name":"(*mockBlobStore).Open","detail":"func(ctx context.Context, dgst digest.Digest) (distribution.ReadSeekCloser, error)","kind":6,"range":{"start":{"line":678,"character":0},"end":{"line":681,"character":1}},"selectionRange":{"start":{"line":678,"character":24},"end":{"line":678,"character":28}}},{"name":"(*mockBlobStore).Put","detail":"func(ctx context.Context, mediaType string, p []byte) (distribution.Descriptor, error)","kind":6,"range":{"start":{"line":683,"character":0},"end":{"line":686,"character":1}},"selectionRange":{"start":{"line":683,"character":24},"end":{"line":683,"character":27}}},{"name":"(*mockBlobStore).Create","detail":"func(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error)","kind":6,"range":{"start":{"line":688,"character":0},"end":{"line":691,"character":1}},"selectionRange":{"start":{"line":688,"character":24},"end":{"line":688,"character":30}}},{"name":"(*mockBlobStore).Resume","detail":"func(ctx context.Context, id string) (distribution.BlobWriter, error)","kind":6,"range":{"start":{"line":692,"character":0},"end":{"line":695,"character":1}},"selectionRange":{"start":{"line":692,"character":24},"end":{"line":692,"character":30}}},{"name":"(*mockBlobStore).Delete","detail":"func(ctx context.Context, dgst digest.Digest) error","kind":6,"range":{"start":{"line":696,"character":0},"end":{"line":699,"character":1}},"selectionRange":{"start":{"line":696,"character":24},"end":{"line":696,"character":30}}},{"name":"(*mockBlobStore).ServeBlob","detail":"func(ctx context.Context, w http.ResponseWriter, r *http.Request, dgst digest.Digest) error","kind":6,"range":{"start":{"line":700,"character":0},"end":{"line":703,"character":1}},"selectionRange":{"start":{"line":700,"character":24},"end":{"line":700,"character":33}}},{"name":"mockV2MetadataService","detail":"struct{...}","kind":23,"range":{"start":{"line":705,"character":5},"end":{"line":708,"character":1}},"selectionRange":{"start":{"line":705,"character":5},"end":{"line":705,"character":26}},"children":[{"name":"added","detail":"[]metadata.V2Metadata","kind":8,"range":{"start":{"line":706,"character":1},"end":{"line":706,"character":30}},"selectionRange":{"start":{"line":706,"character":1},"end":{"line":706,"character":6}}},{"name":"removed","detail":"[]metadata.V2Metadata","kind":8,"range":{"start":{"line":707,"character":1},"end":{"line":707,"character":30}},"selectionRange":{"start":{"line":707,"character":1},"end":{"line":707,"character":8}}}]},{"name":"(*mockV2MetadataService).GetMetadata","detail":"func(diffID layer.DiffID) ([]metadata.V2Metadata, error)","kind":6,"range":{"start":{"line":712,"character":0},"end":{"line":714,"character":1}},"selectionRange":{"start":{"line":712,"character":30},"end":{"line":712,"character":41}}},{"name":"(*mockV2MetadataService).GetDiffID","detail":"func(dgst digest.Digest) (layer.DiffID, error)","kind":6,"range":{"start":{"line":715,"character":0},"end":{"line":717,"character":1}},"selectionRange":{"start":{"line":715,"character":30},"end":{"line":715,"character":39}}},{"name":"(*mockV2MetadataService).Add","detail":"func(diffID layer.DiffID, metadata metadata.V2Metadata) error","kind":6,"range":{"start":{"line":718,"character":0},"end":{"line":721,"character":1}},"selectionRange":{"start":{"line":718,"character":32},"end":{"line":718,"character":35}}},{"name":"(*mockV2MetadataService).TagAndAdd","detail":"func(diffID layer.DiffID, hmacKey []byte, meta metadata.V2Metadata) error","kind":6,"range":{"start":{"line":722,"character":0},"end":{"line":726,"character":1}},"selectionRange":{"start":{"line":722,"character":32},"end":{"line":722,"character":41}}},{"name":"(*mockV2MetadataService).Remove","detail":"func(metadata metadata.V2Metadata) error","kind":6,"range":{"start":{"line":727,"character":0},"end":{"line":730,"character":1}},"selectionRange":{"start":{"line":727,"character":32},"end":{"line":727,"character":38}}},{"name":"progressSink","detail":"struct{...}","kind":23,"range":{"start":{"line":732,"character":5},"end":{"line":734,"character":1}},"selectionRange":{"start":{"line":732,"character":5},"end":{"line":732,"character":17}},"children":[{"name":"t","detail":"*testing.T","kind":8,"range":{"start":{"line":733,"character":1},"end":{"line":733,"character":13}},"selectionRange":{"start":{"line":733,"character":1},"end":{"line":733,"character":2}}}]},{"name":"(*progressSink).WriteProgress","detail":"func(p progress.Progress) error","kind":6,"range":{"start":{"line":736,"character":0},"end":{"line":739,"character":1}},"selectionRange":{"start":{"line":736,"character":23},"end":{"line":736,"character":36}}}]
[Trace - 23:10:40.078 PM] Sending request 'workspace/executeCommand - (14)'.
Params: {"command":"gopls.list_imports","arguments":[{"URI":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}]}
[Trace - 23:10:40.079 PM] Received response 'workspace/executeCommand - (14)' in 0ms.
Result: {"Imports":[{"Path":"context","Name":""},{"Path":"net/http","Name":""},{"Path":"net/url","Name":""},{"Path":"reflect","Name":""},{"Path":"testing","Name":""},{"Path":"github.com/docker/distribution","Name":""},{"Path":"github.com/docker/distribution/manifest/schema2","Name":""},{"Path":"github.com/docker/distribution/reference","Name":""},{"Path":"github.com/docker/distribution/registry/api/errcode","Name":""},{"Path":"github.com/docker/docker/api/types/registry","Name":""},{"Path":"github.com/docker/docker/distribution/metadata","Name":""},{"Path":"github.com/docker/docker/layer","Name":""},{"Path":"github.com/docker/docker/pkg/progress","Name":""},{"Path":"github.com/docker/docker/reference","Name":"refstore"},{"Path":"github.com/docker/docker/registry","Name":"registrypkg"},{"Path":"github.com/opencontainers/go-digest","Name":""}],"PackageImports":[{"Path":"bufio"},{"Path":"compress/gzip"},{"Path":"context"},{"Path":"encoding/json"},{"Path":"errors"},{"Path":"fmt"},{"Path":"github.com/containerd/containerd/content"},{"Path":"github.com/containerd/containerd/content/local"},{"Path":"github.com/containerd/containerd/errdefs"},{"Path":"github.com/containerd/containerd/log"},{"Path":"github.com/containerd/containerd/platforms"},{"Path":"github.com/containerd/containerd/remotes"},{"Path":"github.com/docker/distribution"},{"Path":"github.com/docker/distribution/manifest/manifestlist"},{"Path":"github.com/docker/distribution/manifest/ocischema"},{"Path":"github.com/docker/distribution/manifest/schema1"},{"Path":"github.com/docker/distribution/manifest/schema2"},{"Path":"github.com/docker/distribution/reference"},{"Path":"github.com/docker/distribution/registry/api/errcode"},{"Path":"github.com/docker/distribution/registry/api/v2"},{"Path":"github.com/docker/distribution/registry/client"},{"Path":"github.com/docker/distribution/registry/client/auth"},{"Path":"github.com/docker/distribution/registry/client/transport"},{"Path":"github.com/docker/docker/api"},{"Path":"github.com/docker/docker/api/types"},{"Path":"github.com/docker/docker/api/types/registry"},{"Path":"github.com/docker/docker/distribution/metadata"},{"Path":"github.com/docker/docker/distribution/xfer"},{"Path":"github.com/docker/docker/dockerversion"},{"Path":"github.com/docker/docker/errdefs"},{"Path":"github.com/docker/docker/image"},{"Path":"github.com/docker/docker/image/v1"},{"Path":"github.com/docker/docker/layer"},{"Path":"github.com/docker/docker/pkg/ioutils"},{"Path":"github.com/docker/docker/pkg/progress"},{"Path":"github.com/docker/docker/pkg/stringid"},{"Path":"github.com/docker/docker/pkg/system"},{"Path":"github.com/docker/docker/reference"},{"Path":"github.com/docker/docker/registry"},{"Path":"github.com/docker/libtrust"},{"Path":"github.com/google/go-cmp/cmp/cmpopts"},{"Path":"github.com/opencontainers/go-digest"},{"Path":"github.com/opencontainers/image-spec/specs-go/v1"},{"Path":"github.com/pkg/errors"},{"Path":"github.com/sirupsen/logrus"},{"Path":"github.com/tonistiigi/go-archvariant"},{"Path":"gotest.tools/v3/assert"},{"Path":"gotest.tools/v3/assert/cmp"},{"Path":"io"},{"Path":"net"},{"Path":"net/http"},{"Path":"net/http/httptest"},{"Path":"net/url"},{"Path":"os"},{"Path":"reflect"},{"Path":"regexp"},{"Path":"runtime"},{"Path":"sort"},{"Path":"strings"},{"Path":"sync"},{"Path":"sync/atomic"},{"Path":"syscall"},{"Path":"testing"},{"Path":"time"}]}
[Trace - 23:10:40.217 PM] Sending request 'textDocument/codeAction - (15)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"},"range":{"start":{"line":651,"character":19},"end":{"line":651,"character":19}},"context":{"diagnostics":[],"triggerKind":2}}
[Trace - 23:10:40.221 PM] Received response 'textDocument/codeAction - (15)' in 3ms.
Result: null
[Trace - 23:10:40.313 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go","version":1,"diagnostics":[{"range":{"start":{"line":417,"character":6},"end":{"line":417,"character":46}},"severity":2,"source":"deepequalerrors","message":"avoid using reflect.DeepEqual with errors"}]}
[Trace - 23:10:40.551 PM] Sending request 'textDocument/inlayHint - (16)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/pull_v2.go"},"range":{"start":{"line":849,"character":0},"end":{"line":954,"character":0}}}
[Trace - 23:10:40.551 PM] Received response 'textDocument/inlayHint - (16)' in 0ms.
Result: null
[Trace - 23:10:40.577 PM] Sending request 'textDocument/codeAction - (17)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"},"range":{"start":{"line":651,"character":19},"end":{"line":651,"character":19}},"context":{"diagnostics":[],"triggerKind":2}}
[Trace - 23:10:40.580 PM] Received response 'textDocument/codeAction - (17)' in 3ms.
Result: null
[Trace - 23:10:40.592 PM] Sending request 'textDocument/inlayHint - (18)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"},"range":{"start":{"line":597,"character":0},"end":{"line":705,"character":16}}}
[Trace - 23:10:40.593 PM] Received response 'textDocument/inlayHint - (18)' in 0ms.
Result: null
[Trace - 23:10:41.371 PM] Sending request 'textDocument/foldingRange - (19)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}}
[Trace - 23:10:41.373 PM] Received response 'textDocument/foldingRange - (19)' in 2ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":19,"endCharacter":38,"kind":"imports"},{"startLine":22,"startCharacter":53,"endLine":148,"endCharacter":2},{"startLine":23,"startCharacter":30,"endLine":29,"endCharacter":37},{"startLine":30,"startCharacter":3,"endLine":127,"endCharacter":3},{"startLine":31,"startCharacter":3,"endLine":36,"endCharacter":41},{"startLine":38,"startCharacter":3,"endLine":43,"endCharacter":41},{"startLine":45,"startCharacter":3,"endLine":50,"endCharacter":101},{"startLine":52,"startCharacter":3,"endLine":61,"endCharacter":38},{"startLine":56,"startCharacter":35,"endLine":59,"endCharacter":32},{"startLine":63,"startCharacter":3,"endLine":76,"endCharacter":4},{"startLine":67,"startCharacter":35,"endLine":70,"endCharacter":75},{"startLine":72,"startCharacter":37,"endLine":75,"endCharacter":75},{"startLine":78,"startCharacter":3,"endLine":103,"endCharacter":4},{"startLine":83,"startCharacter":35,"endLine":92,"endCharacter":52},{"startLine":94,"startCharacter":37,"endLine":102,"endCharacter":56},{"startLine":105,"startCharacter":3,"endLine":126,"endCharacter":4},{"startLine":110,"startCharacter":35,"endLine":116,"endCharacter":52},{"startLine":118,"startCharacter":37,"endLine":125,"endCharacter":53},{"startLine":122,"startCharacter":38,"endLine":124,"endCharacter":37,"kind":"comment"},{"startLine":128,"startCharacter":4,"endLine":147,"endCharacter":3},{"startLine":130,"startCharacter":17,"endLine":131,"endCharacter":68},{"startLine":134,"startCharacter":44,"endLine":135,"endCharacter":111},{"startLine":137,"startCharacter":66,"endLine":140,"endCharacter":4},{"startLine":138,"startCharacter":59,"endLine":139,"endCharacter":116},{"startLine":142,"startCharacter":57,"endLine":143,"endCharacter":98},{"startLine":145,"startCharacter":57,"endLine":146,"endCharacter":93},{"startLine":151,"startCharacter":43,"endLine":465,"endCharacter":2},{"startLine":152,"startCharacter":30,"endLine":166,"endCharacter":46},{"startLine":167,"startCharacter":3,"endLine":383,"endCharacter":3},{"startLine":168,"startCharacter":3,"endLine":172,"endCharacter":31},{"startLine":174,"startCharacter":3,"endLine":180,"endCharacter":124},{"startLine":182,"startCharacter":3,"endLine":189,"endCharacter":40},{"startLine":191,"startCharacter":3,"endLine":201,"endCharacter":4},{"startLine":195,"startCharacter":35,"endLine":200,"endCharacter":76},{"startLine":203,"startCharacter":3,"endLine":218,"endCharacter":4},{"startLine":208,"startCharacter":35,"endLine":213,"endCharacter":76},{"startLine":216,"startCharacter":43,"endLine":217,"endCharacter":82},{"startLine":220,"startCharacter":3,"endLine":228,"endCharacter":40},{"startLine":230,"startCharacter":3,"endLine":239,"endCharacter":125},{"startLine":241,"startCharacter":3,"endLine":251,"endCharacter":105},{"startLine":253,"startCharacter":3,"endLine":271,"endCharacter":4},{"startLine":257,"startCharacter":35,"endLine":260,"endCharacter":49},{"startLine":268,"startCharacter":43,"endLine":270,"endCharacter":72},{"startLine":273,"startCharacter":3,"endLine":290,"endCharacter":4},{"startLine":276,"startCharacter":35,"endLine":280,"endCharacter":77},{"startLine":286,"startCharacter":43,"endLine":289,"endCharacter":76},{"startLine":292,"startCharacter":3,"endLine":302,"endCharacter":120},{"startLine":295,"startCharacter":35,"endLine":299,"endCharacter":77},{"startLine":304,"startCharacter":3,"endLine":318,"endCharacter":106},{"startLine":307,"startCharacter":35,"endLine":310,"endCharacter":64},{"startLine":320,"startCharacter":3,"endLine":337,"endCharacter":4},{"startLine":324,"startCharacter":35,"endLine":327,"endCharacter":55},{"startLine":334,"startCharacter":43,"endLine":336,"endCharacter":57},{"startLine":339,"startCharacter":3,"endLine":351,"endCharacter":119},{"startLine":342,"startCharacter":35,"endLine":344,"endCharacter":77},{"startLine":353,"startCharacter":3,"endLine":363,"endCharacter":46},{"startLine":356,"startCharacter":35,"endLine":359,"endCharacter":32},{"startLine":366,"startCharacter":3,"endLine":382,"endCharacter":4},{"startLine":369,"startCharacter":35,"endLine":372,"endCharacter":32},{"startLine":380,"startCharacter":43,"endLine":381,"endCharacter":79},{"startLine":384,"startCharacter":4,"endLine":464,"endCharacter":3},{"startLine":386,"startCharacter":17,"endLine":387,"endCharacter":68},{"startLine":389,"startCharacter":20,"endLine":393,"endCharacter":23},{"startLine":397,"startCharacter":24,"endLine":406,"endCharacter":52},{"startLine":400,"startCharacter":22,"endLine":401,"endCharacter":27},{"startLine":411,"startCharacter":54,"endLine":412,"endCharacter":97},{"startLine":414,"startCharacter":34,"endLine":415,"endCharacter":87},{"startLine":417,"startCharacter":48,"endLine":418,"endCharacter":86},{"startLine":421,"startCharacter":53,"endLine":422,"endCharacter":118},{"startLine":424,"startCharacter":75,"endLine":427,"endCharacter":4},{"startLine":425,"startCharacter":50,"endLine":426,"endCharacter":119},{"startLine":429,"startCharacter":66,"endLine":430,"endCharacter":100},{"startLine":432,"startCharacter":66,"endLine":433,"endCharacter":92},{"startLine":436,"startCharacter":49,"endLine":437,"endCharacter":115},{"startLine":439,"startCharacter":71,"endLine":442,"endCharacter":4},{"startLine":440,"startCharacter":46,"endLine":441,"endCharacter":125},{"startLine":444,"startCharacter":62,"endLine":445,"endCharacter":102},{"startLine":447,"startCharacter":62,"endLine":448,"endCharacter":93},{"startLine":451,"startCharacter":50,"endLine":452,"endCharacter":115},{"startLine":454,"startCharacter":72,"endLine":457,"endCharacter":4},{"startLine":455,"startCharacter":47,"endLine":456,"endCharacter":128},{"startLine":459,"startCharacter":63,"endLine":460,"endCharacter":100},{"startLine":462,"startCharacter":63,"endLine":463,"endCharacter":94},{"startLine":471,"startCharacter":77,"endLine":472,"endCharacter":27},{"startLine":474,"startCharacter":91,"endLine":475,"endCharacter":32},{"startLine":477,"startCharacter":94,"endLine":478,"endCharacter":11},{"startLine":480,"startCharacter":101,"endLine":481,"endCharacter":11},{"startLine":483,"startCharacter":72,"endLine":484,"endCharacter":17},{"startLine":486,"startCharacter":78,"endLine":487,"endCharacter":15},{"startLine":490,"startCharacter":44,"endLine":542,"endCharacter":2},{"startLine":491,"startCharacter":36,"endLine":495,"endCharacter":20},{"startLine":496,"startCharacter":3,"endLine":514,"endCharacter":3},{"startLine":497,"startCharacter":3,"endLine":501,"endCharacter":23},{"startLine":503,"startCharacter":3,"endLine":507,"endCharacter":22},{"startLine":509,"startCharacter":3,"endLine":513,"endCharacter":22},{"startLine":515,"startCharacter":4,"endLine":541,"endCharacter":3},{"startLine":517,"startCharacter":52,"endLine":520,"endCharacter":40},{"startLine":524,"startCharacter":20,"endLine":536,"endCharacter":4},{"startLine":526,"startCharacter":41,"endLine":527,"endCharacter":18},{"startLine":529,"startCharacter":37,"endLine":535,"endCharacter":22},{"startLine":530,"startCharacter":18,"endLine":532,"endCharacter":30},{"startLine":539,"startCharacter":56,"endLine":540,"endCharacter":109},{"startLine":545,"startCharacter":37,"endLine":547,"endCharacter":23},{"startLine":550,"startCharacter":141,"endLine":551,"endCharacter":95},{"startLine":554,"startCharacter":30,"endLine":555,"endCharacter":9},{"startLine":558,"startCharacter":78,"endLine":562,"endCharacter":12},{"startLine":565,"startCharacter":33,"endLine":566,"endCharacter":22},{"startLine":569,"startCharacter":95,"endLine":577,"endCharacter":7},{"startLine":570,"startCharacter":30,"endLine":576,"endCharacter":120},{"startLine":582,"startCharacter":74,"endLine":584,"endCharacter":11},{"startLine":587,"startCharacter":54,"endLine":617,"endCharacter":2},{"startLine":592,"startCharacter":27,"endLine":598,"endCharacter":3},{"startLine":593,"startCharacter":21,"endLine":597,"endCharacter":23},{"startLine":600,"startCharacter":23,"endLine":612,"endCharacter":50},{"startLine":603,"startCharacter":21,"endLine":604,"endCharacter":26},{"startLine":608,"startCharacter":24,"endLine":610,"endCharacter":22},{"startLine":615,"startCharacter":20,"endLine":616,"endCharacter":52},{"startLine":620,"startCharacter":85,"endLine":627,"endCharacter":12},{"startLine":621,"startCharacter":29,"endLine":623,"endCharacter":30},{"startLine":630,"startCharacter":22,"endLine":634,"endCharacter":18},{"startLine":639,"startCharacter":44,"endLine":641,"endCharacter":11},{"startLine":643,"startCharacter":136,"endLine":645,"endCharacter":16},{"startLine":647,"startCharacter":70,"endLine":649,"endCharacter":11},{"startLine":651,"startCharacter":70,"endLine":654,"endCharacter":2},{"startLine":652,"startCharacter":23,"endLine":653,"endCharacter":9},{"startLine":657,"startCharacter":27,"endLine":658,"endCharacter":15},{"startLine":663,"startCharacter":104,"endLine":671,"endCharacter":62},{"startLine":665,"startCharacter":48,"endLine":666,"endCharacter":39},{"startLine":668,"startCharacter":48,"endLine":669,"endCharacter":18},{"startLine":673,"startCharacter":86,"endLine":675,"endCharacter":16},{"startLine":678,"startCharacter":108,"endLine":680,"endCharacter":16},{"startLine":683,"startCharacter":111,"endLine":685,"endCharacter":38},{"startLine":688,"startCharacter":128,"endLine":690,"endCharacter":16},{"startLine":692,"startCharacter":97,"endLine":694,"endCharacter":16},{"startLine":696,"startCharacter":79,"endLine":698,"endCharacter":11},{"startLine":700,"startCharacter":122,"endLine":702,"endCharacter":11},{"startLine":705,"startCharacter":35,"endLine":707,"endCharacter":30},{"startLine":712,"startCharacter":95,"endLine":713,"endCharacter":16},{"startLine":715,"startCharacter":83,"endLine":716,"endCharacter":15},{"startLine":718,"startCharacter":94,"endLine":720,"endCharacter":11},{"startLine":722,"startCharacter":112,"endLine":725,"endCharacter":11},{"startLine":727,"startCharacter":76,"endLine":729,"endCharacter":11},{"startLine":732,"startCharacter":26,"endLine":733,"endCharacter":13},{"startLine":736,"startCharacter":65,"endLine":738,"endCharacter":11}]
[Trace - 23:10:41.462 PM] Sending request 'textDocument/codeLens - (20)'.
Params: {"textDocument":{"uri":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}}
[Trace - 23:10:41.462 PM] Received response 'textDocument/codeLens - (20)' in 0ms.
Result: null
[Trace - 23:10:41.478 PM] Sending request 'workspace/executeCommand - (21)'.
Params: {"command":"gopls.list_imports","arguments":[{"URI":"file:///home/yuri/go/src/github.com/docker/docker/distribution/push_v2_test.go"}]}
[Trace - 23:10:41.478 PM] Received response 'workspace/executeCommand - (21)' in 0ms.
Result: {"Imports":[{"Path":"context","Name":""},{"Path":"net/http","Name":""},{"Path":"net/url","Name":""},{"Path":"reflect","Name":""},{"Path":"testing","Name":""},{"Path":"github.com/docker/distribution","Name":""},{"Path":"github.com/docker/distribution/manifest/schema2","Name":""},{"Path":"github.com/docker/distribution/reference","Name":""},{"Path":"github.com/docker/distribution/registry/api/errcode","Name":""},{"Path":"github.com/docker/docker/api/types/registry","Name":""},{"Path":"github.com/docker/docker/distribution/metadata","Name":""},{"Path":"github.com/docker/docker/layer","Name":""},{"Path":"github.com/docker/docker/pkg/progress","Name":""},{"Path":"github.com/docker/docker/reference","Name":"refstore"},{"Path":"github.com/docker/docker/registry","Name":"registrypkg"},{"Path":"github.com/opencontainers/go-digest","Name":""}],"PackageImports":[{"Path":"bufio"},{"Path":"compress/gzip"},{"Path":"context"},{"Path":"encoding/json"},{"Path":"errors"},{"Path":"fmt"},{"Path":"github.com/containerd/containerd/content"},{"Path":"github.com/containerd/containerd/content/local"},{"Path":"github.com/containerd/containerd/errdefs"},{"Path":"github.com/containerd/containerd/log"},{"Path":"github.com/containerd/containerd/platforms"},{"Path":"github.com/containerd/containerd/remotes"},{"Path":"github.com/docker/distribution"},{"Path":"github.com/docker/distribution/manifest/manifestlist"},{"Path":"github.com/docker/distribution/manifest/ocischema"},{"Path":"github.com/docker/distribution/manifest/schema1"},{"Path":"github.com/docker/distribution/manifest/schema2"},{"Path":"github.com/docker/distribution/reference"},{"Path":"github.com/docker/distribution/registry/api/errcode"},{"Path":"github.com/docker/distribution/registry/api/v2"},{"Path":"github.com/docker/distribution/registry/client"},{"Path":"github.com/docker/distribution/registry/client/auth"},{"Path":"github.com/docker/distribution/registry/client/transport"},{"Path":"github.com/docker/docker/api"},{"Path":"github.com/docker/docker/api/types"},{"Path":"github.com/docker/docker/api/types/registry"},{"Path":"github.com/docker/docker/distribution/metadata"},{"Path":"github.com/docker/docker/distribution/xfer"},{"Path":"github.com/docker/docker/dockerversion"},{"Path":"github.com/docker/docker/errdefs"},{"Path":"github.com/docker/docker/image"},{"Path":"github.com/docker/docker/image/v1"},{"Path":"github.com/docker/docker/layer"},{"Path":"github.com/docker/docker/pkg/ioutils"},{"Path":"github.com/docker/docker/pkg/progress"},{"Path":"github.com/docker/docker/pkg/stringid"},{"Path":"github.com/docker/docker/pkg/system"},{"Path":"github.com/docker/docker/reference"},{"Path":"github.com/docker/docker/registry"},{"Path":"github.com/docker/libtrust"},{"Path":"github.com/google/go-cmp/cmp/cmpopts"},{"Path":"github.com/opencontainers/go-digest"},{"Path":"github.com/opencontainers/image-spec/specs-go/v1"},{"Path":"github.com/pkg/errors"},{"Path":"github.com/sirupsen/logrus"},{"Path":"github.com/tonistiigi/go-archvariant"},{"Path":"gotest.tools/v3/assert"},{"Path":"gotest.tools/v3/assert/cmp"},{"Path":"io"},{"Path":"net"},{"Path":"net/http"},{"Path":"net/http/httptest"},{"Path":"net/url"},{"Path":"os"},{"Path":"reflect"},{"Path":"regexp"},{"Path":"runtime"},{"Path":"sort"},{"Path":"strings"},{"Path":"sync"},{"Path":"sync/atomic"},{"Path":"syscall"},{"Path":"testing"},{"Path":"time"}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment