summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/tools
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/tools')
-rw-r--r--vendor/golang.org/x/tools/go/ast/astutil/enclosing.go634
-rw-r--r--vendor/golang.org/x/tools/go/ast/astutil/imports.go485
-rw-r--r--vendor/golang.org/x/tools/go/ast/astutil/rewrite.go486
-rw-r--r--vendor/golang.org/x/tools/go/ast/astutil/util.go18
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/allpackages.go195
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/fakecontext.go111
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/overlay.go101
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/tags.go80
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/util.go209
-rw-r--r--vendor/golang.org/x/tools/go/internal/cgo/cgo.go219
-rw-r--r--vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go39
-rw-r--r--vendor/golang.org/x/tools/go/loader/doc.go202
-rw-r--r--vendor/golang.org/x/tools/go/loader/loader.go1066
-rw-r--r--vendor/golang.org/x/tools/go/loader/util.go123
-rw-r--r--vendor/golang.org/x/tools/imports/forward.go77
-rw-r--r--vendor/golang.org/x/tools/internal/gopathwalk/walk.go331
-rw-r--r--vendor/golang.org/x/tools/internal/imports/fix.go1769
-rw-r--r--vendor/golang.org/x/tools/internal/imports/imports.go356
-rw-r--r--vendor/golang.org/x/tools/internal/imports/mod.go723
-rw-r--r--vendor/golang.org/x/tools/internal/imports/mod_cache.go236
-rw-r--r--vendor/golang.org/x/tools/internal/imports/sortimports.go297
-rw-r--r--vendor/golang.org/x/tools/internal/imports/zstdlib.go11345
22 files changed, 19102 insertions, 0 deletions
diff --git a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
new file mode 100644
index 000000000..2c4c4e232
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
@@ -0,0 +1,634 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package astutil
+
+// This file defines utilities for working with source positions.
+
+import (
+ "fmt"
+ "go/ast"
+ "go/token"
+ "sort"
+)
+
+// PathEnclosingInterval returns the node that encloses the source
+// interval [start, end), and all its ancestors up to the AST root.
+//
+// The definition of "enclosing" used by this function considers
+// additional whitespace abutting a node to be enclosed by it.
+// In this example:
+//
+// z := x + y // add them
+// <-A->
+// <----B----->
+//
+// the ast.BinaryExpr(+) node is considered to enclose interval B
+// even though its [Pos()..End()) is actually only interval A.
+// This behaviour makes user interfaces more tolerant of imperfect
+// input.
+//
+// This function treats tokens as nodes, though they are not included
+// in the result. e.g. PathEnclosingInterval("+") returns the
+// enclosing ast.BinaryExpr("x + y").
+//
+// If start==end, the 1-char interval following start is used instead.
+//
+// The 'exact' result is true if the interval contains only path[0]
+// and perhaps some adjacent whitespace. It is false if the interval
+// overlaps multiple children of path[0], or if it contains only
+// interior whitespace of path[0].
+// In this example:
+//
+// z := x + y // add them
+// <--C--> <---E-->
+// ^
+// D
+//
+// intervals C, D and E are inexact. C is contained by the
+// z-assignment statement, because it spans three of its children (:=,
+// x, +). So too is the 1-char interval D, because it contains only
+// interior whitespace of the assignment. E is considered interior
+// whitespace of the BlockStmt containing the assignment.
+//
+// The resulting path is never empty; it always contains at least the
+// 'root' *ast.File. Ideally PathEnclosingInterval would reject
+// intervals that lie wholly or partially outside the range of the
+// file, but unfortunately ast.File records only the token.Pos of
+// the 'package' keyword, but not of the start of the file itself.
+func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) {
+ // fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging
+
+ // Precondition: node.[Pos..End) and adjoining whitespace contain [start, end).
+ var visit func(node ast.Node) bool
+ visit = func(node ast.Node) bool {
+ path = append(path, node)
+
+ nodePos := node.Pos()
+ nodeEnd := node.End()
+
+ // fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging
+
+ // Intersect [start, end) with interval of node.
+ if start < nodePos {
+ start = nodePos
+ }
+ if end > nodeEnd {
+ end = nodeEnd
+ }
+
+ // Find sole child that contains [start, end).
+ children := childrenOf(node)
+ l := len(children)
+ for i, child := range children {
+ // [childPos, childEnd) is unaugmented interval of child.
+ childPos := child.Pos()
+ childEnd := child.End()
+
+ // [augPos, augEnd) is whitespace-augmented interval of child.
+ augPos := childPos
+ augEnd := childEnd
+ if i > 0 {
+ augPos = children[i-1].End() // start of preceding whitespace
+ }
+ if i < l-1 {
+ nextChildPos := children[i+1].Pos()
+ // Does [start, end) lie between child and next child?
+ if start >= augEnd && end <= nextChildPos {
+ return false // inexact match
+ }
+ augEnd = nextChildPos // end of following whitespace
+ }
+
+ // fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n",
+ // i, augPos, augEnd, start, end) // debugging
+
+ // Does augmented child strictly contain [start, end)?
+ if augPos <= start && end <= augEnd {
+ _, isToken := child.(tokenNode)
+ return isToken || visit(child)
+ }
+
+ // Does [start, end) overlap multiple children?
+ // i.e. left-augmented child contains start
+ // but LR-augmented child does not contain end.
+ if start < childEnd && end > augEnd {
+ break
+ }
+ }
+
+ // No single child contained [start, end),
+ // so node is the result. Is it exact?
+
+ // (It's tempting to put this condition before the
+ // child loop, but it gives the wrong result in the
+ // case where a node (e.g. ExprStmt) and its sole
+ // child have equal intervals.)
+ if start == nodePos && end == nodeEnd {
+ return true // exact match
+ }
+
+ return false // inexact: overlaps multiple children
+ }
+
+ // Ensure [start,end) is nondecreasing.
+ if start > end {
+ start, end = end, start
+ }
+
+ if start < root.End() && end > root.Pos() {
+ if start == end {
+ end = start + 1 // empty interval => interval of size 1
+ }
+ exact = visit(root)
+
+ // Reverse the path:
+ for i, l := 0, len(path); i < l/2; i++ {
+ path[i], path[l-1-i] = path[l-1-i], path[i]
+ }
+ } else {
+ // Selection lies within whitespace preceding the
+ // first (or following the last) declaration in the file.
+ // The result nonetheless always includes the ast.File.
+ path = append(path, root)
+ }
+
+ return
+}
+
+// tokenNode is a dummy implementation of ast.Node for a single token.
+// They are used transiently by PathEnclosingInterval but never escape
+// this package.
+type tokenNode struct {
+ pos token.Pos
+ end token.Pos
+}
+
+func (n tokenNode) Pos() token.Pos {
+ return n.pos
+}
+
+func (n tokenNode) End() token.Pos {
+ return n.end
+}
+
+func tok(pos token.Pos, len int) ast.Node {
+ return tokenNode{pos, pos + token.Pos(len)}
+}
+
+// childrenOf returns the direct non-nil children of ast.Node n.
+// It may include fake ast.Node implementations for bare tokens.
+// it is not safe to call (e.g.) ast.Walk on such nodes.
+func childrenOf(n ast.Node) []ast.Node {
+ var children []ast.Node
+
+ // First add nodes for all true subtrees.
+ ast.Inspect(n, func(node ast.Node) bool {
+ if node == n { // push n
+ return true // recur
+ }
+ if node != nil { // push child
+ children = append(children, node)
+ }
+ return false // no recursion
+ })
+
+ // Then add fake Nodes for bare tokens.
+ switch n := n.(type) {
+ case *ast.ArrayType:
+ children = append(children,
+ tok(n.Lbrack, len("[")),
+ tok(n.Elt.End(), len("]")))
+
+ case *ast.AssignStmt:
+ children = append(children,
+ tok(n.TokPos, len(n.Tok.String())))
+
+ case *ast.BasicLit:
+ children = append(children,
+ tok(n.ValuePos, len(n.Value)))
+
+ case *ast.BinaryExpr:
+ children = append(children, tok(n.OpPos, len(n.Op.String())))
+
+ case *ast.BlockStmt:
+ children = append(children,
+ tok(n.Lbrace, len("{")),
+ tok(n.Rbrace, len("}")))
+
+ case *ast.BranchStmt:
+ children = append(children,
+ tok(n.TokPos, len(n.Tok.String())))
+
+ case *ast.CallExpr:
+ children = append(children,
+ tok(n.Lparen, len("(")),
+ tok(n.Rparen, len(")")))
+ if n.Ellipsis != 0 {
+ children = append(children, tok(n.Ellipsis, len("...")))
+ }
+
+ case *ast.CaseClause:
+ if n.List == nil {
+ children = append(children,
+ tok(n.Case, len("default")))
+ } else {
+ children = append(children,
+ tok(n.Case, len("case")))
+ }
+ children = append(children, tok(n.Colon, len(":")))
+
+ case *ast.ChanType:
+ switch n.Dir {
+ case ast.RECV:
+ children = append(children, tok(n.Begin, len("<-chan")))
+ case ast.SEND:
+ children = append(children, tok(n.Begin, len("chan<-")))
+ case ast.RECV | ast.SEND:
+ children = append(children, tok(n.Begin, len("chan")))
+ }
+
+ case *ast.CommClause:
+ if n.Comm == nil {
+ children = append(children,
+ tok(n.Case, len("default")))
+ } else {
+ children = append(children,
+ tok(n.Case, len("case")))
+ }
+ children = append(children, tok(n.Colon, len(":")))
+
+ case *ast.Comment:
+ // nop
+
+ case *ast.CommentGroup:
+ // nop
+
+ case *ast.CompositeLit:
+ children = append(children,
+ tok(n.Lbrace, len("{")),
+ tok(n.Rbrace, len("{")))
+
+ case *ast.DeclStmt:
+ // nop
+
+ case *ast.DeferStmt:
+ children = append(children,
+ tok(n.Defer, len("defer")))
+
+ case *ast.Ellipsis:
+ children = append(children,
+ tok(n.Ellipsis, len("...")))
+
+ case *ast.EmptyStmt:
+ // nop
+
+ case *ast.ExprStmt:
+ // nop
+
+ case *ast.Field:
+ // TODO(adonovan): Field.{Doc,Comment,Tag}?
+
+ case *ast.FieldList:
+ children = append(children,
+ tok(n.Opening, len("(")), // or len("[")
+ tok(n.Closing, len(")"))) // or len("]")
+
+ case *ast.File:
+ // TODO test: Doc
+ children = append(children,
+ tok(n.Package, len("package")))
+
+ case *ast.ForStmt:
+ children = append(children,
+ tok(n.For, len("for")))
+
+ case *ast.FuncDecl:
+ // TODO(adonovan): FuncDecl.Comment?
+
+ // Uniquely, FuncDecl breaks the invariant that
+ // preorder traversal yields tokens in lexical order:
+ // in fact, FuncDecl.Recv precedes FuncDecl.Type.Func.
+ //
+ // As a workaround, we inline the case for FuncType
+ // here and order things correctly.
+ //
+ children = nil // discard ast.Walk(FuncDecl) info subtrees
+ children = append(children, tok(n.Type.Func, len("func")))
+ if n.Recv != nil {
+ children = append(children, n.Recv)
+ }
+ children = append(children, n.Name)
+ if tparams := n.Type.TypeParams; tparams != nil {
+ children = append(children, tparams)
+ }
+ if n.Type.Params != nil {
+ children = append(children, n.Type.Params)
+ }
+ if n.Type.Results != nil {
+ children = append(children, n.Type.Results)
+ }
+ if n.Body != nil {
+ children = append(children, n.Body)
+ }
+
+ case *ast.FuncLit:
+ // nop
+
+ case *ast.FuncType:
+ if n.Func != 0 {
+ children = append(children,
+ tok(n.Func, len("func")))
+ }
+
+ case *ast.GenDecl:
+ children = append(children,
+ tok(n.TokPos, len(n.Tok.String())))
+ if n.Lparen != 0 {
+ children = append(children,
+ tok(n.Lparen, len("(")),
+ tok(n.Rparen, len(")")))
+ }
+
+ case *ast.GoStmt:
+ children = append(children,
+ tok(n.Go, len("go")))
+
+ case *ast.Ident:
+ children = append(children,
+ tok(n.NamePos, len(n.Name)))
+
+ case *ast.IfStmt:
+ children = append(children,
+ tok(n.If, len("if")))
+
+ case *ast.ImportSpec:
+ // TODO(adonovan): ImportSpec.{Doc,EndPos}?
+
+ case *ast.IncDecStmt:
+ children = append(children,
+ tok(n.TokPos, len(n.Tok.String())))
+
+ case *ast.IndexExpr:
+ children = append(children,
+ tok(n.Lbrack, len("[")),
+ tok(n.Rbrack, len("]")))
+
+ case *ast.IndexListExpr:
+ children = append(children,
+ tok(n.Lbrack, len("[")),
+ tok(n.Rbrack, len("]")))
+
+ case *ast.InterfaceType:
+ children = append(children,
+ tok(n.Interface, len("interface")))
+
+ case *ast.KeyValueExpr:
+ children = append(children,
+ tok(n.Colon, len(":")))
+
+ case *ast.LabeledStmt:
+ children = append(children,
+ tok(n.Colon, len(":")))
+
+ case *ast.MapType:
+ children = append(children,
+ tok(n.Map, len("map")))
+
+ case *ast.ParenExpr:
+ children = append(children,
+ tok(n.Lparen, len("(")),
+ tok(n.Rparen, len(")")))
+
+ case *ast.RangeStmt:
+ children = append(children,
+ tok(n.For, len("for")),
+ tok(n.TokPos, len(n.Tok.String())))
+
+ case *ast.ReturnStmt:
+ children = append(children,
+ tok(n.Return, len("return")))
+
+ case *ast.SelectStmt:
+ children = append(children,
+ tok(n.Select, len("select")))
+
+ case *ast.SelectorExpr:
+ // nop
+
+ case *ast.SendStmt:
+ children = append(children,
+ tok(n.Arrow, len("<-")))
+
+ case *ast.SliceExpr:
+ children = append(children,
+ tok(n.Lbrack, len("[")),
+ tok(n.Rbrack, len("]")))
+
+ case *ast.StarExpr:
+ children = append(children, tok(n.Star, len("*")))
+
+ case *ast.StructType:
+ children = append(children, tok(n.Struct, len("struct")))
+
+ case *ast.SwitchStmt:
+ children = append(children, tok(n.Switch, len("switch")))
+
+ case *ast.TypeAssertExpr:
+ children = append(children,
+ tok(n.Lparen-1, len(".")),
+ tok(n.Lparen, len("(")),
+ tok(n.Rparen, len(")")))
+
+ case *ast.TypeSpec:
+ // TODO(adonovan): TypeSpec.{Doc,Comment}?
+
+ case *ast.TypeSwitchStmt:
+ children = append(children, tok(n.Switch, len("switch")))
+
+ case *ast.UnaryExpr:
+ children = append(children, tok(n.OpPos, len(n.Op.String())))
+
+ case *ast.ValueSpec:
+ // TODO(adonovan): ValueSpec.{Doc,Comment}?
+
+ case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt:
+ // nop
+ }
+
+ // TODO(adonovan): opt: merge the logic of ast.Inspect() into
+ // the switch above so we can make interleaved callbacks for
+ // both Nodes and Tokens in the right order and avoid the need
+ // to sort.
+ sort.Sort(byPos(children))
+
+ return children
+}
+
+type byPos []ast.Node
+
+func (sl byPos) Len() int {
+ return len(sl)
+}
+func (sl byPos) Less(i, j int) bool {
+ return sl[i].Pos() < sl[j].Pos()
+}
+func (sl byPos) Swap(i, j int) {
+ sl[i], sl[j] = sl[j], sl[i]
+}
+
+// NodeDescription returns a description of the concrete type of n suitable
+// for a user interface.
+//
+// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident,
+// StarExpr) we could be much more specific given the path to the AST
+// root. Perhaps we should do that.
+func NodeDescription(n ast.Node) string {
+ switch n := n.(type) {
+ case *ast.ArrayType:
+ return "array type"
+ case *ast.AssignStmt:
+ return "assignment"
+ case *ast.BadDecl:
+ return "bad declaration"
+ case *ast.BadExpr:
+ return "bad expression"
+ case *ast.BadStmt:
+ return "bad statement"
+ case *ast.BasicLit:
+ return "basic literal"
+ case *ast.BinaryExpr:
+ return fmt.Sprintf("binary %s operation", n.Op)
+ case *ast.BlockStmt:
+ return "block"
+ case *ast.BranchStmt:
+ switch n.Tok {
+ case token.BREAK:
+ return "break statement"
+ case token.CONTINUE:
+ return "continue statement"
+ case token.GOTO:
+ return "goto statement"
+ case token.FALLTHROUGH:
+ return "fall-through statement"
+ }
+ case *ast.CallExpr:
+ if len(n.Args) == 1 && !n.Ellipsis.IsValid() {
+ return "function call (or conversion)"
+ }
+ return "function call"
+ case *ast.CaseClause:
+ return "case clause"
+ case *ast.ChanType:
+ return "channel type"
+ case *ast.CommClause:
+ return "communication clause"
+ case *ast.Comment:
+ return "comment"
+ case *ast.CommentGroup:
+ return "comment group"
+ case *ast.CompositeLit:
+ return "composite literal"
+ case *ast.DeclStmt:
+ return NodeDescription(n.Decl) + " statement"
+ case *ast.DeferStmt:
+ return "defer statement"
+ case *ast.Ellipsis:
+ return "ellipsis"
+ case *ast.EmptyStmt:
+ return "empty statement"
+ case *ast.ExprStmt:
+ return "expression statement"
+ case *ast.Field:
+ // Can be any of these:
+ // struct {x, y int} -- struct field(s)
+ // struct {T} -- anon struct field
+ // interface {I} -- interface embedding
+ // interface {f()} -- interface method
+ // func (A) func(B) C -- receiver, param(s), result(s)
+ return "field/method/parameter"
+ case *ast.FieldList:
+ return "field/method/parameter list"
+ case *ast.File:
+ return "source file"
+ case *ast.ForStmt:
+ return "for loop"
+ case *ast.FuncDecl:
+ return "function declaration"
+ case *ast.FuncLit:
+ return "function literal"
+ case *ast.FuncType:
+ return "function type"
+ case *ast.GenDecl:
+ switch n.Tok {
+ case token.IMPORT:
+ return "import declaration"
+ case token.CONST:
+ return "constant declaration"
+ case token.TYPE:
+ return "type declaration"
+ case token.VAR:
+ return "variable declaration"
+ }
+ case *ast.GoStmt:
+ return "go statement"
+ case *ast.Ident:
+ return "identifier"
+ case *ast.IfStmt:
+ return "if statement"
+ case *ast.ImportSpec:
+ return "import specification"
+ case *ast.IncDecStmt:
+ if n.Tok == token.INC {
+ return "increment statement"
+ }
+ return "decrement statement"
+ case *ast.IndexExpr:
+ return "index expression"
+ case *ast.IndexListExpr:
+ return "index list expression"
+ case *ast.InterfaceType:
+ return "interface type"
+ case *ast.KeyValueExpr:
+ return "key/value association"
+ case *ast.LabeledStmt:
+ return "statement label"
+ case *ast.MapType:
+ return "map type"
+ case *ast.Package:
+ return "package"
+ case *ast.ParenExpr:
+ return "parenthesized " + NodeDescription(n.X)
+ case *ast.RangeStmt:
+ return "range loop"
+ case *ast.ReturnStmt:
+ return "return statement"
+ case *ast.SelectStmt:
+ return "select statement"
+ case *ast.SelectorExpr:
+ return "selector"
+ case *ast.SendStmt:
+ return "channel send"
+ case *ast.SliceExpr:
+ return "slice expression"
+ case *ast.StarExpr:
+ return "*-operation" // load/store expr or pointer type
+ case *ast.StructType:
+ return "struct type"
+ case *ast.SwitchStmt:
+ return "switch statement"
+ case *ast.TypeAssertExpr:
+ return "type assertion"
+ case *ast.TypeSpec:
+ return "type specification"
+ case *ast.TypeSwitchStmt:
+ return "type switch"
+ case *ast.UnaryExpr:
+ return fmt.Sprintf("unary %s operation", n.Op)
+ case *ast.ValueSpec:
+ return "value specification"
+
+ }
+ panic(fmt.Sprintf("unexpected node type: %T", n))
+}
diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go
new file mode 100644
index 000000000..18d1adb05
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go
@@ -0,0 +1,485 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package astutil contains common utilities for working with the Go AST.
+package astutil // import "golang.org/x/tools/go/ast/astutil"
+
+import (
+ "fmt"
+ "go/ast"
+ "go/token"
+ "strconv"
+ "strings"
+)
+
+// AddImport adds the import path to the file f, if absent.
+func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) {
+ return AddNamedImport(fset, f, "", path)
+}
+
+// AddNamedImport adds the import with the given name and path to the file f, if absent.
+// If name is not empty, it is used to rename the import.
+//
+// For example, calling
+//
+// AddNamedImport(fset, f, "pathpkg", "path")
+//
+// adds
+//
+// import pathpkg "path"
+func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) {
+ if imports(f, name, path) {
+ return false
+ }
+
+ newImport := &ast.ImportSpec{
+ Path: &ast.BasicLit{
+ Kind: token.STRING,
+ Value: strconv.Quote(path),
+ },
+ }
+ if name != "" {
+ newImport.Name = &ast.Ident{Name: name}
+ }
+
+ // Find an import decl to add to.
+ // The goal is to find an existing import
+ // whose import path has the longest shared
+ // prefix with path.
+ var (
+ bestMatch = -1 // length of longest shared prefix
+ lastImport = -1 // index in f.Decls of the file's final import decl
+ impDecl *ast.GenDecl // import decl containing the best match
+ impIndex = -1 // spec index in impDecl containing the best match
+
+ isThirdPartyPath = isThirdParty(path)
+ )
+ for i, decl := range f.Decls {
+ gen, ok := decl.(*ast.GenDecl)
+ if ok && gen.Tok == token.IMPORT {
+ lastImport = i
+ // Do not add to import "C", to avoid disrupting the
+ // association with its doc comment, breaking cgo.
+ if declImports(gen, "C") {
+ continue
+ }
+
+ // Match an empty import decl if that's all that is available.
+ if len(gen.Specs) == 0 && bestMatch == -1 {
+ impDecl = gen
+ }
+
+ // Compute longest shared prefix with imports in this group and find best
+ // matched import spec.
+ // 1. Always prefer import spec with longest shared prefix.
+ // 2. While match length is 0,
+ // - for stdlib package: prefer first import spec.
+ // - for third party package: prefer first third party import spec.
+ // We cannot use last import spec as best match for third party package
+ // because grouped imports are usually placed last by goimports -local
+ // flag.
+ // See issue #19190.
+ seenAnyThirdParty := false
+ for j, spec := range gen.Specs {
+ impspec := spec.(*ast.ImportSpec)
+ p := importPath(impspec)
+ n := matchLen(p, path)
+ if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) {
+ bestMatch = n
+ impDecl = gen
+ impIndex = j
+ }
+ seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p)
+ }
+ }
+ }
+
+ // If no import decl found, add one after the last import.
+ if impDecl == nil {
+ impDecl = &ast.GenDecl{
+ Tok: token.IMPORT,
+ }
+ if lastImport >= 0 {
+ impDecl.TokPos = f.Decls[lastImport].End()
+ } else {
+ // There are no existing imports.
+ // Our new import, preceded by a blank line, goes after the package declaration
+ // and after the comment, if any, that starts on the same line as the
+ // package declaration.
+ impDecl.TokPos = f.Package
+
+ file := fset.File(f.Package)
+ pkgLine := file.Line(f.Package)
+ for _, c := range f.Comments {
+ if file.Line(c.Pos()) > pkgLine {
+ break
+ }
+ // +2 for a blank line
+ impDecl.TokPos = c.End() + 2
+ }
+ }
+ f.Decls = append(f.Decls, nil)
+ copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:])
+ f.Decls[lastImport+1] = impDecl
+ }
+
+ // Insert new import at insertAt.
+ insertAt := 0
+ if impIndex >= 0 {
+ // insert after the found import
+ insertAt = impIndex + 1
+ }
+ impDecl.Specs = append(impDecl.Specs, nil)
+ copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:])
+ impDecl.Specs[insertAt] = newImport
+ pos := impDecl.Pos()
+ if insertAt > 0 {
+ // If there is a comment after an existing import, preserve the comment
+ // position by adding the new import after the comment.
+ if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil {
+ pos = spec.Comment.End()
+ } else {
+ // Assign same position as the previous import,
+ // so that the sorter sees it as being in the same block.
+ pos = impDecl.Specs[insertAt-1].Pos()
+ }
+ }
+ if newImport.Name != nil {
+ newImport.Name.NamePos = pos
+ }
+ newImport.Path.ValuePos = pos
+ newImport.EndPos = pos
+
+ // Clean up parens. impDecl contains at least one spec.
+ if len(impDecl.Specs) == 1 {
+ // Remove unneeded parens.
+ impDecl.Lparen = token.NoPos
+ } else if !impDecl.Lparen.IsValid() {
+ // impDecl needs parens added.
+ impDecl.Lparen = impDecl.Specs[0].Pos()
+ }
+
+ f.Imports = append(f.Imports, newImport)
+
+ if len(f.Decls) <= 1 {
+ return true
+ }
+
+ // Merge all the import declarations into the first one.
+ var first *ast.GenDecl
+ for i := 0; i < len(f.Decls); i++ {
+ decl := f.Decls[i]
+ gen, ok := decl.(*ast.GenDecl)
+ if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") {
+ continue
+ }
+ if first == nil {
+ first = gen
+ continue // Don't touch the first one.
+ }
+ // We now know there is more than one package in this import
+ // declaration. Ensure that it ends up parenthesized.
+ first.Lparen = first.Pos()
+ // Move the imports of the other import declaration to the first one.
+ for _, spec := range gen.Specs {
+ spec.(*ast.ImportSpec).Path.ValuePos = first.Pos()
+ first.Specs = append(first.Specs, spec)
+ }
+ f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
+ i--
+ }
+
+ return true
+}
+
+func isThirdParty(importPath string) bool {
+ // Third party package import path usually contains "." (".com", ".org", ...)
+ // This logic is taken from golang.org/x/tools/imports package.
+ return strings.Contains(importPath, ".")
+}
+
+// DeleteImport deletes the import path from the file f, if present.
+// If there are duplicate import declarations, all matching ones are deleted.
+func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) {
+ return DeleteNamedImport(fset, f, "", path)
+}
+
+// DeleteNamedImport deletes the import with the given name and path from the file f, if present.
+// If there are duplicate import declarations, all matching ones are deleted.
+func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) {
+ var delspecs []*ast.ImportSpec
+ var delcomments []*ast.CommentGroup
+
+ // Find the import nodes that import path, if any.
+ for i := 0; i < len(f.Decls); i++ {
+ decl := f.Decls[i]
+ gen, ok := decl.(*ast.GenDecl)
+ if !ok || gen.Tok != token.IMPORT {
+ continue
+ }
+ for j := 0; j < len(gen.Specs); j++ {
+ spec := gen.Specs[j]
+ impspec := spec.(*ast.ImportSpec)
+ if importName(impspec) != name || importPath(impspec) != path {
+ continue
+ }
+
+ // We found an import spec that imports path.
+ // Delete it.
+ delspecs = append(delspecs, impspec)
+ deleted = true
+ copy(gen.Specs[j:], gen.Specs[j+1:])
+ gen.Specs = gen.Specs[:len(gen.Specs)-1]
+
+ // If this was the last import spec in this decl,
+ // delete the decl, too.
+ if len(gen.Specs) == 0 {
+ copy(f.Decls[i:], f.Decls[i+1:])
+ f.Decls = f.Decls[:len(f.Decls)-1]
+ i--
+ break
+ } else if len(gen.Specs) == 1 {
+ if impspec.Doc != nil {
+ delcomments = append(delcomments, impspec.Doc)
+ }
+ if impspec.Comment != nil {
+ delcomments = append(delcomments, impspec.Comment)
+ }
+ for _, cg := range f.Comments {
+ // Found comment on the same line as the import spec.
+ if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line {
+ delcomments = append(delcomments, cg)
+ break
+ }
+ }
+
+ spec := gen.Specs[0].(*ast.ImportSpec)
+
+ // Move the documentation right after the import decl.
+ if spec.Doc != nil {
+ for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line {
+ fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
+ }
+ }
+ for _, cg := range f.Comments {
+ if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line {
+ for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line {
+ fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
+ }
+ break
+ }
+ }
+ }
+ if j > 0 {
+ lastImpspec := gen.Specs[j-1].(*ast.ImportSpec)
+ lastLine := fset.PositionFor(lastImpspec.Path.ValuePos, false).Line
+ line := fset.PositionFor(impspec.Path.ValuePos, false).Line
+
+ // We deleted an entry but now there may be
+ // a blank line-sized hole where the import was.
+ if line-lastLine > 1 || !gen.Rparen.IsValid() {
+ // There was a blank line immediately preceding the deleted import,
+ // so there's no need to close the hole. The right parenthesis is
+ // invalid after AddImport to an import statement without parenthesis.
+ // Do nothing.
+ } else if line != fset.File(gen.Rparen).LineCount() {
+ // There was no blank line. Close the hole.
+ fset.File(gen.Rparen).MergeLine(line)
+ }
+ }
+ j--
+ }
+ }
+
+ // Delete imports from f.Imports.
+ for i := 0; i < len(f.Imports); i++ {
+ imp := f.Imports[i]
+ for j, del := range delspecs {
+ if imp == del {
+ copy(f.Imports[i:], f.Imports[i+1:])
+ f.Imports = f.Imports[:len(f.Imports)-1]
+ copy(delspecs[j:], delspecs[j+1:])
+ delspecs = delspecs[:len(delspecs)-1]
+ i--
+ break
+ }
+ }
+ }
+
+ // Delete comments from f.Comments.
+ for i := 0; i < len(f.Comments); i++ {
+ cg := f.Comments[i]
+ for j, del := range delcomments {
+ if cg == del {
+ copy(f.Comments[i:], f.Comments[i+1:])
+ f.Comments = f.Comments[:len(f.Comments)-1]
+ copy(delcomments[j:], delcomments[j+1:])
+ delcomments = delcomments[:len(delcomments)-1]
+ i--
+ break
+ }
+ }
+ }
+
+ if len(delspecs) > 0 {
+ panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs))
+ }
+
+ return
+}
+
+// RewriteImport rewrites any import of path oldPath to path newPath.
+func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) {
+ for _, imp := range f.Imports {
+ if importPath(imp) == oldPath {
+ rewrote = true
+ // record old End, because the default is to compute
+ // it using the length of imp.Path.Value.
+ imp.EndPos = imp.End()
+ imp.Path.Value = strconv.Quote(newPath)
+ }
+ }
+ return
+}
+
+// UsesImport reports whether a given import is used.
+func UsesImport(f *ast.File, path string) (used bool) {
+ spec := importSpec(f, path)
+ if spec == nil {
+ return
+ }
+
+ name := spec.Name.String()
+ switch name {
+ case "<nil>":
+ // If the package name is not explicitly specified,
+ // make an educated guess. This is not guaranteed to be correct.
+ lastSlash := strings.LastIndex(path, "/")
+ if lastSlash == -1 {
+ name = path
+ } else {
+ name = path[lastSlash+1:]
+ }
+ case "_", ".":
+ // Not sure if this import is used - err on the side of caution.
+ return true
+ }
+
+ ast.Walk(visitFn(func(n ast.Node) {
+ sel, ok := n.(*ast.SelectorExpr)
+ if ok && isTopName(sel.X, name) {
+ used = true
+ }
+ }), f)
+
+ return
+}
+
+type visitFn func(node ast.Node)
+
+func (fn visitFn) Visit(node ast.Node) ast.Visitor {
+ fn(node)
+ return fn
+}
+
+// imports reports whether f has an import with the specified name and path.
+func imports(f *ast.File, name, path string) bool {
+ for _, s := range f.Imports {
+ if importName(s) == name && importPath(s) == path {
+ return true
+ }
+ }
+ return false
+}
+
+// importSpec returns the import spec if f imports path,
+// or nil otherwise.
+func importSpec(f *ast.File, path string) *ast.ImportSpec {
+ for _, s := range f.Imports {
+ if importPath(s) == path {
+ return s
+ }
+ }
+ return nil
+}
+
+// importName returns the name of s,
+// or "" if the import is not named.
+func importName(s *ast.ImportSpec) string {
+ if s.Name == nil {
+ return ""
+ }
+ return s.Name.Name
+}
+
+// importPath returns the unquoted import path of s,
+// or "" if the path is not properly quoted.
+func importPath(s *ast.ImportSpec) string {
+ t, err := strconv.Unquote(s.Path.Value)
+ if err != nil {
+ return ""
+ }
+ return t
+}
+
+// declImports reports whether gen contains an import of path.
+func declImports(gen *ast.GenDecl, path string) bool {
+ if gen.Tok != token.IMPORT {
+ return false
+ }
+ for _, spec := range gen.Specs {
+ impspec := spec.(*ast.ImportSpec)
+ if importPath(impspec) == path {
+ return true
+ }
+ }
+ return false
+}
+
+// matchLen returns the length of the longest path segment prefix shared by x and y.
+func matchLen(x, y string) int {
+ n := 0
+ for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ {
+ if x[i] == '/' {
+ n++
+ }
+ }
+ return n
+}
+
+// isTopName returns true if n is a top-level unresolved identifier with the given name.
+func isTopName(n ast.Expr, name string) bool {
+ id, ok := n.(*ast.Ident)
+ return ok && id.Name == name && id.Obj == nil
+}
+
+// Imports returns the file imports grouped by paragraph.
+func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec {
+ var groups [][]*ast.ImportSpec
+
+ for _, decl := range f.Decls {
+ genDecl, ok := decl.(*ast.GenDecl)
+ if !ok || genDecl.Tok != token.IMPORT {
+ break
+ }
+
+ group := []*ast.ImportSpec{}
+
+ var lastLine int
+ for _, spec := range genDecl.Specs {
+ importSpec := spec.(*ast.ImportSpec)
+ pos := importSpec.Path.ValuePos
+ line := fset.Position(pos).Line
+ if lastLine > 0 && pos > 0 && line-lastLine > 1 {
+ groups = append(groups, group)
+ group = []*ast.ImportSpec{}
+ }
+ group = append(group, importSpec)
+ lastLine = line
+ }
+ groups = append(groups, group)
+ }
+
+ return groups
+}
diff --git a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
new file mode 100644
index 000000000..58934f766
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
@@ -0,0 +1,486 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package astutil
+
+import (
+ "fmt"
+ "go/ast"
+ "reflect"
+ "sort"
+)
+
+// An ApplyFunc is invoked by Apply for each node n, even if n is nil,
+// before and/or after the node's children, using a Cursor describing
+// the current node and providing operations on it.
+//
+// The return value of ApplyFunc controls the syntax tree traversal.
+// See Apply for details.
+type ApplyFunc func(*Cursor) bool
+
+// Apply traverses a syntax tree recursively, starting with root,
+// and calling pre and post for each node as described below.
+// Apply returns the syntax tree, possibly modified.
+//
+// If pre is not nil, it is called for each node before the node's
+// children are traversed (pre-order). If pre returns false, no
+// children are traversed, and post is not called for that node.
+//
+// If post is not nil, and a prior call of pre didn't return false,
+// post is called for each node after its children are traversed
+// (post-order). If post returns false, traversal is terminated and
+// Apply returns immediately.
+//
+// Only fields that refer to AST nodes are considered children;
+// i.e., token.Pos, Scopes, Objects, and fields of basic types
+// (strings, etc.) are ignored.
+//
+// Children are traversed in the order in which they appear in the
+// respective node's struct definition. A package's files are
+// traversed in the filenames' alphabetical order.
+func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) {
+ parent := &struct{ ast.Node }{root}
+ defer func() {
+ if r := recover(); r != nil && r != abort {
+ panic(r)
+ }
+ result = parent.Node
+ }()
+ a := &application{pre: pre, post: post}
+ a.apply(parent, "Node", nil, root)
+ return
+}
+
+var abort = new(int) // singleton, to signal termination of Apply
+
+// A Cursor describes a node encountered during Apply.
+// Information about the node and its parent is available
+// from the Node, Parent, Name, and Index methods.
+//
+// If p is a variable of type and value of the current parent node
+// c.Parent(), and f is the field identifier with name c.Name(),
+// the following invariants hold:
+//
+// p.f == c.Node() if c.Index() < 0
+// p.f[c.Index()] == c.Node() if c.Index() >= 0
+//
+// The methods Replace, Delete, InsertBefore, and InsertAfter
+// can be used to change the AST without disrupting Apply.
+type Cursor struct {
+ parent ast.Node
+ name string
+ iter *iterator // valid if non-nil
+ node ast.Node
+}
+
+// Node returns the current Node.
+func (c *Cursor) Node() ast.Node { return c.node }
+
+// Parent returns the parent of the current Node.
+func (c *Cursor) Parent() ast.Node { return c.parent }
+
+// Name returns the name of the parent Node field that contains the current Node.
+// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns
+// the filename for the current Node.
+func (c *Cursor) Name() string { return c.name }
+
+// Index reports the index >= 0 of the current Node in the slice of Nodes that
+// contains it, or a value < 0 if the current Node is not part of a slice.
+// The index of the current node changes if InsertBefore is called while
+// processing the current node.
+func (c *Cursor) Index() int {
+ if c.iter != nil {
+ return c.iter.index
+ }
+ return -1
+}
+
+// field returns the current node's parent field value.
+func (c *Cursor) field() reflect.Value {
+ return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name)
+}
+
+// Replace replaces the current Node with n.
+// The replacement node is not walked by Apply.
+func (c *Cursor) Replace(n ast.Node) {
+ if _, ok := c.node.(*ast.File); ok {
+ file, ok := n.(*ast.File)
+ if !ok {
+ panic("attempt to replace *ast.File with non-*ast.File")
+ }
+ c.parent.(*ast.Package).Files[c.name] = file
+ return
+ }
+
+ v := c.field()
+ if i := c.Index(); i >= 0 {
+ v = v.Index(i)
+ }
+ v.Set(reflect.ValueOf(n))
+}
+
+// Delete deletes the current Node from its containing slice.
+// If the current Node is not part of a slice, Delete panics.
+// As a special case, if the current node is a package file,
+// Delete removes it from the package's Files map.
+func (c *Cursor) Delete() {
+ if _, ok := c.node.(*ast.File); ok {
+ delete(c.parent.(*ast.Package).Files, c.name)
+ return
+ }
+
+ i := c.Index()
+ if i < 0 {
+ panic("Delete node not contained in slice")
+ }
+ v := c.field()
+ l := v.Len()
+ reflect.Copy(v.Slice(i, l), v.Slice(i+1, l))
+ v.Index(l - 1).Set(reflect.Zero(v.Type().Elem()))
+ v.SetLen(l - 1)
+ c.iter.step--
+}
+
+// InsertAfter inserts n after the current Node in its containing slice.
+// If the current Node is not part of a slice, InsertAfter panics.
+// Apply does not walk n.
+func (c *Cursor) InsertAfter(n ast.Node) {
+ i := c.Index()
+ if i < 0 {
+ panic("InsertAfter node not contained in slice")
+ }
+ v := c.field()
+ v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
+ l := v.Len()
+ reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l))
+ v.Index(i + 1).Set(reflect.ValueOf(n))
+ c.iter.step++
+}
+
+// InsertBefore inserts n before the current Node in its containing slice.
+// If the current Node is not part of a slice, InsertBefore panics.
+// Apply will not walk n.
+func (c *Cursor) InsertBefore(n ast.Node) {
+ i := c.Index()
+ if i < 0 {
+ panic("InsertBefore node not contained in slice")
+ }
+ v := c.field()
+ v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
+ l := v.Len()
+ reflect.Copy(v.Slice(i+1, l), v.Slice(i, l))
+ v.Index(i).Set(reflect.ValueOf(n))
+ c.iter.index++
+}
+
+// application carries all the shared data so we can pass it around cheaply.
+type application struct {
+ pre, post ApplyFunc
+ cursor Cursor
+ iter iterator
+}
+
+func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) {
+ // convert typed nil into untyped nil
+ if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() {
+ n = nil
+ }
+
+ // avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead
+ saved := a.cursor
+ a.cursor.parent = parent
+ a.cursor.name = name
+ a.cursor.iter = iter
+ a.cursor.node = n
+
+ if a.pre != nil && !a.pre(&a.cursor) {
+ a.cursor = saved
+ return
+ }
+
+ // walk children
+ // (the order of the cases matches the order of the corresponding node types in go/ast)
+ switch n := n.(type) {
+ case nil:
+ // nothing to do
+
+ // Comments and fields
+ case *ast.Comment:
+ // nothing to do
+
+ case *ast.CommentGroup:
+ if n != nil {
+ a.applyList(n, "List")
+ }
+
+ case *ast.Field:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.applyList(n, "Names")
+ a.apply(n, "Type", nil, n.Type)
+ a.apply(n, "Tag", nil, n.Tag)
+ a.apply(n, "Comment", nil, n.Comment)
+
+ case *ast.FieldList:
+ a.applyList(n, "List")
+
+ // Expressions
+ case *ast.BadExpr, *ast.Ident, *ast.BasicLit:
+ // nothing to do
+
+ case *ast.Ellipsis:
+ a.apply(n, "Elt", nil, n.Elt)
+
+ case *ast.FuncLit:
+ a.apply(n, "Type", nil, n.Type)
+ a.apply(n, "Body", nil, n.Body)
+
+ case *ast.CompositeLit:
+ a.apply(n, "Type", nil, n.Type)
+ a.applyList(n, "Elts")
+
+ case *ast.ParenExpr:
+ a.apply(n, "X", nil, n.X)
+
+ case *ast.SelectorExpr:
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Sel", nil, n.Sel)
+
+ case *ast.IndexExpr:
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Index", nil, n.Index)
+
+ case *ast.IndexListExpr:
+ a.apply(n, "X", nil, n.X)
+ a.applyList(n, "Indices")
+
+ case *ast.SliceExpr:
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Low", nil, n.Low)
+ a.apply(n, "High", nil, n.High)
+ a.apply(n, "Max", nil, n.Max)
+
+ case *ast.TypeAssertExpr:
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Type", nil, n.Type)
+
+ case *ast.CallExpr:
+ a.apply(n, "Fun", nil, n.Fun)
+ a.applyList(n, "Args")
+
+ case *ast.StarExpr:
+ a.apply(n, "X", nil, n.X)
+
+ case *ast.UnaryExpr:
+ a.apply(n, "X", nil, n.X)
+
+ case *ast.BinaryExpr:
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Y", nil, n.Y)
+
+ case *ast.KeyValueExpr:
+ a.apply(n, "Key", nil, n.Key)
+ a.apply(n, "Value", nil, n.Value)
+
+ // Types
+ case *ast.ArrayType:
+ a.apply(n, "Len", nil, n.Len)
+ a.apply(n, "Elt", nil, n.Elt)
+
+ case *ast.StructType:
+ a.apply(n, "Fields", nil, n.Fields)
+
+ case *ast.FuncType:
+ if tparams := n.TypeParams; tparams != nil {
+ a.apply(n, "TypeParams", nil, tparams)
+ }
+ a.apply(n, "Params", nil, n.Params)
+ a.apply(n, "Results", nil, n.Results)
+
+ case *ast.InterfaceType:
+ a.apply(n, "Methods", nil, n.Methods)
+
+ case *ast.MapType:
+ a.apply(n, "Key", nil, n.Key)
+ a.apply(n, "Value", nil, n.Value)
+
+ case *ast.ChanType:
+ a.apply(n, "Value", nil, n.Value)
+
+ // Statements
+ case *ast.BadStmt:
+ // nothing to do
+
+ case *ast.DeclStmt:
+ a.apply(n, "Decl", nil, n.Decl)
+
+ case *ast.EmptyStmt:
+ // nothing to do
+
+ case *ast.LabeledStmt:
+ a.apply(n, "Label", nil, n.Label)
+ a.apply(n, "Stmt", nil, n.Stmt)
+
+ case *ast.ExprStmt:
+ a.apply(n, "X", nil, n.X)
+
+ case *ast.SendStmt:
+ a.apply(n, "Chan", nil, n.Chan)
+ a.apply(n, "Value", nil, n.Value)
+
+ case *ast.IncDecStmt:
+ a.apply(n, "X", nil, n.X)
+
+ case *ast.AssignStmt:
+ a.applyList(n, "Lhs")
+ a.applyList(n, "Rhs")
+
+ case *ast.GoStmt:
+ a.apply(n, "Call", nil, n.Call)
+
+ case *ast.DeferStmt:
+ a.apply(n, "Call", nil, n.Call)
+
+ case *ast.ReturnStmt:
+ a.applyList(n, "Results")
+
+ case *ast.BranchStmt:
+ a.apply(n, "Label", nil, n.Label)
+
+ case *ast.BlockStmt:
+ a.applyList(n, "List")
+
+ case *ast.IfStmt:
+ a.apply(n, "Init", nil, n.Init)
+ a.apply(n, "Cond", nil, n.Cond)
+ a.apply(n, "Body", nil, n.Body)
+ a.apply(n, "Else", nil, n.Else)
+
+ case *ast.CaseClause:
+ a.applyList(n, "List")
+ a.applyList(n, "Body")
+
+ case *ast.SwitchStmt:
+ a.apply(n, "Init", nil, n.Init)
+ a.apply(n, "Tag", nil, n.Tag)
+ a.apply(n, "Body", nil, n.Body)
+
+ case *ast.TypeSwitchStmt:
+ a.apply(n, "Init", nil, n.Init)
+ a.apply(n, "Assign", nil, n.Assign)
+ a.apply(n, "Body", nil, n.Body)
+
+ case *ast.CommClause:
+ a.apply(n, "Comm", nil, n.Comm)
+ a.applyList(n, "Body")
+
+ case *ast.SelectStmt:
+ a.apply(n, "Body", nil, n.Body)
+
+ case *ast.ForStmt:
+ a.apply(n, "Init", nil, n.Init)
+ a.apply(n, "Cond", nil, n.Cond)
+ a.apply(n, "Post", nil, n.Post)
+ a.apply(n, "Body", nil, n.Body)
+
+ case *ast.RangeStmt:
+ a.apply(n, "Key", nil, n.Key)
+ a.apply(n, "Value", nil, n.Value)
+ a.apply(n, "X", nil, n.X)
+ a.apply(n, "Body", nil, n.Body)
+
+ // Declarations
+ case *ast.ImportSpec:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.apply(n, "Name", nil, n.Name)
+ a.apply(n, "Path", nil, n.Path)
+ a.apply(n, "Comment", nil, n.Comment)
+
+ case *ast.ValueSpec:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.applyList(n, "Names")
+ a.apply(n, "Type", nil, n.Type)
+ a.applyList(n, "Values")
+ a.apply(n, "Comment", nil, n.Comment)
+
+ case *ast.TypeSpec:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.apply(n, "Name", nil, n.Name)
+ if tparams := n.TypeParams; tparams != nil {
+ a.apply(n, "TypeParams", nil, tparams)
+ }
+ a.apply(n, "Type", nil, n.Type)
+ a.apply(n, "Comment", nil, n.Comment)
+
+ case *ast.BadDecl:
+ // nothing to do
+
+ case *ast.GenDecl:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.applyList(n, "Specs")
+
+ case *ast.FuncDecl:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.apply(n, "Recv", nil, n.Recv)
+ a.apply(n, "Name", nil, n.Name)
+ a.apply(n, "Type", nil, n.Type)
+ a.apply(n, "Body", nil, n.Body)
+
+ // Files and packages
+ case *ast.File:
+ a.apply(n, "Doc", nil, n.Doc)
+ a.apply(n, "Name", nil, n.Name)
+ a.applyList(n, "Decls")
+ // Don't walk n.Comments; they have either been walked already if
+ // they are Doc comments, or they can be easily walked explicitly.
+
+ case *ast.Package:
+ // collect and sort names for reproducible behavior
+ var names []string
+ for name := range n.Files {
+ names = append(names, name)
+ }
+ sort.Strings(names)
+ for _, name := range names {
+ a.apply(n, name, nil, n.Files[name])
+ }
+
+ default:
+ panic(fmt.Sprintf("Apply: unexpected node type %T", n))
+ }
+
+ if a.post != nil && !a.post(&a.cursor) {
+ panic(abort)
+ }
+
+ a.cursor = saved
+}
+
+// An iterator controls iteration over a slice of nodes.
+type iterator struct {
+ index, step int
+}
+
+func (a *application) applyList(parent ast.Node, name string) {
+ // avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead
+ saved := a.iter
+ a.iter.index = 0
+ for {
+ // must reload parent.name each time, since cursor modifications might change it
+ v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name)
+ if a.iter.index >= v.Len() {
+ break
+ }
+
+ // element x may be nil in a bad AST - be cautious
+ var x ast.Node
+ if e := v.Index(a.iter.index); e.IsValid() {
+ x = e.Interface().(ast.Node)
+ }
+
+ a.iter.step = 1
+ a.apply(parent, name, &a.iter, x)
+ a.iter.index += a.iter.step
+ }
+ a.iter = saved
+}
diff --git a/vendor/golang.org/x/tools/go/ast/astutil/util.go b/vendor/golang.org/x/tools/go/ast/astutil/util.go
new file mode 100644
index 000000000..919d5305a
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/ast/astutil/util.go
@@ -0,0 +1,18 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package astutil
+
+import "go/ast"
+
+// Unparen returns e with any enclosing parentheses stripped.
+func Unparen(e ast.Expr) ast.Expr {
+ for {
+ p, ok := e.(*ast.ParenExpr)
+ if !ok {
+ return e
+ }
+ e = p.X
+ }
+}
diff --git a/vendor/golang.org/x/tools/go/buildutil/allpackages.go b/vendor/golang.org/x/tools/go/buildutil/allpackages.go
new file mode 100644
index 000000000..dfb8cd6c7
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/buildutil/allpackages.go
@@ -0,0 +1,195 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package buildutil provides utilities related to the go/build
+// package in the standard library.
+//
+// All I/O is done via the build.Context file system interface, which must
+// be concurrency-safe.
+package buildutil // import "golang.org/x/tools/go/buildutil"
+
+import (
+ "go/build"
+ "os"
+ "path/filepath"
+ "sort"
+ "strings"
+ "sync"
+)
+
+// AllPackages returns the package path of each Go package in any source
+// directory of the specified build context (e.g. $GOROOT or an element
+// of $GOPATH). Errors are ignored. The results are sorted.
+// All package paths are canonical, and thus may contain "/vendor/".
+//
+// The result may include import paths for directories that contain no
+// *.go files, such as "archive" (in $GOROOT/src).
+//
+// All I/O is done via the build.Context file system interface,
+// which must be concurrency-safe.
+func AllPackages(ctxt *build.Context) []string {
+ var list []string
+ ForEachPackage(ctxt, func(pkg string, _ error) {
+ list = append(list, pkg)
+ })
+ sort.Strings(list)
+ return list
+}
+
+// ForEachPackage calls the found function with the package path of
+// each Go package it finds in any source directory of the specified
+// build context (e.g. $GOROOT or an element of $GOPATH).
+// All package paths are canonical, and thus may contain "/vendor/".
+//
+// If the package directory exists but could not be read, the second
+// argument to the found function provides the error.
+//
+// All I/O is done via the build.Context file system interface,
+// which must be concurrency-safe.
+func ForEachPackage(ctxt *build.Context, found func(importPath string, err error)) {
+ ch := make(chan item)
+
+ var wg sync.WaitGroup
+ for _, root := range ctxt.SrcDirs() {
+ root := root
+ wg.Add(1)
+ go func() {
+ allPackages(ctxt, root, ch)
+ wg.Done()
+ }()
+ }
+ go func() {
+ wg.Wait()
+ close(ch)
+ }()
+
+ // All calls to found occur in the caller's goroutine.
+ for i := range ch {
+ found(i.importPath, i.err)
+ }
+}
+
+type item struct {
+ importPath string
+ err error // (optional)
+}
+
+// We use a process-wide counting semaphore to limit
+// the number of parallel calls to ReadDir.
+var ioLimit = make(chan bool, 20)
+
+func allPackages(ctxt *build.Context, root string, ch chan<- item) {
+ root = filepath.Clean(root) + string(os.PathSeparator)
+
+ var wg sync.WaitGroup
+
+ var walkDir func(dir string)
+ walkDir = func(dir string) {
+ // Avoid .foo, _foo, and testdata directory trees.
+ base := filepath.Base(dir)
+ if base == "" || base[0] == '.' || base[0] == '_' || base == "testdata" {
+ return
+ }
+
+ pkg := filepath.ToSlash(strings.TrimPrefix(dir, root))
+
+ // Prune search if we encounter any of these import paths.
+ switch pkg {
+ case "builtin":
+ return
+ }
+
+ ioLimit <- true
+ files, err := ReadDir(ctxt, dir)
+ <-ioLimit
+ if pkg != "" || err != nil {
+ ch <- item{pkg, err}
+ }
+ for _, fi := range files {
+ fi := fi
+ if fi.IsDir() {
+ wg.Add(1)
+ go func() {
+ walkDir(filepath.Join(dir, fi.Name()))
+ wg.Done()
+ }()
+ }
+ }
+ }
+
+ walkDir(root)
+ wg.Wait()
+}
+
+// ExpandPatterns returns the set of packages matched by patterns,
+// which may have the following forms:
+//
+// golang.org/x/tools/cmd/guru # a single package
+// golang.org/x/tools/... # all packages beneath dir
+// ... # the entire workspace.
+//
+// Order is significant: a pattern preceded by '-' removes matching
+// packages from the set. For example, these patterns match all encoding
+// packages except encoding/xml:
+//
+// encoding/... -encoding/xml
+//
+// A trailing slash in a pattern is ignored. (Path components of Go
+// package names are separated by slash, not the platform's path separator.)
+func ExpandPatterns(ctxt *build.Context, patterns []string) map[string]bool {
+ // TODO(adonovan): support other features of 'go list':
+ // - "std"/"cmd"/"all" meta-packages
+ // - "..." not at the end of a pattern
+ // - relative patterns using "./" or "../" prefix
+
+ pkgs := make(map[string]bool)
+ doPkg := func(pkg string, neg bool) {
+ if neg {
+ delete(pkgs, pkg)
+ } else {
+ pkgs[pkg] = true
+ }
+ }
+
+ // Scan entire workspace if wildcards are present.
+ // TODO(adonovan): opt: scan only the necessary subtrees of the workspace.
+ var all []string
+ for _, arg := range patterns {
+ if strings.HasSuffix(arg, "...") {
+ all = AllPackages(ctxt)
+ break
+ }
+ }
+
+ for _, arg := range patterns {
+ if arg == "" {
+ continue
+ }
+
+ neg := arg[0] == '-'
+ if neg {
+ arg = arg[1:]
+ }
+
+ if arg == "..." {
+ // ... matches all packages
+ for _, pkg := range all {
+ doPkg(pkg, neg)
+ }
+ } else if dir := strings.TrimSuffix(arg, "/..."); dir != arg {
+ // dir/... matches all packages beneath dir
+ for _, pkg := range all {
+ if strings.HasPrefix(pkg, dir) &&
+ (len(pkg) == len(dir) || pkg[len(dir)] == '/') {
+ doPkg(pkg, neg)
+ }
+ }
+ } else {
+ // single package
+ doPkg(strings.TrimSuffix(arg, "/"), neg)
+ }
+ }
+
+ return pkgs
+}
diff --git a/vendor/golang.org/x/tools/go/buildutil/fakecontext.go b/vendor/golang.org/x/tools/go/buildutil/fakecontext.go
new file mode 100644
index 000000000..763d18809
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/buildutil/fakecontext.go
@@ -0,0 +1,111 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package buildutil
+
+import (
+ "fmt"
+ "go/build"
+ "io"
+ "os"
+ "path"
+ "path/filepath"
+ "sort"
+ "strings"
+ "time"
+)
+
+// FakeContext returns a build.Context for the fake file tree specified
+// by pkgs, which maps package import paths to a mapping from file base
+// names to contents.
+//
+// The fake Context has a GOROOT of "/go" and no GOPATH, and overrides
+// the necessary file access methods to read from memory instead of the
+// real file system.
+//
+// Unlike a real file tree, the fake one has only two levels---packages
+// and files---so ReadDir("/go/src/") returns all packages under
+// /go/src/ including, for instance, "math" and "math/big".
+// ReadDir("/go/src/math/big") would return all the files in the
+// "math/big" package.
+func FakeContext(pkgs map[string]map[string]string) *build.Context {
+ clean := func(filename string) string {
+ f := path.Clean(filepath.ToSlash(filename))
+ // Removing "/go/src" while respecting segment
+ // boundaries has this unfortunate corner case:
+ if f == "/go/src" {
+ return ""
+ }
+ return strings.TrimPrefix(f, "/go/src/")
+ }
+
+ ctxt := build.Default // copy
+ ctxt.GOROOT = "/go"
+ ctxt.GOPATH = ""
+ ctxt.Compiler = "gc"
+ ctxt.IsDir = func(dir string) bool {
+ dir = clean(dir)
+ if dir == "" {
+ return true // needed by (*build.Context).SrcDirs
+ }
+ return pkgs[dir] != nil
+ }
+ ctxt.ReadDir = func(dir string) ([]os.FileInfo, error) {
+ dir = clean(dir)
+ var fis []os.FileInfo
+ if dir == "" {
+ // enumerate packages
+ for importPath := range pkgs {
+ fis = append(fis, fakeDirInfo(importPath))
+ }
+ } else {
+ // enumerate files of package
+ for basename := range pkgs[dir] {
+ fis = append(fis, fakeFileInfo(basename))
+ }
+ }
+ sort.Sort(byName(fis))
+ return fis, nil
+ }
+ ctxt.OpenFile = func(filename string) (io.ReadCloser, error) {
+ filename = clean(filename)
+ dir, base := path.Split(filename)
+ content, ok := pkgs[path.Clean(dir)][base]
+ if !ok {
+ return nil, fmt.Errorf("file not found: %s", filename)
+ }
+ return io.NopCloser(strings.NewReader(content)), nil
+ }
+ ctxt.IsAbsPath = func(path string) bool {
+ path = filepath.ToSlash(path)
+ // Don't rely on the default (filepath.Path) since on
+ // Windows, it reports virtual paths as non-absolute.
+ return strings.HasPrefix(path, "/")
+ }
+ return &ctxt
+}
+
+type byName []os.FileInfo
+
+func (s byName) Len() int { return len(s) }
+func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+func (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() }
+
+type fakeFileInfo string
+
+func (fi fakeFileInfo) Name() string { return string(fi) }
+func (fakeFileInfo) Sys() interface{} { return nil }
+func (fakeFileInfo) ModTime() time.Time { return time.Time{} }
+func (fakeFileInfo) IsDir() bool { return false }
+func (fakeFileInfo) Size() int64 { return 0 }
+func (fakeFileInfo) Mode() os.FileMode { return 0644 }
+
+type fakeDirInfo string
+
+func (fd fakeDirInfo) Name() string { return string(fd) }
+func (fakeDirInfo) Sys() interface{} { return nil }
+func (fakeDirInfo) ModTime() time.Time { return time.Time{} }
+func (fakeDirInfo) IsDir() bool { return true }
+func (fakeDirInfo) Size() int64 { return 0 }
+func (fakeDirInfo) Mode() os.FileMode { return 0755 }
diff --git a/vendor/golang.org/x/tools/go/buildutil/overlay.go b/vendor/golang.org/x/tools/go/buildutil/overlay.go
new file mode 100644
index 000000000..7e371658d
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/buildutil/overlay.go
@@ -0,0 +1,101 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package buildutil
+
+import (
+ "bufio"
+ "bytes"
+ "fmt"
+ "go/build"
+ "io"
+ "path/filepath"
+ "strconv"
+ "strings"
+)
+
+// OverlayContext overlays a build.Context with additional files from
+// a map. Files in the map take precedence over other files.
+//
+// In addition to plain string comparison, two file names are
+// considered equal if their base names match and their directory
+// components point at the same directory on the file system. That is,
+// symbolic links are followed for directories, but not files.
+//
+// A common use case for OverlayContext is to allow editors to pass in
+// a set of unsaved, modified files.
+//
+// Currently, only the Context.OpenFile function will respect the
+// overlay. This may change in the future.
+func OverlayContext(orig *build.Context, overlay map[string][]byte) *build.Context {
+ // TODO(dominikh): Implement IsDir, HasSubdir and ReadDir
+
+ rc := func(data []byte) (io.ReadCloser, error) {
+ return io.NopCloser(bytes.NewBuffer(data)), nil
+ }
+
+ copy := *orig // make a copy
+ ctxt := &copy
+ ctxt.OpenFile = func(path string) (io.ReadCloser, error) {
+ // Fast path: names match exactly.
+ if content, ok := overlay[path]; ok {
+ return rc(content)
+ }
+
+ // Slow path: check for same file under a different
+ // alias, perhaps due to a symbolic link.
+ for filename, content := range overlay {
+ if sameFile(path, filename) {
+ return rc(content)
+ }
+ }
+
+ return OpenFile(orig, path)
+ }
+ return ctxt
+}
+
+// ParseOverlayArchive parses an archive containing Go files and their
+// contents. The result is intended to be used with OverlayContext.
+//
+// # Archive format
+//
+// The archive consists of a series of files. Each file consists of a
+// name, a decimal file size and the file contents, separated by
+// newlines. No newline follows after the file contents.
+func ParseOverlayArchive(archive io.Reader) (map[string][]byte, error) {
+ overlay := make(map[string][]byte)
+ r := bufio.NewReader(archive)
+ for {
+ // Read file name.
+ filename, err := r.ReadString('\n')
+ if err != nil {
+ if err == io.EOF {
+ break // OK
+ }
+ return nil, fmt.Errorf("reading archive file name: %v", err)
+ }
+ filename = filepath.Clean(strings.TrimSpace(filename))
+
+ // Read file size.
+ sz, err := r.ReadString('\n')
+ if err != nil {
+ return nil, fmt.Errorf("reading size of archive file %s: %v", filename, err)
+ }
+ sz = strings.TrimSpace(sz)
+ size, err := strconv.ParseUint(sz, 10, 32)
+ if err != nil {
+ return nil, fmt.Errorf("parsing size of archive file %s: %v", filename, err)
+ }
+
+ // Read file content.
+ content := make([]byte, size)
+ if _, err := io.ReadFull(r, content); err != nil {
+ return nil, fmt.Errorf("reading archive file %s: %v", filename, err)
+ }
+ overlay[filename] = content
+ }
+
+ return overlay, nil
+}
diff --git a/vendor/golang.org/x/tools/go/buildutil/tags.go b/vendor/golang.org/x/tools/go/buildutil/tags.go
new file mode 100644
index 000000000..7cf523bca
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/buildutil/tags.go
@@ -0,0 +1,80 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package buildutil
+
+// This logic was copied from stringsFlag from $GOROOT/src/cmd/go/build.go.
+
+import "fmt"
+
+const TagsFlagDoc = "a list of `build tags` to consider satisfied during the build. " +
+ "For more information about build tags, see the description of " +
+ "build constraints in the documentation for the go/build package"
+
+// TagsFlag is an implementation of the flag.Value and flag.Getter interfaces that parses
+// a flag value in the same manner as go build's -tags flag and
+// populates a []string slice.
+//
+// See $GOROOT/src/go/build/doc.go for description of build tags.
+// See $GOROOT/src/cmd/go/doc.go for description of 'go build -tags' flag.
+//
+// Example:
+//
+// flag.Var((*buildutil.TagsFlag)(&build.Default.BuildTags), "tags", buildutil.TagsFlagDoc)
+type TagsFlag []string
+
+func (v *TagsFlag) Set(s string) error {
+ var err error
+ *v, err = splitQuotedFields(s)
+ if *v == nil {
+ *v = []string{}
+ }
+ return err
+}
+
+func (v *TagsFlag) Get() interface{} { return *v }
+
+func splitQuotedFields(s string) ([]string, error) {
+ // Split fields allowing '' or "" around elements.
+ // Quotes further inside the string do not count.
+ var f []string
+ for len(s) > 0 {
+ for len(s) > 0 && isSpaceByte(s[0]) {
+ s = s[1:]
+ }
+ if len(s) == 0 {
+ break
+ }
+ // Accepted quoted string. No unescaping inside.
+ if s[0] == '"' || s[0] == '\'' {
+ quote := s[0]
+ s = s[1:]
+ i := 0
+ for i < len(s) && s[i] != quote {
+ i++
+ }
+ if i >= len(s) {
+ return nil, fmt.Errorf("unterminated %c string", quote)
+ }
+ f = append(f, s[:i])
+ s = s[i+1:]
+ continue
+ }
+ i := 0
+ for i < len(s) && !isSpaceByte(s[i]) {
+ i++
+ }
+ f = append(f, s[:i])
+ s = s[i:]
+ }
+ return f, nil
+}
+
+func (v *TagsFlag) String() string {
+ return "<tagsFlag>"
+}
+
+func isSpaceByte(c byte) bool {
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r'
+}
diff --git a/vendor/golang.org/x/tools/go/buildutil/util.go b/vendor/golang.org/x/tools/go/buildutil/util.go
new file mode 100644
index 000000000..bee6390de
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/buildutil/util.go
@@ -0,0 +1,209 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package buildutil
+
+import (
+ "fmt"
+ "go/ast"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "io"
+ "io/ioutil"
+ "os"
+ "path"
+ "path/filepath"
+ "strings"
+)
+
+// ParseFile behaves like parser.ParseFile,
+// but uses the build context's file system interface, if any.
+//
+// If file is not absolute (as defined by IsAbsPath), the (dir, file)
+// components are joined using JoinPath; dir must be absolute.
+//
+// The displayPath function, if provided, is used to transform the
+// filename that will be attached to the ASTs.
+//
+// TODO(adonovan): call this from go/loader.parseFiles when the tree thaws.
+func ParseFile(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, file string, mode parser.Mode) (*ast.File, error) {
+ if !IsAbsPath(ctxt, file) {
+ file = JoinPath(ctxt, dir, file)
+ }
+ rd, err := OpenFile(ctxt, file)
+ if err != nil {
+ return nil, err
+ }
+ defer rd.Close() // ignore error
+ if displayPath != nil {
+ file = displayPath(file)
+ }
+ return parser.ParseFile(fset, file, rd, mode)
+}
+
+// ContainingPackage returns the package containing filename.
+//
+// If filename is not absolute, it is interpreted relative to working directory dir.
+// All I/O is via the build context's file system interface, if any.
+//
+// The '...Files []string' fields of the resulting build.Package are not
+// populated (build.FindOnly mode).
+func ContainingPackage(ctxt *build.Context, dir, filename string) (*build.Package, error) {
+ if !IsAbsPath(ctxt, filename) {
+ filename = JoinPath(ctxt, dir, filename)
+ }
+
+ // We must not assume the file tree uses
+ // "/" always,
+ // `\` always,
+ // or os.PathSeparator (which varies by platform),
+ // but to make any progress, we are forced to assume that
+ // paths will not use `\` unless the PathSeparator
+ // is also `\`, thus we can rely on filepath.ToSlash for some sanity.
+
+ dirSlash := path.Dir(filepath.ToSlash(filename)) + "/"
+
+ // We assume that no source root (GOPATH[i] or GOROOT) contains any other.
+ for _, srcdir := range ctxt.SrcDirs() {
+ srcdirSlash := filepath.ToSlash(srcdir) + "/"
+ if importPath, ok := HasSubdir(ctxt, srcdirSlash, dirSlash); ok {
+ return ctxt.Import(importPath, dir, build.FindOnly)
+ }
+ }
+
+ return nil, fmt.Errorf("can't find package containing %s", filename)
+}
+
+// -- Effective methods of file system interface -------------------------
+
+// (go/build.Context defines these as methods, but does not export them.)
+
+// HasSubdir calls ctxt.HasSubdir (if not nil) or else uses
+// the local file system to answer the question.
+func HasSubdir(ctxt *build.Context, root, dir string) (rel string, ok bool) {
+ if f := ctxt.HasSubdir; f != nil {
+ return f(root, dir)
+ }
+
+ // Try using paths we received.
+ if rel, ok = hasSubdir(root, dir); ok {
+ return
+ }
+
+ // Try expanding symlinks and comparing
+ // expanded against unexpanded and
+ // expanded against expanded.
+ rootSym, _ := filepath.EvalSymlinks(root)
+ dirSym, _ := filepath.EvalSymlinks(dir)
+
+ if rel, ok = hasSubdir(rootSym, dir); ok {
+ return
+ }
+ if rel, ok = hasSubdir(root, dirSym); ok {
+ return
+ }
+ return hasSubdir(rootSym, dirSym)
+}
+
+func hasSubdir(root, dir string) (rel string, ok bool) {
+ const sep = string(filepath.Separator)
+ root = filepath.Clean(root)
+ if !strings.HasSuffix(root, sep) {
+ root += sep
+ }
+
+ dir = filepath.Clean(dir)
+ if !strings.HasPrefix(dir, root) {
+ return "", false
+ }
+
+ return filepath.ToSlash(dir[len(root):]), true
+}
+
+// FileExists returns true if the specified file exists,
+// using the build context's file system interface.
+func FileExists(ctxt *build.Context, path string) bool {
+ if ctxt.OpenFile != nil {
+ r, err := ctxt.OpenFile(path)
+ if err != nil {
+ return false
+ }
+ r.Close() // ignore error
+ return true
+ }
+ _, err := os.Stat(path)
+ return err == nil
+}
+
+// OpenFile behaves like os.Open,
+// but uses the build context's file system interface, if any.
+func OpenFile(ctxt *build.Context, path string) (io.ReadCloser, error) {
+ if ctxt.OpenFile != nil {
+ return ctxt.OpenFile(path)
+ }
+ return os.Open(path)
+}
+
+// IsAbsPath behaves like filepath.IsAbs,
+// but uses the build context's file system interface, if any.
+func IsAbsPath(ctxt *build.Context, path string) bool {
+ if ctxt.IsAbsPath != nil {
+ return ctxt.IsAbsPath(path)
+ }
+ return filepath.IsAbs(path)
+}
+
+// JoinPath behaves like filepath.Join,
+// but uses the build context's file system interface, if any.
+func JoinPath(ctxt *build.Context, path ...string) string {
+ if ctxt.JoinPath != nil {
+ return ctxt.JoinPath(path...)
+ }
+ return filepath.Join(path...)
+}
+
+// IsDir behaves like os.Stat plus IsDir,
+// but uses the build context's file system interface, if any.
+func IsDir(ctxt *build.Context, path string) bool {
+ if ctxt.IsDir != nil {
+ return ctxt.IsDir(path)
+ }
+ fi, err := os.Stat(path)
+ return err == nil && fi.IsDir()
+}
+
+// ReadDir behaves like ioutil.ReadDir,
+// but uses the build context's file system interface, if any.
+func ReadDir(ctxt *build.Context, path string) ([]os.FileInfo, error) {
+ if ctxt.ReadDir != nil {
+ return ctxt.ReadDir(path)
+ }
+ return ioutil.ReadDir(path)
+}
+
+// SplitPathList behaves like filepath.SplitList,
+// but uses the build context's file system interface, if any.
+func SplitPathList(ctxt *build.Context, s string) []string {
+ if ctxt.SplitPathList != nil {
+ return ctxt.SplitPathList(s)
+ }
+ return filepath.SplitList(s)
+}
+
+// sameFile returns true if x and y have the same basename and denote
+// the same file.
+func sameFile(x, y string) bool {
+ if path.Clean(x) == path.Clean(y) {
+ return true
+ }
+ if filepath.Base(x) == filepath.Base(y) { // (optimisation)
+ if xi, err := os.Stat(x); err == nil {
+ if yi, err := os.Stat(y); err == nil {
+ return os.SameFile(xi, yi)
+ }
+ }
+ }
+ return false
+}
diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go
new file mode 100644
index 000000000..697974bb9
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go
@@ -0,0 +1,219 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package cgo handles cgo preprocessing of files containing `import "C"`.
+//
+// DESIGN
+//
+// The approach taken is to run the cgo processor on the package's
+// CgoFiles and parse the output, faking the filenames of the
+// resulting ASTs so that the synthetic file containing the C types is
+// called "C" (e.g. "~/go/src/net/C") and the preprocessed files
+// have their original names (e.g. "~/go/src/net/cgo_unix.go"),
+// not the names of the actual temporary files.
+//
+// The advantage of this approach is its fidelity to 'go build'. The
+// downside is that the token.Position.Offset for each AST node is
+// incorrect, being an offset within the temporary file. Line numbers
+// should still be correct because of the //line comments.
+//
+// The logic of this file is mostly plundered from the 'go build'
+// tool, which also invokes the cgo preprocessor.
+//
+//
+// REJECTED ALTERNATIVE
+//
+// An alternative approach that we explored is to extend go/types'
+// Importer mechanism to provide the identity of the importing package
+// so that each time `import "C"` appears it resolves to a different
+// synthetic package containing just the objects needed in that case.
+// The loader would invoke cgo but parse only the cgo_types.go file
+// defining the package-level objects, discarding the other files
+// resulting from preprocessing.
+//
+// The benefit of this approach would have been that source-level
+// syntax information would correspond exactly to the original cgo
+// file, with no preprocessing involved, making source tools like
+// godoc, guru, and eg happy. However, the approach was rejected
+// due to the additional complexity it would impose on go/types. (It
+// made for a beautiful demo, though.)
+//
+// cgo files, despite their *.go extension, are not legal Go source
+// files per the specification since they may refer to unexported
+// members of package "C" such as C.int. Also, a function such as
+// C.getpwent has in effect two types, one matching its C type and one
+// which additionally returns (errno C.int). The cgo preprocessor
+// uses name mangling to distinguish these two functions in the
+// processed code, but go/types would need to duplicate this logic in
+// its handling of function calls, analogous to the treatment of map
+// lookups in which y=m[k] and y,ok=m[k] are both legal.
+
+package cgo
+
+import (
+ "fmt"
+ "go/ast"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "regexp"
+ "strings"
+)
+
+// ProcessFiles invokes the cgo preprocessor on bp.CgoFiles, parses
+// the output and returns the resulting ASTs.
+func ProcessFiles(bp *build.Package, fset *token.FileSet, DisplayPath func(path string) string, mode parser.Mode) ([]*ast.File, error) {
+ tmpdir, err := os.MkdirTemp("", strings.Replace(bp.ImportPath, "/", "_", -1)+"_C")
+ if err != nil {
+ return nil, err
+ }
+ defer os.RemoveAll(tmpdir)
+
+ pkgdir := bp.Dir
+ if DisplayPath != nil {
+ pkgdir = DisplayPath(pkgdir)
+ }
+
+ cgoFiles, cgoDisplayFiles, err := Run(bp, pkgdir, tmpdir, false)
+ if err != nil {
+ return nil, err
+ }
+ var files []*ast.File
+ for i := range cgoFiles {
+ rd, err := os.Open(cgoFiles[i])
+ if err != nil {
+ return nil, err
+ }
+ display := filepath.Join(bp.Dir, cgoDisplayFiles[i])
+ f, err := parser.ParseFile(fset, display, rd, mode)
+ rd.Close()
+ if err != nil {
+ return nil, err
+ }
+ files = append(files, f)
+ }
+ return files, nil
+}
+
+var cgoRe = regexp.MustCompile(`[/\\:]`)
+
+// Run invokes the cgo preprocessor on bp.CgoFiles and returns two
+// lists of files: the resulting processed files (in temporary
+// directory tmpdir) and the corresponding names of the unprocessed files.
+//
+// Run is adapted from (*builder).cgo in
+// $GOROOT/src/cmd/go/build.go, but these features are unsupported:
+// Objective C, CGOPKGPATH, CGO_FLAGS.
+//
+// If useabs is set to true, absolute paths of the bp.CgoFiles will be passed in
+// to the cgo preprocessor. This in turn will set the // line comments
+// referring to those files to use absolute paths. This is needed for
+// go/packages using the legacy go list support so it is able to find
+// the original files.
+func Run(bp *build.Package, pkgdir, tmpdir string, useabs bool) (files, displayFiles []string, err error) {
+ cgoCPPFLAGS, _, _, _ := cflags(bp, true)
+ _, cgoexeCFLAGS, _, _ := cflags(bp, false)
+
+ if len(bp.CgoPkgConfig) > 0 {
+ pcCFLAGS, err := pkgConfigFlags(bp)
+ if err != nil {
+ return nil, nil, err
+ }
+ cgoCPPFLAGS = append(cgoCPPFLAGS, pcCFLAGS...)
+ }
+
+ // Allows including _cgo_export.h from .[ch] files in the package.
+ cgoCPPFLAGS = append(cgoCPPFLAGS, "-I", tmpdir)
+
+ // _cgo_gotypes.go (displayed "C") contains the type definitions.
+ files = append(files, filepath.Join(tmpdir, "_cgo_gotypes.go"))
+ displayFiles = append(displayFiles, "C")
+ for _, fn := range bp.CgoFiles {
+ // "foo.cgo1.go" (displayed "foo.go") is the processed Go source.
+ f := cgoRe.ReplaceAllString(fn[:len(fn)-len("go")], "_")
+ files = append(files, filepath.Join(tmpdir, f+"cgo1.go"))
+ displayFiles = append(displayFiles, fn)
+ }
+
+ var cgoflags []string
+ if bp.Goroot && bp.ImportPath == "runtime/cgo" {
+ cgoflags = append(cgoflags, "-import_runtime_cgo=false")
+ }
+ if bp.Goroot && bp.ImportPath == "runtime/race" || bp.ImportPath == "runtime/cgo" {
+ cgoflags = append(cgoflags, "-import_syscall=false")
+ }
+
+ var cgoFiles []string = bp.CgoFiles
+ if useabs {
+ cgoFiles = make([]string, len(bp.CgoFiles))
+ for i := range cgoFiles {
+ cgoFiles[i] = filepath.Join(pkgdir, bp.CgoFiles[i])
+ }
+ }
+
+ args := stringList(
+ "go", "tool", "cgo", "-objdir", tmpdir, cgoflags, "--",
+ cgoCPPFLAGS, cgoexeCFLAGS, cgoFiles,
+ )
+ if false {
+ log.Printf("Running cgo for package %q: %s (dir=%s)", bp.ImportPath, args, pkgdir)
+ }
+ cmd := exec.Command(args[0], args[1:]...)
+ cmd.Dir = pkgdir
+ cmd.Env = append(os.Environ(), "PWD="+pkgdir)
+ cmd.Stdout = os.Stderr
+ cmd.Stderr = os.Stderr
+ if err := cmd.Run(); err != nil {
+ return nil, nil, fmt.Errorf("cgo failed: %s: %s", args, err)
+ }
+
+ return files, displayFiles, nil
+}
+
+// -- unmodified from 'go build' ---------------------------------------
+
+// Return the flags to use when invoking the C or C++ compilers, or cgo.
+func cflags(p *build.Package, def bool) (cppflags, cflags, cxxflags, ldflags []string) {
+ var defaults string
+ if def {
+ defaults = "-g -O2"
+ }
+
+ cppflags = stringList(envList("CGO_CPPFLAGS", ""), p.CgoCPPFLAGS)
+ cflags = stringList(envList("CGO_CFLAGS", defaults), p.CgoCFLAGS)
+ cxxflags = stringList(envList("CGO_CXXFLAGS", defaults), p.CgoCXXFLAGS)
+ ldflags = stringList(envList("CGO_LDFLAGS", defaults), p.CgoLDFLAGS)
+ return
+}
+
+// envList returns the value of the given environment variable broken
+// into fields, using the default value when the variable is empty.
+func envList(key, def string) []string {
+ v := os.Getenv(key)
+ if v == "" {
+ v = def
+ }
+ return strings.Fields(v)
+}
+
+// stringList's arguments should be a sequence of string or []string values.
+// stringList flattens them into a single []string.
+func stringList(args ...interface{}) []string {
+ var x []string
+ for _, arg := range args {
+ switch arg := arg.(type) {
+ case []string:
+ x = append(x, arg...)
+ case string:
+ x = append(x, arg)
+ default:
+ panic("stringList: invalid argument")
+ }
+ }
+ return x
+}
diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go
new file mode 100644
index 000000000..b5bb95a63
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go
@@ -0,0 +1,39 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cgo
+
+import (
+ "errors"
+ "fmt"
+ "go/build"
+ "os/exec"
+ "strings"
+)
+
+// pkgConfig runs pkg-config with the specified arguments and returns the flags it prints.
+func pkgConfig(mode string, pkgs []string) (flags []string, err error) {
+ cmd := exec.Command("pkg-config", append([]string{mode}, pkgs...)...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ s := fmt.Sprintf("%s failed: %v", strings.Join(cmd.Args, " "), err)
+ if len(out) > 0 {
+ s = fmt.Sprintf("%s: %s", s, out)
+ }
+ return nil, errors.New(s)
+ }
+ if len(out) > 0 {
+ flags = strings.Fields(string(out))
+ }
+ return
+}
+
+// pkgConfigFlags calls pkg-config if needed and returns the cflags
+// needed to build the package.
+func pkgConfigFlags(p *build.Package) (cflags []string, err error) {
+ if len(p.CgoPkgConfig) == 0 {
+ return nil, nil
+ }
+ return pkgConfig("--cflags", p.CgoPkgConfig)
+}
diff --git a/vendor/golang.org/x/tools/go/loader/doc.go b/vendor/golang.org/x/tools/go/loader/doc.go
new file mode 100644
index 000000000..e35b1fd7d
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/loader/doc.go
@@ -0,0 +1,202 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package loader loads a complete Go program from source code, parsing
+// and type-checking the initial packages plus their transitive closure
+// of dependencies. The ASTs and the derived facts are retained for
+// later use.
+//
+// Deprecated: This is an older API and does not have support
+// for modules. Use golang.org/x/tools/go/packages instead.
+//
+// The package defines two primary types: Config, which specifies a
+// set of initial packages to load and various other options; and
+// Program, which is the result of successfully loading the packages
+// specified by a configuration.
+//
+// The configuration can be set directly, but *Config provides various
+// convenience methods to simplify the common cases, each of which can
+// be called any number of times. Finally, these are followed by a
+// call to Load() to actually load and type-check the program.
+//
+// var conf loader.Config
+//
+// // Use the command-line arguments to specify
+// // a set of initial packages to load from source.
+// // See FromArgsUsage for help.
+// rest, err := conf.FromArgs(os.Args[1:], wantTests)
+//
+// // Parse the specified files and create an ad hoc package with path "foo".
+// // All files must have the same 'package' declaration.
+// conf.CreateFromFilenames("foo", "foo.go", "bar.go")
+//
+// // Create an ad hoc package with path "foo" from
+// // the specified already-parsed files.
+// // All ASTs must have the same 'package' declaration.
+// conf.CreateFromFiles("foo", parsedFiles)
+//
+// // Add "runtime" to the set of packages to be loaded.
+// conf.Import("runtime")
+//
+// // Adds "fmt" and "fmt_test" to the set of packages
+// // to be loaded. "fmt" will include *_test.go files.
+// conf.ImportWithTests("fmt")
+//
+// // Finally, load all the packages specified by the configuration.
+// prog, err := conf.Load()
+//
+// See examples_test.go for examples of API usage.
+//
+// # CONCEPTS AND TERMINOLOGY
+//
+// The WORKSPACE is the set of packages accessible to the loader. The
+// workspace is defined by Config.Build, a *build.Context. The
+// default context treats subdirectories of $GOROOT and $GOPATH as
+// packages, but this behavior may be overridden.
+//
+// An AD HOC package is one specified as a set of source files on the
+// command line. In the simplest case, it may consist of a single file
+// such as $GOROOT/src/net/http/triv.go.
+//
+// EXTERNAL TEST packages are those comprised of a set of *_test.go
+// files all with the same 'package foo_test' declaration, all in the
+// same directory. (go/build.Package calls these files XTestFiles.)
+//
+// An IMPORTABLE package is one that can be referred to by some import
+// spec. Every importable package is uniquely identified by its
+// PACKAGE PATH or just PATH, a string such as "fmt", "encoding/json",
+// or "cmd/vendor/golang.org/x/arch/x86/x86asm". A package path
+// typically denotes a subdirectory of the workspace.
+//
+// An import declaration uses an IMPORT PATH to refer to a package.
+// Most import declarations use the package path as the import path.
+//
+// Due to VENDORING (https://golang.org/s/go15vendor), the
+// interpretation of an import path may depend on the directory in which
+// it appears. To resolve an import path to a package path, go/build
+// must search the enclosing directories for a subdirectory named
+// "vendor".
+//
+// ad hoc packages and external test packages are NON-IMPORTABLE. The
+// path of an ad hoc package is inferred from the package
+// declarations of its files and is therefore not a unique package key.
+// For example, Config.CreatePkgs may specify two initial ad hoc
+// packages, both with path "main".
+//
+// An AUGMENTED package is an importable package P plus all the
+// *_test.go files with same 'package foo' declaration as P.
+// (go/build.Package calls these files TestFiles.)
+//
+// The INITIAL packages are those specified in the configuration. A
+// DEPENDENCY is a package loaded to satisfy an import in an initial
+// package or another dependency.
+package loader
+
+// IMPLEMENTATION NOTES
+//
+// 'go test', in-package test files, and import cycles
+// ---------------------------------------------------
+//
+// An external test package may depend upon members of the augmented
+// package that are not in the unaugmented package, such as functions
+// that expose internals. (See bufio/export_test.go for an example.)
+// So, the loader must ensure that for each external test package
+// it loads, it also augments the corresponding non-test package.
+//
+// The import graph over n unaugmented packages must be acyclic; the
+// import graph over n-1 unaugmented packages plus one augmented
+// package must also be acyclic. ('go test' relies on this.) But the
+// import graph over n augmented packages may contain cycles.
+//
+// First, all the (unaugmented) non-test packages and their
+// dependencies are imported in the usual way; the loader reports an
+// error if it detects an import cycle.
+//
+// Then, each package P for which testing is desired is augmented by
+// the list P' of its in-package test files, by calling
+// (*types.Checker).Files. This arrangement ensures that P' may
+// reference definitions within P, but P may not reference definitions
+// within P'. Furthermore, P' may import any other package, including
+// ones that depend upon P, without an import cycle error.
+//
+// Consider two packages A and B, both of which have lists of
+// in-package test files we'll call A' and B', and which have the
+// following import graph edges:
+// B imports A
+// B' imports A
+// A' imports B
+// This last edge would be expected to create an error were it not
+// for the special type-checking discipline above.
+// Cycles of size greater than two are possible. For example:
+// compress/bzip2/bzip2_test.go (package bzip2) imports "io/ioutil"
+// io/ioutil/tempfile_test.go (package ioutil) imports "regexp"
+// regexp/exec_test.go (package regexp) imports "compress/bzip2"
+//
+//
+// Concurrency
+// -----------
+//
+// Let us define the import dependency graph as follows. Each node is a
+// list of files passed to (Checker).Files at once. Many of these lists
+// are the production code of an importable Go package, so those nodes
+// are labelled by the package's path. The remaining nodes are
+// ad hoc packages and lists of in-package *_test.go files that augment
+// an importable package; those nodes have no label.
+//
+// The edges of the graph represent import statements appearing within a
+// file. An edge connects a node (a list of files) to the node it
+// imports, which is importable and thus always labelled.
+//
+// Loading is controlled by this dependency graph.
+//
+// To reduce I/O latency, we start loading a package's dependencies
+// asynchronously as soon as we've parsed its files and enumerated its
+// imports (scanImports). This performs a preorder traversal of the
+// import dependency graph.
+//
+// To exploit hardware parallelism, we type-check unrelated packages in
+// parallel, where "unrelated" means not ordered by the partial order of
+// the import dependency graph.
+//
+// We use a concurrency-safe non-blocking cache (importer.imported) to
+// record the results of type-checking, whether success or failure. An
+// entry is created in this cache by startLoad the first time the
+// package is imported. The first goroutine to request an entry becomes
+// responsible for completing the task and broadcasting completion to
+// subsequent requestors, which block until then.
+//
+// Type checking occurs in (parallel) postorder: we cannot type-check a
+// set of files until we have loaded and type-checked all of their
+// immediate dependencies (and thus all of their transitive
+// dependencies). If the input were guaranteed free of import cycles,
+// this would be trivial: we could simply wait for completion of the
+// dependencies and then invoke the typechecker.
+//
+// But as we saw in the 'go test' section above, some cycles in the
+// import graph over packages are actually legal, so long as the
+// cycle-forming edge originates in the in-package test files that
+// augment the package. This explains why the nodes of the import
+// dependency graph are not packages, but lists of files: the unlabelled
+// nodes avoid the cycles. Consider packages A and B where B imports A
+// and A's in-package tests AT import B. The naively constructed import
+// graph over packages would contain a cycle (A+AT) --> B --> (A+AT) but
+// the graph over lists of files is AT --> B --> A, where AT is an
+// unlabelled node.
+//
+// Awaiting completion of the dependencies in a cyclic graph would
+// deadlock, so we must materialize the import dependency graph (as
+// importer.graph) and check whether each import edge forms a cycle. If
+// x imports y, and the graph already contains a path from y to x, then
+// there is an import cycle, in which case the processing of x must not
+// wait for the completion of processing of y.
+//
+// When the type-checker makes a callback (doImport) to the loader for a
+// given import edge, there are two possible cases. In the normal case,
+// the dependency has already been completely type-checked; doImport
+// does a cache lookup and returns it. In the cyclic case, the entry in
+// the cache is still necessarily incomplete, indicating a cycle. We
+// perform the cycle check again to obtain the error message, and return
+// the error.
+//
+// The result of using concurrency is about a 2.5x speedup for stdlib_test.
diff --git a/vendor/golang.org/x/tools/go/loader/loader.go b/vendor/golang.org/x/tools/go/loader/loader.go
new file mode 100644
index 000000000..013c0f505
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/loader/loader.go
@@ -0,0 +1,1066 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package loader
+
+// See doc.go for package documentation and implementation notes.
+
+import (
+ "errors"
+ "fmt"
+ "go/ast"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "go/types"
+ "os"
+ "path/filepath"
+ "sort"
+ "strings"
+ "sync"
+ "time"
+
+ "golang.org/x/tools/go/ast/astutil"
+ "golang.org/x/tools/go/internal/cgo"
+ "golang.org/x/tools/internal/versions"
+)
+
+var ignoreVendor build.ImportMode
+
+const trace = false // show timing info for type-checking
+
+// Config specifies the configuration for loading a whole program from
+// Go source code.
+// The zero value for Config is a ready-to-use default configuration.
+type Config struct {
+ // Fset is the file set for the parser to use when loading the
+ // program. If nil, it may be lazily initialized by any
+ // method of Config.
+ Fset *token.FileSet
+
+ // ParserMode specifies the mode to be used by the parser when
+ // loading source packages.
+ ParserMode parser.Mode
+
+ // TypeChecker contains options relating to the type checker.
+ //
+ // The supplied IgnoreFuncBodies is not used; the effective
+ // value comes from the TypeCheckFuncBodies func below.
+ // The supplied Import function is not used either.
+ TypeChecker types.Config
+
+ // TypeCheckFuncBodies is a predicate over package paths.
+ // A package for which the predicate is false will
+ // have its package-level declarations type checked, but not
+ // its function bodies; this can be used to quickly load
+ // dependencies from source. If nil, all func bodies are type
+ // checked.
+ TypeCheckFuncBodies func(path string) bool
+
+ // If Build is non-nil, it is used to locate source packages.
+ // Otherwise &build.Default is used.
+ //
+ // By default, cgo is invoked to preprocess Go files that
+ // import the fake package "C". This behaviour can be
+ // disabled by setting CGO_ENABLED=0 in the environment prior
+ // to startup, or by setting Build.CgoEnabled=false.
+ Build *build.Context
+
+ // The current directory, used for resolving relative package
+ // references such as "./go/loader". If empty, os.Getwd will be
+ // used instead.
+ Cwd string
+
+ // If DisplayPath is non-nil, it is used to transform each
+ // file name obtained from Build.Import(). This can be used
+ // to prevent a virtualized build.Config's file names from
+ // leaking into the user interface.
+ DisplayPath func(path string) string
+
+ // If AllowErrors is true, Load will return a Program even
+ // if some of the its packages contained I/O, parser or type
+ // errors; such errors are accessible via PackageInfo.Errors. If
+ // false, Load will fail if any package had an error.
+ AllowErrors bool
+
+ // CreatePkgs specifies a list of non-importable initial
+ // packages to create. The resulting packages will appear in
+ // the corresponding elements of the Program.Created slice.
+ CreatePkgs []PkgSpec
+
+ // ImportPkgs specifies a set of initial packages to load.
+ // The map keys are package paths.
+ //
+ // The map value indicates whether to load tests. If true, Load
+ // will add and type-check two lists of files to the package:
+ // non-test files followed by in-package *_test.go files. In
+ // addition, it will append the external test package (if any)
+ // to Program.Created.
+ ImportPkgs map[string]bool
+
+ // FindPackage is called during Load to create the build.Package
+ // for a given import path from a given directory.
+ // If FindPackage is nil, (*build.Context).Import is used.
+ // A client may use this hook to adapt to a proprietary build
+ // system that does not follow the "go build" layout
+ // conventions, for example.
+ //
+ // It must be safe to call concurrently from multiple goroutines.
+ FindPackage func(ctxt *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error)
+
+ // AfterTypeCheck is called immediately after a list of files
+ // has been type-checked and appended to info.Files.
+ //
+ // This optional hook function is the earliest opportunity for
+ // the client to observe the output of the type checker,
+ // which may be useful to reduce analysis latency when loading
+ // a large program.
+ //
+ // The function is permitted to modify info.Info, for instance
+ // to clear data structures that are no longer needed, which can
+ // dramatically reduce peak memory consumption.
+ //
+ // The function may be called twice for the same PackageInfo:
+ // once for the files of the package and again for the
+ // in-package test files.
+ //
+ // It must be safe to call concurrently from multiple goroutines.
+ AfterTypeCheck func(info *PackageInfo, files []*ast.File)
+}
+
+// A PkgSpec specifies a non-importable package to be created by Load.
+// Files are processed first, but typically only one of Files and
+// Filenames is provided. The path needn't be globally unique.
+//
+// For vendoring purposes, the package's directory is the one that
+// contains the first file.
+type PkgSpec struct {
+ Path string // package path ("" => use package declaration)
+ Files []*ast.File // ASTs of already-parsed files
+ Filenames []string // names of files to be parsed
+}
+
+// A Program is a Go program loaded from source as specified by a Config.
+type Program struct {
+ Fset *token.FileSet // the file set for this program
+
+ // Created[i] contains the initial package whose ASTs or
+ // filenames were supplied by Config.CreatePkgs[i], followed by
+ // the external test package, if any, of each package in
+ // Config.ImportPkgs ordered by ImportPath.
+ //
+ // NOTE: these files must not import "C". Cgo preprocessing is
+ // only performed on imported packages, not ad hoc packages.
+ //
+ // TODO(adonovan): we need to copy and adapt the logic of
+ // goFilesPackage (from $GOROOT/src/cmd/go/build.go) and make
+ // Config.Import and Config.Create methods return the same kind
+ // of entity, essentially a build.Package.
+ // Perhaps we can even reuse that type directly.
+ Created []*PackageInfo
+
+ // Imported contains the initially imported packages,
+ // as specified by Config.ImportPkgs.
+ Imported map[string]*PackageInfo
+
+ // AllPackages contains the PackageInfo of every package
+ // encountered by Load: all initial packages and all
+ // dependencies, including incomplete ones.
+ AllPackages map[*types.Package]*PackageInfo
+
+ // importMap is the canonical mapping of package paths to
+ // packages. It contains all Imported initial packages, but not
+ // Created ones, and all imported dependencies.
+ importMap map[string]*types.Package
+}
+
+// PackageInfo holds the ASTs and facts derived by the type-checker
+// for a single package.
+//
+// Not mutated once exposed via the API.
+type PackageInfo struct {
+ Pkg *types.Package
+ Importable bool // true if 'import "Pkg.Path()"' would resolve to this
+ TransitivelyErrorFree bool // true if Pkg and all its dependencies are free of errors
+ Files []*ast.File // syntax trees for the package's files
+ Errors []error // non-nil if the package had errors
+ types.Info // type-checker deductions.
+ dir string // package directory
+
+ checker *types.Checker // transient type-checker state
+ errorFunc func(error)
+}
+
+func (info *PackageInfo) String() string { return info.Pkg.Path() }
+
+func (info *PackageInfo) appendError(err error) {
+ if info.errorFunc != nil {
+ info.errorFunc(err)
+ } else {
+ fmt.Fprintln(os.Stderr, err)
+ }
+ info.Errors = append(info.Errors, err)
+}
+
+func (conf *Config) fset() *token.FileSet {
+ if conf.Fset == nil {
+ conf.Fset = token.NewFileSet()
+ }
+ return conf.Fset
+}
+
+// ParseFile is a convenience function (intended for testing) that invokes
+// the parser using the Config's FileSet, which is initialized if nil.
+//
+// src specifies the parser input as a string, []byte, or io.Reader, and
+// filename is its apparent name. If src is nil, the contents of
+// filename are read from the file system.
+func (conf *Config) ParseFile(filename string, src interface{}) (*ast.File, error) {
+ // TODO(adonovan): use conf.build() etc like parseFiles does.
+ return parser.ParseFile(conf.fset(), filename, src, conf.ParserMode)
+}
+
+// FromArgsUsage is a partial usage message that applications calling
+// FromArgs may wish to include in their -help output.
+const FromArgsUsage = `
+<args> is a list of arguments denoting a set of initial packages.
+It may take one of two forms:
+
+1. A list of *.go source files.
+
+ All of the specified files are loaded, parsed and type-checked
+ as a single package. All the files must belong to the same directory.
+
+2. A list of import paths, each denoting a package.
+
+ The package's directory is found relative to the $GOROOT and
+ $GOPATH using similar logic to 'go build', and the *.go files in
+ that directory are loaded, parsed and type-checked as a single
+ package.
+
+ In addition, all *_test.go files in the directory are then loaded
+ and parsed. Those files whose package declaration equals that of
+ the non-*_test.go files are included in the primary package. Test
+ files whose package declaration ends with "_test" are type-checked
+ as another package, the 'external' test package, so that a single
+ import path may denote two packages. (Whether this behaviour is
+ enabled is tool-specific, and may depend on additional flags.)
+
+A '--' argument terminates the list of packages.
+`
+
+// FromArgs interprets args as a set of initial packages to load from
+// source and updates the configuration. It returns the list of
+// unconsumed arguments.
+//
+// It is intended for use in command-line interfaces that require a
+// set of initial packages to be specified; see FromArgsUsage message
+// for details.
+//
+// Only superficial errors are reported at this stage; errors dependent
+// on I/O are detected during Load.
+func (conf *Config) FromArgs(args []string, xtest bool) ([]string, error) {
+ var rest []string
+ for i, arg := range args {
+ if arg == "--" {
+ rest = args[i+1:]
+ args = args[:i]
+ break // consume "--" and return the remaining args
+ }
+ }
+
+ if len(args) > 0 && strings.HasSuffix(args[0], ".go") {
+ // Assume args is a list of a *.go files
+ // denoting a single ad hoc package.
+ for _, arg := range args {
+ if !strings.HasSuffix(arg, ".go") {
+ return nil, fmt.Errorf("named files must be .go files: %s", arg)
+ }
+ }
+ conf.CreateFromFilenames("", args...)
+ } else {
+ // Assume args are directories each denoting a
+ // package and (perhaps) an external test, iff xtest.
+ for _, arg := range args {
+ if xtest {
+ conf.ImportWithTests(arg)
+ } else {
+ conf.Import(arg)
+ }
+ }
+ }
+
+ return rest, nil
+}
+
+// CreateFromFilenames is a convenience function that adds
+// a conf.CreatePkgs entry to create a package of the specified *.go
+// files.
+func (conf *Config) CreateFromFilenames(path string, filenames ...string) {
+ conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Filenames: filenames})
+}
+
+// CreateFromFiles is a convenience function that adds a conf.CreatePkgs
+// entry to create package of the specified path and parsed files.
+func (conf *Config) CreateFromFiles(path string, files ...*ast.File) {
+ conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Files: files})
+}
+
+// ImportWithTests is a convenience function that adds path to
+// ImportPkgs, the set of initial source packages located relative to
+// $GOPATH. The package will be augmented by any *_test.go files in
+// its directory that contain a "package x" (not "package x_test")
+// declaration.
+//
+// In addition, if any *_test.go files contain a "package x_test"
+// declaration, an additional package comprising just those files will
+// be added to CreatePkgs.
+func (conf *Config) ImportWithTests(path string) { conf.addImport(path, true) }
+
+// Import is a convenience function that adds path to ImportPkgs, the
+// set of initial packages that will be imported from source.
+func (conf *Config) Import(path string) { conf.addImport(path, false) }
+
+func (conf *Config) addImport(path string, tests bool) {
+ if path == "C" {
+ return // ignore; not a real package
+ }
+ if conf.ImportPkgs == nil {
+ conf.ImportPkgs = make(map[string]bool)
+ }
+ conf.ImportPkgs[path] = conf.ImportPkgs[path] || tests
+}
+
+// PathEnclosingInterval returns the PackageInfo and ast.Node that
+// contain source interval [start, end), and all the node's ancestors
+// up to the AST root. It searches all ast.Files of all packages in prog.
+// exact is defined as for astutil.PathEnclosingInterval.
+//
+// The zero value is returned if not found.
+func (prog *Program) PathEnclosingInterval(start, end token.Pos) (pkg *PackageInfo, path []ast.Node, exact bool) {
+ for _, info := range prog.AllPackages {
+ for _, f := range info.Files {
+ if f.Pos() == token.NoPos {
+ // This can happen if the parser saw
+ // too many errors and bailed out.
+ // (Use parser.AllErrors to prevent that.)
+ continue
+ }
+ if !tokenFileContainsPos(prog.Fset.File(f.Pos()), start) {
+ continue
+ }
+ if path, exact := astutil.PathEnclosingInterval(f, start, end); path != nil {
+ return info, path, exact
+ }
+ }
+ }
+ return nil, nil, false
+}
+
+// InitialPackages returns a new slice containing the set of initial
+// packages (Created + Imported) in unspecified order.
+func (prog *Program) InitialPackages() []*PackageInfo {
+ infos := make([]*PackageInfo, 0, len(prog.Created)+len(prog.Imported))
+ infos = append(infos, prog.Created...)
+ for _, info := range prog.Imported {
+ infos = append(infos, info)
+ }
+ return infos
+}
+
+// Package returns the ASTs and results of type checking for the
+// specified package.
+func (prog *Program) Package(path string) *PackageInfo {
+ if info, ok := prog.AllPackages[prog.importMap[path]]; ok {
+ return info
+ }
+ for _, info := range prog.Created {
+ if path == info.Pkg.Path() {
+ return info
+ }
+ }
+ return nil
+}
+
+// ---------- Implementation ----------
+
+// importer holds the working state of the algorithm.
+type importer struct {
+ conf *Config // the client configuration
+ start time.Time // for logging
+
+ progMu sync.Mutex // guards prog
+ prog *Program // the resulting program
+
+ // findpkg is a memoization of FindPackage.
+ findpkgMu sync.Mutex // guards findpkg
+ findpkg map[findpkgKey]*findpkgValue
+
+ importedMu sync.Mutex // guards imported
+ imported map[string]*importInfo // all imported packages (incl. failures) by import path
+
+ // import dependency graph: graph[x][y] => x imports y
+ //
+ // Since non-importable packages cannot be cyclic, we ignore
+ // their imports, thus we only need the subgraph over importable
+ // packages. Nodes are identified by their import paths.
+ graphMu sync.Mutex
+ graph map[string]map[string]bool
+}
+
+type findpkgKey struct {
+ importPath string
+ fromDir string
+ mode build.ImportMode
+}
+
+type findpkgValue struct {
+ ready chan struct{} // closed to broadcast readiness
+ bp *build.Package
+ err error
+}
+
+// importInfo tracks the success or failure of a single import.
+//
+// Upon completion, exactly one of info and err is non-nil:
+// info on successful creation of a package, err otherwise.
+// A successful package may still contain type errors.
+type importInfo struct {
+ path string // import path
+ info *PackageInfo // results of typechecking (including errors)
+ complete chan struct{} // closed to broadcast that info is set.
+}
+
+// awaitCompletion blocks until ii is complete,
+// i.e. the info field is safe to inspect.
+func (ii *importInfo) awaitCompletion() {
+ <-ii.complete // wait for close
+}
+
+// Complete marks ii as complete.
+// Its info and err fields will not be subsequently updated.
+func (ii *importInfo) Complete(info *PackageInfo) {
+ if info == nil {
+ panic("info == nil")
+ }
+ ii.info = info
+ close(ii.complete)
+}
+
+type importError struct {
+ path string // import path
+ err error // reason for failure to create a package
+}
+
+// Load creates the initial packages specified by conf.{Create,Import}Pkgs,
+// loading their dependencies packages as needed.
+//
+// On success, Load returns a Program containing a PackageInfo for
+// each package. On failure, it returns an error.
+//
+// If AllowErrors is true, Load will return a Program even if some
+// packages contained I/O, parser or type errors, or if dependencies
+// were missing. (Such errors are accessible via PackageInfo.Errors. If
+// false, Load will fail if any package had an error.
+//
+// It is an error if no packages were loaded.
+func (conf *Config) Load() (*Program, error) {
+ // Create a simple default error handler for parse/type errors.
+ if conf.TypeChecker.Error == nil {
+ conf.TypeChecker.Error = func(e error) { fmt.Fprintln(os.Stderr, e) }
+ }
+
+ // Set default working directory for relative package references.
+ if conf.Cwd == "" {
+ var err error
+ conf.Cwd, err = os.Getwd()
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // Install default FindPackage hook using go/build logic.
+ if conf.FindPackage == nil {
+ conf.FindPackage = (*build.Context).Import
+ }
+
+ prog := &Program{
+ Fset: conf.fset(),
+ Imported: make(map[string]*PackageInfo),
+ importMap: make(map[string]*types.Package),
+ AllPackages: make(map[*types.Package]*PackageInfo),
+ }
+
+ imp := importer{
+ conf: conf,
+ prog: prog,
+ findpkg: make(map[findpkgKey]*findpkgValue),
+ imported: make(map[string]*importInfo),
+ start: time.Now(),
+ graph: make(map[string]map[string]bool),
+ }
+
+ // -- loading proper (concurrent phase) --------------------------------
+
+ var errpkgs []string // packages that contained errors
+
+ // Load the initially imported packages and their dependencies,
+ // in parallel.
+ // No vendor check on packages imported from the command line.
+ infos, importErrors := imp.importAll("", conf.Cwd, conf.ImportPkgs, ignoreVendor)
+ for _, ie := range importErrors {
+ conf.TypeChecker.Error(ie.err) // failed to create package
+ errpkgs = append(errpkgs, ie.path)
+ }
+ for _, info := range infos {
+ prog.Imported[info.Pkg.Path()] = info
+ }
+
+ // Augment the designated initial packages by their tests.
+ // Dependencies are loaded in parallel.
+ var xtestPkgs []*build.Package
+ for importPath, augment := range conf.ImportPkgs {
+ if !augment {
+ continue
+ }
+
+ // No vendor check on packages imported from command line.
+ bp, err := imp.findPackage(importPath, conf.Cwd, ignoreVendor)
+ if err != nil {
+ // Package not found, or can't even parse package declaration.
+ // Already reported by previous loop; ignore it.
+ continue
+ }
+
+ // Needs external test package?
+ if len(bp.XTestGoFiles) > 0 {
+ xtestPkgs = append(xtestPkgs, bp)
+ }
+
+ // Consult the cache using the canonical package path.
+ path := bp.ImportPath
+ imp.importedMu.Lock() // (unnecessary, we're sequential here)
+ ii, ok := imp.imported[path]
+ // Paranoid checks added due to issue #11012.
+ if !ok {
+ // Unreachable.
+ // The previous loop called importAll and thus
+ // startLoad for each path in ImportPkgs, which
+ // populates imp.imported[path] with a non-zero value.
+ panic(fmt.Sprintf("imported[%q] not found", path))
+ }
+ if ii == nil {
+ // Unreachable.
+ // The ii values in this loop are the same as in
+ // the previous loop, which enforced the invariant
+ // that at least one of ii.err and ii.info is non-nil.
+ panic(fmt.Sprintf("imported[%q] == nil", path))
+ }
+ if ii.info == nil {
+ // Unreachable.
+ // awaitCompletion has the postcondition
+ // ii.info != nil.
+ panic(fmt.Sprintf("imported[%q].info = nil", path))
+ }
+ info := ii.info
+ imp.importedMu.Unlock()
+
+ // Parse the in-package test files.
+ files, errs := imp.conf.parsePackageFiles(bp, 't')
+ for _, err := range errs {
+ info.appendError(err)
+ }
+
+ // The test files augmenting package P cannot be imported,
+ // but may import packages that import P,
+ // so we must disable the cycle check.
+ imp.addFiles(info, files, false)
+ }
+
+ createPkg := func(path, dir string, files []*ast.File, errs []error) {
+ info := imp.newPackageInfo(path, dir)
+ for _, err := range errs {
+ info.appendError(err)
+ }
+
+ // Ad hoc packages are non-importable,
+ // so no cycle check is needed.
+ // addFiles loads dependencies in parallel.
+ imp.addFiles(info, files, false)
+ prog.Created = append(prog.Created, info)
+ }
+
+ // Create packages specified by conf.CreatePkgs.
+ for _, cp := range conf.CreatePkgs {
+ files, errs := parseFiles(conf.fset(), conf.build(), nil, conf.Cwd, cp.Filenames, conf.ParserMode)
+ files = append(files, cp.Files...)
+
+ path := cp.Path
+ if path == "" {
+ if len(files) > 0 {
+ path = files[0].Name.Name
+ } else {
+ path = "(unnamed)"
+ }
+ }
+
+ dir := conf.Cwd
+ if len(files) > 0 && files[0].Pos().IsValid() {
+ dir = filepath.Dir(conf.fset().File(files[0].Pos()).Name())
+ }
+ createPkg(path, dir, files, errs)
+ }
+
+ // Create external test packages.
+ sort.Sort(byImportPath(xtestPkgs))
+ for _, bp := range xtestPkgs {
+ files, errs := imp.conf.parsePackageFiles(bp, 'x')
+ createPkg(bp.ImportPath+"_test", bp.Dir, files, errs)
+ }
+
+ // -- finishing up (sequential) ----------------------------------------
+
+ if len(prog.Imported)+len(prog.Created) == 0 {
+ return nil, errors.New("no initial packages were loaded")
+ }
+
+ // Create infos for indirectly imported packages.
+ // e.g. incomplete packages without syntax, loaded from export data.
+ for _, obj := range prog.importMap {
+ info := prog.AllPackages[obj]
+ if info == nil {
+ prog.AllPackages[obj] = &PackageInfo{Pkg: obj, Importable: true}
+ } else {
+ // finished
+ info.checker = nil
+ info.errorFunc = nil
+ }
+ }
+
+ if !conf.AllowErrors {
+ // Report errors in indirectly imported packages.
+ for _, info := range prog.AllPackages {
+ if len(info.Errors) > 0 {
+ errpkgs = append(errpkgs, info.Pkg.Path())
+ }
+ }
+ if errpkgs != nil {
+ var more string
+ if len(errpkgs) > 3 {
+ more = fmt.Sprintf(" and %d more", len(errpkgs)-3)
+ errpkgs = errpkgs[:3]
+ }
+ return nil, fmt.Errorf("couldn't load packages due to errors: %s%s",
+ strings.Join(errpkgs, ", "), more)
+ }
+ }
+
+ markErrorFreePackages(prog.AllPackages)
+
+ return prog, nil
+}
+
+type byImportPath []*build.Package
+
+func (b byImportPath) Len() int { return len(b) }
+func (b byImportPath) Less(i, j int) bool { return b[i].ImportPath < b[j].ImportPath }
+func (b byImportPath) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+
+// markErrorFreePackages sets the TransitivelyErrorFree flag on all
+// applicable packages.
+func markErrorFreePackages(allPackages map[*types.Package]*PackageInfo) {
+ // Build the transpose of the import graph.
+ importedBy := make(map[*types.Package]map[*types.Package]bool)
+ for P := range allPackages {
+ for _, Q := range P.Imports() {
+ clients, ok := importedBy[Q]
+ if !ok {
+ clients = make(map[*types.Package]bool)
+ importedBy[Q] = clients
+ }
+ clients[P] = true
+ }
+ }
+
+ // Find all packages reachable from some error package.
+ reachable := make(map[*types.Package]bool)
+ var visit func(*types.Package)
+ visit = func(p *types.Package) {
+ if !reachable[p] {
+ reachable[p] = true
+ for q := range importedBy[p] {
+ visit(q)
+ }
+ }
+ }
+ for _, info := range allPackages {
+ if len(info.Errors) > 0 {
+ visit(info.Pkg)
+ }
+ }
+
+ // Mark the others as "transitively error-free".
+ for _, info := range allPackages {
+ if !reachable[info.Pkg] {
+ info.TransitivelyErrorFree = true
+ }
+ }
+}
+
+// build returns the effective build context.
+func (conf *Config) build() *build.Context {
+ if conf.Build != nil {
+ return conf.Build
+ }
+ return &build.Default
+}
+
+// parsePackageFiles enumerates the files belonging to package path,
+// then loads, parses and returns them, plus a list of I/O or parse
+// errors that were encountered.
+//
+// 'which' indicates which files to include:
+//
+// 'g': include non-test *.go source files (GoFiles + processed CgoFiles)
+// 't': include in-package *_test.go source files (TestGoFiles)
+// 'x': include external *_test.go source files. (XTestGoFiles)
+func (conf *Config) parsePackageFiles(bp *build.Package, which rune) ([]*ast.File, []error) {
+ if bp.ImportPath == "unsafe" {
+ return nil, nil
+ }
+ var filenames []string
+ switch which {
+ case 'g':
+ filenames = bp.GoFiles
+ case 't':
+ filenames = bp.TestGoFiles
+ case 'x':
+ filenames = bp.XTestGoFiles
+ default:
+ panic(which)
+ }
+
+ files, errs := parseFiles(conf.fset(), conf.build(), conf.DisplayPath, bp.Dir, filenames, conf.ParserMode)
+
+ // Preprocess CgoFiles and parse the outputs (sequentially).
+ if which == 'g' && bp.CgoFiles != nil {
+ cgofiles, err := cgo.ProcessFiles(bp, conf.fset(), conf.DisplayPath, conf.ParserMode)
+ if err != nil {
+ errs = append(errs, err)
+ } else {
+ files = append(files, cgofiles...)
+ }
+ }
+
+ return files, errs
+}
+
+// doImport imports the package denoted by path.
+// It implements the types.Importer signature.
+//
+// It returns an error if a package could not be created
+// (e.g. go/build or parse error), but type errors are reported via
+// the types.Config.Error callback (the first of which is also saved
+// in the package's PackageInfo).
+//
+// Idempotent.
+func (imp *importer) doImport(from *PackageInfo, to string) (*types.Package, error) {
+ if to == "C" {
+ // This should be unreachable, but ad hoc packages are
+ // not currently subject to cgo preprocessing.
+ // See https://golang.org/issue/11627.
+ return nil, fmt.Errorf(`the loader doesn't cgo-process ad hoc packages like %q; see Go issue 11627`,
+ from.Pkg.Path())
+ }
+
+ bp, err := imp.findPackage(to, from.dir, 0)
+ if err != nil {
+ return nil, err
+ }
+
+ // The standard unsafe package is handled specially,
+ // and has no PackageInfo.
+ if bp.ImportPath == "unsafe" {
+ return types.Unsafe, nil
+ }
+
+ // Look for the package in the cache using its canonical path.
+ path := bp.ImportPath
+ imp.importedMu.Lock()
+ ii := imp.imported[path]
+ imp.importedMu.Unlock()
+ if ii == nil {
+ panic("internal error: unexpected import: " + path)
+ }
+ if ii.info != nil {
+ return ii.info.Pkg, nil
+ }
+
+ // Import of incomplete package: this indicates a cycle.
+ fromPath := from.Pkg.Path()
+ if cycle := imp.findPath(path, fromPath); cycle != nil {
+ // Normalize cycle: start from alphabetically largest node.
+ pos, start := -1, ""
+ for i, s := range cycle {
+ if pos < 0 || s > start {
+ pos, start = i, s
+ }
+ }
+ cycle = append(cycle, cycle[:pos]...)[pos:] // rotate cycle to start from largest
+ cycle = append(cycle, cycle[0]) // add start node to end to show cycliness
+ return nil, fmt.Errorf("import cycle: %s", strings.Join(cycle, " -> "))
+ }
+
+ panic("internal error: import of incomplete (yet acyclic) package: " + fromPath)
+}
+
+// findPackage locates the package denoted by the importPath in the
+// specified directory.
+func (imp *importer) findPackage(importPath, fromDir string, mode build.ImportMode) (*build.Package, error) {
+ // We use a non-blocking duplicate-suppressing cache (gopl.io §9.7)
+ // to avoid holding the lock around FindPackage.
+ key := findpkgKey{importPath, fromDir, mode}
+ imp.findpkgMu.Lock()
+ v, ok := imp.findpkg[key]
+ if ok {
+ // cache hit
+ imp.findpkgMu.Unlock()
+
+ <-v.ready // wait for entry to become ready
+ } else {
+ // Cache miss: this goroutine becomes responsible for
+ // populating the map entry and broadcasting its readiness.
+ v = &findpkgValue{ready: make(chan struct{})}
+ imp.findpkg[key] = v
+ imp.findpkgMu.Unlock()
+
+ ioLimit <- true
+ v.bp, v.err = imp.conf.FindPackage(imp.conf.build(), importPath, fromDir, mode)
+ <-ioLimit
+
+ if _, ok := v.err.(*build.NoGoError); ok {
+ v.err = nil // empty directory is not an error
+ }
+
+ close(v.ready) // broadcast ready condition
+ }
+ return v.bp, v.err
+}
+
+// importAll loads, parses, and type-checks the specified packages in
+// parallel and returns their completed importInfos in unspecified order.
+//
+// fromPath is the package path of the importing package, if it is
+// importable, "" otherwise. It is used for cycle detection.
+//
+// fromDir is the directory containing the import declaration that
+// caused these imports.
+func (imp *importer) importAll(fromPath, fromDir string, imports map[string]bool, mode build.ImportMode) (infos []*PackageInfo, errors []importError) {
+ if fromPath != "" {
+ // We're loading a set of imports.
+ //
+ // We must record graph edges from the importing package
+ // to its dependencies, and check for cycles.
+ imp.graphMu.Lock()
+ deps, ok := imp.graph[fromPath]
+ if !ok {
+ deps = make(map[string]bool)
+ imp.graph[fromPath] = deps
+ }
+ for importPath := range imports {
+ deps[importPath] = true
+ }
+ imp.graphMu.Unlock()
+ }
+
+ var pending []*importInfo
+ for importPath := range imports {
+ if fromPath != "" {
+ if cycle := imp.findPath(importPath, fromPath); cycle != nil {
+ // Cycle-forming import: we must not check it
+ // since it would deadlock.
+ if trace {
+ fmt.Fprintf(os.Stderr, "import cycle: %q\n", cycle)
+ }
+ continue
+ }
+ }
+ bp, err := imp.findPackage(importPath, fromDir, mode)
+ if err != nil {
+ errors = append(errors, importError{
+ path: importPath,
+ err: err,
+ })
+ continue
+ }
+ pending = append(pending, imp.startLoad(bp))
+ }
+
+ for _, ii := range pending {
+ ii.awaitCompletion()
+ infos = append(infos, ii.info)
+ }
+
+ return infos, errors
+}
+
+// findPath returns an arbitrary path from 'from' to 'to' in the import
+// graph, or nil if there was none.
+func (imp *importer) findPath(from, to string) []string {
+ imp.graphMu.Lock()
+ defer imp.graphMu.Unlock()
+
+ seen := make(map[string]bool)
+ var search func(stack []string, importPath string) []string
+ search = func(stack []string, importPath string) []string {
+ if !seen[importPath] {
+ seen[importPath] = true
+ stack = append(stack, importPath)
+ if importPath == to {
+ return stack
+ }
+ for x := range imp.graph[importPath] {
+ if p := search(stack, x); p != nil {
+ return p
+ }
+ }
+ }
+ return nil
+ }
+ return search(make([]string, 0, 20), from)
+}
+
+// startLoad initiates the loading, parsing and type-checking of the
+// specified package and its dependencies, if it has not already begun.
+//
+// It returns an importInfo, not necessarily in a completed state. The
+// caller must call awaitCompletion() before accessing its info field.
+//
+// startLoad is concurrency-safe and idempotent.
+func (imp *importer) startLoad(bp *build.Package) *importInfo {
+ path := bp.ImportPath
+ imp.importedMu.Lock()
+ ii, ok := imp.imported[path]
+ if !ok {
+ ii = &importInfo{path: path, complete: make(chan struct{})}
+ imp.imported[path] = ii
+ go func() {
+ info := imp.load(bp)
+ ii.Complete(info)
+ }()
+ }
+ imp.importedMu.Unlock()
+
+ return ii
+}
+
+// load implements package loading by parsing Go source files
+// located by go/build.
+func (imp *importer) load(bp *build.Package) *PackageInfo {
+ info := imp.newPackageInfo(bp.ImportPath, bp.Dir)
+ info.Importable = true
+ files, errs := imp.conf.parsePackageFiles(bp, 'g')
+ for _, err := range errs {
+ info.appendError(err)
+ }
+
+ imp.addFiles(info, files, true)
+
+ imp.progMu.Lock()
+ imp.prog.importMap[bp.ImportPath] = info.Pkg
+ imp.progMu.Unlock()
+
+ return info
+}
+
+// addFiles adds and type-checks the specified files to info, loading
+// their dependencies if needed. The order of files determines the
+// package initialization order. It may be called multiple times on the
+// same package. Errors are appended to the info.Errors field.
+//
+// cycleCheck determines whether the imports within files create
+// dependency edges that should be checked for potential cycles.
+func (imp *importer) addFiles(info *PackageInfo, files []*ast.File, cycleCheck bool) {
+ // Ensure the dependencies are loaded, in parallel.
+ var fromPath string
+ if cycleCheck {
+ fromPath = info.Pkg.Path()
+ }
+ // TODO(adonovan): opt: make the caller do scanImports.
+ // Callers with a build.Package can skip it.
+ imp.importAll(fromPath, info.dir, scanImports(files), 0)
+
+ if trace {
+ fmt.Fprintf(os.Stderr, "%s: start %q (%d)\n",
+ time.Since(imp.start), info.Pkg.Path(), len(files))
+ }
+
+ // Don't call checker.Files on Unsafe, even with zero files,
+ // because it would mutate the package, which is a global.
+ if info.Pkg == types.Unsafe {
+ if len(files) > 0 {
+ panic(`"unsafe" package contains unexpected files`)
+ }
+ } else {
+ // Ignore the returned (first) error since we
+ // already collect them all in the PackageInfo.
+ info.checker.Files(files)
+ info.Files = append(info.Files, files...)
+ }
+
+ if imp.conf.AfterTypeCheck != nil {
+ imp.conf.AfterTypeCheck(info, files)
+ }
+
+ if trace {
+ fmt.Fprintf(os.Stderr, "%s: stop %q\n",
+ time.Since(imp.start), info.Pkg.Path())
+ }
+}
+
+func (imp *importer) newPackageInfo(path, dir string) *PackageInfo {
+ var pkg *types.Package
+ if path == "unsafe" {
+ pkg = types.Unsafe
+ } else {
+ pkg = types.NewPackage(path, "")
+ }
+ info := &PackageInfo{
+ Pkg: pkg,
+ Info: types.Info{
+ Types: make(map[ast.Expr]types.TypeAndValue),
+ Defs: make(map[*ast.Ident]types.Object),
+ Uses: make(map[*ast.Ident]types.Object),
+ Implicits: make(map[ast.Node]types.Object),
+ Instances: make(map[*ast.Ident]types.Instance),
+ Scopes: make(map[ast.Node]*types.Scope),
+ Selections: make(map[*ast.SelectorExpr]*types.Selection),
+ },
+ errorFunc: imp.conf.TypeChecker.Error,
+ dir: dir,
+ }
+ versions.InitFileVersions(&info.Info)
+
+ // Copy the types.Config so we can vary it across PackageInfos.
+ tc := imp.conf.TypeChecker
+ tc.IgnoreFuncBodies = false
+ if f := imp.conf.TypeCheckFuncBodies; f != nil {
+ tc.IgnoreFuncBodies = !f(path)
+ }
+ tc.Importer = closure{imp, info}
+ tc.Error = info.appendError // appendError wraps the user's Error function
+
+ info.checker = types.NewChecker(&tc, imp.conf.fset(), pkg, &info.Info)
+ imp.progMu.Lock()
+ imp.prog.AllPackages[pkg] = info
+ imp.progMu.Unlock()
+ return info
+}
+
+type closure struct {
+ imp *importer
+ info *PackageInfo
+}
+
+func (c closure) Import(to string) (*types.Package, error) { return c.imp.doImport(c.info, to) }
diff --git a/vendor/golang.org/x/tools/go/loader/util.go b/vendor/golang.org/x/tools/go/loader/util.go
new file mode 100644
index 000000000..3a80acae6
--- /dev/null
+++ b/vendor/golang.org/x/tools/go/loader/util.go
@@ -0,0 +1,123 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package loader
+
+import (
+ "go/ast"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "io"
+ "os"
+ "strconv"
+ "sync"
+
+ "golang.org/x/tools/go/buildutil"
+)
+
+// We use a counting semaphore to limit
+// the number of parallel I/O calls per process.
+var ioLimit = make(chan bool, 10)
+
+// parseFiles parses the Go source files within directory dir and
+// returns the ASTs of the ones that could be at least partially parsed,
+// along with a list of I/O and parse errors encountered.
+//
+// I/O is done via ctxt, which may specify a virtual file system.
+// displayPath is used to transform the filenames attached to the ASTs.
+func parseFiles(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, files []string, mode parser.Mode) ([]*ast.File, []error) {
+ if displayPath == nil {
+ displayPath = func(path string) string { return path }
+ }
+ var wg sync.WaitGroup
+ n := len(files)
+ parsed := make([]*ast.File, n)
+ errors := make([]error, n)
+ for i, file := range files {
+ if !buildutil.IsAbsPath(ctxt, file) {
+ file = buildutil.JoinPath(ctxt, dir, file)
+ }
+ wg.Add(1)
+ go func(i int, file string) {
+ ioLimit <- true // wait
+ defer func() {
+ wg.Done()
+ <-ioLimit // signal
+ }()
+ var rd io.ReadCloser
+ var err error
+ if ctxt.OpenFile != nil {
+ rd, err = ctxt.OpenFile(file)
+ } else {
+ rd, err = os.Open(file)
+ }
+ if err != nil {
+ errors[i] = err // open failed
+ return
+ }
+
+ // ParseFile may return both an AST and an error.
+ parsed[i], errors[i] = parser.ParseFile(fset, displayPath(file), rd, mode)
+ rd.Close()
+ }(i, file)
+ }
+ wg.Wait()
+
+ // Eliminate nils, preserving order.
+ var o int
+ for _, f := range parsed {
+ if f != nil {
+ parsed[o] = f
+ o++
+ }
+ }
+ parsed = parsed[:o]
+
+ o = 0
+ for _, err := range errors {
+ if err != nil {
+ errors[o] = err
+ o++
+ }
+ }
+ errors = errors[:o]
+
+ return parsed, errors
+}
+
+// scanImports returns the set of all import paths from all
+// import specs in the specified files.
+func scanImports(files []*ast.File) map[string]bool {
+ imports := make(map[string]bool)
+ for _, f := range files {
+ for _, decl := range f.Decls {
+ if decl, ok := decl.(*ast.GenDecl); ok && decl.Tok == token.IMPORT {
+ for _, spec := range decl.Specs {
+ spec := spec.(*ast.ImportSpec)
+
+ // NB: do not assume the program is well-formed!
+ path, err := strconv.Unquote(spec.Path.Value)
+ if err != nil {
+ continue // quietly ignore the error
+ }
+ if path == "C" {
+ continue // skip pseudopackage
+ }
+ imports[path] = true
+ }
+ }
+ }
+ }
+ return imports
+}
+
+// ---------- Internal helpers ----------
+
+// TODO(adonovan): make this a method: func (*token.File) Contains(token.Pos)
+func tokenFileContainsPos(f *token.File, pos token.Pos) bool {
+ p := int(pos)
+ base := f.Base()
+ return base <= p && p < base+f.Size()
+}
diff --git a/vendor/golang.org/x/tools/imports/forward.go b/vendor/golang.org/x/tools/imports/forward.go
new file mode 100644
index 000000000..cb6db8893
--- /dev/null
+++ b/vendor/golang.org/x/tools/imports/forward.go
@@ -0,0 +1,77 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package imports implements a Go pretty-printer (like package "go/format")
+// that also adds or removes import statements as necessary.
+package imports // import "golang.org/x/tools/imports"
+
+import (
+ "log"
+ "os"
+
+ "golang.org/x/tools/internal/gocommand"
+ intimp "golang.org/x/tools/internal/imports"
+)
+
+// Options specifies options for processing files.
+type Options struct {
+ Fragment bool // Accept fragment of a source file (no package statement)
+ AllErrors bool // Report all errors (not just the first 10 on different lines)
+
+ Comments bool // Print comments (true if nil *Options provided)
+ TabIndent bool // Use tabs for indent (true if nil *Options provided)
+ TabWidth int // Tab width (8 if nil *Options provided)
+
+ FormatOnly bool // Disable the insertion and deletion of imports
+}
+
+// Debug controls verbose logging.
+var Debug = false
+
+// LocalPrefix is a comma-separated string of import path prefixes, which, if
+// set, instructs Process to sort the import paths with the given prefixes
+// into another group after 3rd-party packages.
+var LocalPrefix string
+
+// Process formats and adjusts imports for the provided file.
+// If opt is nil the defaults are used, and if src is nil the source
+// is read from the filesystem.
+//
+// Note that filename's directory influences which imports can be chosen,
+// so it is important that filename be accurate.
+// To process data “as if” it were in filename, pass the data as a non-nil src.
+func Process(filename string, src []byte, opt *Options) ([]byte, error) {
+ var err error
+ if src == nil {
+ src, err = os.ReadFile(filename)
+ if err != nil {
+ return nil, err
+ }
+ }
+ if opt == nil {
+ opt = &Options{Comments: true, TabIndent: true, TabWidth: 8}
+ }
+ intopt := &intimp.Options{
+ Env: &intimp.ProcessEnv{
+ GocmdRunner: &gocommand.Runner{},
+ },
+ LocalPrefix: LocalPrefix,
+ AllErrors: opt.AllErrors,
+ Comments: opt.Comments,
+ FormatOnly: opt.FormatOnly,
+ Fragment: opt.Fragment,
+ TabIndent: opt.TabIndent,
+ TabWidth: opt.TabWidth,
+ }
+ if Debug {
+ intopt.Env.Logf = log.Printf
+ }
+ return intimp.Process(filename, src, intopt)
+}
+
+// VendorlessPath returns the devendorized version of the import path ipath.
+// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
+func VendorlessPath(ipath string) string {
+ return intimp.VendorlessPath(ipath)
+}
diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go
new file mode 100644
index 000000000..52f74e643
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go
@@ -0,0 +1,331 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package gopathwalk is like filepath.Walk but specialized for finding Go
+// packages, particularly in $GOPATH and $GOROOT.
+package gopathwalk
+
+import (
+ "bufio"
+ "bytes"
+ "io/fs"
+ "log"
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+)
+
+// Options controls the behavior of a Walk call.
+type Options struct {
+ // If Logf is non-nil, debug logging is enabled through this function.
+ Logf func(format string, args ...interface{})
+ // Search module caches. Also disables legacy goimports ignore rules.
+ ModulesEnabled bool
+}
+
+// RootType indicates the type of a Root.
+type RootType int
+
+const (
+ RootUnknown RootType = iota
+ RootGOROOT
+ RootGOPATH
+ RootCurrentModule
+ RootModuleCache
+ RootOther
+)
+
+// A Root is a starting point for a Walk.
+type Root struct {
+ Path string
+ Type RootType
+}
+
+// Walk walks Go source directories ($GOROOT, $GOPATH, etc) to find packages.
+// For each package found, add will be called with the absolute
+// paths of the containing source directory and the package directory.
+func Walk(roots []Root, add func(root Root, dir string), opts Options) {
+ WalkSkip(roots, add, func(Root, string) bool { return false }, opts)
+}
+
+// WalkSkip walks Go source directories ($GOROOT, $GOPATH, etc) to find packages.
+// For each package found, add will be called with the absolute
+// paths of the containing source directory and the package directory.
+// For each directory that will be scanned, skip will be called
+// with the absolute paths of the containing source directory and the directory.
+// If skip returns false on a directory it will be processed.
+func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root, dir string) bool, opts Options) {
+ for _, root := range roots {
+ walkDir(root, add, skip, opts)
+ }
+}
+
+// walkDir creates a walker and starts fastwalk with this walker.
+func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) bool, opts Options) {
+ if _, err := os.Stat(root.Path); os.IsNotExist(err) {
+ if opts.Logf != nil {
+ opts.Logf("skipping nonexistent directory: %v", root.Path)
+ }
+ return
+ }
+ start := time.Now()
+ if opts.Logf != nil {
+ opts.Logf("scanning %s", root.Path)
+ }
+
+ w := &walker{
+ root: root,
+ add: add,
+ skip: skip,
+ opts: opts,
+ added: make(map[string]bool),
+ }
+ w.init()
+
+ // Add a trailing path separator to cause filepath.WalkDir to traverse symlinks.
+ path := root.Path
+ if len(path) == 0 {
+ path = "." + string(filepath.Separator)
+ } else if !os.IsPathSeparator(path[len(path)-1]) {
+ path = path + string(filepath.Separator)
+ }
+
+ if err := filepath.WalkDir(path, w.walk); err != nil {
+ logf := opts.Logf
+ if logf == nil {
+ logf = log.Printf
+ }
+ logf("scanning directory %v: %v", root.Path, err)
+ }
+
+ if opts.Logf != nil {
+ opts.Logf("scanned %s in %v", root.Path, time.Since(start))
+ }
+}
+
+// walker is the callback for fastwalk.Walk.
+type walker struct {
+ root Root // The source directory to scan.
+ add func(Root, string) // The callback that will be invoked for every possible Go package dir.
+ skip func(Root, string) bool // The callback that will be invoked for every dir. dir is skipped if it returns true.
+ opts Options // Options passed to Walk by the user.
+
+ pathSymlinks []os.FileInfo
+ ignoredDirs []string
+
+ added map[string]bool
+}
+
+// init initializes the walker based on its Options
+func (w *walker) init() {
+ var ignoredPaths []string
+ if w.root.Type == RootModuleCache {
+ ignoredPaths = []string{"cache"}
+ }
+ if !w.opts.ModulesEnabled && w.root.Type == RootGOPATH {
+ ignoredPaths = w.getIgnoredDirs(w.root.Path)
+ ignoredPaths = append(ignoredPaths, "v", "mod")
+ }
+
+ for _, p := range ignoredPaths {
+ full := filepath.Join(w.root.Path, p)
+ w.ignoredDirs = append(w.ignoredDirs, full)
+ if w.opts.Logf != nil {
+ w.opts.Logf("Directory added to ignore list: %s", full)
+ }
+ }
+}
+
+// getIgnoredDirs reads an optional config file at <path>/.goimportsignore
+// of relative directories to ignore when scanning for go files.
+// The provided path is one of the $GOPATH entries with "src" appended.
+func (w *walker) getIgnoredDirs(path string) []string {
+ file := filepath.Join(path, ".goimportsignore")
+ slurp, err := os.ReadFile(file)
+ if w.opts.Logf != nil {
+ if err != nil {
+ w.opts.Logf("%v", err)
+ } else {
+ w.opts.Logf("Read %s", file)
+ }
+ }
+ if err != nil {
+ return nil
+ }
+
+ var ignoredDirs []string
+ bs := bufio.NewScanner(bytes.NewReader(slurp))
+ for bs.Scan() {
+ line := strings.TrimSpace(bs.Text())
+ if line == "" || strings.HasPrefix(line, "#") {
+ continue
+ }
+ ignoredDirs = append(ignoredDirs, line)
+ }
+ return ignoredDirs
+}
+
+// shouldSkipDir reports whether the file should be skipped or not.
+func (w *walker) shouldSkipDir(dir string) bool {
+ for _, ignoredDir := range w.ignoredDirs {
+ if dir == ignoredDir {
+ return true
+ }
+ }
+ if w.skip != nil {
+ // Check with the user specified callback.
+ return w.skip(w.root, dir)
+ }
+ return false
+}
+
+// walk walks through the given path.
+//
+// Errors are logged if w.opts.Logf is non-nil, but otherwise ignored:
+// walk returns only nil or fs.SkipDir.
+func (w *walker) walk(path string, d fs.DirEntry, err error) error {
+ if err != nil {
+ // We have no way to report errors back through Walk or WalkSkip,
+ // so just log and ignore them.
+ if w.opts.Logf != nil {
+ w.opts.Logf("%v", err)
+ }
+ if d == nil {
+ // Nothing more to do: the error prevents us from knowing
+ // what path even represents.
+ return nil
+ }
+ }
+
+ if d.Type().IsRegular() {
+ if !strings.HasSuffix(path, ".go") {
+ return nil
+ }
+
+ dir := filepath.Dir(path)
+ if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) {
+ // Doesn't make sense to have regular files
+ // directly in your $GOPATH/src or $GOROOT/src.
+ return nil
+ }
+
+ if !w.added[dir] {
+ w.add(w.root, dir)
+ w.added[dir] = true
+ }
+ return nil
+ }
+
+ if d.IsDir() {
+ base := filepath.Base(path)
+ if base == "" || base[0] == '.' || base[0] == '_' ||
+ base == "testdata" ||
+ (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") ||
+ (!w.opts.ModulesEnabled && base == "node_modules") {
+ return fs.SkipDir
+ }
+ if w.shouldSkipDir(path) {
+ return fs.SkipDir
+ }
+ return nil
+ }
+
+ if d.Type()&os.ModeSymlink != 0 {
+ // TODO(bcmills): 'go list all' itself ignores symlinks within GOROOT/src
+ // and GOPATH/src. Do we really need to traverse them here? If so, why?
+
+ fi, err := os.Stat(path)
+ if err != nil || !fi.IsDir() {
+ // Not a directory. Just walk the file (or broken link) and be done.
+ return w.walk(path, fs.FileInfoToDirEntry(fi), err)
+ }
+
+ // Avoid walking symlink cycles: if we have already followed a symlink to
+ // this directory as a parent of itself, don't follow it again.
+ //
+ // This doesn't catch the first time through a cycle, but it also minimizes
+ // the number of extra stat calls we make if we *don't* encounter a cycle.
+ // Since we don't actually expect to encounter symlink cycles in practice,
+ // this seems like the right tradeoff.
+ for _, parent := range w.pathSymlinks {
+ if os.SameFile(fi, parent) {
+ return nil
+ }
+ }
+
+ w.pathSymlinks = append(w.pathSymlinks, fi)
+ defer func() {
+ w.pathSymlinks = w.pathSymlinks[:len(w.pathSymlinks)-1]
+ }()
+
+ // On some platforms the OS (or the Go os package) sometimes fails to
+ // resolve directory symlinks before a trailing slash
+ // (even though POSIX requires it to do so).
+ //
+ // On macOS that failure may be caused by a known libc/kernel bug;
+ // see https://go.dev/issue/59586.
+ //
+ // On Windows before Go 1.21, it may be caused by a bug in
+ // os.Lstat (fixed in https://go.dev/cl/463177).
+ //
+ // Since we need to handle this explicitly on broken platforms anyway,
+ // it is simplest to just always do that and not rely on POSIX pathname
+ // resolution to walk the directory (such as by calling WalkDir with
+ // a trailing slash appended to the path).
+ //
+ // Instead, we make a sequence of walk calls — directly and through
+ // recursive calls to filepath.WalkDir — simulating what WalkDir would do
+ // if the symlink were a regular directory.
+
+ // First we call walk on the path as a directory
+ // (instead of a symlink).
+ err = w.walk(path, fs.FileInfoToDirEntry(fi), nil)
+ if err == fs.SkipDir {
+ return nil
+ } else if err != nil {
+ // This should be impossible, but handle it anyway in case
+ // walk is changed to return other errors.
+ return err
+ }
+
+ // Now read the directory and walk its entries.
+ ents, err := os.ReadDir(path)
+ if err != nil {
+ // Report the ReadDir error, as filepath.WalkDir would do.
+ err = w.walk(path, fs.FileInfoToDirEntry(fi), err)
+ if err == fs.SkipDir {
+ return nil
+ } else if err != nil {
+ return err // Again, should be impossible.
+ }
+ // Fall through and iterate over whatever entries we did manage to get.
+ }
+
+ for _, d := range ents {
+ nextPath := filepath.Join(path, d.Name())
+ if d.IsDir() {
+ // We want to walk the whole directory tree rooted at nextPath,
+ // not just the single entry for the directory.
+ err := filepath.WalkDir(nextPath, w.walk)
+ if err != nil && w.opts.Logf != nil {
+ w.opts.Logf("%v", err)
+ }
+ } else {
+ err := w.walk(nextPath, d, nil)
+ if err == fs.SkipDir {
+ // Skip the rest of the entries in the parent directory of nextPath
+ // (that is, path itself).
+ break
+ } else if err != nil {
+ return err // Again, should be impossible.
+ }
+ }
+ }
+ return nil
+ }
+
+ // Not a file, regular directory, or symlink; skip.
+ return nil
+}
diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go
new file mode 100644
index 000000000..dd369c072
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/fix.go
@@ -0,0 +1,1769 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package imports
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "go/ast"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "io/fs"
+ "io/ioutil"
+ "os"
+ "path"
+ "path/filepath"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "unicode"
+ "unicode/utf8"
+
+ "golang.org/x/tools/go/ast/astutil"
+ "golang.org/x/tools/internal/event"
+ "golang.org/x/tools/internal/gocommand"
+ "golang.org/x/tools/internal/gopathwalk"
+)
+
+// importToGroup is a list of functions which map from an import path to
+// a group number.
+var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){
+ func(localPrefix, importPath string) (num int, ok bool) {
+ if localPrefix == "" {
+ return
+ }
+ for _, p := range strings.Split(localPrefix, ",") {
+ if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath {
+ return 3, true
+ }
+ }
+ return
+ },
+ func(_, importPath string) (num int, ok bool) {
+ if strings.HasPrefix(importPath, "appengine") {
+ return 2, true
+ }
+ return
+ },
+ func(_, importPath string) (num int, ok bool) {
+ firstComponent := strings.Split(importPath, "/")[0]
+ if strings.Contains(firstComponent, ".") {
+ return 1, true
+ }
+ return
+ },
+}
+
+func importGroup(localPrefix, importPath string) int {
+ for _, fn := range importToGroup {
+ if n, ok := fn(localPrefix, importPath); ok {
+ return n
+ }
+ }
+ return 0
+}
+
+type ImportFixType int
+
+const (
+ AddImport ImportFixType = iota
+ DeleteImport
+ SetImportName
+)
+
+type ImportFix struct {
+ // StmtInfo represents the import statement this fix will add, remove, or change.
+ StmtInfo ImportInfo
+ // IdentName is the identifier that this fix will add or remove.
+ IdentName string
+ // FixType is the type of fix this is (AddImport, DeleteImport, SetImportName).
+ FixType ImportFixType
+ Relevance float64 // see pkg
+}
+
+// An ImportInfo represents a single import statement.
+type ImportInfo struct {
+ ImportPath string // import path, e.g. "crypto/rand".
+ Name string // import name, e.g. "crand", or "" if none.
+}
+
+// A packageInfo represents what's known about a package.
+type packageInfo struct {
+ name string // real package name, if known.
+ exports map[string]bool // known exports.
+}
+
+// parseOtherFiles parses all the Go files in srcDir except filename, including
+// test files if filename looks like a test.
+func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File {
+ // This could use go/packages but it doesn't buy much, and it fails
+ // with https://golang.org/issue/26296 in LoadFiles mode in some cases.
+ considerTests := strings.HasSuffix(filename, "_test.go")
+
+ fileBase := filepath.Base(filename)
+ packageFileInfos, err := os.ReadDir(srcDir)
+ if err != nil {
+ return nil
+ }
+
+ var files []*ast.File
+ for _, fi := range packageFileInfos {
+ if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") {
+ continue
+ }
+ if !considerTests && strings.HasSuffix(fi.Name(), "_test.go") {
+ continue
+ }
+
+ f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, 0)
+ if err != nil {
+ continue
+ }
+
+ files = append(files, f)
+ }
+
+ return files
+}
+
+// addGlobals puts the names of package vars into the provided map.
+func addGlobals(f *ast.File, globals map[string]bool) {
+ for _, decl := range f.Decls {
+ genDecl, ok := decl.(*ast.GenDecl)
+ if !ok {
+ continue
+ }
+
+ for _, spec := range genDecl.Specs {
+ valueSpec, ok := spec.(*ast.ValueSpec)
+ if !ok {
+ continue
+ }
+ globals[valueSpec.Names[0].Name] = true
+ }
+ }
+}
+
+// collectReferences builds a map of selector expressions, from
+// left hand side (X) to a set of right hand sides (Sel).
+func collectReferences(f *ast.File) references {
+ refs := references{}
+
+ var visitor visitFn
+ visitor = func(node ast.Node) ast.Visitor {
+ if node == nil {
+ return visitor
+ }
+ switch v := node.(type) {
+ case *ast.SelectorExpr:
+ xident, ok := v.X.(*ast.Ident)
+ if !ok {
+ break
+ }
+ if xident.Obj != nil {
+ // If the parser can resolve it, it's not a package ref.
+ break
+ }
+ if !ast.IsExported(v.Sel.Name) {
+ // Whatever this is, it's not exported from a package.
+ break
+ }
+ pkgName := xident.Name
+ r := refs[pkgName]
+ if r == nil {
+ r = make(map[string]bool)
+ refs[pkgName] = r
+ }
+ r[v.Sel.Name] = true
+ }
+ return visitor
+ }
+ ast.Walk(visitor, f)
+ return refs
+}
+
+// collectImports returns all the imports in f.
+// Unnamed imports (., _) and "C" are ignored.
+func collectImports(f *ast.File) []*ImportInfo {
+ var imports []*ImportInfo
+ for _, imp := range f.Imports {
+ var name string
+ if imp.Name != nil {
+ name = imp.Name.Name
+ }
+ if imp.Path.Value == `"C"` || name == "_" || name == "." {
+ continue
+ }
+ path := strings.Trim(imp.Path.Value, `"`)
+ imports = append(imports, &ImportInfo{
+ Name: name,
+ ImportPath: path,
+ })
+ }
+ return imports
+}
+
+// findMissingImport searches pass's candidates for an import that provides
+// pkg, containing all of syms.
+func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo {
+ for _, candidate := range p.candidates {
+ pkgInfo, ok := p.knownPackages[candidate.ImportPath]
+ if !ok {
+ continue
+ }
+ if p.importIdentifier(candidate) != pkg {
+ continue
+ }
+
+ allFound := true
+ for right := range syms {
+ if !pkgInfo.exports[right] {
+ allFound = false
+ break
+ }
+ }
+
+ if allFound {
+ return candidate
+ }
+ }
+ return nil
+}
+
+// references is set of references found in a Go file. The first map key is the
+// left hand side of a selector expression, the second key is the right hand
+// side, and the value should always be true.
+type references map[string]map[string]bool
+
+// A pass contains all the inputs and state necessary to fix a file's imports.
+// It can be modified in some ways during use; see comments below.
+type pass struct {
+ // Inputs. These must be set before a call to load, and not modified after.
+ fset *token.FileSet // fset used to parse f and its siblings.
+ f *ast.File // the file being fixed.
+ srcDir string // the directory containing f.
+ env *ProcessEnv // the environment to use for go commands, etc.
+ loadRealPackageNames bool // if true, load package names from disk rather than guessing them.
+ otherFiles []*ast.File // sibling files.
+
+ // Intermediate state, generated by load.
+ existingImports map[string][]*ImportInfo
+ allRefs references
+ missingRefs references
+
+ // Inputs to fix. These can be augmented between successive fix calls.
+ lastTry bool // indicates that this is the last call and fix should clean up as best it can.
+ candidates []*ImportInfo // candidate imports in priority order.
+ knownPackages map[string]*packageInfo // information about all known packages.
+}
+
+// loadPackageNames saves the package names for everything referenced by imports.
+func (p *pass) loadPackageNames(imports []*ImportInfo) error {
+ if p.env.Logf != nil {
+ p.env.Logf("loading package names for %v packages", len(imports))
+ defer func() {
+ p.env.Logf("done loading package names for %v packages", len(imports))
+ }()
+ }
+ var unknown []string
+ for _, imp := range imports {
+ if _, ok := p.knownPackages[imp.ImportPath]; ok {
+ continue
+ }
+ unknown = append(unknown, imp.ImportPath)
+ }
+
+ resolver, err := p.env.GetResolver()
+ if err != nil {
+ return err
+ }
+
+ names, err := resolver.loadPackageNames(unknown, p.srcDir)
+ if err != nil {
+ return err
+ }
+
+ for path, name := range names {
+ p.knownPackages[path] = &packageInfo{
+ name: name,
+ exports: map[string]bool{},
+ }
+ }
+ return nil
+}
+
+// importIdentifier returns the identifier that imp will introduce. It will
+// guess if the package name has not been loaded, e.g. because the source
+// is not available.
+func (p *pass) importIdentifier(imp *ImportInfo) string {
+ if imp.Name != "" {
+ return imp.Name
+ }
+ known := p.knownPackages[imp.ImportPath]
+ if known != nil && known.name != "" {
+ return known.name
+ }
+ return ImportPathToAssumedName(imp.ImportPath)
+}
+
+// load reads in everything necessary to run a pass, and reports whether the
+// file already has all the imports it needs. It fills in p.missingRefs with the
+// file's missing symbols, if any, or removes unused imports if not.
+func (p *pass) load() ([]*ImportFix, bool) {
+ p.knownPackages = map[string]*packageInfo{}
+ p.missingRefs = references{}
+ p.existingImports = map[string][]*ImportInfo{}
+
+ // Load basic information about the file in question.
+ p.allRefs = collectReferences(p.f)
+
+ // Load stuff from other files in the same package:
+ // global variables so we know they don't need resolving, and imports
+ // that we might want to mimic.
+ globals := map[string]bool{}
+ for _, otherFile := range p.otherFiles {
+ // Don't load globals from files that are in the same directory
+ // but a different package. Using them to suggest imports is OK.
+ if p.f.Name.Name == otherFile.Name.Name {
+ addGlobals(otherFile, globals)
+ }
+ p.candidates = append(p.candidates, collectImports(otherFile)...)
+ }
+
+ // Resolve all the import paths we've seen to package names, and store
+ // f's imports by the identifier they introduce.
+ imports := collectImports(p.f)
+ if p.loadRealPackageNames {
+ err := p.loadPackageNames(append(imports, p.candidates...))
+ if err != nil {
+ if p.env.Logf != nil {
+ p.env.Logf("loading package names: %v", err)
+ }
+ return nil, false
+ }
+ }
+ for _, imp := range imports {
+ p.existingImports[p.importIdentifier(imp)] = append(p.existingImports[p.importIdentifier(imp)], imp)
+ }
+
+ // Find missing references.
+ for left, rights := range p.allRefs {
+ if globals[left] {
+ continue
+ }
+ _, ok := p.existingImports[left]
+ if !ok {
+ p.missingRefs[left] = rights
+ continue
+ }
+ }
+ if len(p.missingRefs) != 0 {
+ return nil, false
+ }
+
+ return p.fix()
+}
+
+// fix attempts to satisfy missing imports using p.candidates. If it finds
+// everything, or if p.lastTry is true, it updates fixes to add the imports it found,
+// delete anything unused, and update import names, and returns true.
+func (p *pass) fix() ([]*ImportFix, bool) {
+ // Find missing imports.
+ var selected []*ImportInfo
+ for left, rights := range p.missingRefs {
+ if imp := p.findMissingImport(left, rights); imp != nil {
+ selected = append(selected, imp)
+ }
+ }
+
+ if !p.lastTry && len(selected) != len(p.missingRefs) {
+ return nil, false
+ }
+
+ // Found everything, or giving up. Add the new imports and remove any unused.
+ var fixes []*ImportFix
+ for _, identifierImports := range p.existingImports {
+ for _, imp := range identifierImports {
+ // We deliberately ignore globals here, because we can't be sure
+ // they're in the same package. People do things like put multiple
+ // main packages in the same directory, and we don't want to
+ // remove imports if they happen to have the same name as a var in
+ // a different package.
+ if _, ok := p.allRefs[p.importIdentifier(imp)]; !ok {
+ fixes = append(fixes, &ImportFix{
+ StmtInfo: *imp,
+ IdentName: p.importIdentifier(imp),
+ FixType: DeleteImport,
+ })
+ continue
+ }
+
+ // An existing import may need to update its import name to be correct.
+ if name := p.importSpecName(imp); name != imp.Name {
+ fixes = append(fixes, &ImportFix{
+ StmtInfo: ImportInfo{
+ Name: name,
+ ImportPath: imp.ImportPath,
+ },
+ IdentName: p.importIdentifier(imp),
+ FixType: SetImportName,
+ })
+ }
+ }
+ }
+ // Collecting fixes involved map iteration, so sort for stability. See
+ // golang/go#59976.
+ sortFixes(fixes)
+
+ // collect selected fixes in a separate slice, so that it can be sorted
+ // separately. Note that these fixes must occur after fixes to existing
+ // imports. TODO(rfindley): figure out why.
+ var selectedFixes []*ImportFix
+ for _, imp := range selected {
+ selectedFixes = append(selectedFixes, &ImportFix{
+ StmtInfo: ImportInfo{
+ Name: p.importSpecName(imp),
+ ImportPath: imp.ImportPath,
+ },
+ IdentName: p.importIdentifier(imp),
+ FixType: AddImport,
+ })
+ }
+ sortFixes(selectedFixes)
+
+ return append(fixes, selectedFixes...), true
+}
+
+func sortFixes(fixes []*ImportFix) {
+ sort.Slice(fixes, func(i, j int) bool {
+ fi, fj := fixes[i], fixes[j]
+ if fi.StmtInfo.ImportPath != fj.StmtInfo.ImportPath {
+ return fi.StmtInfo.ImportPath < fj.StmtInfo.ImportPath
+ }
+ if fi.StmtInfo.Name != fj.StmtInfo.Name {
+ return fi.StmtInfo.Name < fj.StmtInfo.Name
+ }
+ if fi.IdentName != fj.IdentName {
+ return fi.IdentName < fj.IdentName
+ }
+ return fi.FixType < fj.FixType
+ })
+}
+
+// importSpecName gets the import name of imp in the import spec.
+//
+// When the import identifier matches the assumed import name, the import name does
+// not appear in the import spec.
+func (p *pass) importSpecName(imp *ImportInfo) string {
+ // If we did not load the real package names, or the name is already set,
+ // we just return the existing name.
+ if !p.loadRealPackageNames || imp.Name != "" {
+ return imp.Name
+ }
+
+ ident := p.importIdentifier(imp)
+ if ident == ImportPathToAssumedName(imp.ImportPath) {
+ return "" // ident not needed since the assumed and real names are the same.
+ }
+ return ident
+}
+
+// apply will perform the fixes on f in order.
+func apply(fset *token.FileSet, f *ast.File, fixes []*ImportFix) {
+ for _, fix := range fixes {
+ switch fix.FixType {
+ case DeleteImport:
+ astutil.DeleteNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath)
+ case AddImport:
+ astutil.AddNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath)
+ case SetImportName:
+ // Find the matching import path and change the name.
+ for _, spec := range f.Imports {
+ path := strings.Trim(spec.Path.Value, `"`)
+ if path == fix.StmtInfo.ImportPath {
+ spec.Name = &ast.Ident{
+ Name: fix.StmtInfo.Name,
+ NamePos: spec.Pos(),
+ }
+ }
+ }
+ }
+ }
+}
+
+// assumeSiblingImportsValid assumes that siblings' use of packages is valid,
+// adding the exports they use.
+func (p *pass) assumeSiblingImportsValid() {
+ for _, f := range p.otherFiles {
+ refs := collectReferences(f)
+ imports := collectImports(f)
+ importsByName := map[string]*ImportInfo{}
+ for _, imp := range imports {
+ importsByName[p.importIdentifier(imp)] = imp
+ }
+ for left, rights := range refs {
+ if imp, ok := importsByName[left]; ok {
+ if m, ok := stdlib[imp.ImportPath]; ok {
+ // We have the stdlib in memory; no need to guess.
+ rights = copyExports(m)
+ }
+ p.addCandidate(imp, &packageInfo{
+ // no name; we already know it.
+ exports: rights,
+ })
+ }
+ }
+ }
+}
+
+// addCandidate adds a candidate import to p, and merges in the information
+// in pkg.
+func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) {
+ p.candidates = append(p.candidates, imp)
+ if existing, ok := p.knownPackages[imp.ImportPath]; ok {
+ if existing.name == "" {
+ existing.name = pkg.name
+ }
+ for export := range pkg.exports {
+ existing.exports[export] = true
+ }
+ } else {
+ p.knownPackages[imp.ImportPath] = pkg
+ }
+}
+
+// fixImports adds and removes imports from f so that all its references are
+// satisfied and there are no unused imports.
+//
+// This is declared as a variable rather than a function so goimports can
+// easily be extended by adding a file with an init function.
+var fixImports = fixImportsDefault
+
+func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error {
+ fixes, err := getFixes(context.Background(), fset, f, filename, env)
+ if err != nil {
+ return err
+ }
+ apply(fset, f, fixes)
+ return err
+}
+
+// getFixes gets the import fixes that need to be made to f in order to fix the imports.
+// It does not modify the ast.
+func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) {
+ abs, err := filepath.Abs(filename)
+ if err != nil {
+ return nil, err
+ }
+ srcDir := filepath.Dir(abs)
+ if env.Logf != nil {
+ env.Logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir)
+ }
+
+ // First pass: looking only at f, and using the naive algorithm to
+ // derive package names from import paths, see if the file is already
+ // complete. We can't add any imports yet, because we don't know
+ // if missing references are actually package vars.
+ p := &pass{fset: fset, f: f, srcDir: srcDir, env: env}
+ if fixes, done := p.load(); done {
+ return fixes, nil
+ }
+
+ otherFiles := parseOtherFiles(fset, srcDir, filename)
+
+ // Second pass: add information from other files in the same package,
+ // like their package vars and imports.
+ p.otherFiles = otherFiles
+ if fixes, done := p.load(); done {
+ return fixes, nil
+ }
+
+ // Now we can try adding imports from the stdlib.
+ p.assumeSiblingImportsValid()
+ addStdlibCandidates(p, p.missingRefs)
+ if fixes, done := p.fix(); done {
+ return fixes, nil
+ }
+
+ // Third pass: get real package names where we had previously used
+ // the naive algorithm.
+ p = &pass{fset: fset, f: f, srcDir: srcDir, env: env}
+ p.loadRealPackageNames = true
+ p.otherFiles = otherFiles
+ if fixes, done := p.load(); done {
+ return fixes, nil
+ }
+
+ if err := addStdlibCandidates(p, p.missingRefs); err != nil {
+ return nil, err
+ }
+ p.assumeSiblingImportsValid()
+ if fixes, done := p.fix(); done {
+ return fixes, nil
+ }
+
+ // Go look for candidates in $GOPATH, etc. We don't necessarily load
+ // the real exports of sibling imports, so keep assuming their contents.
+ if err := addExternalCandidates(ctx, p, p.missingRefs, filename); err != nil {
+ return nil, err
+ }
+
+ p.lastTry = true
+ fixes, _ := p.fix()
+ return fixes, nil
+}
+
+// MaxRelevance is the highest relevance, used for the standard library.
+// Chosen arbitrarily to match pre-existing gopls code.
+const MaxRelevance = 7.0
+
+// getCandidatePkgs works with the passed callback to find all acceptable packages.
+// It deduplicates by import path, and uses a cached stdlib rather than reading
+// from disk.
+func getCandidatePkgs(ctx context.Context, wrappedCallback *scanCallback, filename, filePkg string, env *ProcessEnv) error {
+ notSelf := func(p *pkg) bool {
+ return p.packageName != filePkg || p.dir != filepath.Dir(filename)
+ }
+ goenv, err := env.goEnv()
+ if err != nil {
+ return err
+ }
+
+ var mu sync.Mutex // to guard asynchronous access to dupCheck
+ dupCheck := map[string]struct{}{}
+
+ // Start off with the standard library.
+ for importPath, exports := range stdlib {
+ p := &pkg{
+ dir: filepath.Join(goenv["GOROOT"], "src", importPath),
+ importPathShort: importPath,
+ packageName: path.Base(importPath),
+ relevance: MaxRelevance,
+ }
+ dupCheck[importPath] = struct{}{}
+ if notSelf(p) && wrappedCallback.dirFound(p) && wrappedCallback.packageNameLoaded(p) {
+ wrappedCallback.exportsLoaded(p, exports)
+ }
+ }
+
+ scanFilter := &scanCallback{
+ rootFound: func(root gopathwalk.Root) bool {
+ // Exclude goroot results -- getting them is relatively expensive, not cached,
+ // and generally redundant with the in-memory version.
+ return root.Type != gopathwalk.RootGOROOT && wrappedCallback.rootFound(root)
+ },
+ dirFound: wrappedCallback.dirFound,
+ packageNameLoaded: func(pkg *pkg) bool {
+ mu.Lock()
+ defer mu.Unlock()
+ if _, ok := dupCheck[pkg.importPathShort]; ok {
+ return false
+ }
+ dupCheck[pkg.importPathShort] = struct{}{}
+ return notSelf(pkg) && wrappedCallback.packageNameLoaded(pkg)
+ },
+ exportsLoaded: func(pkg *pkg, exports []string) {
+ // If we're an x_test, load the package under test's test variant.
+ if strings.HasSuffix(filePkg, "_test") && pkg.dir == filepath.Dir(filename) {
+ var err error
+ _, exports, err = loadExportsFromFiles(ctx, env, pkg.dir, true)
+ if err != nil {
+ return
+ }
+ }
+ wrappedCallback.exportsLoaded(pkg, exports)
+ },
+ }
+ resolver, err := env.GetResolver()
+ if err != nil {
+ return err
+ }
+ return resolver.scan(ctx, scanFilter)
+}
+
+func ScoreImportPaths(ctx context.Context, env *ProcessEnv, paths []string) (map[string]float64, error) {
+ result := make(map[string]float64)
+ resolver, err := env.GetResolver()
+ if err != nil {
+ return nil, err
+ }
+ for _, path := range paths {
+ result[path] = resolver.scoreImportPath(ctx, path)
+ }
+ return result, nil
+}
+
+func PrimeCache(ctx context.Context, env *ProcessEnv) error {
+ // Fully scan the disk for directories, but don't actually read any Go files.
+ callback := &scanCallback{
+ rootFound: func(gopathwalk.Root) bool {
+ return true
+ },
+ dirFound: func(pkg *pkg) bool {
+ return false
+ },
+ packageNameLoaded: func(pkg *pkg) bool {
+ return false
+ },
+ }
+ return getCandidatePkgs(ctx, callback, "", "", env)
+}
+
+func candidateImportName(pkg *pkg) string {
+ if ImportPathToAssumedName(pkg.importPathShort) != pkg.packageName {
+ return pkg.packageName
+ }
+ return ""
+}
+
+// GetAllCandidates calls wrapped for each package whose name starts with
+// searchPrefix, and can be imported from filename with the package name filePkg.
+//
+// Beware that the wrapped function may be called multiple times concurrently.
+// TODO(adonovan): encapsulate the concurrency.
+func GetAllCandidates(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error {
+ callback := &scanCallback{
+ rootFound: func(gopathwalk.Root) bool {
+ return true
+ },
+ dirFound: func(pkg *pkg) bool {
+ if !canUse(filename, pkg.dir) {
+ return false
+ }
+ // Try the assumed package name first, then a simpler path match
+ // in case of packages named vN, which are not uncommon.
+ return strings.HasPrefix(ImportPathToAssumedName(pkg.importPathShort), searchPrefix) ||
+ strings.HasPrefix(path.Base(pkg.importPathShort), searchPrefix)
+ },
+ packageNameLoaded: func(pkg *pkg) bool {
+ if !strings.HasPrefix(pkg.packageName, searchPrefix) {
+ return false
+ }
+ wrapped(ImportFix{
+ StmtInfo: ImportInfo{
+ ImportPath: pkg.importPathShort,
+ Name: candidateImportName(pkg),
+ },
+ IdentName: pkg.packageName,
+ FixType: AddImport,
+ Relevance: pkg.relevance,
+ })
+ return false
+ },
+ }
+ return getCandidatePkgs(ctx, callback, filename, filePkg, env)
+}
+
+// GetImportPaths calls wrapped for each package whose import path starts with
+// searchPrefix, and can be imported from filename with the package name filePkg.
+func GetImportPaths(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error {
+ callback := &scanCallback{
+ rootFound: func(gopathwalk.Root) bool {
+ return true
+ },
+ dirFound: func(pkg *pkg) bool {
+ if !canUse(filename, pkg.dir) {
+ return false
+ }
+ return strings.HasPrefix(pkg.importPathShort, searchPrefix)
+ },
+ packageNameLoaded: func(pkg *pkg) bool {
+ wrapped(ImportFix{
+ StmtInfo: ImportInfo{
+ ImportPath: pkg.importPathShort,
+ Name: candidateImportName(pkg),
+ },
+ IdentName: pkg.packageName,
+ FixType: AddImport,
+ Relevance: pkg.relevance,
+ })
+ return false
+ },
+ }
+ return getCandidatePkgs(ctx, callback, filename, filePkg, env)
+}
+
+// A PackageExport is a package and its exports.
+type PackageExport struct {
+ Fix *ImportFix
+ Exports []string
+}
+
+// GetPackageExports returns all known packages with name pkg and their exports.
+func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchPkg, filename, filePkg string, env *ProcessEnv) error {
+ callback := &scanCallback{
+ rootFound: func(gopathwalk.Root) bool {
+ return true
+ },
+ dirFound: func(pkg *pkg) bool {
+ return pkgIsCandidate(filename, references{searchPkg: nil}, pkg)
+ },
+ packageNameLoaded: func(pkg *pkg) bool {
+ return pkg.packageName == searchPkg
+ },
+ exportsLoaded: func(pkg *pkg, exports []string) {
+ sort.Strings(exports)
+ wrapped(PackageExport{
+ Fix: &ImportFix{
+ StmtInfo: ImportInfo{
+ ImportPath: pkg.importPathShort,
+ Name: candidateImportName(pkg),
+ },
+ IdentName: pkg.packageName,
+ FixType: AddImport,
+ Relevance: pkg.relevance,
+ },
+ Exports: exports,
+ })
+ },
+ }
+ return getCandidatePkgs(ctx, callback, filename, filePkg, env)
+}
+
+var requiredGoEnvVars = []string{"GO111MODULE", "GOFLAGS", "GOINSECURE", "GOMOD", "GOMODCACHE", "GONOPROXY", "GONOSUMDB", "GOPATH", "GOPROXY", "GOROOT", "GOSUMDB", "GOWORK"}
+
+// ProcessEnv contains environment variables and settings that affect the use of
+// the go command, the go/build package, etc.
+type ProcessEnv struct {
+ GocmdRunner *gocommand.Runner
+
+ BuildFlags []string
+ ModFlag string
+ ModFile string
+
+ // SkipPathInScan returns true if the path should be skipped from scans of
+ // the RootCurrentModule root type. The function argument is a clean,
+ // absolute path.
+ SkipPathInScan func(string) bool
+
+ // Env overrides the OS environment, and can be used to specify
+ // GOPROXY, GO111MODULE, etc. PATH cannot be set here, because
+ // exec.Command will not honor it.
+ // Specifying all of RequiredGoEnvVars avoids a call to `go env`.
+ Env map[string]string
+
+ WorkingDir string
+
+ // If Logf is non-nil, debug logging is enabled through this function.
+ Logf func(format string, args ...interface{})
+
+ initialized bool
+
+ resolver Resolver
+}
+
+func (e *ProcessEnv) goEnv() (map[string]string, error) {
+ if err := e.init(); err != nil {
+ return nil, err
+ }
+ return e.Env, nil
+}
+
+func (e *ProcessEnv) matchFile(dir, name string) (bool, error) {
+ bctx, err := e.buildContext()
+ if err != nil {
+ return false, err
+ }
+ return bctx.MatchFile(dir, name)
+}
+
+// CopyConfig copies the env's configuration into a new env.
+func (e *ProcessEnv) CopyConfig() *ProcessEnv {
+ copy := &ProcessEnv{
+ GocmdRunner: e.GocmdRunner,
+ initialized: e.initialized,
+ BuildFlags: e.BuildFlags,
+ Logf: e.Logf,
+ WorkingDir: e.WorkingDir,
+ resolver: nil,
+ Env: map[string]string{},
+ }
+ for k, v := range e.Env {
+ copy.Env[k] = v
+ }
+ return copy
+}
+
+func (e *ProcessEnv) init() error {
+ if e.initialized {
+ return nil
+ }
+
+ foundAllRequired := true
+ for _, k := range requiredGoEnvVars {
+ if _, ok := e.Env[k]; !ok {
+ foundAllRequired = false
+ break
+ }
+ }
+ if foundAllRequired {
+ e.initialized = true
+ return nil
+ }
+
+ if e.Env == nil {
+ e.Env = map[string]string{}
+ }
+
+ goEnv := map[string]string{}
+ stdout, err := e.invokeGo(context.TODO(), "env", append([]string{"-json"}, requiredGoEnvVars...)...)
+ if err != nil {
+ return err
+ }
+ if err := json.Unmarshal(stdout.Bytes(), &goEnv); err != nil {
+ return err
+ }
+ for k, v := range goEnv {
+ e.Env[k] = v
+ }
+ e.initialized = true
+ return nil
+}
+
+func (e *ProcessEnv) env() []string {
+ var env []string // the gocommand package will prepend os.Environ.
+ for k, v := range e.Env {
+ env = append(env, k+"="+v)
+ }
+ return env
+}
+
+func (e *ProcessEnv) GetResolver() (Resolver, error) {
+ if e.resolver != nil {
+ return e.resolver, nil
+ }
+ if err := e.init(); err != nil {
+ return nil, err
+ }
+ if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 {
+ e.resolver = newGopathResolver(e)
+ return e.resolver, nil
+ }
+ e.resolver = newModuleResolver(e)
+ return e.resolver, nil
+}
+
+func (e *ProcessEnv) buildContext() (*build.Context, error) {
+ ctx := build.Default
+ goenv, err := e.goEnv()
+ if err != nil {
+ return nil, err
+ }
+ ctx.GOROOT = goenv["GOROOT"]
+ ctx.GOPATH = goenv["GOPATH"]
+
+ // As of Go 1.14, build.Context has a Dir field
+ // (see golang.org/issue/34860).
+ // Populate it only if present.
+ rc := reflect.ValueOf(&ctx).Elem()
+ dir := rc.FieldByName("Dir")
+ if dir.IsValid() && dir.Kind() == reflect.String {
+ dir.SetString(e.WorkingDir)
+ }
+
+ // Since Go 1.11, go/build.Context.Import may invoke 'go list' depending on
+ // the value in GO111MODULE in the process's environment. We always want to
+ // run in GOPATH mode when calling Import, so we need to prevent this from
+ // happening. In Go 1.16, GO111MODULE defaults to "on", so this problem comes
+ // up more frequently.
+ //
+ // HACK: setting any of the Context I/O hooks prevents Import from invoking
+ // 'go list', regardless of GO111MODULE. This is undocumented, but it's
+ // unlikely to change before GOPATH support is removed.
+ ctx.ReadDir = ioutil.ReadDir
+
+ return &ctx, nil
+}
+
+func (e *ProcessEnv) invokeGo(ctx context.Context, verb string, args ...string) (*bytes.Buffer, error) {
+ inv := gocommand.Invocation{
+ Verb: verb,
+ Args: args,
+ BuildFlags: e.BuildFlags,
+ Env: e.env(),
+ Logf: e.Logf,
+ WorkingDir: e.WorkingDir,
+ }
+ return e.GocmdRunner.Run(ctx, inv)
+}
+
+func addStdlibCandidates(pass *pass, refs references) error {
+ goenv, err := pass.env.goEnv()
+ if err != nil {
+ return err
+ }
+ add := func(pkg string) {
+ // Prevent self-imports.
+ if path.Base(pkg) == pass.f.Name.Name && filepath.Join(goenv["GOROOT"], "src", pkg) == pass.srcDir {
+ return
+ }
+ exports := copyExports(stdlib[pkg])
+ pass.addCandidate(
+ &ImportInfo{ImportPath: pkg},
+ &packageInfo{name: path.Base(pkg), exports: exports})
+ }
+ for left := range refs {
+ if left == "rand" {
+ // Make sure we try crypto/rand before math/rand.
+ add("crypto/rand")
+ add("math/rand")
+ continue
+ }
+ for importPath := range stdlib {
+ if path.Base(importPath) == left {
+ add(importPath)
+ }
+ }
+ }
+ return nil
+}
+
+// A Resolver does the build-system-specific parts of goimports.
+type Resolver interface {
+ // loadPackageNames loads the package names in importPaths.
+ loadPackageNames(importPaths []string, srcDir string) (map[string]string, error)
+ // scan works with callback to search for packages. See scanCallback for details.
+ scan(ctx context.Context, callback *scanCallback) error
+ // loadExports returns the set of exported symbols in the package at dir.
+ // loadExports may be called concurrently.
+ loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error)
+ // scoreImportPath returns the relevance for an import path.
+ scoreImportPath(ctx context.Context, path string) float64
+
+ ClearForNewScan()
+}
+
+// A scanCallback controls a call to scan and receives its results.
+// In general, minor errors will be silently discarded; a user should not
+// expect to receive a full series of calls for everything.
+type scanCallback struct {
+ // rootFound is called before scanning a new root dir. If it returns true,
+ // the root will be scanned. Returning false will not necessarily prevent
+ // directories from that root making it to dirFound.
+ rootFound func(gopathwalk.Root) bool
+ // dirFound is called when a directory is found that is possibly a Go package.
+ // pkg will be populated with everything except packageName.
+ // If it returns true, the package's name will be loaded.
+ dirFound func(pkg *pkg) bool
+ // packageNameLoaded is called when a package is found and its name is loaded.
+ // If it returns true, the package's exports will be loaded.
+ packageNameLoaded func(pkg *pkg) bool
+ // exportsLoaded is called when a package's exports have been loaded.
+ exportsLoaded func(pkg *pkg, exports []string)
+}
+
+func addExternalCandidates(ctx context.Context, pass *pass, refs references, filename string) error {
+ ctx, done := event.Start(ctx, "imports.addExternalCandidates")
+ defer done()
+
+ var mu sync.Mutex
+ found := make(map[string][]pkgDistance)
+ callback := &scanCallback{
+ rootFound: func(gopathwalk.Root) bool {
+ return true // We want everything.
+ },
+ dirFound: func(pkg *pkg) bool {
+ return pkgIsCandidate(filename, refs, pkg)
+ },
+ packageNameLoaded: func(pkg *pkg) bool {
+ if _, want := refs[pkg.packageName]; !want {
+ return false
+ }
+ if pkg.dir == pass.srcDir && pass.f.Name.Name == pkg.packageName {
+ // The candidate is in the same directory and has the
+ // same package name. Don't try to import ourselves.
+ return false
+ }
+ if !canUse(filename, pkg.dir) {
+ return false
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(pass.srcDir, pkg.dir)})
+ return false // We'll do our own loading after we sort.
+ },
+ }
+ resolver, err := pass.env.GetResolver()
+ if err != nil {
+ return err
+ }
+ if err = resolver.scan(context.Background(), callback); err != nil {
+ return err
+ }
+
+ // Search for imports matching potential package references.
+ type result struct {
+ imp *ImportInfo
+ pkg *packageInfo
+ }
+ results := make(chan result, len(refs))
+
+ ctx, cancel := context.WithCancel(context.TODO())
+ var wg sync.WaitGroup
+ defer func() {
+ cancel()
+ wg.Wait()
+ }()
+ var (
+ firstErr error
+ firstErrOnce sync.Once
+ )
+ for pkgName, symbols := range refs {
+ wg.Add(1)
+ go func(pkgName string, symbols map[string]bool) {
+ defer wg.Done()
+
+ found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols, filename)
+
+ if err != nil {
+ firstErrOnce.Do(func() {
+ firstErr = err
+ cancel()
+ })
+ return
+ }
+
+ if found == nil {
+ return // No matching package.
+ }
+
+ imp := &ImportInfo{
+ ImportPath: found.importPathShort,
+ }
+
+ pkg := &packageInfo{
+ name: pkgName,
+ exports: symbols,
+ }
+ results <- result{imp, pkg}
+ }(pkgName, symbols)
+ }
+ go func() {
+ wg.Wait()
+ close(results)
+ }()
+
+ for result := range results {
+ pass.addCandidate(result.imp, result.pkg)
+ }
+ return firstErr
+}
+
+// notIdentifier reports whether ch is an invalid identifier character.
+func notIdentifier(ch rune) bool {
+ return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' ||
+ '0' <= ch && ch <= '9' ||
+ ch == '_' ||
+ ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch)))
+}
+
+// ImportPathToAssumedName returns the assumed package name of an import path.
+// It does this using only string parsing of the import path.
+// It picks the last element of the path that does not look like a major
+// version, and then picks the valid identifier off the start of that element.
+// It is used to determine if a local rename should be added to an import for
+// clarity.
+// This function could be moved to a standard package and exported if we want
+// for use in other tools.
+func ImportPathToAssumedName(importPath string) string {
+ base := path.Base(importPath)
+ if strings.HasPrefix(base, "v") {
+ if _, err := strconv.Atoi(base[1:]); err == nil {
+ dir := path.Dir(importPath)
+ if dir != "." {
+ base = path.Base(dir)
+ }
+ }
+ }
+ base = strings.TrimPrefix(base, "go-")
+ if i := strings.IndexFunc(base, notIdentifier); i >= 0 {
+ base = base[:i]
+ }
+ return base
+}
+
+// gopathResolver implements resolver for GOPATH workspaces.
+type gopathResolver struct {
+ env *ProcessEnv
+ walked bool
+ cache *dirInfoCache
+ scanSema chan struct{} // scanSema prevents concurrent scans.
+}
+
+func newGopathResolver(env *ProcessEnv) *gopathResolver {
+ r := &gopathResolver{
+ env: env,
+ cache: &dirInfoCache{
+ dirs: map[string]*directoryPackageInfo{},
+ listeners: map[*int]cacheListener{},
+ },
+ scanSema: make(chan struct{}, 1),
+ }
+ r.scanSema <- struct{}{}
+ return r
+}
+
+func (r *gopathResolver) ClearForNewScan() {
+ <-r.scanSema
+ r.cache = &dirInfoCache{
+ dirs: map[string]*directoryPackageInfo{},
+ listeners: map[*int]cacheListener{},
+ }
+ r.walked = false
+ r.scanSema <- struct{}{}
+}
+
+func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) {
+ names := map[string]string{}
+ bctx, err := r.env.buildContext()
+ if err != nil {
+ return nil, err
+ }
+ for _, path := range importPaths {
+ names[path] = importPathToName(bctx, path, srcDir)
+ }
+ return names, nil
+}
+
+// importPathToName finds out the actual package name, as declared in its .go files.
+func importPathToName(bctx *build.Context, importPath, srcDir string) string {
+ // Fast path for standard library without going to disk.
+ if _, ok := stdlib[importPath]; ok {
+ return path.Base(importPath) // stdlib packages always match their paths.
+ }
+
+ buildPkg, err := bctx.Import(importPath, srcDir, build.FindOnly)
+ if err != nil {
+ return ""
+ }
+ pkgName, err := packageDirToName(buildPkg.Dir)
+ if err != nil {
+ return ""
+ }
+ return pkgName
+}
+
+// packageDirToName is a faster version of build.Import if
+// the only thing desired is the package name. Given a directory,
+// packageDirToName then only parses one file in the package,
+// trusting that the files in the directory are consistent.
+func packageDirToName(dir string) (packageName string, err error) {
+ d, err := os.Open(dir)
+ if err != nil {
+ return "", err
+ }
+ names, err := d.Readdirnames(-1)
+ d.Close()
+ if err != nil {
+ return "", err
+ }
+ sort.Strings(names) // to have predictable behavior
+ var lastErr error
+ var nfile int
+ for _, name := range names {
+ if !strings.HasSuffix(name, ".go") {
+ continue
+ }
+ if strings.HasSuffix(name, "_test.go") {
+ continue
+ }
+ nfile++
+ fullFile := filepath.Join(dir, name)
+
+ fset := token.NewFileSet()
+ f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly)
+ if err != nil {
+ lastErr = err
+ continue
+ }
+ pkgName := f.Name.Name
+ if pkgName == "documentation" {
+ // Special case from go/build.ImportDir, not
+ // handled by ctx.MatchFile.
+ continue
+ }
+ if pkgName == "main" {
+ // Also skip package main, assuming it's a +build ignore generator or example.
+ // Since you can't import a package main anyway, there's no harm here.
+ continue
+ }
+ return pkgName, nil
+ }
+ if lastErr != nil {
+ return "", lastErr
+ }
+ return "", fmt.Errorf("no importable package found in %d Go files", nfile)
+}
+
+type pkg struct {
+ dir string // absolute file path to pkg directory ("/usr/lib/go/src/net/http")
+ importPathShort string // vendorless import path ("net/http", "a/b")
+ packageName string // package name loaded from source if requested
+ relevance float64 // a weakly-defined score of how relevant a package is. 0 is most relevant.
+}
+
+type pkgDistance struct {
+ pkg *pkg
+ distance int // relative distance to target
+}
+
+// byDistanceOrImportPathShortLength sorts by relative distance breaking ties
+// on the short import path length and then the import string itself.
+type byDistanceOrImportPathShortLength []pkgDistance
+
+func (s byDistanceOrImportPathShortLength) Len() int { return len(s) }
+func (s byDistanceOrImportPathShortLength) Less(i, j int) bool {
+ di, dj := s[i].distance, s[j].distance
+ if di == -1 {
+ return false
+ }
+ if dj == -1 {
+ return true
+ }
+ if di != dj {
+ return di < dj
+ }
+
+ vi, vj := s[i].pkg.importPathShort, s[j].pkg.importPathShort
+ if len(vi) != len(vj) {
+ return len(vi) < len(vj)
+ }
+ return vi < vj
+}
+func (s byDistanceOrImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+func distance(basepath, targetpath string) int {
+ p, err := filepath.Rel(basepath, targetpath)
+ if err != nil {
+ return -1
+ }
+ if p == "." {
+ return 0
+ }
+ return strings.Count(p, string(filepath.Separator)) + 1
+}
+
+func (r *gopathResolver) scan(ctx context.Context, callback *scanCallback) error {
+ add := func(root gopathwalk.Root, dir string) {
+ // We assume cached directories have not changed. We can skip them and their
+ // children.
+ if _, ok := r.cache.Load(dir); ok {
+ return
+ }
+
+ importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):])
+ info := directoryPackageInfo{
+ status: directoryScanned,
+ dir: dir,
+ rootType: root.Type,
+ nonCanonicalImportPath: VendorlessPath(importpath),
+ }
+ r.cache.Store(dir, info)
+ }
+ processDir := func(info directoryPackageInfo) {
+ // Skip this directory if we were not able to get the package information successfully.
+ if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
+ return
+ }
+
+ p := &pkg{
+ importPathShort: info.nonCanonicalImportPath,
+ dir: info.dir,
+ relevance: MaxRelevance - 1,
+ }
+ if info.rootType == gopathwalk.RootGOROOT {
+ p.relevance = MaxRelevance
+ }
+
+ if !callback.dirFound(p) {
+ return
+ }
+ var err error
+ p.packageName, err = r.cache.CachePackageName(info)
+ if err != nil {
+ return
+ }
+
+ if !callback.packageNameLoaded(p) {
+ return
+ }
+ if _, exports, err := r.loadExports(ctx, p, false); err == nil {
+ callback.exportsLoaded(p, exports)
+ }
+ }
+ stop := r.cache.ScanAndListen(ctx, processDir)
+ defer stop()
+
+ goenv, err := r.env.goEnv()
+ if err != nil {
+ return err
+ }
+ var roots []gopathwalk.Root
+ roots = append(roots, gopathwalk.Root{Path: filepath.Join(goenv["GOROOT"], "src"), Type: gopathwalk.RootGOROOT})
+ for _, p := range filepath.SplitList(goenv["GOPATH"]) {
+ roots = append(roots, gopathwalk.Root{Path: filepath.Join(p, "src"), Type: gopathwalk.RootGOPATH})
+ }
+ // The callback is not necessarily safe to use in the goroutine below. Process roots eagerly.
+ roots = filterRoots(roots, callback.rootFound)
+ // We can't cancel walks, because we need them to finish to have a usable
+ // cache. Instead, run them in a separate goroutine and detach.
+ scanDone := make(chan struct{})
+ go func() {
+ select {
+ case <-ctx.Done():
+ return
+ case <-r.scanSema:
+ }
+ defer func() { r.scanSema <- struct{}{} }()
+ gopathwalk.Walk(roots, add, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: false})
+ close(scanDone)
+ }()
+ select {
+ case <-ctx.Done():
+ case <-scanDone:
+ }
+ return nil
+}
+
+func (r *gopathResolver) scoreImportPath(ctx context.Context, path string) float64 {
+ if _, ok := stdlib[path]; ok {
+ return MaxRelevance
+ }
+ return MaxRelevance - 1
+}
+
+func filterRoots(roots []gopathwalk.Root, include func(gopathwalk.Root) bool) []gopathwalk.Root {
+ var result []gopathwalk.Root
+ for _, root := range roots {
+ if !include(root) {
+ continue
+ }
+ result = append(result, root)
+ }
+ return result
+}
+
+func (r *gopathResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) {
+ if info, ok := r.cache.Load(pkg.dir); ok && !includeTest {
+ return r.cache.CacheExports(ctx, r.env, info)
+ }
+ return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest)
+}
+
+// VendorlessPath returns the devendorized version of the import path ipath.
+// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
+func VendorlessPath(ipath string) string {
+ // Devendorize for use in import statement.
+ if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 {
+ return ipath[i+len("/vendor/"):]
+ }
+ if strings.HasPrefix(ipath, "vendor/") {
+ return ipath[len("vendor/"):]
+ }
+ return ipath
+}
+
+func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, includeTest bool) (string, []string, error) {
+ // Look for non-test, buildable .go files which could provide exports.
+ all, err := os.ReadDir(dir)
+ if err != nil {
+ return "", nil, err
+ }
+ var files []fs.DirEntry
+ for _, fi := range all {
+ name := fi.Name()
+ if !strings.HasSuffix(name, ".go") || (!includeTest && strings.HasSuffix(name, "_test.go")) {
+ continue
+ }
+ match, err := env.matchFile(dir, fi.Name())
+ if err != nil || !match {
+ continue
+ }
+ files = append(files, fi)
+ }
+
+ if len(files) == 0 {
+ return "", nil, fmt.Errorf("dir %v contains no buildable, non-test .go files", dir)
+ }
+
+ var pkgName string
+ var exports []string
+ fset := token.NewFileSet()
+ for _, fi := range files {
+ select {
+ case <-ctx.Done():
+ return "", nil, ctx.Err()
+ default:
+ }
+
+ fullFile := filepath.Join(dir, fi.Name())
+ f, err := parser.ParseFile(fset, fullFile, nil, 0)
+ if err != nil {
+ if env.Logf != nil {
+ env.Logf("error parsing %v: %v", fullFile, err)
+ }
+ continue
+ }
+ if f.Name.Name == "documentation" {
+ // Special case from go/build.ImportDir, not
+ // handled by MatchFile above.
+ continue
+ }
+ if includeTest && strings.HasSuffix(f.Name.Name, "_test") {
+ // x_test package. We want internal test files only.
+ continue
+ }
+ pkgName = f.Name.Name
+ for name := range f.Scope.Objects {
+ if ast.IsExported(name) {
+ exports = append(exports, name)
+ }
+ }
+ }
+
+ if env.Logf != nil {
+ sortedExports := append([]string(nil), exports...)
+ sort.Strings(sortedExports)
+ env.Logf("loaded exports in dir %v (package %v): %v", dir, pkgName, strings.Join(sortedExports, ", "))
+ }
+ return pkgName, exports, nil
+}
+
+// findImport searches for a package with the given symbols.
+// If no package is found, findImport returns ("", false, nil)
+func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool, filename string) (*pkg, error) {
+ // Sort the candidates by their import package length,
+ // assuming that shorter package names are better than long
+ // ones. Note that this sorts by the de-vendored name, so
+ // there's no "penalty" for vendoring.
+ sort.Sort(byDistanceOrImportPathShortLength(candidates))
+ if pass.env.Logf != nil {
+ for i, c := range candidates {
+ pass.env.Logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir)
+ }
+ }
+ resolver, err := pass.env.GetResolver()
+ if err != nil {
+ return nil, err
+ }
+
+ // Collect exports for packages with matching names.
+ rescv := make([]chan *pkg, len(candidates))
+ for i := range candidates {
+ rescv[i] = make(chan *pkg, 1)
+ }
+ const maxConcurrentPackageImport = 4
+ loadExportsSem := make(chan struct{}, maxConcurrentPackageImport)
+
+ ctx, cancel := context.WithCancel(ctx)
+ var wg sync.WaitGroup
+ defer func() {
+ cancel()
+ wg.Wait()
+ }()
+
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for i, c := range candidates {
+ select {
+ case loadExportsSem <- struct{}{}:
+ case <-ctx.Done():
+ return
+ }
+
+ wg.Add(1)
+ go func(c pkgDistance, resc chan<- *pkg) {
+ defer func() {
+ <-loadExportsSem
+ wg.Done()
+ }()
+
+ if pass.env.Logf != nil {
+ pass.env.Logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName)
+ }
+ // If we're an x_test, load the package under test's test variant.
+ includeTest := strings.HasSuffix(pass.f.Name.Name, "_test") && c.pkg.dir == pass.srcDir
+ _, exports, err := resolver.loadExports(ctx, c.pkg, includeTest)
+ if err != nil {
+ if pass.env.Logf != nil {
+ pass.env.Logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err)
+ }
+ resc <- nil
+ return
+ }
+
+ exportsMap := make(map[string]bool, len(exports))
+ for _, sym := range exports {
+ exportsMap[sym] = true
+ }
+
+ // If it doesn't have the right
+ // symbols, send nil to mean no match.
+ for symbol := range symbols {
+ if !exportsMap[symbol] {
+ resc <- nil
+ return
+ }
+ }
+ resc <- c.pkg
+ }(c, rescv[i])
+ }
+ }()
+
+ for _, resc := range rescv {
+ pkg := <-resc
+ if pkg == nil {
+ continue
+ }
+ return pkg, nil
+ }
+ return nil, nil
+}
+
+// pkgIsCandidate reports whether pkg is a candidate for satisfying the
+// finding which package pkgIdent in the file named by filename is trying
+// to refer to.
+//
+// This check is purely lexical and is meant to be as fast as possible
+// because it's run over all $GOPATH directories to filter out poor
+// candidates in order to limit the CPU and I/O later parsing the
+// exports in candidate packages.
+//
+// filename is the file being formatted.
+// pkgIdent is the package being searched for, like "client" (if
+// searching for "client.New")
+func pkgIsCandidate(filename string, refs references, pkg *pkg) bool {
+ // Check "internal" and "vendor" visibility:
+ if !canUse(filename, pkg.dir) {
+ return false
+ }
+
+ // Speed optimization to minimize disk I/O:
+ // the last two components on disk must contain the
+ // package name somewhere.
+ //
+ // This permits mismatch naming like directory
+ // "go-foo" being package "foo", or "pkg.v3" being "pkg",
+ // or directory "google.golang.org/api/cloudbilling/v1"
+ // being package "cloudbilling", but doesn't
+ // permit a directory "foo" to be package
+ // "bar", which is strongly discouraged
+ // anyway. There's no reason goimports needs
+ // to be slow just to accommodate that.
+ for pkgIdent := range refs {
+ lastTwo := lastTwoComponents(pkg.importPathShort)
+ if strings.Contains(lastTwo, pkgIdent) {
+ return true
+ }
+ if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) {
+ lastTwo = lowerASCIIAndRemoveHyphen(lastTwo)
+ if strings.Contains(lastTwo, pkgIdent) {
+ return true
+ }
+ }
+ }
+ return false
+}
+
+func hasHyphenOrUpperASCII(s string) bool {
+ for i := 0; i < len(s); i++ {
+ b := s[i]
+ if b == '-' || ('A' <= b && b <= 'Z') {
+ return true
+ }
+ }
+ return false
+}
+
+func lowerASCIIAndRemoveHyphen(s string) (ret string) {
+ buf := make([]byte, 0, len(s))
+ for i := 0; i < len(s); i++ {
+ b := s[i]
+ switch {
+ case b == '-':
+ continue
+ case 'A' <= b && b <= 'Z':
+ buf = append(buf, b+('a'-'A'))
+ default:
+ buf = append(buf, b)
+ }
+ }
+ return string(buf)
+}
+
+// canUse reports whether the package in dir is usable from filename,
+// respecting the Go "internal" and "vendor" visibility rules.
+func canUse(filename, dir string) bool {
+ // Fast path check, before any allocations. If it doesn't contain vendor
+ // or internal, it's not tricky:
+ // Note that this can false-negative on directories like "notinternal",
+ // but we check it correctly below. This is just a fast path.
+ if !strings.Contains(dir, "vendor") && !strings.Contains(dir, "internal") {
+ return true
+ }
+
+ dirSlash := filepath.ToSlash(dir)
+ if !strings.Contains(dirSlash, "/vendor/") && !strings.Contains(dirSlash, "/internal/") && !strings.HasSuffix(dirSlash, "/internal") {
+ return true
+ }
+ // Vendor or internal directory only visible from children of parent.
+ // That means the path from the current directory to the target directory
+ // can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal
+ // or bar/vendor or bar/internal.
+ // After stripping all the leading ../, the only okay place to see vendor or internal
+ // is at the very beginning of the path.
+ absfile, err := filepath.Abs(filename)
+ if err != nil {
+ return false
+ }
+ absdir, err := filepath.Abs(dir)
+ if err != nil {
+ return false
+ }
+ rel, err := filepath.Rel(absfile, absdir)
+ if err != nil {
+ return false
+ }
+ relSlash := filepath.ToSlash(rel)
+ if i := strings.LastIndex(relSlash, "../"); i >= 0 {
+ relSlash = relSlash[i+len("../"):]
+ }
+ return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal")
+}
+
+// lastTwoComponents returns at most the last two path components
+// of v, using either / or \ as the path separator.
+func lastTwoComponents(v string) string {
+ nslash := 0
+ for i := len(v) - 1; i >= 0; i-- {
+ if v[i] == '/' || v[i] == '\\' {
+ nslash++
+ if nslash == 2 {
+ return v[i:]
+ }
+ }
+ }
+ return v
+}
+
+type visitFn func(node ast.Node) ast.Visitor
+
+func (fn visitFn) Visit(node ast.Node) ast.Visitor {
+ return fn(node)
+}
+
+func copyExports(pkg []string) map[string]bool {
+ m := make(map[string]bool, len(pkg))
+ for _, v := range pkg {
+ m[v] = true
+ }
+ return m
+}
diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go
new file mode 100644
index 000000000..58e637b90
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/imports.go
@@ -0,0 +1,356 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run mkstdlib.go
+
+// Package imports implements a Go pretty-printer (like package "go/format")
+// that also adds or removes import statements as necessary.
+package imports
+
+import (
+ "bufio"
+ "bytes"
+ "context"
+ "fmt"
+ "go/ast"
+ "go/format"
+ "go/parser"
+ "go/printer"
+ "go/token"
+ "io"
+ "regexp"
+ "strconv"
+ "strings"
+
+ "golang.org/x/tools/go/ast/astutil"
+ "golang.org/x/tools/internal/event"
+)
+
+// Options is golang.org/x/tools/imports.Options with extra internal-only options.
+type Options struct {
+ Env *ProcessEnv // The environment to use. Note: this contains the cached module and filesystem state.
+
+ // LocalPrefix is a comma-separated string of import path prefixes, which, if
+ // set, instructs Process to sort the import paths with the given prefixes
+ // into another group after 3rd-party packages.
+ LocalPrefix string
+
+ Fragment bool // Accept fragment of a source file (no package statement)
+ AllErrors bool // Report all errors (not just the first 10 on different lines)
+
+ Comments bool // Print comments (true if nil *Options provided)
+ TabIndent bool // Use tabs for indent (true if nil *Options provided)
+ TabWidth int // Tab width (8 if nil *Options provided)
+
+ FormatOnly bool // Disable the insertion and deletion of imports
+}
+
+// Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env.
+func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) {
+ fileSet := token.NewFileSet()
+ file, adjust, err := parse(fileSet, filename, src, opt)
+ if err != nil {
+ return nil, err
+ }
+
+ if !opt.FormatOnly {
+ if err := fixImports(fileSet, file, filename, opt.Env); err != nil {
+ return nil, err
+ }
+ }
+ return formatFile(fileSet, file, src, adjust, opt)
+}
+
+// FixImports returns a list of fixes to the imports that, when applied,
+// will leave the imports in the same state as Process. src and opt must
+// be specified.
+//
+// Note that filename's directory influences which imports can be chosen,
+// so it is important that filename be accurate.
+func FixImports(ctx context.Context, filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) {
+ ctx, done := event.Start(ctx, "imports.FixImports")
+ defer done()
+
+ fileSet := token.NewFileSet()
+ file, _, err := parse(fileSet, filename, src, opt)
+ if err != nil {
+ return nil, err
+ }
+
+ return getFixes(ctx, fileSet, file, filename, opt.Env)
+}
+
+// ApplyFixes applies all of the fixes to the file and formats it. extraMode
+// is added in when parsing the file. src and opts must be specified, but no
+// env is needed.
+func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) {
+ // Don't use parse() -- we don't care about fragments or statement lists
+ // here, and we need to work with unparseable files.
+ fileSet := token.NewFileSet()
+ parserMode := parser.Mode(0)
+ if opt.Comments {
+ parserMode |= parser.ParseComments
+ }
+ if opt.AllErrors {
+ parserMode |= parser.AllErrors
+ }
+ parserMode |= extraMode
+
+ file, err := parser.ParseFile(fileSet, filename, src, parserMode)
+ if file == nil {
+ return nil, err
+ }
+
+ // Apply the fixes to the file.
+ apply(fileSet, file, fixes)
+
+ return formatFile(fileSet, file, src, nil, opt)
+}
+
+// formatFile formats the file syntax tree.
+// It may mutate the token.FileSet.
+//
+// If an adjust function is provided, it is called after formatting
+// with the original source (formatFile's src parameter) and the
+// formatted file, and returns the postpocessed result.
+func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) {
+ mergeImports(file)
+ sortImports(opt.LocalPrefix, fset.File(file.Pos()), file)
+ var spacesBefore []string // import paths we need spaces before
+ for _, impSection := range astutil.Imports(fset, file) {
+ // Within each block of contiguous imports, see if any
+ // import lines are in different group numbers. If so,
+ // we'll need to put a space between them so it's
+ // compatible with gofmt.
+ lastGroup := -1
+ for _, importSpec := range impSection {
+ importPath, _ := strconv.Unquote(importSpec.Path.Value)
+ groupNum := importGroup(opt.LocalPrefix, importPath)
+ if groupNum != lastGroup && lastGroup != -1 {
+ spacesBefore = append(spacesBefore, importPath)
+ }
+ lastGroup = groupNum
+ }
+
+ }
+
+ printerMode := printer.UseSpaces
+ if opt.TabIndent {
+ printerMode |= printer.TabIndent
+ }
+ printConfig := &printer.Config{Mode: printerMode, Tabwidth: opt.TabWidth}
+
+ var buf bytes.Buffer
+ err := printConfig.Fprint(&buf, fset, file)
+ if err != nil {
+ return nil, err
+ }
+ out := buf.Bytes()
+ if adjust != nil {
+ out = adjust(src, out)
+ }
+ if len(spacesBefore) > 0 {
+ out, err = addImportSpaces(bytes.NewReader(out), spacesBefore)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ out, err = format.Source(out)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// parse parses src, which was read from filename,
+// as a Go source file or statement list.
+func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast.File, func(orig, src []byte) []byte, error) {
+ parserMode := parser.Mode(0)
+ if opt.Comments {
+ parserMode |= parser.ParseComments
+ }
+ if opt.AllErrors {
+ parserMode |= parser.AllErrors
+ }
+
+ // Try as whole source file.
+ file, err := parser.ParseFile(fset, filename, src, parserMode)
+ if err == nil {
+ return file, nil, nil
+ }
+ // If the error is that the source file didn't begin with a
+ // package line and we accept fragmented input, fall through to
+ // try as a source fragment. Stop and return on any other error.
+ if !opt.Fragment || !strings.Contains(err.Error(), "expected 'package'") {
+ return nil, nil, err
+ }
+
+ // If this is a declaration list, make it a source file
+ // by inserting a package clause.
+ // Insert using a ;, not a newline, so that parse errors are on
+ // the correct line.
+ const prefix = "package main;"
+ psrc := append([]byte(prefix), src...)
+ file, err = parser.ParseFile(fset, filename, psrc, parserMode)
+ if err == nil {
+ // Gofmt will turn the ; into a \n.
+ // Do that ourselves now and update the file contents,
+ // so that positions and line numbers are correct going forward.
+ psrc[len(prefix)-1] = '\n'
+ fset.File(file.Package).SetLinesForContent(psrc)
+
+ // If a main function exists, we will assume this is a main
+ // package and leave the file.
+ if containsMainFunc(file) {
+ return file, nil, nil
+ }
+
+ adjust := func(orig, src []byte) []byte {
+ // Remove the package clause.
+ src = src[len(prefix):]
+ return matchSpace(orig, src)
+ }
+ return file, adjust, nil
+ }
+ // If the error is that the source file didn't begin with a
+ // declaration, fall through to try as a statement list.
+ // Stop and return on any other error.
+ if !strings.Contains(err.Error(), "expected declaration") {
+ return nil, nil, err
+ }
+
+ // If this is a statement list, make it a source file
+ // by inserting a package clause and turning the list
+ // into a function body. This handles expressions too.
+ // Insert using a ;, not a newline, so that the line numbers
+ // in fsrc match the ones in src.
+ fsrc := append(append([]byte("package p; func _() {"), src...), '}')
+ file, err = parser.ParseFile(fset, filename, fsrc, parserMode)
+ if err == nil {
+ adjust := func(orig, src []byte) []byte {
+ // Remove the wrapping.
+ // Gofmt has turned the ; into a \n\n.
+ src = src[len("package p\n\nfunc _() {"):]
+ src = src[:len(src)-len("}\n")]
+ // Gofmt has also indented the function body one level.
+ // Remove that indent.
+ src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1)
+ return matchSpace(orig, src)
+ }
+ return file, adjust, nil
+ }
+
+ // Failed, and out of options.
+ return nil, nil, err
+}
+
+// containsMainFunc checks if a file contains a function declaration with the
+// function signature 'func main()'
+func containsMainFunc(file *ast.File) bool {
+ for _, decl := range file.Decls {
+ if f, ok := decl.(*ast.FuncDecl); ok {
+ if f.Name.Name != "main" {
+ continue
+ }
+
+ if len(f.Type.Params.List) != 0 {
+ continue
+ }
+
+ if f.Type.Results != nil && len(f.Type.Results.List) != 0 {
+ continue
+ }
+
+ return true
+ }
+ }
+
+ return false
+}
+
+func cutSpace(b []byte) (before, middle, after []byte) {
+ i := 0
+ for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') {
+ i++
+ }
+ j := len(b)
+ for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') {
+ j--
+ }
+ if i <= j {
+ return b[:i], b[i:j], b[j:]
+ }
+ return nil, nil, b[j:]
+}
+
+// matchSpace reformats src to use the same space context as orig.
+// 1. If orig begins with blank lines, matchSpace inserts them at the beginning of src.
+// 2. matchSpace copies the indentation of the first non-blank line in orig
+// to every non-blank line in src.
+// 3. matchSpace copies the trailing space from orig and uses it in place
+// of src's trailing space.
+func matchSpace(orig []byte, src []byte) []byte {
+ before, _, after := cutSpace(orig)
+ i := bytes.LastIndex(before, []byte{'\n'})
+ before, indent := before[:i+1], before[i+1:]
+
+ _, src, _ = cutSpace(src)
+
+ var b bytes.Buffer
+ b.Write(before)
+ for len(src) > 0 {
+ line := src
+ if i := bytes.IndexByte(line, '\n'); i >= 0 {
+ line, src = line[:i+1], line[i+1:]
+ } else {
+ src = nil
+ }
+ if len(line) > 0 && line[0] != '\n' { // not blank
+ b.Write(indent)
+ }
+ b.Write(line)
+ }
+ b.Write(after)
+ return b.Bytes()
+}
+
+var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`)
+
+func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) {
+ var out bytes.Buffer
+ in := bufio.NewReader(r)
+ inImports := false
+ done := false
+ for {
+ s, err := in.ReadString('\n')
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return nil, err
+ }
+
+ if !inImports && !done && strings.HasPrefix(s, "import") {
+ inImports = true
+ }
+ if inImports && (strings.HasPrefix(s, "var") ||
+ strings.HasPrefix(s, "func") ||
+ strings.HasPrefix(s, "const") ||
+ strings.HasPrefix(s, "type")) {
+ done = true
+ inImports = false
+ }
+ if inImports && len(breaks) > 0 {
+ if m := impLine.FindStringSubmatch(s); m != nil {
+ if m[1] == breaks[0] {
+ out.WriteByte('\n')
+ breaks = breaks[1:]
+ }
+ }
+ }
+
+ fmt.Fprint(&out, s)
+ }
+ return out.Bytes(), nil
+}
diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go
new file mode 100644
index 000000000..5f4d435d3
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/mod.go
@@ -0,0 +1,723 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package imports
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "os"
+ "path"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+
+ "golang.org/x/mod/module"
+ "golang.org/x/tools/internal/event"
+ "golang.org/x/tools/internal/gocommand"
+ "golang.org/x/tools/internal/gopathwalk"
+)
+
+// ModuleResolver implements resolver for modules using the go command as little
+// as feasible.
+type ModuleResolver struct {
+ env *ProcessEnv
+ moduleCacheDir string
+ dummyVendorMod *gocommand.ModuleJSON // If vendoring is enabled, the pseudo-module that represents the /vendor directory.
+ roots []gopathwalk.Root
+ scanSema chan struct{} // scanSema prevents concurrent scans and guards scannedRoots.
+ scannedRoots map[gopathwalk.Root]bool
+
+ initialized bool
+ mains []*gocommand.ModuleJSON
+ mainByDir map[string]*gocommand.ModuleJSON
+ modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path...
+ modsByDir []*gocommand.ModuleJSON // ...or number of path components in their Dir.
+
+ // moduleCacheCache stores information about the module cache.
+ moduleCacheCache *dirInfoCache
+ otherCache *dirInfoCache
+}
+
+func newModuleResolver(e *ProcessEnv) *ModuleResolver {
+ r := &ModuleResolver{
+ env: e,
+ scanSema: make(chan struct{}, 1),
+ }
+ r.scanSema <- struct{}{}
+ return r
+}
+
+func (r *ModuleResolver) init() error {
+ if r.initialized {
+ return nil
+ }
+
+ goenv, err := r.env.goEnv()
+ if err != nil {
+ return err
+ }
+ inv := gocommand.Invocation{
+ BuildFlags: r.env.BuildFlags,
+ ModFlag: r.env.ModFlag,
+ ModFile: r.env.ModFile,
+ Env: r.env.env(),
+ Logf: r.env.Logf,
+ WorkingDir: r.env.WorkingDir,
+ }
+
+ vendorEnabled := false
+ var mainModVendor *gocommand.ModuleJSON
+
+ // Module vendor directories are ignored in workspace mode:
+ // https://go.googlesource.com/proposal/+/master/design/45713-workspace.md
+ if len(r.env.Env["GOWORK"]) == 0 {
+ vendorEnabled, mainModVendor, err = gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner)
+ if err != nil {
+ return err
+ }
+ }
+
+ if mainModVendor != nil && vendorEnabled {
+ // Vendor mode is on, so all the non-Main modules are irrelevant,
+ // and we need to search /vendor for everything.
+ r.mains = []*gocommand.ModuleJSON{mainModVendor}
+ r.dummyVendorMod = &gocommand.ModuleJSON{
+ Path: "",
+ Dir: filepath.Join(mainModVendor.Dir, "vendor"),
+ }
+ r.modsByModPath = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod}
+ r.modsByDir = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod}
+ } else {
+ // Vendor mode is off, so run go list -m ... to find everything.
+ err := r.initAllMods()
+ // We expect an error when running outside of a module with
+ // GO111MODULE=on. Other errors are fatal.
+ if err != nil {
+ if errMsg := err.Error(); !strings.Contains(errMsg, "working directory is not part of a module") && !strings.Contains(errMsg, "go.mod file not found") {
+ return err
+ }
+ }
+ }
+
+ if gmc := r.env.Env["GOMODCACHE"]; gmc != "" {
+ r.moduleCacheDir = gmc
+ } else {
+ gopaths := filepath.SplitList(goenv["GOPATH"])
+ if len(gopaths) == 0 {
+ return fmt.Errorf("empty GOPATH")
+ }
+ r.moduleCacheDir = filepath.Join(gopaths[0], "/pkg/mod")
+ }
+
+ sort.Slice(r.modsByModPath, func(i, j int) bool {
+ count := func(x int) int {
+ return strings.Count(r.modsByModPath[x].Path, "/")
+ }
+ return count(j) < count(i) // descending order
+ })
+ sort.Slice(r.modsByDir, func(i, j int) bool {
+ count := func(x int) int {
+ return strings.Count(r.modsByDir[x].Dir, string(filepath.Separator))
+ }
+ return count(j) < count(i) // descending order
+ })
+
+ r.roots = []gopathwalk.Root{
+ {Path: filepath.Join(goenv["GOROOT"], "/src"), Type: gopathwalk.RootGOROOT},
+ }
+ r.mainByDir = make(map[string]*gocommand.ModuleJSON)
+ for _, main := range r.mains {
+ r.roots = append(r.roots, gopathwalk.Root{Path: main.Dir, Type: gopathwalk.RootCurrentModule})
+ r.mainByDir[main.Dir] = main
+ }
+ if vendorEnabled {
+ r.roots = append(r.roots, gopathwalk.Root{Path: r.dummyVendorMod.Dir, Type: gopathwalk.RootOther})
+ } else {
+ addDep := func(mod *gocommand.ModuleJSON) {
+ if mod.Replace == nil {
+ // This is redundant with the cache, but we'll skip it cheaply enough.
+ r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootModuleCache})
+ } else {
+ r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootOther})
+ }
+ }
+ // Walk dependent modules before scanning the full mod cache, direct deps first.
+ for _, mod := range r.modsByModPath {
+ if !mod.Indirect && !mod.Main {
+ addDep(mod)
+ }
+ }
+ for _, mod := range r.modsByModPath {
+ if mod.Indirect && !mod.Main {
+ addDep(mod)
+ }
+ }
+ r.roots = append(r.roots, gopathwalk.Root{Path: r.moduleCacheDir, Type: gopathwalk.RootModuleCache})
+ }
+
+ r.scannedRoots = map[gopathwalk.Root]bool{}
+ if r.moduleCacheCache == nil {
+ r.moduleCacheCache = &dirInfoCache{
+ dirs: map[string]*directoryPackageInfo{},
+ listeners: map[*int]cacheListener{},
+ }
+ }
+ if r.otherCache == nil {
+ r.otherCache = &dirInfoCache{
+ dirs: map[string]*directoryPackageInfo{},
+ listeners: map[*int]cacheListener{},
+ }
+ }
+ r.initialized = true
+ return nil
+}
+
+func (r *ModuleResolver) initAllMods() error {
+ stdout, err := r.env.invokeGo(context.TODO(), "list", "-m", "-e", "-json", "...")
+ if err != nil {
+ return err
+ }
+ for dec := json.NewDecoder(stdout); dec.More(); {
+ mod := &gocommand.ModuleJSON{}
+ if err := dec.Decode(mod); err != nil {
+ return err
+ }
+ if mod.Dir == "" {
+ if r.env.Logf != nil {
+ r.env.Logf("module %v has not been downloaded and will be ignored", mod.Path)
+ }
+ // Can't do anything with a module that's not downloaded.
+ continue
+ }
+ // golang/go#36193: the go command doesn't always clean paths.
+ mod.Dir = filepath.Clean(mod.Dir)
+ r.modsByModPath = append(r.modsByModPath, mod)
+ r.modsByDir = append(r.modsByDir, mod)
+ if mod.Main {
+ r.mains = append(r.mains, mod)
+ }
+ }
+ return nil
+}
+
+func (r *ModuleResolver) ClearForNewScan() {
+ <-r.scanSema
+ r.scannedRoots = map[gopathwalk.Root]bool{}
+ r.otherCache = &dirInfoCache{
+ dirs: map[string]*directoryPackageInfo{},
+ listeners: map[*int]cacheListener{},
+ }
+ r.scanSema <- struct{}{}
+}
+
+func (r *ModuleResolver) ClearForNewMod() {
+ <-r.scanSema
+ *r = ModuleResolver{
+ env: r.env,
+ moduleCacheCache: r.moduleCacheCache,
+ otherCache: r.otherCache,
+ scanSema: r.scanSema,
+ }
+ r.init()
+ r.scanSema <- struct{}{}
+}
+
+// findPackage returns the module and directory that contains the package at
+// the given import path, or returns nil, "" if no module is in scope.
+func (r *ModuleResolver) findPackage(importPath string) (*gocommand.ModuleJSON, string) {
+ // This can't find packages in the stdlib, but that's harmless for all
+ // the existing code paths.
+ for _, m := range r.modsByModPath {
+ if !strings.HasPrefix(importPath, m.Path) {
+ continue
+ }
+ pathInModule := importPath[len(m.Path):]
+ pkgDir := filepath.Join(m.Dir, pathInModule)
+ if r.dirIsNestedModule(pkgDir, m) {
+ continue
+ }
+
+ if info, ok := r.cacheLoad(pkgDir); ok {
+ if loaded, err := info.reachedStatus(nameLoaded); loaded {
+ if err != nil {
+ continue // No package in this dir.
+ }
+ return m, pkgDir
+ }
+ if scanned, err := info.reachedStatus(directoryScanned); scanned && err != nil {
+ continue // Dir is unreadable, etc.
+ }
+ // This is slightly wrong: a directory doesn't have to have an
+ // importable package to count as a package for package-to-module
+ // resolution. package main or _test files should count but
+ // don't.
+ // TODO(heschi): fix this.
+ if _, err := r.cachePackageName(info); err == nil {
+ return m, pkgDir
+ }
+ }
+
+ // Not cached. Read the filesystem.
+ pkgFiles, err := os.ReadDir(pkgDir)
+ if err != nil {
+ continue
+ }
+ // A module only contains a package if it has buildable go
+ // files in that directory. If not, it could be provided by an
+ // outer module. See #29736.
+ for _, fi := range pkgFiles {
+ if ok, _ := r.env.matchFile(pkgDir, fi.Name()); ok {
+ return m, pkgDir
+ }
+ }
+ }
+ return nil, ""
+}
+
+func (r *ModuleResolver) cacheLoad(dir string) (directoryPackageInfo, bool) {
+ if info, ok := r.moduleCacheCache.Load(dir); ok {
+ return info, ok
+ }
+ return r.otherCache.Load(dir)
+}
+
+func (r *ModuleResolver) cacheStore(info directoryPackageInfo) {
+ if info.rootType == gopathwalk.RootModuleCache {
+ r.moduleCacheCache.Store(info.dir, info)
+ } else {
+ r.otherCache.Store(info.dir, info)
+ }
+}
+
+func (r *ModuleResolver) cacheKeys() []string {
+ return append(r.moduleCacheCache.Keys(), r.otherCache.Keys()...)
+}
+
+// cachePackageName caches the package name for a dir already in the cache.
+func (r *ModuleResolver) cachePackageName(info directoryPackageInfo) (string, error) {
+ if info.rootType == gopathwalk.RootModuleCache {
+ return r.moduleCacheCache.CachePackageName(info)
+ }
+ return r.otherCache.CachePackageName(info)
+}
+
+func (r *ModuleResolver) cacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) {
+ if info.rootType == gopathwalk.RootModuleCache {
+ return r.moduleCacheCache.CacheExports(ctx, env, info)
+ }
+ return r.otherCache.CacheExports(ctx, env, info)
+}
+
+// findModuleByDir returns the module that contains dir, or nil if no such
+// module is in scope.
+func (r *ModuleResolver) findModuleByDir(dir string) *gocommand.ModuleJSON {
+ // This is quite tricky and may not be correct. dir could be:
+ // - a package in the main module.
+ // - a replace target underneath the main module's directory.
+ // - a nested module in the above.
+ // - a replace target somewhere totally random.
+ // - a nested module in the above.
+ // - in the mod cache.
+ // - in /vendor/ in -mod=vendor mode.
+ // - nested module? Dunno.
+ // Rumor has it that replace targets cannot contain other replace targets.
+ //
+ // Note that it is critical here that modsByDir is sorted to have deeper dirs
+ // first. This ensures that findModuleByDir finds the innermost module.
+ // See also golang/go#56291.
+ for _, m := range r.modsByDir {
+ if !strings.HasPrefix(dir, m.Dir) {
+ continue
+ }
+
+ if r.dirIsNestedModule(dir, m) {
+ continue
+ }
+
+ return m
+ }
+ return nil
+}
+
+// dirIsNestedModule reports if dir is contained in a nested module underneath
+// mod, not actually in mod.
+func (r *ModuleResolver) dirIsNestedModule(dir string, mod *gocommand.ModuleJSON) bool {
+ if !strings.HasPrefix(dir, mod.Dir) {
+ return false
+ }
+ if r.dirInModuleCache(dir) {
+ // Nested modules in the module cache are pruned,
+ // so it cannot be a nested module.
+ return false
+ }
+ if mod != nil && mod == r.dummyVendorMod {
+ // The /vendor pseudomodule is flattened and doesn't actually count.
+ return false
+ }
+ modDir, _ := r.modInfo(dir)
+ if modDir == "" {
+ return false
+ }
+ return modDir != mod.Dir
+}
+
+func (r *ModuleResolver) modInfo(dir string) (modDir string, modName string) {
+ readModName := func(modFile string) string {
+ modBytes, err := os.ReadFile(modFile)
+ if err != nil {
+ return ""
+ }
+ return modulePath(modBytes)
+ }
+
+ if r.dirInModuleCache(dir) {
+ if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 {
+ index := strings.Index(dir, matches[1]+"@"+matches[2])
+ modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2])
+ return modDir, readModName(filepath.Join(modDir, "go.mod"))
+ }
+ }
+ for {
+ if info, ok := r.cacheLoad(dir); ok {
+ return info.moduleDir, info.moduleName
+ }
+ f := filepath.Join(dir, "go.mod")
+ info, err := os.Stat(f)
+ if err == nil && !info.IsDir() {
+ return dir, readModName(f)
+ }
+
+ d := filepath.Dir(dir)
+ if len(d) >= len(dir) {
+ return "", "" // reached top of file system, no go.mod
+ }
+ dir = d
+ }
+}
+
+func (r *ModuleResolver) dirInModuleCache(dir string) bool {
+ if r.moduleCacheDir == "" {
+ return false
+ }
+ return strings.HasPrefix(dir, r.moduleCacheDir)
+}
+
+func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) {
+ if err := r.init(); err != nil {
+ return nil, err
+ }
+ names := map[string]string{}
+ for _, path := range importPaths {
+ _, packageDir := r.findPackage(path)
+ if packageDir == "" {
+ continue
+ }
+ name, err := packageDirToName(packageDir)
+ if err != nil {
+ continue
+ }
+ names[path] = name
+ }
+ return names, nil
+}
+
+func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error {
+ ctx, done := event.Start(ctx, "imports.ModuleResolver.scan")
+ defer done()
+
+ if err := r.init(); err != nil {
+ return err
+ }
+
+ processDir := func(info directoryPackageInfo) {
+ // Skip this directory if we were not able to get the package information successfully.
+ if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
+ return
+ }
+ pkg, err := r.canonicalize(info)
+ if err != nil {
+ return
+ }
+
+ if !callback.dirFound(pkg) {
+ return
+ }
+ pkg.packageName, err = r.cachePackageName(info)
+ if err != nil {
+ return
+ }
+
+ if !callback.packageNameLoaded(pkg) {
+ return
+ }
+ _, exports, err := r.loadExports(ctx, pkg, false)
+ if err != nil {
+ return
+ }
+ callback.exportsLoaded(pkg, exports)
+ }
+
+ // Start processing everything in the cache, and listen for the new stuff
+ // we discover in the walk below.
+ stop1 := r.moduleCacheCache.ScanAndListen(ctx, processDir)
+ defer stop1()
+ stop2 := r.otherCache.ScanAndListen(ctx, processDir)
+ defer stop2()
+
+ // We assume cached directories are fully cached, including all their
+ // children, and have not changed. We can skip them.
+ skip := func(root gopathwalk.Root, dir string) bool {
+ if r.env.SkipPathInScan != nil && root.Type == gopathwalk.RootCurrentModule {
+ if root.Path == dir {
+ return false
+ }
+
+ if r.env.SkipPathInScan(filepath.Clean(dir)) {
+ return true
+ }
+ }
+
+ info, ok := r.cacheLoad(dir)
+ if !ok {
+ return false
+ }
+ // This directory can be skipped as long as we have already scanned it.
+ // Packages with errors will continue to have errors, so there is no need
+ // to rescan them.
+ packageScanned, _ := info.reachedStatus(directoryScanned)
+ return packageScanned
+ }
+
+ // Add anything new to the cache, and process it if we're still listening.
+ add := func(root gopathwalk.Root, dir string) {
+ r.cacheStore(r.scanDirForPackage(root, dir))
+ }
+
+ // r.roots and the callback are not necessarily safe to use in the
+ // goroutine below. Process them eagerly.
+ roots := filterRoots(r.roots, callback.rootFound)
+ // We can't cancel walks, because we need them to finish to have a usable
+ // cache. Instead, run them in a separate goroutine and detach.
+ scanDone := make(chan struct{})
+ go func() {
+ select {
+ case <-ctx.Done():
+ return
+ case <-r.scanSema:
+ }
+ defer func() { r.scanSema <- struct{}{} }()
+ // We have the lock on r.scannedRoots, and no other scans can run.
+ for _, root := range roots {
+ if ctx.Err() != nil {
+ return
+ }
+
+ if r.scannedRoots[root] {
+ continue
+ }
+ gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: true})
+ r.scannedRoots[root] = true
+ }
+ close(scanDone)
+ }()
+ select {
+ case <-ctx.Done():
+ case <-scanDone:
+ }
+ return nil
+}
+
+func (r *ModuleResolver) scoreImportPath(ctx context.Context, path string) float64 {
+ if _, ok := stdlib[path]; ok {
+ return MaxRelevance
+ }
+ mod, _ := r.findPackage(path)
+ return modRelevance(mod)
+}
+
+func modRelevance(mod *gocommand.ModuleJSON) float64 {
+ var relevance float64
+ switch {
+ case mod == nil: // out of scope
+ return MaxRelevance - 4
+ case mod.Indirect:
+ relevance = MaxRelevance - 3
+ case !mod.Main:
+ relevance = MaxRelevance - 2
+ default:
+ relevance = MaxRelevance - 1 // main module ties with stdlib
+ }
+
+ _, versionString, ok := module.SplitPathVersion(mod.Path)
+ if ok {
+ index := strings.Index(versionString, "v")
+ if index == -1 {
+ return relevance
+ }
+ if versionNumber, err := strconv.ParseFloat(versionString[index+1:], 64); err == nil {
+ relevance += versionNumber / 1000
+ }
+ }
+
+ return relevance
+}
+
+// canonicalize gets the result of canonicalizing the packages using the results
+// of initializing the resolver from 'go list -m'.
+func (r *ModuleResolver) canonicalize(info directoryPackageInfo) (*pkg, error) {
+ // Packages in GOROOT are already canonical, regardless of the std/cmd modules.
+ if info.rootType == gopathwalk.RootGOROOT {
+ return &pkg{
+ importPathShort: info.nonCanonicalImportPath,
+ dir: info.dir,
+ packageName: path.Base(info.nonCanonicalImportPath),
+ relevance: MaxRelevance,
+ }, nil
+ }
+
+ importPath := info.nonCanonicalImportPath
+ mod := r.findModuleByDir(info.dir)
+ // Check if the directory is underneath a module that's in scope.
+ if mod != nil {
+ // It is. If dir is the target of a replace directive,
+ // our guessed import path is wrong. Use the real one.
+ if mod.Dir == info.dir {
+ importPath = mod.Path
+ } else {
+ dirInMod := info.dir[len(mod.Dir)+len("/"):]
+ importPath = path.Join(mod.Path, filepath.ToSlash(dirInMod))
+ }
+ } else if !strings.HasPrefix(importPath, info.moduleName) {
+ // The module's name doesn't match the package's import path. It
+ // probably needs a replace directive we don't have.
+ return nil, fmt.Errorf("package in %q is not valid without a replace statement", info.dir)
+ }
+
+ res := &pkg{
+ importPathShort: importPath,
+ dir: info.dir,
+ relevance: modRelevance(mod),
+ }
+ // We may have discovered a package that has a different version
+ // in scope already. Canonicalize to that one if possible.
+ if _, canonicalDir := r.findPackage(importPath); canonicalDir != "" {
+ res.dir = canonicalDir
+ }
+ return res, nil
+}
+
+func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) {
+ if err := r.init(); err != nil {
+ return "", nil, err
+ }
+ if info, ok := r.cacheLoad(pkg.dir); ok && !includeTest {
+ return r.cacheExports(ctx, r.env, info)
+ }
+ return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest)
+}
+
+func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) directoryPackageInfo {
+ subdir := ""
+ if dir != root.Path {
+ subdir = dir[len(root.Path)+len("/"):]
+ }
+ importPath := filepath.ToSlash(subdir)
+ if strings.HasPrefix(importPath, "vendor/") {
+ // Only enter vendor directories if they're explicitly requested as a root.
+ return directoryPackageInfo{
+ status: directoryScanned,
+ err: fmt.Errorf("unwanted vendor directory"),
+ }
+ }
+ switch root.Type {
+ case gopathwalk.RootCurrentModule:
+ importPath = path.Join(r.mainByDir[root.Path].Path, filepath.ToSlash(subdir))
+ case gopathwalk.RootModuleCache:
+ matches := modCacheRegexp.FindStringSubmatch(subdir)
+ if len(matches) == 0 {
+ return directoryPackageInfo{
+ status: directoryScanned,
+ err: fmt.Errorf("invalid module cache path: %v", subdir),
+ }
+ }
+ modPath, err := module.UnescapePath(filepath.ToSlash(matches[1]))
+ if err != nil {
+ if r.env.Logf != nil {
+ r.env.Logf("decoding module cache path %q: %v", subdir, err)
+ }
+ return directoryPackageInfo{
+ status: directoryScanned,
+ err: fmt.Errorf("decoding module cache path %q: %v", subdir, err),
+ }
+ }
+ importPath = path.Join(modPath, filepath.ToSlash(matches[3]))
+ }
+
+ modDir, modName := r.modInfo(dir)
+ result := directoryPackageInfo{
+ status: directoryScanned,
+ dir: dir,
+ rootType: root.Type,
+ nonCanonicalImportPath: importPath,
+ moduleDir: modDir,
+ moduleName: modName,
+ }
+ if root.Type == gopathwalk.RootGOROOT {
+ // stdlib packages are always in scope, despite the confusing go.mod
+ return result
+ }
+ return result
+}
+
+// modCacheRegexp splits a path in a module cache into module, module version, and package.
+var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`)
+
+var (
+ slashSlash = []byte("//")
+ moduleStr = []byte("module")
+)
+
+// modulePath returns the module path from the gomod file text.
+// If it cannot find a module path, it returns an empty string.
+// It is tolerant of unrelated problems in the go.mod file.
+//
+// Copied from cmd/go/internal/modfile.
+func modulePath(mod []byte) string {
+ for len(mod) > 0 {
+ line := mod
+ mod = nil
+ if i := bytes.IndexByte(line, '\n'); i >= 0 {
+ line, mod = line[:i], line[i+1:]
+ }
+ if i := bytes.Index(line, slashSlash); i >= 0 {
+ line = line[:i]
+ }
+ line = bytes.TrimSpace(line)
+ if !bytes.HasPrefix(line, moduleStr) {
+ continue
+ }
+ line = line[len(moduleStr):]
+ n := len(line)
+ line = bytes.TrimSpace(line)
+ if len(line) == n || len(line) == 0 {
+ continue
+ }
+
+ if line[0] == '"' || line[0] == '`' {
+ p, err := strconv.Unquote(string(line))
+ if err != nil {
+ return "" // malformed quoted string or multiline module path
+ }
+ return p
+ }
+
+ return string(line)
+ }
+ return "" // missing module path
+}
diff --git a/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/vendor/golang.org/x/tools/internal/imports/mod_cache.go
new file mode 100644
index 000000000..45690abbb
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/mod_cache.go
@@ -0,0 +1,236 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package imports
+
+import (
+ "context"
+ "fmt"
+ "sync"
+
+ "golang.org/x/tools/internal/gopathwalk"
+)
+
+// To find packages to import, the resolver needs to know about all of
+// the packages that could be imported. This includes packages that are
+// already in modules that are in (1) the current module, (2) replace targets,
+// and (3) packages in the module cache. Packages in (1) and (2) may change over
+// time, as the client may edit the current module and locally replaced modules.
+// The module cache (which includes all of the packages in (3)) can only
+// ever be added to.
+//
+// The resolver can thus save state about packages in the module cache
+// and guarantee that this will not change over time. To obtain information
+// about new modules added to the module cache, the module cache should be
+// rescanned.
+//
+// It is OK to serve information about modules that have been deleted,
+// as they do still exist.
+// TODO(suzmue): can we share information with the caller about
+// what module needs to be downloaded to import this package?
+
+type directoryPackageStatus int
+
+const (
+ _ directoryPackageStatus = iota
+ directoryScanned
+ nameLoaded
+ exportsLoaded
+)
+
+type directoryPackageInfo struct {
+ // status indicates the extent to which this struct has been filled in.
+ status directoryPackageStatus
+ // err is non-nil when there was an error trying to reach status.
+ err error
+
+ // Set when status >= directoryScanned.
+
+ // dir is the absolute directory of this package.
+ dir string
+ rootType gopathwalk.RootType
+ // nonCanonicalImportPath is the package's expected import path. It may
+ // not actually be importable at that path.
+ nonCanonicalImportPath string
+
+ // Module-related information.
+ moduleDir string // The directory that is the module root of this dir.
+ moduleName string // The module name that contains this dir.
+
+ // Set when status >= nameLoaded.
+
+ packageName string // the package name, as declared in the source.
+
+ // Set when status >= exportsLoaded.
+
+ exports []string
+}
+
+// reachedStatus returns true when info has a status at least target and any error associated with
+// an attempt to reach target.
+func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) (bool, error) {
+ if info.err == nil {
+ return info.status >= target, nil
+ }
+ if info.status == target {
+ return true, info.err
+ }
+ return true, nil
+}
+
+// dirInfoCache is a concurrency safe map for storing information about
+// directories that may contain packages.
+//
+// The information in this cache is built incrementally. Entries are initialized in scan.
+// No new keys should be added in any other functions, as all directories containing
+// packages are identified in scan.
+//
+// Other functions, including loadExports and findPackage, may update entries in this cache
+// as they discover new things about the directory.
+//
+// The information in the cache is not expected to change for the cache's
+// lifetime, so there is no protection against competing writes. Users should
+// take care not to hold the cache across changes to the underlying files.
+//
+// TODO(suzmue): consider other concurrency strategies and data structures (RWLocks, sync.Map, etc)
+type dirInfoCache struct {
+ mu sync.Mutex
+ // dirs stores information about packages in directories, keyed by absolute path.
+ dirs map[string]*directoryPackageInfo
+ listeners map[*int]cacheListener
+}
+
+type cacheListener func(directoryPackageInfo)
+
+// ScanAndListen calls listener on all the items in the cache, and on anything
+// newly added. The returned stop function waits for all in-flight callbacks to
+// finish and blocks new ones.
+func (d *dirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() {
+ ctx, cancel := context.WithCancel(ctx)
+
+ // Flushing out all the callbacks is tricky without knowing how many there
+ // are going to be. Setting an arbitrary limit makes it much easier.
+ const maxInFlight = 10
+ sema := make(chan struct{}, maxInFlight)
+ for i := 0; i < maxInFlight; i++ {
+ sema <- struct{}{}
+ }
+
+ cookie := new(int) // A unique ID we can use for the listener.
+
+ // We can't hold mu while calling the listener.
+ d.mu.Lock()
+ var keys []string
+ for key := range d.dirs {
+ keys = append(keys, key)
+ }
+ d.listeners[cookie] = func(info directoryPackageInfo) {
+ select {
+ case <-ctx.Done():
+ return
+ case <-sema:
+ }
+ listener(info)
+ sema <- struct{}{}
+ }
+ d.mu.Unlock()
+
+ stop := func() {
+ cancel()
+ d.mu.Lock()
+ delete(d.listeners, cookie)
+ d.mu.Unlock()
+ for i := 0; i < maxInFlight; i++ {
+ <-sema
+ }
+ }
+
+ // Process the pre-existing keys.
+ for _, k := range keys {
+ select {
+ case <-ctx.Done():
+ return stop
+ default:
+ }
+ if v, ok := d.Load(k); ok {
+ listener(v)
+ }
+ }
+
+ return stop
+}
+
+// Store stores the package info for dir.
+func (d *dirInfoCache) Store(dir string, info directoryPackageInfo) {
+ d.mu.Lock()
+ _, old := d.dirs[dir]
+ d.dirs[dir] = &info
+ var listeners []cacheListener
+ for _, l := range d.listeners {
+ listeners = append(listeners, l)
+ }
+ d.mu.Unlock()
+
+ if !old {
+ for _, l := range listeners {
+ l(info)
+ }
+ }
+}
+
+// Load returns a copy of the directoryPackageInfo for absolute directory dir.
+func (d *dirInfoCache) Load(dir string) (directoryPackageInfo, bool) {
+ d.mu.Lock()
+ defer d.mu.Unlock()
+ info, ok := d.dirs[dir]
+ if !ok {
+ return directoryPackageInfo{}, false
+ }
+ return *info, true
+}
+
+// Keys returns the keys currently present in d.
+func (d *dirInfoCache) Keys() (keys []string) {
+ d.mu.Lock()
+ defer d.mu.Unlock()
+ for key := range d.dirs {
+ keys = append(keys, key)
+ }
+ return keys
+}
+
+func (d *dirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) {
+ if loaded, err := info.reachedStatus(nameLoaded); loaded {
+ return info.packageName, err
+ }
+ if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
+ return "", fmt.Errorf("cannot read package name, scan error: %v", err)
+ }
+ info.packageName, info.err = packageDirToName(info.dir)
+ info.status = nameLoaded
+ d.Store(info.dir, info)
+ return info.packageName, info.err
+}
+
+func (d *dirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) {
+ if reached, _ := info.reachedStatus(exportsLoaded); reached {
+ return info.packageName, info.exports, info.err
+ }
+ if reached, err := info.reachedStatus(nameLoaded); reached && err != nil {
+ return "", nil, err
+ }
+ info.packageName, info.exports, info.err = loadExportsFromFiles(ctx, env, info.dir, false)
+ if info.err == context.Canceled || info.err == context.DeadlineExceeded {
+ return info.packageName, info.exports, info.err
+ }
+ // The cache structure wants things to proceed linearly. We can skip a
+ // step here, but only if we succeed.
+ if info.status == nameLoaded || info.err == nil {
+ info.status = exportsLoaded
+ } else {
+ info.status = nameLoaded
+ }
+ d.Store(info.dir, info)
+ return info.packageName, info.exports, info.err
+}
diff --git a/vendor/golang.org/x/tools/internal/imports/sortimports.go b/vendor/golang.org/x/tools/internal/imports/sortimports.go
new file mode 100644
index 000000000..1a0a7ebd9
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/sortimports.go
@@ -0,0 +1,297 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Hacked up copy of go/ast/import.go
+// Modified to use a single token.File in preference to a FileSet.
+
+package imports
+
+import (
+ "go/ast"
+ "go/token"
+ "log"
+ "sort"
+ "strconv"
+)
+
+// sortImports sorts runs of consecutive import lines in import blocks in f.
+// It also removes duplicate imports when it is possible to do so without data loss.
+//
+// It may mutate the token.File.
+func sortImports(localPrefix string, tokFile *token.File, f *ast.File) {
+ for i, d := range f.Decls {
+ d, ok := d.(*ast.GenDecl)
+ if !ok || d.Tok != token.IMPORT {
+ // Not an import declaration, so we're done.
+ // Imports are always first.
+ break
+ }
+
+ if len(d.Specs) == 0 {
+ // Empty import block, remove it.
+ f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
+ }
+
+ if !d.Lparen.IsValid() {
+ // Not a block: sorted by default.
+ continue
+ }
+
+ // Identify and sort runs of specs on successive lines.
+ i := 0
+ specs := d.Specs[:0]
+ for j, s := range d.Specs {
+ if j > i && tokFile.Line(s.Pos()) > 1+tokFile.Line(d.Specs[j-1].End()) {
+ // j begins a new run. End this one.
+ specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:j])...)
+ i = j
+ }
+ }
+ specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:])...)
+ d.Specs = specs
+
+ // Deduping can leave a blank line before the rparen; clean that up.
+ // Ignore line directives.
+ if len(d.Specs) > 0 {
+ lastSpec := d.Specs[len(d.Specs)-1]
+ lastLine := tokFile.PositionFor(lastSpec.Pos(), false).Line
+ if rParenLine := tokFile.PositionFor(d.Rparen, false).Line; rParenLine > lastLine+1 {
+ tokFile.MergeLine(rParenLine - 1) // has side effects!
+ }
+ }
+ }
+}
+
+// mergeImports merges all the import declarations into the first one.
+// Taken from golang.org/x/tools/ast/astutil.
+// This does not adjust line numbers properly
+func mergeImports(f *ast.File) {
+ if len(f.Decls) <= 1 {
+ return
+ }
+
+ // Merge all the import declarations into the first one.
+ var first *ast.GenDecl
+ for i := 0; i < len(f.Decls); i++ {
+ decl := f.Decls[i]
+ gen, ok := decl.(*ast.GenDecl)
+ if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") {
+ continue
+ }
+ if first == nil {
+ first = gen
+ continue // Don't touch the first one.
+ }
+ // We now know there is more than one package in this import
+ // declaration. Ensure that it ends up parenthesized.
+ first.Lparen = first.Pos()
+ // Move the imports of the other import declaration to the first one.
+ for _, spec := range gen.Specs {
+ spec.(*ast.ImportSpec).Path.ValuePos = first.Pos()
+ first.Specs = append(first.Specs, spec)
+ }
+ f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
+ i--
+ }
+}
+
+// declImports reports whether gen contains an import of path.
+// Taken from golang.org/x/tools/ast/astutil.
+func declImports(gen *ast.GenDecl, path string) bool {
+ if gen.Tok != token.IMPORT {
+ return false
+ }
+ for _, spec := range gen.Specs {
+ impspec := spec.(*ast.ImportSpec)
+ if importPath(impspec) == path {
+ return true
+ }
+ }
+ return false
+}
+
+func importPath(s ast.Spec) string {
+ t, err := strconv.Unquote(s.(*ast.ImportSpec).Path.Value)
+ if err == nil {
+ return t
+ }
+ return ""
+}
+
+func importName(s ast.Spec) string {
+ n := s.(*ast.ImportSpec).Name
+ if n == nil {
+ return ""
+ }
+ return n.Name
+}
+
+func importComment(s ast.Spec) string {
+ c := s.(*ast.ImportSpec).Comment
+ if c == nil {
+ return ""
+ }
+ return c.Text()
+}
+
+// collapse indicates whether prev may be removed, leaving only next.
+func collapse(prev, next ast.Spec) bool {
+ if importPath(next) != importPath(prev) || importName(next) != importName(prev) {
+ return false
+ }
+ return prev.(*ast.ImportSpec).Comment == nil
+}
+
+type posSpan struct {
+ Start token.Pos
+ End token.Pos
+}
+
+// sortSpecs sorts the import specs within each import decl.
+// It may mutate the token.File.
+func sortSpecs(localPrefix string, tokFile *token.File, f *ast.File, specs []ast.Spec) []ast.Spec {
+ // Can't short-circuit here even if specs are already sorted,
+ // since they might yet need deduplication.
+ // A lone import, however, may be safely ignored.
+ if len(specs) <= 1 {
+ return specs
+ }
+
+ // Record positions for specs.
+ pos := make([]posSpan, len(specs))
+ for i, s := range specs {
+ pos[i] = posSpan{s.Pos(), s.End()}
+ }
+
+ // Identify comments in this range.
+ // Any comment from pos[0].Start to the final line counts.
+ lastLine := tokFile.Line(pos[len(pos)-1].End)
+ cstart := len(f.Comments)
+ cend := len(f.Comments)
+ for i, g := range f.Comments {
+ if g.Pos() < pos[0].Start {
+ continue
+ }
+ if i < cstart {
+ cstart = i
+ }
+ if tokFile.Line(g.End()) > lastLine {
+ cend = i
+ break
+ }
+ }
+ comments := f.Comments[cstart:cend]
+
+ // Assign each comment to the import spec preceding it.
+ importComment := map[*ast.ImportSpec][]*ast.CommentGroup{}
+ specIndex := 0
+ for _, g := range comments {
+ for specIndex+1 < len(specs) && pos[specIndex+1].Start <= g.Pos() {
+ specIndex++
+ }
+ s := specs[specIndex].(*ast.ImportSpec)
+ importComment[s] = append(importComment[s], g)
+ }
+
+ // Sort the import specs by import path.
+ // Remove duplicates, when possible without data loss.
+ // Reassign the import paths to have the same position sequence.
+ // Reassign each comment to abut the end of its spec.
+ // Sort the comments by new position.
+ sort.Sort(byImportSpec{localPrefix, specs})
+
+ // Dedup. Thanks to our sorting, we can just consider
+ // adjacent pairs of imports.
+ deduped := specs[:0]
+ for i, s := range specs {
+ if i == len(specs)-1 || !collapse(s, specs[i+1]) {
+ deduped = append(deduped, s)
+ } else {
+ p := s.Pos()
+ tokFile.MergeLine(tokFile.Line(p)) // has side effects!
+ }
+ }
+ specs = deduped
+
+ // Fix up comment positions
+ for i, s := range specs {
+ s := s.(*ast.ImportSpec)
+ if s.Name != nil {
+ s.Name.NamePos = pos[i].Start
+ }
+ s.Path.ValuePos = pos[i].Start
+ s.EndPos = pos[i].End
+ nextSpecPos := pos[i].End
+
+ for _, g := range importComment[s] {
+ for _, c := range g.List {
+ c.Slash = pos[i].End
+ nextSpecPos = c.End()
+ }
+ }
+ if i < len(specs)-1 {
+ pos[i+1].Start = nextSpecPos
+ pos[i+1].End = nextSpecPos
+ }
+ }
+
+ sort.Sort(byCommentPos(comments))
+
+ // Fixup comments can insert blank lines, because import specs are on different lines.
+ // We remove those blank lines here by merging import spec to the first import spec line.
+ firstSpecLine := tokFile.Line(specs[0].Pos())
+ for _, s := range specs[1:] {
+ p := s.Pos()
+ line := tokFile.Line(p)
+ for previousLine := line - 1; previousLine >= firstSpecLine; {
+ // MergeLine can panic. Avoid the panic at the cost of not removing the blank line
+ // golang/go#50329
+ if previousLine > 0 && previousLine < tokFile.LineCount() {
+ tokFile.MergeLine(previousLine) // has side effects!
+ previousLine--
+ } else {
+ // try to gather some data to diagnose how this could happen
+ req := "Please report what the imports section of your go file looked like."
+ log.Printf("panic avoided: first:%d line:%d previous:%d max:%d. %s",
+ firstSpecLine, line, previousLine, tokFile.LineCount(), req)
+ }
+ }
+ }
+ return specs
+}
+
+type byImportSpec struct {
+ localPrefix string
+ specs []ast.Spec // slice of *ast.ImportSpec
+}
+
+func (x byImportSpec) Len() int { return len(x.specs) }
+func (x byImportSpec) Swap(i, j int) { x.specs[i], x.specs[j] = x.specs[j], x.specs[i] }
+func (x byImportSpec) Less(i, j int) bool {
+ ipath := importPath(x.specs[i])
+ jpath := importPath(x.specs[j])
+
+ igroup := importGroup(x.localPrefix, ipath)
+ jgroup := importGroup(x.localPrefix, jpath)
+ if igroup != jgroup {
+ return igroup < jgroup
+ }
+
+ if ipath != jpath {
+ return ipath < jpath
+ }
+ iname := importName(x.specs[i])
+ jname := importName(x.specs[j])
+
+ if iname != jname {
+ return iname < jname
+ }
+ return importComment(x.specs[i]) < importComment(x.specs[j])
+}
+
+type byCommentPos []*ast.CommentGroup
+
+func (x byCommentPos) Len() int { return len(x) }
+func (x byCommentPos) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+func (x byCommentPos) Less(i, j int) bool { return x[i].Pos() < x[j].Pos() }
diff --git a/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/vendor/golang.org/x/tools/internal/imports/zstdlib.go
new file mode 100644
index 000000000..9f992c2be
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/imports/zstdlib.go
@@ -0,0 +1,11345 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by mkstdlib.go. DO NOT EDIT.
+
+package imports
+
+var stdlib = map[string][]string{
+ "archive/tar": {
+ "ErrFieldTooLong",
+ "ErrHeader",
+ "ErrInsecurePath",
+ "ErrWriteAfterClose",
+ "ErrWriteTooLong",
+ "FileInfoHeader",
+ "Format",
+ "FormatGNU",
+ "FormatPAX",
+ "FormatUSTAR",
+ "FormatUnknown",
+ "Header",
+ "NewReader",
+ "NewWriter",
+ "Reader",
+ "TypeBlock",
+ "TypeChar",
+ "TypeCont",
+ "TypeDir",
+ "TypeFifo",
+ "TypeGNULongLink",
+ "TypeGNULongName",
+ "TypeGNUSparse",
+ "TypeLink",
+ "TypeReg",
+ "TypeRegA",
+ "TypeSymlink",
+ "TypeXGlobalHeader",
+ "TypeXHeader",
+ "Writer",
+ },
+ "archive/zip": {
+ "Compressor",
+ "Decompressor",
+ "Deflate",
+ "ErrAlgorithm",
+ "ErrChecksum",
+ "ErrFormat",
+ "ErrInsecurePath",
+ "File",
+ "FileHeader",
+ "FileInfoHeader",
+ "NewReader",
+ "NewWriter",
+ "OpenReader",
+ "ReadCloser",
+ "Reader",
+ "RegisterCompressor",
+ "RegisterDecompressor",
+ "Store",
+ "Writer",
+ },
+ "bufio": {
+ "ErrAdvanceTooFar",
+ "ErrBadReadCount",
+ "ErrBufferFull",
+ "ErrFinalToken",
+ "ErrInvalidUnreadByte",
+ "ErrInvalidUnreadRune",
+ "ErrNegativeAdvance",
+ "ErrNegativeCount",
+ "ErrTooLong",
+ "MaxScanTokenSize",
+ "NewReadWriter",
+ "NewReader",
+ "NewReaderSize",
+ "NewScanner",
+ "NewWriter",
+ "NewWriterSize",
+ "ReadWriter",
+ "Reader",
+ "ScanBytes",
+ "ScanLines",
+ "ScanRunes",
+ "ScanWords",
+ "Scanner",
+ "SplitFunc",
+ "Writer",
+ },
+ "bytes": {
+ "Buffer",
+ "Clone",
+ "Compare",
+ "Contains",
+ "ContainsAny",
+ "ContainsFunc",
+ "ContainsRune",
+ "Count",
+ "Cut",
+ "CutPrefix",
+ "CutSuffix",
+ "Equal",
+ "EqualFold",
+ "ErrTooLarge",
+ "Fields",
+ "FieldsFunc",
+ "HasPrefix",
+ "HasSuffix",
+ "Index",
+ "IndexAny",
+ "IndexByte",
+ "IndexFunc",
+ "IndexRune",
+ "Join",
+ "LastIndex",
+ "LastIndexAny",
+ "LastIndexByte",
+ "LastIndexFunc",
+ "Map",
+ "MinRead",
+ "NewBuffer",
+ "NewBufferString",
+ "NewReader",
+ "Reader",
+ "Repeat",
+ "Replace",
+ "ReplaceAll",
+ "Runes",
+ "Split",
+ "SplitAfter",
+ "SplitAfterN",
+ "SplitN",
+ "Title",
+ "ToLower",
+ "ToLowerSpecial",
+ "ToTitle",
+ "ToTitleSpecial",
+ "ToUpper",
+ "ToUpperSpecial",
+ "ToValidUTF8",
+ "Trim",
+ "TrimFunc",
+ "TrimLeft",
+ "TrimLeftFunc",
+ "TrimPrefix",
+ "TrimRight",
+ "TrimRightFunc",
+ "TrimSpace",
+ "TrimSuffix",
+ },
+ "cmp": {
+ "Compare",
+ "Less",
+ "Ordered",
+ },
+ "compress/bzip2": {
+ "NewReader",
+ "StructuralError",
+ },
+ "compress/flate": {
+ "BestCompression",
+ "BestSpeed",
+ "CorruptInputError",
+ "DefaultCompression",
+ "HuffmanOnly",
+ "InternalError",
+ "NewReader",
+ "NewReaderDict",
+ "NewWriter",
+ "NewWriterDict",
+ "NoCompression",
+ "ReadError",
+ "Reader",
+ "Resetter",
+ "WriteError",
+ "Writer",
+ },
+ "compress/gzip": {
+ "BestCompression",
+ "BestSpeed",
+ "DefaultCompression",
+ "ErrChecksum",
+ "ErrHeader",
+ "Header",
+ "HuffmanOnly",
+ "NewReader",
+ "NewWriter",
+ "NewWriterLevel",
+ "NoCompression",
+ "Reader",
+ "Writer",
+ },
+ "compress/lzw": {
+ "LSB",
+ "MSB",
+ "NewReader",
+ "NewWriter",
+ "Order",
+ "Reader",
+ "Writer",
+ },
+ "compress/zlib": {
+ "BestCompression",
+ "BestSpeed",
+ "DefaultCompression",
+ "ErrChecksum",
+ "ErrDictionary",
+ "ErrHeader",
+ "HuffmanOnly",
+ "NewReader",
+ "NewReaderDict",
+ "NewWriter",
+ "NewWriterLevel",
+ "NewWriterLevelDict",
+ "NoCompression",
+ "Resetter",
+ "Writer",
+ },
+ "container/heap": {
+ "Fix",
+ "Init",
+ "Interface",
+ "Pop",
+ "Push",
+ "Remove",
+ },
+ "container/list": {
+ "Element",
+ "List",
+ "New",
+ },
+ "container/ring": {
+ "New",
+ "Ring",
+ },
+ "context": {
+ "AfterFunc",
+ "Background",
+ "CancelCauseFunc",
+ "CancelFunc",
+ "Canceled",
+ "Cause",
+ "Context",
+ "DeadlineExceeded",
+ "TODO",
+ "WithCancel",
+ "WithCancelCause",
+ "WithDeadline",
+ "WithDeadlineCause",
+ "WithTimeout",
+ "WithTimeoutCause",
+ "WithValue",
+ "WithoutCancel",
+ },
+ "crypto": {
+ "BLAKE2b_256",
+ "BLAKE2b_384",
+ "BLAKE2b_512",
+ "BLAKE2s_256",
+ "Decrypter",
+ "DecrypterOpts",
+ "Hash",
+ "MD4",
+ "MD5",
+ "MD5SHA1",
+ "PrivateKey",
+ "PublicKey",
+ "RIPEMD160",
+ "RegisterHash",
+ "SHA1",
+ "SHA224",
+ "SHA256",
+ "SHA384",
+ "SHA3_224",
+ "SHA3_256",
+ "SHA3_384",
+ "SHA3_512",
+ "SHA512",
+ "SHA512_224",
+ "SHA512_256",
+ "Signer",
+ "SignerOpts",
+ },
+ "crypto/aes": {
+ "BlockSize",
+ "KeySizeError",
+ "NewCipher",
+ },
+ "crypto/cipher": {
+ "AEAD",
+ "Block",
+ "BlockMode",
+ "NewCBCDecrypter",
+ "NewCBCEncrypter",
+ "NewCFBDecrypter",
+ "NewCFBEncrypter",
+ "NewCTR",
+ "NewGCM",
+ "NewGCMWithNonceSize",
+ "NewGCMWithTagSize",
+ "NewOFB",
+ "Stream",
+ "StreamReader",
+ "StreamWriter",
+ },
+ "crypto/des": {
+ "BlockSize",
+ "KeySizeError",
+ "NewCipher",
+ "NewTripleDESCipher",
+ },
+ "crypto/dsa": {
+ "ErrInvalidPublicKey",
+ "GenerateKey",
+ "GenerateParameters",
+ "L1024N160",
+ "L2048N224",
+ "L2048N256",
+ "L3072N256",
+ "ParameterSizes",
+ "Parameters",
+ "PrivateKey",
+ "PublicKey",
+ "Sign",
+ "Verify",
+ },
+ "crypto/ecdh": {
+ "Curve",
+ "P256",
+ "P384",
+ "P521",
+ "PrivateKey",
+ "PublicKey",
+ "X25519",
+ },
+ "crypto/ecdsa": {
+ "GenerateKey",
+ "PrivateKey",
+ "PublicKey",
+ "Sign",
+ "SignASN1",
+ "Verify",
+ "VerifyASN1",
+ },
+ "crypto/ed25519": {
+ "GenerateKey",
+ "NewKeyFromSeed",
+ "Options",
+ "PrivateKey",
+ "PrivateKeySize",
+ "PublicKey",
+ "PublicKeySize",
+ "SeedSize",
+ "Sign",
+ "SignatureSize",
+ "Verify",
+ "VerifyWithOptions",
+ },
+ "crypto/elliptic": {
+ "Curve",
+ "CurveParams",
+ "GenerateKey",
+ "Marshal",
+ "MarshalCompressed",
+ "P224",
+ "P256",
+ "P384",
+ "P521",
+ "Unmarshal",
+ "UnmarshalCompressed",
+ },
+ "crypto/hmac": {
+ "Equal",
+ "New",
+ },
+ "crypto/md5": {
+ "BlockSize",
+ "New",
+ "Size",
+ "Sum",
+ },
+ "crypto/rand": {
+ "Int",
+ "Prime",
+ "Read",
+ "Reader",
+ },
+ "crypto/rc4": {
+ "Cipher",
+ "KeySizeError",
+ "NewCipher",
+ },
+ "crypto/rsa": {
+ "CRTValue",
+ "DecryptOAEP",
+ "DecryptPKCS1v15",
+ "DecryptPKCS1v15SessionKey",
+ "EncryptOAEP",
+ "EncryptPKCS1v15",
+ "ErrDecryption",
+ "ErrMessageTooLong",
+ "ErrVerification",
+ "GenerateKey",
+ "GenerateMultiPrimeKey",
+ "OAEPOptions",
+ "PKCS1v15DecryptOptions",
+ "PSSOptions",
+ "PSSSaltLengthAuto",
+ "PSSSaltLengthEqualsHash",
+ "PrecomputedValues",
+ "PrivateKey",
+ "PublicKey",
+ "SignPKCS1v15",
+ "SignPSS",
+ "VerifyPKCS1v15",
+ "VerifyPSS",
+ },
+ "crypto/sha1": {
+ "BlockSize",
+ "New",
+ "Size",
+ "Sum",
+ },
+ "crypto/sha256": {
+ "BlockSize",
+ "New",
+ "New224",
+ "Size",
+ "Size224",
+ "Sum224",
+ "Sum256",
+ },
+ "crypto/sha512": {
+ "BlockSize",
+ "New",
+ "New384",
+ "New512_224",
+ "New512_256",
+ "Size",
+ "Size224",
+ "Size256",
+ "Size384",
+ "Sum384",
+ "Sum512",
+ "Sum512_224",
+ "Sum512_256",
+ },
+ "crypto/subtle": {
+ "ConstantTimeByteEq",
+ "ConstantTimeCompare",
+ "ConstantTimeCopy",
+ "ConstantTimeEq",
+ "ConstantTimeLessOrEq",
+ "ConstantTimeSelect",
+ "XORBytes",
+ },
+ "crypto/tls": {
+ "AlertError",
+ "Certificate",
+ "CertificateRequestInfo",
+ "CertificateVerificationError",
+ "CipherSuite",
+ "CipherSuiteName",
+ "CipherSuites",
+ "Client",
+ "ClientAuthType",
+ "ClientHelloInfo",
+ "ClientSessionCache",
+ "ClientSessionState",
+ "Config",
+ "Conn",
+ "ConnectionState",
+ "CurveID",
+ "CurveP256",
+ "CurveP384",
+ "CurveP521",
+ "Dial",
+ "DialWithDialer",
+ "Dialer",
+ "ECDSAWithP256AndSHA256",
+ "ECDSAWithP384AndSHA384",
+ "ECDSAWithP521AndSHA512",
+ "ECDSAWithSHA1",
+ "Ed25519",
+ "InsecureCipherSuites",
+ "Listen",
+ "LoadX509KeyPair",
+ "NewLRUClientSessionCache",
+ "NewListener",
+ "NewResumptionState",
+ "NoClientCert",
+ "PKCS1WithSHA1",
+ "PKCS1WithSHA256",
+ "PKCS1WithSHA384",
+ "PKCS1WithSHA512",
+ "PSSWithSHA256",
+ "PSSWithSHA384",
+ "PSSWithSHA512",
+ "ParseSessionState",
+ "QUICClient",
+ "QUICConfig",
+ "QUICConn",
+ "QUICEncryptionLevel",
+ "QUICEncryptionLevelApplication",
+ "QUICEncryptionLevelEarly",
+ "QUICEncryptionLevelHandshake",
+ "QUICEncryptionLevelInitial",
+ "QUICEvent",
+ "QUICEventKind",
+ "QUICHandshakeDone",
+ "QUICNoEvent",
+ "QUICRejectedEarlyData",
+ "QUICServer",
+ "QUICSessionTicketOptions",
+ "QUICSetReadSecret",
+ "QUICSetWriteSecret",
+ "QUICTransportParameters",
+ "QUICTransportParametersRequired",
+ "QUICWriteData",
+ "RecordHeaderError",
+ "RenegotiateFreelyAsClient",
+ "RenegotiateNever",
+ "RenegotiateOnceAsClient",
+ "RenegotiationSupport",
+ "RequestClientCert",
+ "RequireAndVerifyClientCert",
+ "RequireAnyClientCert",
+ "Server",
+ "SessionState",
+ "SignatureScheme",
+ "TLS_AES_128_GCM_SHA256",
+ "TLS_AES_256_GCM_SHA384",
+ "TLS_CHACHA20_POLY1305_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
+ "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
+ "TLS_FALLBACK_SCSV",
+ "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
+ "TLS_RSA_WITH_AES_128_CBC_SHA256",
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
+ "TLS_RSA_WITH_RC4_128_SHA",
+ "VerifyClientCertIfGiven",
+ "VersionName",
+ "VersionSSL30",
+ "VersionTLS10",
+ "VersionTLS11",
+ "VersionTLS12",
+ "VersionTLS13",
+ "X25519",
+ "X509KeyPair",
+ },
+ "crypto/x509": {
+ "CANotAuthorizedForExtKeyUsage",
+ "CANotAuthorizedForThisName",
+ "CertPool",
+ "Certificate",
+ "CertificateInvalidError",
+ "CertificateRequest",
+ "ConstraintViolationError",
+ "CreateCertificate",
+ "CreateCertificateRequest",
+ "CreateRevocationList",
+ "DSA",
+ "DSAWithSHA1",
+ "DSAWithSHA256",
+ "DecryptPEMBlock",
+ "ECDSA",
+ "ECDSAWithSHA1",
+ "ECDSAWithSHA256",
+ "ECDSAWithSHA384",
+ "ECDSAWithSHA512",
+ "Ed25519",
+ "EncryptPEMBlock",
+ "ErrUnsupportedAlgorithm",
+ "Expired",
+ "ExtKeyUsage",
+ "ExtKeyUsageAny",
+ "ExtKeyUsageClientAuth",
+ "ExtKeyUsageCodeSigning",
+ "ExtKeyUsageEmailProtection",
+ "ExtKeyUsageIPSECEndSystem",
+ "ExtKeyUsageIPSECTunnel",
+ "ExtKeyUsageIPSECUser",
+ "ExtKeyUsageMicrosoftCommercialCodeSigning",
+ "ExtKeyUsageMicrosoftKernelCodeSigning",
+ "ExtKeyUsageMicrosoftServerGatedCrypto",
+ "ExtKeyUsageNetscapeServerGatedCrypto",
+ "ExtKeyUsageOCSPSigning",
+ "ExtKeyUsageServerAuth",
+ "ExtKeyUsageTimeStamping",
+ "HostnameError",
+ "IncompatibleUsage",
+ "IncorrectPasswordError",
+ "InsecureAlgorithmError",
+ "InvalidReason",
+ "IsEncryptedPEMBlock",
+ "KeyUsage",
+ "KeyUsageCRLSign",
+ "KeyUsageCertSign",
+ "KeyUsageContentCommitment",
+ "KeyUsageDataEncipherment",
+ "KeyUsageDecipherOnly",
+ "KeyUsageDigitalSignature",
+ "KeyUsageEncipherOnly",
+ "KeyUsageKeyAgreement",
+ "KeyUsageKeyEncipherment",
+ "MD2WithRSA",
+ "MD5WithRSA",
+ "MarshalECPrivateKey",
+ "MarshalPKCS1PrivateKey",
+ "MarshalPKCS1PublicKey",
+ "MarshalPKCS8PrivateKey",
+ "MarshalPKIXPublicKey",
+ "NameConstraintsWithoutSANs",
+ "NameMismatch",
+ "NewCertPool",
+ "NotAuthorizedToSign",
+ "PEMCipher",
+ "PEMCipher3DES",
+ "PEMCipherAES128",
+ "PEMCipherAES192",
+ "PEMCipherAES256",
+ "PEMCipherDES",
+ "ParseCRL",
+ "ParseCertificate",
+ "ParseCertificateRequest",
+ "ParseCertificates",
+ "ParseDERCRL",
+ "ParseECPrivateKey",
+ "ParsePKCS1PrivateKey",
+ "ParsePKCS1PublicKey",
+ "ParsePKCS8PrivateKey",
+ "ParsePKIXPublicKey",
+ "ParseRevocationList",
+ "PublicKeyAlgorithm",
+ "PureEd25519",
+ "RSA",
+ "RevocationList",
+ "RevocationListEntry",
+ "SHA1WithRSA",
+ "SHA256WithRSA",
+ "SHA256WithRSAPSS",
+ "SHA384WithRSA",
+ "SHA384WithRSAPSS",
+ "SHA512WithRSA",
+ "SHA512WithRSAPSS",
+ "SetFallbackRoots",
+ "SignatureAlgorithm",
+ "SystemCertPool",
+ "SystemRootsError",
+ "TooManyConstraints",
+ "TooManyIntermediates",
+ "UnconstrainedName",
+ "UnhandledCriticalExtension",
+ "UnknownAuthorityError",
+ "UnknownPublicKeyAlgorithm",
+ "UnknownSignatureAlgorithm",
+ "VerifyOptions",
+ },
+ "crypto/x509/pkix": {
+ "AlgorithmIdentifier",
+ "AttributeTypeAndValue",
+ "AttributeTypeAndValueSET",
+ "CertificateList",
+ "Extension",
+ "Name",
+ "RDNSequence",
+ "RelativeDistinguishedNameSET",
+ "RevokedCertificate",
+ "TBSCertificateList",
+ },
+ "database/sql": {
+ "ColumnType",
+ "Conn",
+ "DB",
+ "DBStats",
+ "Drivers",
+ "ErrConnDone",
+ "ErrNoRows",
+ "ErrTxDone",
+ "IsolationLevel",
+ "LevelDefault",
+ "LevelLinearizable",
+ "LevelReadCommitted",
+ "LevelReadUncommitted",
+ "LevelRepeatableRead",
+ "LevelSerializable",
+ "LevelSnapshot",
+ "LevelWriteCommitted",
+ "Named",
+ "NamedArg",
+ "NullBool",
+ "NullByte",
+ "NullFloat64",
+ "NullInt16",
+ "NullInt32",
+ "NullInt64",
+ "NullString",
+ "NullTime",
+ "Open",
+ "OpenDB",
+ "Out",
+ "RawBytes",
+ "Register",
+ "Result",
+ "Row",
+ "Rows",
+ "Scanner",
+ "Stmt",
+ "Tx",
+ "TxOptions",
+ },
+ "database/sql/driver": {
+ "Bool",
+ "ColumnConverter",
+ "Conn",
+ "ConnBeginTx",
+ "ConnPrepareContext",
+ "Connector",
+ "DefaultParameterConverter",
+ "Driver",
+ "DriverContext",
+ "ErrBadConn",
+ "ErrRemoveArgument",
+ "ErrSkip",
+ "Execer",
+ "ExecerContext",
+ "Int32",
+ "IsScanValue",
+ "IsValue",
+ "IsolationLevel",
+ "NamedValue",
+ "NamedValueChecker",
+ "NotNull",
+ "Null",
+ "Pinger",
+ "Queryer",
+ "QueryerContext",
+ "Result",
+ "ResultNoRows",
+ "Rows",
+ "RowsAffected",
+ "RowsColumnTypeDatabaseTypeName",
+ "RowsColumnTypeLength",
+ "RowsColumnTypeNullable",
+ "RowsColumnTypePrecisionScale",
+ "RowsColumnTypeScanType",
+ "RowsNextResultSet",
+ "SessionResetter",
+ "Stmt",
+ "StmtExecContext",
+ "StmtQueryContext",
+ "String",
+ "Tx",
+ "TxOptions",
+ "Validator",
+ "Value",
+ "ValueConverter",
+ "Valuer",
+ },
+ "debug/buildinfo": {
+ "BuildInfo",
+ "Read",
+ "ReadFile",
+ },
+ "debug/dwarf": {
+ "AddrType",
+ "ArrayType",
+ "Attr",
+ "AttrAbstractOrigin",
+ "AttrAccessibility",
+ "AttrAddrBase",
+ "AttrAddrClass",
+ "AttrAlignment",
+ "AttrAllocated",
+ "AttrArtificial",
+ "AttrAssociated",
+ "AttrBaseTypes",
+ "AttrBinaryScale",
+ "AttrBitOffset",
+ "AttrBitSize",
+ "AttrByteSize",
+ "AttrCallAllCalls",
+ "AttrCallAllSourceCalls",
+ "AttrCallAllTailCalls",
+ "AttrCallColumn",
+ "AttrCallDataLocation",
+ "AttrCallDataValue",
+ "AttrCallFile",
+ "AttrCallLine",
+ "AttrCallOrigin",
+ "AttrCallPC",
+ "AttrCallParameter",
+ "AttrCallReturnPC",
+ "AttrCallTailCall",
+ "AttrCallTarget",
+ "AttrCallTargetClobbered",
+ "AttrCallValue",
+ "AttrCalling",
+ "AttrCommonRef",
+ "AttrCompDir",
+ "AttrConstExpr",
+ "AttrConstValue",
+ "AttrContainingType",
+ "AttrCount",
+ "AttrDataBitOffset",
+ "AttrDataLocation",
+ "AttrDataMemberLoc",
+ "AttrDecimalScale",
+ "AttrDecimalSign",
+ "AttrDeclColumn",
+ "AttrDeclFile",
+ "AttrDeclLine",
+ "AttrDeclaration",
+ "AttrDefaultValue",
+ "AttrDefaulted",
+ "AttrDeleted",
+ "AttrDescription",
+ "AttrDigitCount",
+ "AttrDiscr",
+ "AttrDiscrList",
+ "AttrDiscrValue",
+ "AttrDwoName",
+ "AttrElemental",
+ "AttrEncoding",
+ "AttrEndianity",
+ "AttrEntrypc",
+ "AttrEnumClass",
+ "AttrExplicit",
+ "AttrExportSymbols",
+ "AttrExtension",
+ "AttrExternal",
+ "AttrFrameBase",
+ "AttrFriend",
+ "AttrHighpc",
+ "AttrIdentifierCase",
+ "AttrImport",
+ "AttrInline",
+ "AttrIsOptional",
+ "AttrLanguage",
+ "AttrLinkageName",
+ "AttrLocation",
+ "AttrLoclistsBase",
+ "AttrLowerBound",
+ "AttrLowpc",
+ "AttrMacroInfo",
+ "AttrMacros",
+ "AttrMainSubprogram",
+ "AttrMutable",
+ "AttrName",
+ "AttrNamelistItem",
+ "AttrNoreturn",
+ "AttrObjectPointer",
+ "AttrOrdering",
+ "AttrPictureString",
+ "AttrPriority",
+ "AttrProducer",
+ "AttrPrototyped",
+ "AttrPure",
+ "AttrRanges",
+ "AttrRank",
+ "AttrRecursive",
+ "AttrReference",
+ "AttrReturnAddr",
+ "AttrRnglistsBase",
+ "AttrRvalueReference",
+ "AttrSegment",
+ "AttrSibling",
+ "AttrSignature",
+ "AttrSmall",
+ "AttrSpecification",
+ "AttrStartScope",
+ "AttrStaticLink",
+ "AttrStmtList",
+ "AttrStrOffsetsBase",
+ "AttrStride",
+ "AttrStrideSize",
+ "AttrStringLength",
+ "AttrStringLengthBitSize",
+ "AttrStringLengthByteSize",
+ "AttrThreadsScaled",
+ "AttrTrampoline",
+ "AttrType",
+ "AttrUpperBound",
+ "AttrUseLocation",
+ "AttrUseUTF8",
+ "AttrVarParam",
+ "AttrVirtuality",
+ "AttrVisibility",
+ "AttrVtableElemLoc",
+ "BasicType",
+ "BoolType",
+ "CharType",
+ "Class",
+ "ClassAddrPtr",
+ "ClassAddress",
+ "ClassBlock",
+ "ClassConstant",
+ "ClassExprLoc",
+ "ClassFlag",
+ "ClassLinePtr",
+ "ClassLocList",
+ "ClassLocListPtr",
+ "ClassMacPtr",
+ "ClassRangeListPtr",
+ "ClassReference",
+ "ClassReferenceAlt",
+ "ClassReferenceSig",
+ "ClassRngList",
+ "ClassRngListsPtr",
+ "ClassStrOffsetsPtr",
+ "ClassString",
+ "ClassStringAlt",
+ "ClassUnknown",
+ "CommonType",
+ "ComplexType",
+ "Data",
+ "DecodeError",
+ "DotDotDotType",
+ "Entry",
+ "EnumType",
+ "EnumValue",
+ "ErrUnknownPC",
+ "Field",
+ "FloatType",
+ "FuncType",
+ "IntType",
+ "LineEntry",
+ "LineFile",
+ "LineReader",
+ "LineReaderPos",
+ "New",
+ "Offset",
+ "PtrType",
+ "QualType",
+ "Reader",
+ "StructField",
+ "StructType",
+ "Tag",
+ "TagAccessDeclaration",
+ "TagArrayType",
+ "TagAtomicType",
+ "TagBaseType",
+ "TagCallSite",
+ "TagCallSiteParameter",
+ "TagCatchDwarfBlock",
+ "TagClassType",
+ "TagCoarrayType",
+ "TagCommonDwarfBlock",
+ "TagCommonInclusion",
+ "TagCompileUnit",
+ "TagCondition",
+ "TagConstType",
+ "TagConstant",
+ "TagDwarfProcedure",
+ "TagDynamicType",
+ "TagEntryPoint",
+ "TagEnumerationType",
+ "TagEnumerator",
+ "TagFileType",
+ "TagFormalParameter",
+ "TagFriend",
+ "TagGenericSubrange",
+ "TagImmutableType",
+ "TagImportedDeclaration",
+ "TagImportedModule",
+ "TagImportedUnit",
+ "TagInheritance",
+ "TagInlinedSubroutine",
+ "TagInterfaceType",
+ "TagLabel",
+ "TagLexDwarfBlock",
+ "TagMember",
+ "TagModule",
+ "TagMutableType",
+ "TagNamelist",
+ "TagNamelistItem",
+ "TagNamespace",
+ "TagPackedType",
+ "TagPartialUnit",
+ "TagPointerType",
+ "TagPtrToMemberType",
+ "TagReferenceType",
+ "TagRestrictType",
+ "TagRvalueReferenceType",
+ "TagSetType",
+ "TagSharedType",
+ "TagSkeletonUnit",
+ "TagStringType",
+ "TagStructType",
+ "TagSubprogram",
+ "TagSubrangeType",
+ "TagSubroutineType",
+ "TagTemplateAlias",
+ "TagTemplateTypeParameter",
+ "TagTemplateValueParameter",
+ "TagThrownType",
+ "TagTryDwarfBlock",
+ "TagTypeUnit",
+ "TagTypedef",
+ "TagUnionType",
+ "TagUnspecifiedParameters",
+ "TagUnspecifiedType",
+ "TagVariable",
+ "TagVariant",
+ "TagVariantPart",
+ "TagVolatileType",
+ "TagWithStmt",
+ "Type",
+ "TypedefType",
+ "UcharType",
+ "UintType",
+ "UnspecifiedType",
+ "UnsupportedType",
+ "VoidType",
+ },
+ "debug/elf": {
+ "ARM_MAGIC_TRAMP_NUMBER",
+ "COMPRESS_HIOS",
+ "COMPRESS_HIPROC",
+ "COMPRESS_LOOS",
+ "COMPRESS_LOPROC",
+ "COMPRESS_ZLIB",
+ "COMPRESS_ZSTD",
+ "Chdr32",
+ "Chdr64",
+ "Class",
+ "CompressionType",
+ "DF_1_CONFALT",
+ "DF_1_DIRECT",
+ "DF_1_DISPRELDNE",
+ "DF_1_DISPRELPND",
+ "DF_1_EDITED",
+ "DF_1_ENDFILTEE",
+ "DF_1_GLOBAL",
+ "DF_1_GLOBAUDIT",
+ "DF_1_GROUP",
+ "DF_1_IGNMULDEF",
+ "DF_1_INITFIRST",
+ "DF_1_INTERPOSE",
+ "DF_1_KMOD",
+ "DF_1_LOADFLTR",
+ "DF_1_NOCOMMON",
+ "DF_1_NODEFLIB",
+ "DF_1_NODELETE",
+ "DF_1_NODIRECT",
+ "DF_1_NODUMP",
+ "DF_1_NOHDR",
+ "DF_1_NOKSYMS",
+ "DF_1_NOOPEN",
+ "DF_1_NORELOC",
+ "DF_1_NOW",
+ "DF_1_ORIGIN",
+ "DF_1_PIE",
+ "DF_1_SINGLETON",
+ "DF_1_STUB",
+ "DF_1_SYMINTPOSE",
+ "DF_1_TRANS",
+ "DF_1_WEAKFILTER",
+ "DF_BIND_NOW",
+ "DF_ORIGIN",
+ "DF_STATIC_TLS",
+ "DF_SYMBOLIC",
+ "DF_TEXTREL",
+ "DT_ADDRRNGHI",
+ "DT_ADDRRNGLO",
+ "DT_AUDIT",
+ "DT_AUXILIARY",
+ "DT_BIND_NOW",
+ "DT_CHECKSUM",
+ "DT_CONFIG",
+ "DT_DEBUG",
+ "DT_DEPAUDIT",
+ "DT_ENCODING",
+ "DT_FEATURE",
+ "DT_FILTER",
+ "DT_FINI",
+ "DT_FINI_ARRAY",
+ "DT_FINI_ARRAYSZ",
+ "DT_FLAGS",
+ "DT_FLAGS_1",
+ "DT_GNU_CONFLICT",
+ "DT_GNU_CONFLICTSZ",
+ "DT_GNU_HASH",
+ "DT_GNU_LIBLIST",
+ "DT_GNU_LIBLISTSZ",
+ "DT_GNU_PRELINKED",
+ "DT_HASH",
+ "DT_HIOS",
+ "DT_HIPROC",
+ "DT_INIT",
+ "DT_INIT_ARRAY",
+ "DT_INIT_ARRAYSZ",
+ "DT_JMPREL",
+ "DT_LOOS",
+ "DT_LOPROC",
+ "DT_MIPS_AUX_DYNAMIC",
+ "DT_MIPS_BASE_ADDRESS",
+ "DT_MIPS_COMPACT_SIZE",
+ "DT_MIPS_CONFLICT",
+ "DT_MIPS_CONFLICTNO",
+ "DT_MIPS_CXX_FLAGS",
+ "DT_MIPS_DELTA_CLASS",
+ "DT_MIPS_DELTA_CLASSSYM",
+ "DT_MIPS_DELTA_CLASSSYM_NO",
+ "DT_MIPS_DELTA_CLASS_NO",
+ "DT_MIPS_DELTA_INSTANCE",
+ "DT_MIPS_DELTA_INSTANCE_NO",
+ "DT_MIPS_DELTA_RELOC",
+ "DT_MIPS_DELTA_RELOC_NO",
+ "DT_MIPS_DELTA_SYM",
+ "DT_MIPS_DELTA_SYM_NO",
+ "DT_MIPS_DYNSTR_ALIGN",
+ "DT_MIPS_FLAGS",
+ "DT_MIPS_GOTSYM",
+ "DT_MIPS_GP_VALUE",
+ "DT_MIPS_HIDDEN_GOTIDX",
+ "DT_MIPS_HIPAGENO",
+ "DT_MIPS_ICHECKSUM",
+ "DT_MIPS_INTERFACE",
+ "DT_MIPS_INTERFACE_SIZE",
+ "DT_MIPS_IVERSION",
+ "DT_MIPS_LIBLIST",
+ "DT_MIPS_LIBLISTNO",
+ "DT_MIPS_LOCALPAGE_GOTIDX",
+ "DT_MIPS_LOCAL_GOTIDX",
+ "DT_MIPS_LOCAL_GOTNO",
+ "DT_MIPS_MSYM",
+ "DT_MIPS_OPTIONS",
+ "DT_MIPS_PERF_SUFFIX",
+ "DT_MIPS_PIXIE_INIT",
+ "DT_MIPS_PLTGOT",
+ "DT_MIPS_PROTECTED_GOTIDX",
+ "DT_MIPS_RLD_MAP",
+ "DT_MIPS_RLD_MAP_REL",
+ "DT_MIPS_RLD_TEXT_RESOLVE_ADDR",
+ "DT_MIPS_RLD_VERSION",
+ "DT_MIPS_RWPLT",
+ "DT_MIPS_SYMBOL_LIB",
+ "DT_MIPS_SYMTABNO",
+ "DT_MIPS_TIME_STAMP",
+ "DT_MIPS_UNREFEXTNO",
+ "DT_MOVEENT",
+ "DT_MOVESZ",
+ "DT_MOVETAB",
+ "DT_NEEDED",
+ "DT_NULL",
+ "DT_PLTGOT",
+ "DT_PLTPAD",
+ "DT_PLTPADSZ",
+ "DT_PLTREL",
+ "DT_PLTRELSZ",
+ "DT_POSFLAG_1",
+ "DT_PPC64_GLINK",
+ "DT_PPC64_OPD",
+ "DT_PPC64_OPDSZ",
+ "DT_PPC64_OPT",
+ "DT_PPC_GOT",
+ "DT_PPC_OPT",
+ "DT_PREINIT_ARRAY",
+ "DT_PREINIT_ARRAYSZ",
+ "DT_REL",
+ "DT_RELA",
+ "DT_RELACOUNT",
+ "DT_RELAENT",
+ "DT_RELASZ",
+ "DT_RELCOUNT",
+ "DT_RELENT",
+ "DT_RELSZ",
+ "DT_RPATH",
+ "DT_RUNPATH",
+ "DT_SONAME",
+ "DT_SPARC_REGISTER",
+ "DT_STRSZ",
+ "DT_STRTAB",
+ "DT_SYMBOLIC",
+ "DT_SYMENT",
+ "DT_SYMINENT",
+ "DT_SYMINFO",
+ "DT_SYMINSZ",
+ "DT_SYMTAB",
+ "DT_SYMTAB_SHNDX",
+ "DT_TEXTREL",
+ "DT_TLSDESC_GOT",
+ "DT_TLSDESC_PLT",
+ "DT_USED",
+ "DT_VALRNGHI",
+ "DT_VALRNGLO",
+ "DT_VERDEF",
+ "DT_VERDEFNUM",
+ "DT_VERNEED",
+ "DT_VERNEEDNUM",
+ "DT_VERSYM",
+ "Data",
+ "Dyn32",
+ "Dyn64",
+ "DynFlag",
+ "DynFlag1",
+ "DynTag",
+ "EI_ABIVERSION",
+ "EI_CLASS",
+ "EI_DATA",
+ "EI_NIDENT",
+ "EI_OSABI",
+ "EI_PAD",
+ "EI_VERSION",
+ "ELFCLASS32",
+ "ELFCLASS64",
+ "ELFCLASSNONE",
+ "ELFDATA2LSB",
+ "ELFDATA2MSB",
+ "ELFDATANONE",
+ "ELFMAG",
+ "ELFOSABI_86OPEN",
+ "ELFOSABI_AIX",
+ "ELFOSABI_ARM",
+ "ELFOSABI_AROS",
+ "ELFOSABI_CLOUDABI",
+ "ELFOSABI_FENIXOS",
+ "ELFOSABI_FREEBSD",
+ "ELFOSABI_HPUX",
+ "ELFOSABI_HURD",
+ "ELFOSABI_IRIX",
+ "ELFOSABI_LINUX",
+ "ELFOSABI_MODESTO",
+ "ELFOSABI_NETBSD",
+ "ELFOSABI_NONE",
+ "ELFOSABI_NSK",
+ "ELFOSABI_OPENBSD",
+ "ELFOSABI_OPENVMS",
+ "ELFOSABI_SOLARIS",
+ "ELFOSABI_STANDALONE",
+ "ELFOSABI_TRU64",
+ "EM_386",
+ "EM_486",
+ "EM_56800EX",
+ "EM_68HC05",
+ "EM_68HC08",
+ "EM_68HC11",
+ "EM_68HC12",
+ "EM_68HC16",
+ "EM_68K",
+ "EM_78KOR",
+ "EM_8051",
+ "EM_860",
+ "EM_88K",
+ "EM_960",
+ "EM_AARCH64",
+ "EM_ALPHA",
+ "EM_ALPHA_STD",
+ "EM_ALTERA_NIOS2",
+ "EM_AMDGPU",
+ "EM_ARC",
+ "EM_ARCA",
+ "EM_ARC_COMPACT",
+ "EM_ARC_COMPACT2",
+ "EM_ARM",
+ "EM_AVR",
+ "EM_AVR32",
+ "EM_BA1",
+ "EM_BA2",
+ "EM_BLACKFIN",
+ "EM_BPF",
+ "EM_C166",
+ "EM_CDP",
+ "EM_CE",
+ "EM_CLOUDSHIELD",
+ "EM_COGE",
+ "EM_COLDFIRE",
+ "EM_COOL",
+ "EM_COREA_1ST",
+ "EM_COREA_2ND",
+ "EM_CR",
+ "EM_CR16",
+ "EM_CRAYNV2",
+ "EM_CRIS",
+ "EM_CRX",
+ "EM_CSR_KALIMBA",
+ "EM_CUDA",
+ "EM_CYPRESS_M8C",
+ "EM_D10V",
+ "EM_D30V",
+ "EM_DSP24",
+ "EM_DSPIC30F",
+ "EM_DXP",
+ "EM_ECOG1",
+ "EM_ECOG16",
+ "EM_ECOG1X",
+ "EM_ECOG2",
+ "EM_ETPU",
+ "EM_EXCESS",
+ "EM_F2MC16",
+ "EM_FIREPATH",
+ "EM_FR20",
+ "EM_FR30",
+ "EM_FT32",
+ "EM_FX66",
+ "EM_H8S",
+ "EM_H8_300",
+ "EM_H8_300H",
+ "EM_H8_500",
+ "EM_HUANY",
+ "EM_IA_64",
+ "EM_INTEL205",
+ "EM_INTEL206",
+ "EM_INTEL207",
+ "EM_INTEL208",
+ "EM_INTEL209",
+ "EM_IP2K",
+ "EM_JAVELIN",
+ "EM_K10M",
+ "EM_KM32",
+ "EM_KMX16",
+ "EM_KMX32",
+ "EM_KMX8",
+ "EM_KVARC",
+ "EM_L10M",
+ "EM_LANAI",
+ "EM_LATTICEMICO32",
+ "EM_LOONGARCH",
+ "EM_M16C",
+ "EM_M32",
+ "EM_M32C",
+ "EM_M32R",
+ "EM_MANIK",
+ "EM_MAX",
+ "EM_MAXQ30",
+ "EM_MCHP_PIC",
+ "EM_MCST_ELBRUS",
+ "EM_ME16",
+ "EM_METAG",
+ "EM_MICROBLAZE",
+ "EM_MIPS",
+ "EM_MIPS_RS3_LE",
+ "EM_MIPS_RS4_BE",
+ "EM_MIPS_X",
+ "EM_MMA",
+ "EM_MMDSP_PLUS",
+ "EM_MMIX",
+ "EM_MN10200",
+ "EM_MN10300",
+ "EM_MOXIE",
+ "EM_MSP430",
+ "EM_NCPU",
+ "EM_NDR1",
+ "EM_NDS32",
+ "EM_NONE",
+ "EM_NORC",
+ "EM_NS32K",
+ "EM_OPEN8",
+ "EM_OPENRISC",
+ "EM_PARISC",
+ "EM_PCP",
+ "EM_PDP10",
+ "EM_PDP11",
+ "EM_PDSP",
+ "EM_PJ",
+ "EM_PPC",
+ "EM_PPC64",
+ "EM_PRISM",
+ "EM_QDSP6",
+ "EM_R32C",
+ "EM_RCE",
+ "EM_RH32",
+ "EM_RISCV",
+ "EM_RL78",
+ "EM_RS08",
+ "EM_RX",
+ "EM_S370",
+ "EM_S390",
+ "EM_SCORE7",
+ "EM_SEP",
+ "EM_SE_C17",
+ "EM_SE_C33",
+ "EM_SH",
+ "EM_SHARC",
+ "EM_SLE9X",
+ "EM_SNP1K",
+ "EM_SPARC",
+ "EM_SPARC32PLUS",
+ "EM_SPARCV9",
+ "EM_ST100",
+ "EM_ST19",
+ "EM_ST200",
+ "EM_ST7",
+ "EM_ST9PLUS",
+ "EM_STARCORE",
+ "EM_STM8",
+ "EM_STXP7X",
+ "EM_SVX",
+ "EM_TILE64",
+ "EM_TILEGX",
+ "EM_TILEPRO",
+ "EM_TINYJ",
+ "EM_TI_ARP32",
+ "EM_TI_C2000",
+ "EM_TI_C5500",
+ "EM_TI_C6000",
+ "EM_TI_PRU",
+ "EM_TMM_GPP",
+ "EM_TPC",
+ "EM_TRICORE",
+ "EM_TRIMEDIA",
+ "EM_TSK3000",
+ "EM_UNICORE",
+ "EM_V800",
+ "EM_V850",
+ "EM_VAX",
+ "EM_VIDEOCORE",
+ "EM_VIDEOCORE3",
+ "EM_VIDEOCORE5",
+ "EM_VISIUM",
+ "EM_VPP500",
+ "EM_X86_64",
+ "EM_XCORE",
+ "EM_XGATE",
+ "EM_XIMO16",
+ "EM_XTENSA",
+ "EM_Z80",
+ "EM_ZSP",
+ "ET_CORE",
+ "ET_DYN",
+ "ET_EXEC",
+ "ET_HIOS",
+ "ET_HIPROC",
+ "ET_LOOS",
+ "ET_LOPROC",
+ "ET_NONE",
+ "ET_REL",
+ "EV_CURRENT",
+ "EV_NONE",
+ "ErrNoSymbols",
+ "File",
+ "FileHeader",
+ "FormatError",
+ "Header32",
+ "Header64",
+ "ImportedSymbol",
+ "Machine",
+ "NT_FPREGSET",
+ "NT_PRPSINFO",
+ "NT_PRSTATUS",
+ "NType",
+ "NewFile",
+ "OSABI",
+ "Open",
+ "PF_MASKOS",
+ "PF_MASKPROC",
+ "PF_R",
+ "PF_W",
+ "PF_X",
+ "PT_AARCH64_ARCHEXT",
+ "PT_AARCH64_UNWIND",
+ "PT_ARM_ARCHEXT",
+ "PT_ARM_EXIDX",
+ "PT_DYNAMIC",
+ "PT_GNU_EH_FRAME",
+ "PT_GNU_MBIND_HI",
+ "PT_GNU_MBIND_LO",
+ "PT_GNU_PROPERTY",
+ "PT_GNU_RELRO",
+ "PT_GNU_STACK",
+ "PT_HIOS",
+ "PT_HIPROC",
+ "PT_INTERP",
+ "PT_LOAD",
+ "PT_LOOS",
+ "PT_LOPROC",
+ "PT_MIPS_ABIFLAGS",
+ "PT_MIPS_OPTIONS",
+ "PT_MIPS_REGINFO",
+ "PT_MIPS_RTPROC",
+ "PT_NOTE",
+ "PT_NULL",
+ "PT_OPENBSD_BOOTDATA",
+ "PT_OPENBSD_RANDOMIZE",
+ "PT_OPENBSD_WXNEEDED",
+ "PT_PAX_FLAGS",
+ "PT_PHDR",
+ "PT_S390_PGSTE",
+ "PT_SHLIB",
+ "PT_SUNWSTACK",
+ "PT_SUNW_EH_FRAME",
+ "PT_TLS",
+ "Prog",
+ "Prog32",
+ "Prog64",
+ "ProgFlag",
+ "ProgHeader",
+ "ProgType",
+ "R_386",
+ "R_386_16",
+ "R_386_32",
+ "R_386_32PLT",
+ "R_386_8",
+ "R_386_COPY",
+ "R_386_GLOB_DAT",
+ "R_386_GOT32",
+ "R_386_GOT32X",
+ "R_386_GOTOFF",
+ "R_386_GOTPC",
+ "R_386_IRELATIVE",
+ "R_386_JMP_SLOT",
+ "R_386_NONE",
+ "R_386_PC16",
+ "R_386_PC32",
+ "R_386_PC8",
+ "R_386_PLT32",
+ "R_386_RELATIVE",
+ "R_386_SIZE32",
+ "R_386_TLS_DESC",
+ "R_386_TLS_DESC_CALL",
+ "R_386_TLS_DTPMOD32",
+ "R_386_TLS_DTPOFF32",
+ "R_386_TLS_GD",
+ "R_386_TLS_GD_32",
+ "R_386_TLS_GD_CALL",
+ "R_386_TLS_GD_POP",
+ "R_386_TLS_GD_PUSH",
+ "R_386_TLS_GOTDESC",
+ "R_386_TLS_GOTIE",
+ "R_386_TLS_IE",
+ "R_386_TLS_IE_32",
+ "R_386_TLS_LDM",
+ "R_386_TLS_LDM_32",
+ "R_386_TLS_LDM_CALL",
+ "R_386_TLS_LDM_POP",
+ "R_386_TLS_LDM_PUSH",
+ "R_386_TLS_LDO_32",
+ "R_386_TLS_LE",
+ "R_386_TLS_LE_32",
+ "R_386_TLS_TPOFF",
+ "R_386_TLS_TPOFF32",
+ "R_390",
+ "R_390_12",
+ "R_390_16",
+ "R_390_20",
+ "R_390_32",
+ "R_390_64",
+ "R_390_8",
+ "R_390_COPY",
+ "R_390_GLOB_DAT",
+ "R_390_GOT12",
+ "R_390_GOT16",
+ "R_390_GOT20",
+ "R_390_GOT32",
+ "R_390_GOT64",
+ "R_390_GOTENT",
+ "R_390_GOTOFF",
+ "R_390_GOTOFF16",
+ "R_390_GOTOFF64",
+ "R_390_GOTPC",
+ "R_390_GOTPCDBL",
+ "R_390_GOTPLT12",
+ "R_390_GOTPLT16",
+ "R_390_GOTPLT20",
+ "R_390_GOTPLT32",
+ "R_390_GOTPLT64",
+ "R_390_GOTPLTENT",
+ "R_390_GOTPLTOFF16",
+ "R_390_GOTPLTOFF32",
+ "R_390_GOTPLTOFF64",
+ "R_390_JMP_SLOT",
+ "R_390_NONE",
+ "R_390_PC16",
+ "R_390_PC16DBL",
+ "R_390_PC32",
+ "R_390_PC32DBL",
+ "R_390_PC64",
+ "R_390_PLT16DBL",
+ "R_390_PLT32",
+ "R_390_PLT32DBL",
+ "R_390_PLT64",
+ "R_390_RELATIVE",
+ "R_390_TLS_DTPMOD",
+ "R_390_TLS_DTPOFF",
+ "R_390_TLS_GD32",
+ "R_390_TLS_GD64",
+ "R_390_TLS_GDCALL",
+ "R_390_TLS_GOTIE12",
+ "R_390_TLS_GOTIE20",
+ "R_390_TLS_GOTIE32",
+ "R_390_TLS_GOTIE64",
+ "R_390_TLS_IE32",
+ "R_390_TLS_IE64",
+ "R_390_TLS_IEENT",
+ "R_390_TLS_LDCALL",
+ "R_390_TLS_LDM32",
+ "R_390_TLS_LDM64",
+ "R_390_TLS_LDO32",
+ "R_390_TLS_LDO64",
+ "R_390_TLS_LE32",
+ "R_390_TLS_LE64",
+ "R_390_TLS_LOAD",
+ "R_390_TLS_TPOFF",
+ "R_AARCH64",
+ "R_AARCH64_ABS16",
+ "R_AARCH64_ABS32",
+ "R_AARCH64_ABS64",
+ "R_AARCH64_ADD_ABS_LO12_NC",
+ "R_AARCH64_ADR_GOT_PAGE",
+ "R_AARCH64_ADR_PREL_LO21",
+ "R_AARCH64_ADR_PREL_PG_HI21",
+ "R_AARCH64_ADR_PREL_PG_HI21_NC",
+ "R_AARCH64_CALL26",
+ "R_AARCH64_CONDBR19",
+ "R_AARCH64_COPY",
+ "R_AARCH64_GLOB_DAT",
+ "R_AARCH64_GOT_LD_PREL19",
+ "R_AARCH64_IRELATIVE",
+ "R_AARCH64_JUMP26",
+ "R_AARCH64_JUMP_SLOT",
+ "R_AARCH64_LD64_GOTOFF_LO15",
+ "R_AARCH64_LD64_GOTPAGE_LO15",
+ "R_AARCH64_LD64_GOT_LO12_NC",
+ "R_AARCH64_LDST128_ABS_LO12_NC",
+ "R_AARCH64_LDST16_ABS_LO12_NC",
+ "R_AARCH64_LDST32_ABS_LO12_NC",
+ "R_AARCH64_LDST64_ABS_LO12_NC",
+ "R_AARCH64_LDST8_ABS_LO12_NC",
+ "R_AARCH64_LD_PREL_LO19",
+ "R_AARCH64_MOVW_SABS_G0",
+ "R_AARCH64_MOVW_SABS_G1",
+ "R_AARCH64_MOVW_SABS_G2",
+ "R_AARCH64_MOVW_UABS_G0",
+ "R_AARCH64_MOVW_UABS_G0_NC",
+ "R_AARCH64_MOVW_UABS_G1",
+ "R_AARCH64_MOVW_UABS_G1_NC",
+ "R_AARCH64_MOVW_UABS_G2",
+ "R_AARCH64_MOVW_UABS_G2_NC",
+ "R_AARCH64_MOVW_UABS_G3",
+ "R_AARCH64_NONE",
+ "R_AARCH64_NULL",
+ "R_AARCH64_P32_ABS16",
+ "R_AARCH64_P32_ABS32",
+ "R_AARCH64_P32_ADD_ABS_LO12_NC",
+ "R_AARCH64_P32_ADR_GOT_PAGE",
+ "R_AARCH64_P32_ADR_PREL_LO21",
+ "R_AARCH64_P32_ADR_PREL_PG_HI21",
+ "R_AARCH64_P32_CALL26",
+ "R_AARCH64_P32_CONDBR19",
+ "R_AARCH64_P32_COPY",
+ "R_AARCH64_P32_GLOB_DAT",
+ "R_AARCH64_P32_GOT_LD_PREL19",
+ "R_AARCH64_P32_IRELATIVE",
+ "R_AARCH64_P32_JUMP26",
+ "R_AARCH64_P32_JUMP_SLOT",
+ "R_AARCH64_P32_LD32_GOT_LO12_NC",
+ "R_AARCH64_P32_LDST128_ABS_LO12_NC",
+ "R_AARCH64_P32_LDST16_ABS_LO12_NC",
+ "R_AARCH64_P32_LDST32_ABS_LO12_NC",
+ "R_AARCH64_P32_LDST64_ABS_LO12_NC",
+ "R_AARCH64_P32_LDST8_ABS_LO12_NC",
+ "R_AARCH64_P32_LD_PREL_LO19",
+ "R_AARCH64_P32_MOVW_SABS_G0",
+ "R_AARCH64_P32_MOVW_UABS_G0",
+ "R_AARCH64_P32_MOVW_UABS_G0_NC",
+ "R_AARCH64_P32_MOVW_UABS_G1",
+ "R_AARCH64_P32_PREL16",
+ "R_AARCH64_P32_PREL32",
+ "R_AARCH64_P32_RELATIVE",
+ "R_AARCH64_P32_TLSDESC",
+ "R_AARCH64_P32_TLSDESC_ADD_LO12_NC",
+ "R_AARCH64_P32_TLSDESC_ADR_PAGE21",
+ "R_AARCH64_P32_TLSDESC_ADR_PREL21",
+ "R_AARCH64_P32_TLSDESC_CALL",
+ "R_AARCH64_P32_TLSDESC_LD32_LO12_NC",
+ "R_AARCH64_P32_TLSDESC_LD_PREL19",
+ "R_AARCH64_P32_TLSGD_ADD_LO12_NC",
+ "R_AARCH64_P32_TLSGD_ADR_PAGE21",
+ "R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21",
+ "R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC",
+ "R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19",
+ "R_AARCH64_P32_TLSLE_ADD_TPREL_HI12",
+ "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12",
+ "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC",
+ "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0",
+ "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC",
+ "R_AARCH64_P32_TLSLE_MOVW_TPREL_G1",
+ "R_AARCH64_P32_TLS_DTPMOD",
+ "R_AARCH64_P32_TLS_DTPREL",
+ "R_AARCH64_P32_TLS_TPREL",
+ "R_AARCH64_P32_TSTBR14",
+ "R_AARCH64_PREL16",
+ "R_AARCH64_PREL32",
+ "R_AARCH64_PREL64",
+ "R_AARCH64_RELATIVE",
+ "R_AARCH64_TLSDESC",
+ "R_AARCH64_TLSDESC_ADD",
+ "R_AARCH64_TLSDESC_ADD_LO12_NC",
+ "R_AARCH64_TLSDESC_ADR_PAGE21",
+ "R_AARCH64_TLSDESC_ADR_PREL21",
+ "R_AARCH64_TLSDESC_CALL",
+ "R_AARCH64_TLSDESC_LD64_LO12_NC",
+ "R_AARCH64_TLSDESC_LDR",
+ "R_AARCH64_TLSDESC_LD_PREL19",
+ "R_AARCH64_TLSDESC_OFF_G0_NC",
+ "R_AARCH64_TLSDESC_OFF_G1",
+ "R_AARCH64_TLSGD_ADD_LO12_NC",
+ "R_AARCH64_TLSGD_ADR_PAGE21",
+ "R_AARCH64_TLSGD_ADR_PREL21",
+ "R_AARCH64_TLSGD_MOVW_G0_NC",
+ "R_AARCH64_TLSGD_MOVW_G1",
+ "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21",
+ "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC",
+ "R_AARCH64_TLSIE_LD_GOTTPREL_PREL19",
+ "R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC",
+ "R_AARCH64_TLSIE_MOVW_GOTTPREL_G1",
+ "R_AARCH64_TLSLD_ADR_PAGE21",
+ "R_AARCH64_TLSLD_ADR_PREL21",
+ "R_AARCH64_TLSLD_LDST128_DTPREL_LO12",
+ "R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC",
+ "R_AARCH64_TLSLE_ADD_TPREL_HI12",
+ "R_AARCH64_TLSLE_ADD_TPREL_LO12",
+ "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC",
+ "R_AARCH64_TLSLE_LDST128_TPREL_LO12",
+ "R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC",
+ "R_AARCH64_TLSLE_MOVW_TPREL_G0",
+ "R_AARCH64_TLSLE_MOVW_TPREL_G0_NC",
+ "R_AARCH64_TLSLE_MOVW_TPREL_G1",
+ "R_AARCH64_TLSLE_MOVW_TPREL_G1_NC",
+ "R_AARCH64_TLSLE_MOVW_TPREL_G2",
+ "R_AARCH64_TLS_DTPMOD64",
+ "R_AARCH64_TLS_DTPREL64",
+ "R_AARCH64_TLS_TPREL64",
+ "R_AARCH64_TSTBR14",
+ "R_ALPHA",
+ "R_ALPHA_BRADDR",
+ "R_ALPHA_COPY",
+ "R_ALPHA_GLOB_DAT",
+ "R_ALPHA_GPDISP",
+ "R_ALPHA_GPREL32",
+ "R_ALPHA_GPRELHIGH",
+ "R_ALPHA_GPRELLOW",
+ "R_ALPHA_GPVALUE",
+ "R_ALPHA_HINT",
+ "R_ALPHA_IMMED_BR_HI32",
+ "R_ALPHA_IMMED_GP_16",
+ "R_ALPHA_IMMED_GP_HI32",
+ "R_ALPHA_IMMED_LO32",
+ "R_ALPHA_IMMED_SCN_HI32",
+ "R_ALPHA_JMP_SLOT",
+ "R_ALPHA_LITERAL",
+ "R_ALPHA_LITUSE",
+ "R_ALPHA_NONE",
+ "R_ALPHA_OP_PRSHIFT",
+ "R_ALPHA_OP_PSUB",
+ "R_ALPHA_OP_PUSH",
+ "R_ALPHA_OP_STORE",
+ "R_ALPHA_REFLONG",
+ "R_ALPHA_REFQUAD",
+ "R_ALPHA_RELATIVE",
+ "R_ALPHA_SREL16",
+ "R_ALPHA_SREL32",
+ "R_ALPHA_SREL64",
+ "R_ARM",
+ "R_ARM_ABS12",
+ "R_ARM_ABS16",
+ "R_ARM_ABS32",
+ "R_ARM_ABS32_NOI",
+ "R_ARM_ABS8",
+ "R_ARM_ALU_PCREL_15_8",
+ "R_ARM_ALU_PCREL_23_15",
+ "R_ARM_ALU_PCREL_7_0",
+ "R_ARM_ALU_PC_G0",
+ "R_ARM_ALU_PC_G0_NC",
+ "R_ARM_ALU_PC_G1",
+ "R_ARM_ALU_PC_G1_NC",
+ "R_ARM_ALU_PC_G2",
+ "R_ARM_ALU_SBREL_19_12_NC",
+ "R_ARM_ALU_SBREL_27_20_CK",
+ "R_ARM_ALU_SB_G0",
+ "R_ARM_ALU_SB_G0_NC",
+ "R_ARM_ALU_SB_G1",
+ "R_ARM_ALU_SB_G1_NC",
+ "R_ARM_ALU_SB_G2",
+ "R_ARM_AMP_VCALL9",
+ "R_ARM_BASE_ABS",
+ "R_ARM_CALL",
+ "R_ARM_COPY",
+ "R_ARM_GLOB_DAT",
+ "R_ARM_GNU_VTENTRY",
+ "R_ARM_GNU_VTINHERIT",
+ "R_ARM_GOT32",
+ "R_ARM_GOTOFF",
+ "R_ARM_GOTOFF12",
+ "R_ARM_GOTPC",
+ "R_ARM_GOTRELAX",
+ "R_ARM_GOT_ABS",
+ "R_ARM_GOT_BREL12",
+ "R_ARM_GOT_PREL",
+ "R_ARM_IRELATIVE",
+ "R_ARM_JUMP24",
+ "R_ARM_JUMP_SLOT",
+ "R_ARM_LDC_PC_G0",
+ "R_ARM_LDC_PC_G1",
+ "R_ARM_LDC_PC_G2",
+ "R_ARM_LDC_SB_G0",
+ "R_ARM_LDC_SB_G1",
+ "R_ARM_LDC_SB_G2",
+ "R_ARM_LDRS_PC_G0",
+ "R_ARM_LDRS_PC_G1",
+ "R_ARM_LDRS_PC_G2",
+ "R_ARM_LDRS_SB_G0",
+ "R_ARM_LDRS_SB_G1",
+ "R_ARM_LDRS_SB_G2",
+ "R_ARM_LDR_PC_G1",
+ "R_ARM_LDR_PC_G2",
+ "R_ARM_LDR_SBREL_11_10_NC",
+ "R_ARM_LDR_SB_G0",
+ "R_ARM_LDR_SB_G1",
+ "R_ARM_LDR_SB_G2",
+ "R_ARM_ME_TOO",
+ "R_ARM_MOVT_ABS",
+ "R_ARM_MOVT_BREL",
+ "R_ARM_MOVT_PREL",
+ "R_ARM_MOVW_ABS_NC",
+ "R_ARM_MOVW_BREL",
+ "R_ARM_MOVW_BREL_NC",
+ "R_ARM_MOVW_PREL_NC",
+ "R_ARM_NONE",
+ "R_ARM_PC13",
+ "R_ARM_PC24",
+ "R_ARM_PLT32",
+ "R_ARM_PLT32_ABS",
+ "R_ARM_PREL31",
+ "R_ARM_PRIVATE_0",
+ "R_ARM_PRIVATE_1",
+ "R_ARM_PRIVATE_10",
+ "R_ARM_PRIVATE_11",
+ "R_ARM_PRIVATE_12",
+ "R_ARM_PRIVATE_13",
+ "R_ARM_PRIVATE_14",
+ "R_ARM_PRIVATE_15",
+ "R_ARM_PRIVATE_2",
+ "R_ARM_PRIVATE_3",
+ "R_ARM_PRIVATE_4",
+ "R_ARM_PRIVATE_5",
+ "R_ARM_PRIVATE_6",
+ "R_ARM_PRIVATE_7",
+ "R_ARM_PRIVATE_8",
+ "R_ARM_PRIVATE_9",
+ "R_ARM_RABS32",
+ "R_ARM_RBASE",
+ "R_ARM_REL32",
+ "R_ARM_REL32_NOI",
+ "R_ARM_RELATIVE",
+ "R_ARM_RPC24",
+ "R_ARM_RREL32",
+ "R_ARM_RSBREL32",
+ "R_ARM_RXPC25",
+ "R_ARM_SBREL31",
+ "R_ARM_SBREL32",
+ "R_ARM_SWI24",
+ "R_ARM_TARGET1",
+ "R_ARM_TARGET2",
+ "R_ARM_THM_ABS5",
+ "R_ARM_THM_ALU_ABS_G0_NC",
+ "R_ARM_THM_ALU_ABS_G1_NC",
+ "R_ARM_THM_ALU_ABS_G2_NC",
+ "R_ARM_THM_ALU_ABS_G3",
+ "R_ARM_THM_ALU_PREL_11_0",
+ "R_ARM_THM_GOT_BREL12",
+ "R_ARM_THM_JUMP11",
+ "R_ARM_THM_JUMP19",
+ "R_ARM_THM_JUMP24",
+ "R_ARM_THM_JUMP6",
+ "R_ARM_THM_JUMP8",
+ "R_ARM_THM_MOVT_ABS",
+ "R_ARM_THM_MOVT_BREL",
+ "R_ARM_THM_MOVT_PREL",
+ "R_ARM_THM_MOVW_ABS_NC",
+ "R_ARM_THM_MOVW_BREL",
+ "R_ARM_THM_MOVW_BREL_NC",
+ "R_ARM_THM_MOVW_PREL_NC",
+ "R_ARM_THM_PC12",
+ "R_ARM_THM_PC22",
+ "R_ARM_THM_PC8",
+ "R_ARM_THM_RPC22",
+ "R_ARM_THM_SWI8",
+ "R_ARM_THM_TLS_CALL",
+ "R_ARM_THM_TLS_DESCSEQ16",
+ "R_ARM_THM_TLS_DESCSEQ32",
+ "R_ARM_THM_XPC22",
+ "R_ARM_TLS_CALL",
+ "R_ARM_TLS_DESCSEQ",
+ "R_ARM_TLS_DTPMOD32",
+ "R_ARM_TLS_DTPOFF32",
+ "R_ARM_TLS_GD32",
+ "R_ARM_TLS_GOTDESC",
+ "R_ARM_TLS_IE12GP",
+ "R_ARM_TLS_IE32",
+ "R_ARM_TLS_LDM32",
+ "R_ARM_TLS_LDO12",
+ "R_ARM_TLS_LDO32",
+ "R_ARM_TLS_LE12",
+ "R_ARM_TLS_LE32",
+ "R_ARM_TLS_TPOFF32",
+ "R_ARM_V4BX",
+ "R_ARM_XPC25",
+ "R_INFO",
+ "R_INFO32",
+ "R_LARCH",
+ "R_LARCH_32",
+ "R_LARCH_32_PCREL",
+ "R_LARCH_64",
+ "R_LARCH_ABS64_HI12",
+ "R_LARCH_ABS64_LO20",
+ "R_LARCH_ABS_HI20",
+ "R_LARCH_ABS_LO12",
+ "R_LARCH_ADD16",
+ "R_LARCH_ADD24",
+ "R_LARCH_ADD32",
+ "R_LARCH_ADD64",
+ "R_LARCH_ADD8",
+ "R_LARCH_B16",
+ "R_LARCH_B21",
+ "R_LARCH_B26",
+ "R_LARCH_COPY",
+ "R_LARCH_GNU_VTENTRY",
+ "R_LARCH_GNU_VTINHERIT",
+ "R_LARCH_GOT64_HI12",
+ "R_LARCH_GOT64_LO20",
+ "R_LARCH_GOT64_PC_HI12",
+ "R_LARCH_GOT64_PC_LO20",
+ "R_LARCH_GOT_HI20",
+ "R_LARCH_GOT_LO12",
+ "R_LARCH_GOT_PC_HI20",
+ "R_LARCH_GOT_PC_LO12",
+ "R_LARCH_IRELATIVE",
+ "R_LARCH_JUMP_SLOT",
+ "R_LARCH_MARK_LA",
+ "R_LARCH_MARK_PCREL",
+ "R_LARCH_NONE",
+ "R_LARCH_PCALA64_HI12",
+ "R_LARCH_PCALA64_LO20",
+ "R_LARCH_PCALA_HI20",
+ "R_LARCH_PCALA_LO12",
+ "R_LARCH_RELATIVE",
+ "R_LARCH_RELAX",
+ "R_LARCH_SOP_ADD",
+ "R_LARCH_SOP_AND",
+ "R_LARCH_SOP_ASSERT",
+ "R_LARCH_SOP_IF_ELSE",
+ "R_LARCH_SOP_NOT",
+ "R_LARCH_SOP_POP_32_S_0_10_10_16_S2",
+ "R_LARCH_SOP_POP_32_S_0_5_10_16_S2",
+ "R_LARCH_SOP_POP_32_S_10_12",
+ "R_LARCH_SOP_POP_32_S_10_16",
+ "R_LARCH_SOP_POP_32_S_10_16_S2",
+ "R_LARCH_SOP_POP_32_S_10_5",
+ "R_LARCH_SOP_POP_32_S_5_20",
+ "R_LARCH_SOP_POP_32_U",
+ "R_LARCH_SOP_POP_32_U_10_12",
+ "R_LARCH_SOP_PUSH_ABSOLUTE",
+ "R_LARCH_SOP_PUSH_DUP",
+ "R_LARCH_SOP_PUSH_GPREL",
+ "R_LARCH_SOP_PUSH_PCREL",
+ "R_LARCH_SOP_PUSH_PLT_PCREL",
+ "R_LARCH_SOP_PUSH_TLS_GD",
+ "R_LARCH_SOP_PUSH_TLS_GOT",
+ "R_LARCH_SOP_PUSH_TLS_TPREL",
+ "R_LARCH_SOP_SL",
+ "R_LARCH_SOP_SR",
+ "R_LARCH_SOP_SUB",
+ "R_LARCH_SUB16",
+ "R_LARCH_SUB24",
+ "R_LARCH_SUB32",
+ "R_LARCH_SUB64",
+ "R_LARCH_SUB8",
+ "R_LARCH_TLS_DTPMOD32",
+ "R_LARCH_TLS_DTPMOD64",
+ "R_LARCH_TLS_DTPREL32",
+ "R_LARCH_TLS_DTPREL64",
+ "R_LARCH_TLS_GD_HI20",
+ "R_LARCH_TLS_GD_PC_HI20",
+ "R_LARCH_TLS_IE64_HI12",
+ "R_LARCH_TLS_IE64_LO20",
+ "R_LARCH_TLS_IE64_PC_HI12",
+ "R_LARCH_TLS_IE64_PC_LO20",
+ "R_LARCH_TLS_IE_HI20",
+ "R_LARCH_TLS_IE_LO12",
+ "R_LARCH_TLS_IE_PC_HI20",
+ "R_LARCH_TLS_IE_PC_LO12",
+ "R_LARCH_TLS_LD_HI20",
+ "R_LARCH_TLS_LD_PC_HI20",
+ "R_LARCH_TLS_LE64_HI12",
+ "R_LARCH_TLS_LE64_LO20",
+ "R_LARCH_TLS_LE_HI20",
+ "R_LARCH_TLS_LE_LO12",
+ "R_LARCH_TLS_TPREL32",
+ "R_LARCH_TLS_TPREL64",
+ "R_MIPS",
+ "R_MIPS_16",
+ "R_MIPS_26",
+ "R_MIPS_32",
+ "R_MIPS_64",
+ "R_MIPS_ADD_IMMEDIATE",
+ "R_MIPS_CALL16",
+ "R_MIPS_CALL_HI16",
+ "R_MIPS_CALL_LO16",
+ "R_MIPS_DELETE",
+ "R_MIPS_GOT16",
+ "R_MIPS_GOT_DISP",
+ "R_MIPS_GOT_HI16",
+ "R_MIPS_GOT_LO16",
+ "R_MIPS_GOT_OFST",
+ "R_MIPS_GOT_PAGE",
+ "R_MIPS_GPREL16",
+ "R_MIPS_GPREL32",
+ "R_MIPS_HI16",
+ "R_MIPS_HIGHER",
+ "R_MIPS_HIGHEST",
+ "R_MIPS_INSERT_A",
+ "R_MIPS_INSERT_B",
+ "R_MIPS_JALR",
+ "R_MIPS_LITERAL",
+ "R_MIPS_LO16",
+ "R_MIPS_NONE",
+ "R_MIPS_PC16",
+ "R_MIPS_PJUMP",
+ "R_MIPS_REL16",
+ "R_MIPS_REL32",
+ "R_MIPS_RELGOT",
+ "R_MIPS_SCN_DISP",
+ "R_MIPS_SHIFT5",
+ "R_MIPS_SHIFT6",
+ "R_MIPS_SUB",
+ "R_MIPS_TLS_DTPMOD32",
+ "R_MIPS_TLS_DTPMOD64",
+ "R_MIPS_TLS_DTPREL32",
+ "R_MIPS_TLS_DTPREL64",
+ "R_MIPS_TLS_DTPREL_HI16",
+ "R_MIPS_TLS_DTPREL_LO16",
+ "R_MIPS_TLS_GD",
+ "R_MIPS_TLS_GOTTPREL",
+ "R_MIPS_TLS_LDM",
+ "R_MIPS_TLS_TPREL32",
+ "R_MIPS_TLS_TPREL64",
+ "R_MIPS_TLS_TPREL_HI16",
+ "R_MIPS_TLS_TPREL_LO16",
+ "R_PPC",
+ "R_PPC64",
+ "R_PPC64_ADDR14",
+ "R_PPC64_ADDR14_BRNTAKEN",
+ "R_PPC64_ADDR14_BRTAKEN",
+ "R_PPC64_ADDR16",
+ "R_PPC64_ADDR16_DS",
+ "R_PPC64_ADDR16_HA",
+ "R_PPC64_ADDR16_HI",
+ "R_PPC64_ADDR16_HIGH",
+ "R_PPC64_ADDR16_HIGHA",
+ "R_PPC64_ADDR16_HIGHER",
+ "R_PPC64_ADDR16_HIGHER34",
+ "R_PPC64_ADDR16_HIGHERA",
+ "R_PPC64_ADDR16_HIGHERA34",
+ "R_PPC64_ADDR16_HIGHEST",
+ "R_PPC64_ADDR16_HIGHEST34",
+ "R_PPC64_ADDR16_HIGHESTA",
+ "R_PPC64_ADDR16_HIGHESTA34",
+ "R_PPC64_ADDR16_LO",
+ "R_PPC64_ADDR16_LO_DS",
+ "R_PPC64_ADDR24",
+ "R_PPC64_ADDR32",
+ "R_PPC64_ADDR64",
+ "R_PPC64_ADDR64_LOCAL",
+ "R_PPC64_COPY",
+ "R_PPC64_D28",
+ "R_PPC64_D34",
+ "R_PPC64_D34_HA30",
+ "R_PPC64_D34_HI30",
+ "R_PPC64_D34_LO",
+ "R_PPC64_DTPMOD64",
+ "R_PPC64_DTPREL16",
+ "R_PPC64_DTPREL16_DS",
+ "R_PPC64_DTPREL16_HA",
+ "R_PPC64_DTPREL16_HI",
+ "R_PPC64_DTPREL16_HIGH",
+ "R_PPC64_DTPREL16_HIGHA",
+ "R_PPC64_DTPREL16_HIGHER",
+ "R_PPC64_DTPREL16_HIGHERA",
+ "R_PPC64_DTPREL16_HIGHEST",
+ "R_PPC64_DTPREL16_HIGHESTA",
+ "R_PPC64_DTPREL16_LO",
+ "R_PPC64_DTPREL16_LO_DS",
+ "R_PPC64_DTPREL34",
+ "R_PPC64_DTPREL64",
+ "R_PPC64_ENTRY",
+ "R_PPC64_GLOB_DAT",
+ "R_PPC64_GNU_VTENTRY",
+ "R_PPC64_GNU_VTINHERIT",
+ "R_PPC64_GOT16",
+ "R_PPC64_GOT16_DS",
+ "R_PPC64_GOT16_HA",
+ "R_PPC64_GOT16_HI",
+ "R_PPC64_GOT16_LO",
+ "R_PPC64_GOT16_LO_DS",
+ "R_PPC64_GOT_DTPREL16_DS",
+ "R_PPC64_GOT_DTPREL16_HA",
+ "R_PPC64_GOT_DTPREL16_HI",
+ "R_PPC64_GOT_DTPREL16_LO_DS",
+ "R_PPC64_GOT_DTPREL_PCREL34",
+ "R_PPC64_GOT_PCREL34",
+ "R_PPC64_GOT_TLSGD16",
+ "R_PPC64_GOT_TLSGD16_HA",
+ "R_PPC64_GOT_TLSGD16_HI",
+ "R_PPC64_GOT_TLSGD16_LO",
+ "R_PPC64_GOT_TLSGD_PCREL34",
+ "R_PPC64_GOT_TLSLD16",
+ "R_PPC64_GOT_TLSLD16_HA",
+ "R_PPC64_GOT_TLSLD16_HI",
+ "R_PPC64_GOT_TLSLD16_LO",
+ "R_PPC64_GOT_TLSLD_PCREL34",
+ "R_PPC64_GOT_TPREL16_DS",
+ "R_PPC64_GOT_TPREL16_HA",
+ "R_PPC64_GOT_TPREL16_HI",
+ "R_PPC64_GOT_TPREL16_LO_DS",
+ "R_PPC64_GOT_TPREL_PCREL34",
+ "R_PPC64_IRELATIVE",
+ "R_PPC64_JMP_IREL",
+ "R_PPC64_JMP_SLOT",
+ "R_PPC64_NONE",
+ "R_PPC64_PCREL28",
+ "R_PPC64_PCREL34",
+ "R_PPC64_PCREL_OPT",
+ "R_PPC64_PLT16_HA",
+ "R_PPC64_PLT16_HI",
+ "R_PPC64_PLT16_LO",
+ "R_PPC64_PLT16_LO_DS",
+ "R_PPC64_PLT32",
+ "R_PPC64_PLT64",
+ "R_PPC64_PLTCALL",
+ "R_PPC64_PLTCALL_NOTOC",
+ "R_PPC64_PLTGOT16",
+ "R_PPC64_PLTGOT16_DS",
+ "R_PPC64_PLTGOT16_HA",
+ "R_PPC64_PLTGOT16_HI",
+ "R_PPC64_PLTGOT16_LO",
+ "R_PPC64_PLTGOT_LO_DS",
+ "R_PPC64_PLTREL32",
+ "R_PPC64_PLTREL64",
+ "R_PPC64_PLTSEQ",
+ "R_PPC64_PLTSEQ_NOTOC",
+ "R_PPC64_PLT_PCREL34",
+ "R_PPC64_PLT_PCREL34_NOTOC",
+ "R_PPC64_REL14",
+ "R_PPC64_REL14_BRNTAKEN",
+ "R_PPC64_REL14_BRTAKEN",
+ "R_PPC64_REL16",
+ "R_PPC64_REL16DX_HA",
+ "R_PPC64_REL16_HA",
+ "R_PPC64_REL16_HI",
+ "R_PPC64_REL16_HIGH",
+ "R_PPC64_REL16_HIGHA",
+ "R_PPC64_REL16_HIGHER",
+ "R_PPC64_REL16_HIGHER34",
+ "R_PPC64_REL16_HIGHERA",
+ "R_PPC64_REL16_HIGHERA34",
+ "R_PPC64_REL16_HIGHEST",
+ "R_PPC64_REL16_HIGHEST34",
+ "R_PPC64_REL16_HIGHESTA",
+ "R_PPC64_REL16_HIGHESTA34",
+ "R_PPC64_REL16_LO",
+ "R_PPC64_REL24",
+ "R_PPC64_REL24_NOTOC",
+ "R_PPC64_REL24_P9NOTOC",
+ "R_PPC64_REL30",
+ "R_PPC64_REL32",
+ "R_PPC64_REL64",
+ "R_PPC64_RELATIVE",
+ "R_PPC64_SECTOFF",
+ "R_PPC64_SECTOFF_DS",
+ "R_PPC64_SECTOFF_HA",
+ "R_PPC64_SECTOFF_HI",
+ "R_PPC64_SECTOFF_LO",
+ "R_PPC64_SECTOFF_LO_DS",
+ "R_PPC64_TLS",
+ "R_PPC64_TLSGD",
+ "R_PPC64_TLSLD",
+ "R_PPC64_TOC",
+ "R_PPC64_TOC16",
+ "R_PPC64_TOC16_DS",
+ "R_PPC64_TOC16_HA",
+ "R_PPC64_TOC16_HI",
+ "R_PPC64_TOC16_LO",
+ "R_PPC64_TOC16_LO_DS",
+ "R_PPC64_TOCSAVE",
+ "R_PPC64_TPREL16",
+ "R_PPC64_TPREL16_DS",
+ "R_PPC64_TPREL16_HA",
+ "R_PPC64_TPREL16_HI",
+ "R_PPC64_TPREL16_HIGH",
+ "R_PPC64_TPREL16_HIGHA",
+ "R_PPC64_TPREL16_HIGHER",
+ "R_PPC64_TPREL16_HIGHERA",
+ "R_PPC64_TPREL16_HIGHEST",
+ "R_PPC64_TPREL16_HIGHESTA",
+ "R_PPC64_TPREL16_LO",
+ "R_PPC64_TPREL16_LO_DS",
+ "R_PPC64_TPREL34",
+ "R_PPC64_TPREL64",
+ "R_PPC64_UADDR16",
+ "R_PPC64_UADDR32",
+ "R_PPC64_UADDR64",
+ "R_PPC_ADDR14",
+ "R_PPC_ADDR14_BRNTAKEN",
+ "R_PPC_ADDR14_BRTAKEN",
+ "R_PPC_ADDR16",
+ "R_PPC_ADDR16_HA",
+ "R_PPC_ADDR16_HI",
+ "R_PPC_ADDR16_LO",
+ "R_PPC_ADDR24",
+ "R_PPC_ADDR32",
+ "R_PPC_COPY",
+ "R_PPC_DTPMOD32",
+ "R_PPC_DTPREL16",
+ "R_PPC_DTPREL16_HA",
+ "R_PPC_DTPREL16_HI",
+ "R_PPC_DTPREL16_LO",
+ "R_PPC_DTPREL32",
+ "R_PPC_EMB_BIT_FLD",
+ "R_PPC_EMB_MRKREF",
+ "R_PPC_EMB_NADDR16",
+ "R_PPC_EMB_NADDR16_HA",
+ "R_PPC_EMB_NADDR16_HI",
+ "R_PPC_EMB_NADDR16_LO",
+ "R_PPC_EMB_NADDR32",
+ "R_PPC_EMB_RELSDA",
+ "R_PPC_EMB_RELSEC16",
+ "R_PPC_EMB_RELST_HA",
+ "R_PPC_EMB_RELST_HI",
+ "R_PPC_EMB_RELST_LO",
+ "R_PPC_EMB_SDA21",
+ "R_PPC_EMB_SDA2I16",
+ "R_PPC_EMB_SDA2REL",
+ "R_PPC_EMB_SDAI16",
+ "R_PPC_GLOB_DAT",
+ "R_PPC_GOT16",
+ "R_PPC_GOT16_HA",
+ "R_PPC_GOT16_HI",
+ "R_PPC_GOT16_LO",
+ "R_PPC_GOT_TLSGD16",
+ "R_PPC_GOT_TLSGD16_HA",
+ "R_PPC_GOT_TLSGD16_HI",
+ "R_PPC_GOT_TLSGD16_LO",
+ "R_PPC_GOT_TLSLD16",
+ "R_PPC_GOT_TLSLD16_HA",
+ "R_PPC_GOT_TLSLD16_HI",
+ "R_PPC_GOT_TLSLD16_LO",
+ "R_PPC_GOT_TPREL16",
+ "R_PPC_GOT_TPREL16_HA",
+ "R_PPC_GOT_TPREL16_HI",
+ "R_PPC_GOT_TPREL16_LO",
+ "R_PPC_JMP_SLOT",
+ "R_PPC_LOCAL24PC",
+ "R_PPC_NONE",
+ "R_PPC_PLT16_HA",
+ "R_PPC_PLT16_HI",
+ "R_PPC_PLT16_LO",
+ "R_PPC_PLT32",
+ "R_PPC_PLTREL24",
+ "R_PPC_PLTREL32",
+ "R_PPC_REL14",
+ "R_PPC_REL14_BRNTAKEN",
+ "R_PPC_REL14_BRTAKEN",
+ "R_PPC_REL24",
+ "R_PPC_REL32",
+ "R_PPC_RELATIVE",
+ "R_PPC_SDAREL16",
+ "R_PPC_SECTOFF",
+ "R_PPC_SECTOFF_HA",
+ "R_PPC_SECTOFF_HI",
+ "R_PPC_SECTOFF_LO",
+ "R_PPC_TLS",
+ "R_PPC_TPREL16",
+ "R_PPC_TPREL16_HA",
+ "R_PPC_TPREL16_HI",
+ "R_PPC_TPREL16_LO",
+ "R_PPC_TPREL32",
+ "R_PPC_UADDR16",
+ "R_PPC_UADDR32",
+ "R_RISCV",
+ "R_RISCV_32",
+ "R_RISCV_32_PCREL",
+ "R_RISCV_64",
+ "R_RISCV_ADD16",
+ "R_RISCV_ADD32",
+ "R_RISCV_ADD64",
+ "R_RISCV_ADD8",
+ "R_RISCV_ALIGN",
+ "R_RISCV_BRANCH",
+ "R_RISCV_CALL",
+ "R_RISCV_CALL_PLT",
+ "R_RISCV_COPY",
+ "R_RISCV_GNU_VTENTRY",
+ "R_RISCV_GNU_VTINHERIT",
+ "R_RISCV_GOT_HI20",
+ "R_RISCV_GPREL_I",
+ "R_RISCV_GPREL_S",
+ "R_RISCV_HI20",
+ "R_RISCV_JAL",
+ "R_RISCV_JUMP_SLOT",
+ "R_RISCV_LO12_I",
+ "R_RISCV_LO12_S",
+ "R_RISCV_NONE",
+ "R_RISCV_PCREL_HI20",
+ "R_RISCV_PCREL_LO12_I",
+ "R_RISCV_PCREL_LO12_S",
+ "R_RISCV_RELATIVE",
+ "R_RISCV_RELAX",
+ "R_RISCV_RVC_BRANCH",
+ "R_RISCV_RVC_JUMP",
+ "R_RISCV_RVC_LUI",
+ "R_RISCV_SET16",
+ "R_RISCV_SET32",
+ "R_RISCV_SET6",
+ "R_RISCV_SET8",
+ "R_RISCV_SUB16",
+ "R_RISCV_SUB32",
+ "R_RISCV_SUB6",
+ "R_RISCV_SUB64",
+ "R_RISCV_SUB8",
+ "R_RISCV_TLS_DTPMOD32",
+ "R_RISCV_TLS_DTPMOD64",
+ "R_RISCV_TLS_DTPREL32",
+ "R_RISCV_TLS_DTPREL64",
+ "R_RISCV_TLS_GD_HI20",
+ "R_RISCV_TLS_GOT_HI20",
+ "R_RISCV_TLS_TPREL32",
+ "R_RISCV_TLS_TPREL64",
+ "R_RISCV_TPREL_ADD",
+ "R_RISCV_TPREL_HI20",
+ "R_RISCV_TPREL_I",
+ "R_RISCV_TPREL_LO12_I",
+ "R_RISCV_TPREL_LO12_S",
+ "R_RISCV_TPREL_S",
+ "R_SPARC",
+ "R_SPARC_10",
+ "R_SPARC_11",
+ "R_SPARC_13",
+ "R_SPARC_16",
+ "R_SPARC_22",
+ "R_SPARC_32",
+ "R_SPARC_5",
+ "R_SPARC_6",
+ "R_SPARC_64",
+ "R_SPARC_7",
+ "R_SPARC_8",
+ "R_SPARC_COPY",
+ "R_SPARC_DISP16",
+ "R_SPARC_DISP32",
+ "R_SPARC_DISP64",
+ "R_SPARC_DISP8",
+ "R_SPARC_GLOB_DAT",
+ "R_SPARC_GLOB_JMP",
+ "R_SPARC_GOT10",
+ "R_SPARC_GOT13",
+ "R_SPARC_GOT22",
+ "R_SPARC_H44",
+ "R_SPARC_HH22",
+ "R_SPARC_HI22",
+ "R_SPARC_HIPLT22",
+ "R_SPARC_HIX22",
+ "R_SPARC_HM10",
+ "R_SPARC_JMP_SLOT",
+ "R_SPARC_L44",
+ "R_SPARC_LM22",
+ "R_SPARC_LO10",
+ "R_SPARC_LOPLT10",
+ "R_SPARC_LOX10",
+ "R_SPARC_M44",
+ "R_SPARC_NONE",
+ "R_SPARC_OLO10",
+ "R_SPARC_PC10",
+ "R_SPARC_PC22",
+ "R_SPARC_PCPLT10",
+ "R_SPARC_PCPLT22",
+ "R_SPARC_PCPLT32",
+ "R_SPARC_PC_HH22",
+ "R_SPARC_PC_HM10",
+ "R_SPARC_PC_LM22",
+ "R_SPARC_PLT32",
+ "R_SPARC_PLT64",
+ "R_SPARC_REGISTER",
+ "R_SPARC_RELATIVE",
+ "R_SPARC_UA16",
+ "R_SPARC_UA32",
+ "R_SPARC_UA64",
+ "R_SPARC_WDISP16",
+ "R_SPARC_WDISP19",
+ "R_SPARC_WDISP22",
+ "R_SPARC_WDISP30",
+ "R_SPARC_WPLT30",
+ "R_SYM32",
+ "R_SYM64",
+ "R_TYPE32",
+ "R_TYPE64",
+ "R_X86_64",
+ "R_X86_64_16",
+ "R_X86_64_32",
+ "R_X86_64_32S",
+ "R_X86_64_64",
+ "R_X86_64_8",
+ "R_X86_64_COPY",
+ "R_X86_64_DTPMOD64",
+ "R_X86_64_DTPOFF32",
+ "R_X86_64_DTPOFF64",
+ "R_X86_64_GLOB_DAT",
+ "R_X86_64_GOT32",
+ "R_X86_64_GOT64",
+ "R_X86_64_GOTOFF64",
+ "R_X86_64_GOTPC32",
+ "R_X86_64_GOTPC32_TLSDESC",
+ "R_X86_64_GOTPC64",
+ "R_X86_64_GOTPCREL",
+ "R_X86_64_GOTPCREL64",
+ "R_X86_64_GOTPCRELX",
+ "R_X86_64_GOTPLT64",
+ "R_X86_64_GOTTPOFF",
+ "R_X86_64_IRELATIVE",
+ "R_X86_64_JMP_SLOT",
+ "R_X86_64_NONE",
+ "R_X86_64_PC16",
+ "R_X86_64_PC32",
+ "R_X86_64_PC32_BND",
+ "R_X86_64_PC64",
+ "R_X86_64_PC8",
+ "R_X86_64_PLT32",
+ "R_X86_64_PLT32_BND",
+ "R_X86_64_PLTOFF64",
+ "R_X86_64_RELATIVE",
+ "R_X86_64_RELATIVE64",
+ "R_X86_64_REX_GOTPCRELX",
+ "R_X86_64_SIZE32",
+ "R_X86_64_SIZE64",
+ "R_X86_64_TLSDESC",
+ "R_X86_64_TLSDESC_CALL",
+ "R_X86_64_TLSGD",
+ "R_X86_64_TLSLD",
+ "R_X86_64_TPOFF32",
+ "R_X86_64_TPOFF64",
+ "Rel32",
+ "Rel64",
+ "Rela32",
+ "Rela64",
+ "SHF_ALLOC",
+ "SHF_COMPRESSED",
+ "SHF_EXECINSTR",
+ "SHF_GROUP",
+ "SHF_INFO_LINK",
+ "SHF_LINK_ORDER",
+ "SHF_MASKOS",
+ "SHF_MASKPROC",
+ "SHF_MERGE",
+ "SHF_OS_NONCONFORMING",
+ "SHF_STRINGS",
+ "SHF_TLS",
+ "SHF_WRITE",
+ "SHN_ABS",
+ "SHN_COMMON",
+ "SHN_HIOS",
+ "SHN_HIPROC",
+ "SHN_HIRESERVE",
+ "SHN_LOOS",
+ "SHN_LOPROC",
+ "SHN_LORESERVE",
+ "SHN_UNDEF",
+ "SHN_XINDEX",
+ "SHT_DYNAMIC",
+ "SHT_DYNSYM",
+ "SHT_FINI_ARRAY",
+ "SHT_GNU_ATTRIBUTES",
+ "SHT_GNU_HASH",
+ "SHT_GNU_LIBLIST",
+ "SHT_GNU_VERDEF",
+ "SHT_GNU_VERNEED",
+ "SHT_GNU_VERSYM",
+ "SHT_GROUP",
+ "SHT_HASH",
+ "SHT_HIOS",
+ "SHT_HIPROC",
+ "SHT_HIUSER",
+ "SHT_INIT_ARRAY",
+ "SHT_LOOS",
+ "SHT_LOPROC",
+ "SHT_LOUSER",
+ "SHT_MIPS_ABIFLAGS",
+ "SHT_NOBITS",
+ "SHT_NOTE",
+ "SHT_NULL",
+ "SHT_PREINIT_ARRAY",
+ "SHT_PROGBITS",
+ "SHT_REL",
+ "SHT_RELA",
+ "SHT_SHLIB",
+ "SHT_STRTAB",
+ "SHT_SYMTAB",
+ "SHT_SYMTAB_SHNDX",
+ "STB_GLOBAL",
+ "STB_HIOS",
+ "STB_HIPROC",
+ "STB_LOCAL",
+ "STB_LOOS",
+ "STB_LOPROC",
+ "STB_WEAK",
+ "STT_COMMON",
+ "STT_FILE",
+ "STT_FUNC",
+ "STT_HIOS",
+ "STT_HIPROC",
+ "STT_LOOS",
+ "STT_LOPROC",
+ "STT_NOTYPE",
+ "STT_OBJECT",
+ "STT_SECTION",
+ "STT_TLS",
+ "STV_DEFAULT",
+ "STV_HIDDEN",
+ "STV_INTERNAL",
+ "STV_PROTECTED",
+ "ST_BIND",
+ "ST_INFO",
+ "ST_TYPE",
+ "ST_VISIBILITY",
+ "Section",
+ "Section32",
+ "Section64",
+ "SectionFlag",
+ "SectionHeader",
+ "SectionIndex",
+ "SectionType",
+ "Sym32",
+ "Sym32Size",
+ "Sym64",
+ "Sym64Size",
+ "SymBind",
+ "SymType",
+ "SymVis",
+ "Symbol",
+ "Type",
+ "Version",
+ },
+ "debug/gosym": {
+ "DecodingError",
+ "Func",
+ "LineTable",
+ "NewLineTable",
+ "NewTable",
+ "Obj",
+ "Sym",
+ "Table",
+ "UnknownFileError",
+ "UnknownLineError",
+ },
+ "debug/macho": {
+ "ARM64_RELOC_ADDEND",
+ "ARM64_RELOC_BRANCH26",
+ "ARM64_RELOC_GOT_LOAD_PAGE21",
+ "ARM64_RELOC_GOT_LOAD_PAGEOFF12",
+ "ARM64_RELOC_PAGE21",
+ "ARM64_RELOC_PAGEOFF12",
+ "ARM64_RELOC_POINTER_TO_GOT",
+ "ARM64_RELOC_SUBTRACTOR",
+ "ARM64_RELOC_TLVP_LOAD_PAGE21",
+ "ARM64_RELOC_TLVP_LOAD_PAGEOFF12",
+ "ARM64_RELOC_UNSIGNED",
+ "ARM_RELOC_BR24",
+ "ARM_RELOC_HALF",
+ "ARM_RELOC_HALF_SECTDIFF",
+ "ARM_RELOC_LOCAL_SECTDIFF",
+ "ARM_RELOC_PAIR",
+ "ARM_RELOC_PB_LA_PTR",
+ "ARM_RELOC_SECTDIFF",
+ "ARM_RELOC_VANILLA",
+ "ARM_THUMB_32BIT_BRANCH",
+ "ARM_THUMB_RELOC_BR22",
+ "Cpu",
+ "Cpu386",
+ "CpuAmd64",
+ "CpuArm",
+ "CpuArm64",
+ "CpuPpc",
+ "CpuPpc64",
+ "Dylib",
+ "DylibCmd",
+ "Dysymtab",
+ "DysymtabCmd",
+ "ErrNotFat",
+ "FatArch",
+ "FatArchHeader",
+ "FatFile",
+ "File",
+ "FileHeader",
+ "FlagAllModsBound",
+ "FlagAllowStackExecution",
+ "FlagAppExtensionSafe",
+ "FlagBindAtLoad",
+ "FlagBindsToWeak",
+ "FlagCanonical",
+ "FlagDeadStrippableDylib",
+ "FlagDyldLink",
+ "FlagForceFlat",
+ "FlagHasTLVDescriptors",
+ "FlagIncrLink",
+ "FlagLazyInit",
+ "FlagNoFixPrebinding",
+ "FlagNoHeapExecution",
+ "FlagNoMultiDefs",
+ "FlagNoReexportedDylibs",
+ "FlagNoUndefs",
+ "FlagPIE",
+ "FlagPrebindable",
+ "FlagPrebound",
+ "FlagRootSafe",
+ "FlagSetuidSafe",
+ "FlagSplitSegs",
+ "FlagSubsectionsViaSymbols",
+ "FlagTwoLevel",
+ "FlagWeakDefines",
+ "FormatError",
+ "GENERIC_RELOC_LOCAL_SECTDIFF",
+ "GENERIC_RELOC_PAIR",
+ "GENERIC_RELOC_PB_LA_PTR",
+ "GENERIC_RELOC_SECTDIFF",
+ "GENERIC_RELOC_TLV",
+ "GENERIC_RELOC_VANILLA",
+ "Load",
+ "LoadBytes",
+ "LoadCmd",
+ "LoadCmdDylib",
+ "LoadCmdDylinker",
+ "LoadCmdDysymtab",
+ "LoadCmdRpath",
+ "LoadCmdSegment",
+ "LoadCmdSegment64",
+ "LoadCmdSymtab",
+ "LoadCmdThread",
+ "LoadCmdUnixThread",
+ "Magic32",
+ "Magic64",
+ "MagicFat",
+ "NewFatFile",
+ "NewFile",
+ "Nlist32",
+ "Nlist64",
+ "Open",
+ "OpenFat",
+ "Regs386",
+ "RegsAMD64",
+ "Reloc",
+ "RelocTypeARM",
+ "RelocTypeARM64",
+ "RelocTypeGeneric",
+ "RelocTypeX86_64",
+ "Rpath",
+ "RpathCmd",
+ "Section",
+ "Section32",
+ "Section64",
+ "SectionHeader",
+ "Segment",
+ "Segment32",
+ "Segment64",
+ "SegmentHeader",
+ "Symbol",
+ "Symtab",
+ "SymtabCmd",
+ "Thread",
+ "Type",
+ "TypeBundle",
+ "TypeDylib",
+ "TypeExec",
+ "TypeObj",
+ "X86_64_RELOC_BRANCH",
+ "X86_64_RELOC_GOT",
+ "X86_64_RELOC_GOT_LOAD",
+ "X86_64_RELOC_SIGNED",
+ "X86_64_RELOC_SIGNED_1",
+ "X86_64_RELOC_SIGNED_2",
+ "X86_64_RELOC_SIGNED_4",
+ "X86_64_RELOC_SUBTRACTOR",
+ "X86_64_RELOC_TLV",
+ "X86_64_RELOC_UNSIGNED",
+ },
+ "debug/pe": {
+ "COFFSymbol",
+ "COFFSymbolAuxFormat5",
+ "COFFSymbolSize",
+ "DataDirectory",
+ "File",
+ "FileHeader",
+ "FormatError",
+ "IMAGE_COMDAT_SELECT_ANY",
+ "IMAGE_COMDAT_SELECT_ASSOCIATIVE",
+ "IMAGE_COMDAT_SELECT_EXACT_MATCH",
+ "IMAGE_COMDAT_SELECT_LARGEST",
+ "IMAGE_COMDAT_SELECT_NODUPLICATES",
+ "IMAGE_COMDAT_SELECT_SAME_SIZE",
+ "IMAGE_DIRECTORY_ENTRY_ARCHITECTURE",
+ "IMAGE_DIRECTORY_ENTRY_BASERELOC",
+ "IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT",
+ "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR",
+ "IMAGE_DIRECTORY_ENTRY_DEBUG",
+ "IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT",
+ "IMAGE_DIRECTORY_ENTRY_EXCEPTION",
+ "IMAGE_DIRECTORY_ENTRY_EXPORT",
+ "IMAGE_DIRECTORY_ENTRY_GLOBALPTR",
+ "IMAGE_DIRECTORY_ENTRY_IAT",
+ "IMAGE_DIRECTORY_ENTRY_IMPORT",
+ "IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG",
+ "IMAGE_DIRECTORY_ENTRY_RESOURCE",
+ "IMAGE_DIRECTORY_ENTRY_SECURITY",
+ "IMAGE_DIRECTORY_ENTRY_TLS",
+ "IMAGE_DLLCHARACTERISTICS_APPCONTAINER",
+ "IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE",
+ "IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY",
+ "IMAGE_DLLCHARACTERISTICS_GUARD_CF",
+ "IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA",
+ "IMAGE_DLLCHARACTERISTICS_NO_BIND",
+ "IMAGE_DLLCHARACTERISTICS_NO_ISOLATION",
+ "IMAGE_DLLCHARACTERISTICS_NO_SEH",
+ "IMAGE_DLLCHARACTERISTICS_NX_COMPAT",
+ "IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE",
+ "IMAGE_DLLCHARACTERISTICS_WDM_DRIVER",
+ "IMAGE_FILE_32BIT_MACHINE",
+ "IMAGE_FILE_AGGRESIVE_WS_TRIM",
+ "IMAGE_FILE_BYTES_REVERSED_HI",
+ "IMAGE_FILE_BYTES_REVERSED_LO",
+ "IMAGE_FILE_DEBUG_STRIPPED",
+ "IMAGE_FILE_DLL",
+ "IMAGE_FILE_EXECUTABLE_IMAGE",
+ "IMAGE_FILE_LARGE_ADDRESS_AWARE",
+ "IMAGE_FILE_LINE_NUMS_STRIPPED",
+ "IMAGE_FILE_LOCAL_SYMS_STRIPPED",
+ "IMAGE_FILE_MACHINE_AM33",
+ "IMAGE_FILE_MACHINE_AMD64",
+ "IMAGE_FILE_MACHINE_ARM",
+ "IMAGE_FILE_MACHINE_ARM64",
+ "IMAGE_FILE_MACHINE_ARMNT",
+ "IMAGE_FILE_MACHINE_EBC",
+ "IMAGE_FILE_MACHINE_I386",
+ "IMAGE_FILE_MACHINE_IA64",
+ "IMAGE_FILE_MACHINE_LOONGARCH32",
+ "IMAGE_FILE_MACHINE_LOONGARCH64",
+ "IMAGE_FILE_MACHINE_M32R",
+ "IMAGE_FILE_MACHINE_MIPS16",
+ "IMAGE_FILE_MACHINE_MIPSFPU",
+ "IMAGE_FILE_MACHINE_MIPSFPU16",
+ "IMAGE_FILE_MACHINE_POWERPC",
+ "IMAGE_FILE_MACHINE_POWERPCFP",
+ "IMAGE_FILE_MACHINE_R4000",
+ "IMAGE_FILE_MACHINE_RISCV128",
+ "IMAGE_FILE_MACHINE_RISCV32",
+ "IMAGE_FILE_MACHINE_RISCV64",
+ "IMAGE_FILE_MACHINE_SH3",
+ "IMAGE_FILE_MACHINE_SH3DSP",
+ "IMAGE_FILE_MACHINE_SH4",
+ "IMAGE_FILE_MACHINE_SH5",
+ "IMAGE_FILE_MACHINE_THUMB",
+ "IMAGE_FILE_MACHINE_UNKNOWN",
+ "IMAGE_FILE_MACHINE_WCEMIPSV2",
+ "IMAGE_FILE_NET_RUN_FROM_SWAP",
+ "IMAGE_FILE_RELOCS_STRIPPED",
+ "IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP",
+ "IMAGE_FILE_SYSTEM",
+ "IMAGE_FILE_UP_SYSTEM_ONLY",
+ "IMAGE_SCN_CNT_CODE",
+ "IMAGE_SCN_CNT_INITIALIZED_DATA",
+ "IMAGE_SCN_CNT_UNINITIALIZED_DATA",
+ "IMAGE_SCN_LNK_COMDAT",
+ "IMAGE_SCN_MEM_DISCARDABLE",
+ "IMAGE_SCN_MEM_EXECUTE",
+ "IMAGE_SCN_MEM_READ",
+ "IMAGE_SCN_MEM_WRITE",
+ "IMAGE_SUBSYSTEM_EFI_APPLICATION",
+ "IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER",
+ "IMAGE_SUBSYSTEM_EFI_ROM",
+ "IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER",
+ "IMAGE_SUBSYSTEM_NATIVE",
+ "IMAGE_SUBSYSTEM_NATIVE_WINDOWS",
+ "IMAGE_SUBSYSTEM_OS2_CUI",
+ "IMAGE_SUBSYSTEM_POSIX_CUI",
+ "IMAGE_SUBSYSTEM_UNKNOWN",
+ "IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION",
+ "IMAGE_SUBSYSTEM_WINDOWS_CE_GUI",
+ "IMAGE_SUBSYSTEM_WINDOWS_CUI",
+ "IMAGE_SUBSYSTEM_WINDOWS_GUI",
+ "IMAGE_SUBSYSTEM_XBOX",
+ "ImportDirectory",
+ "NewFile",
+ "Open",
+ "OptionalHeader32",
+ "OptionalHeader64",
+ "Reloc",
+ "Section",
+ "SectionHeader",
+ "SectionHeader32",
+ "StringTable",
+ "Symbol",
+ },
+ "debug/plan9obj": {
+ "ErrNoSymbols",
+ "File",
+ "FileHeader",
+ "Magic386",
+ "Magic64",
+ "MagicAMD64",
+ "MagicARM",
+ "NewFile",
+ "Open",
+ "Section",
+ "SectionHeader",
+ "Sym",
+ },
+ "embed": {
+ "FS",
+ },
+ "encoding": {
+ "BinaryMarshaler",
+ "BinaryUnmarshaler",
+ "TextMarshaler",
+ "TextUnmarshaler",
+ },
+ "encoding/ascii85": {
+ "CorruptInputError",
+ "Decode",
+ "Encode",
+ "MaxEncodedLen",
+ "NewDecoder",
+ "NewEncoder",
+ },
+ "encoding/asn1": {
+ "BitString",
+ "ClassApplication",
+ "ClassContextSpecific",
+ "ClassPrivate",
+ "ClassUniversal",
+ "Enumerated",
+ "Flag",
+ "Marshal",
+ "MarshalWithParams",
+ "NullBytes",
+ "NullRawValue",
+ "ObjectIdentifier",
+ "RawContent",
+ "RawValue",
+ "StructuralError",
+ "SyntaxError",
+ "TagBMPString",
+ "TagBitString",
+ "TagBoolean",
+ "TagEnum",
+ "TagGeneralString",
+ "TagGeneralizedTime",
+ "TagIA5String",
+ "TagInteger",
+ "TagNull",
+ "TagNumericString",
+ "TagOID",
+ "TagOctetString",
+ "TagPrintableString",
+ "TagSequence",
+ "TagSet",
+ "TagT61String",
+ "TagUTCTime",
+ "TagUTF8String",
+ "Unmarshal",
+ "UnmarshalWithParams",
+ },
+ "encoding/base32": {
+ "CorruptInputError",
+ "Encoding",
+ "HexEncoding",
+ "NewDecoder",
+ "NewEncoder",
+ "NewEncoding",
+ "NoPadding",
+ "StdEncoding",
+ "StdPadding",
+ },
+ "encoding/base64": {
+ "CorruptInputError",
+ "Encoding",
+ "NewDecoder",
+ "NewEncoder",
+ "NewEncoding",
+ "NoPadding",
+ "RawStdEncoding",
+ "RawURLEncoding",
+ "StdEncoding",
+ "StdPadding",
+ "URLEncoding",
+ },
+ "encoding/binary": {
+ "AppendByteOrder",
+ "AppendUvarint",
+ "AppendVarint",
+ "BigEndian",
+ "ByteOrder",
+ "LittleEndian",
+ "MaxVarintLen16",
+ "MaxVarintLen32",
+ "MaxVarintLen64",
+ "NativeEndian",
+ "PutUvarint",
+ "PutVarint",
+ "Read",
+ "ReadUvarint",
+ "ReadVarint",
+ "Size",
+ "Uvarint",
+ "Varint",
+ "Write",
+ },
+ "encoding/csv": {
+ "ErrBareQuote",
+ "ErrFieldCount",
+ "ErrQuote",
+ "ErrTrailingComma",
+ "NewReader",
+ "NewWriter",
+ "ParseError",
+ "Reader",
+ "Writer",
+ },
+ "encoding/gob": {
+ "CommonType",
+ "Decoder",
+ "Encoder",
+ "GobDecoder",
+ "GobEncoder",
+ "NewDecoder",
+ "NewEncoder",
+ "Register",
+ "RegisterName",
+ },
+ "encoding/hex": {
+ "Decode",
+ "DecodeString",
+ "DecodedLen",
+ "Dump",
+ "Dumper",
+ "Encode",
+ "EncodeToString",
+ "EncodedLen",
+ "ErrLength",
+ "InvalidByteError",
+ "NewDecoder",
+ "NewEncoder",
+ },
+ "encoding/json": {
+ "Compact",
+ "Decoder",
+ "Delim",
+ "Encoder",
+ "HTMLEscape",
+ "Indent",
+ "InvalidUTF8Error",
+ "InvalidUnmarshalError",
+ "Marshal",
+ "MarshalIndent",
+ "Marshaler",
+ "MarshalerError",
+ "NewDecoder",
+ "NewEncoder",
+ "Number",
+ "RawMessage",
+ "SyntaxError",
+ "Token",
+ "Unmarshal",
+ "UnmarshalFieldError",
+ "UnmarshalTypeError",
+ "Unmarshaler",
+ "UnsupportedTypeError",
+ "UnsupportedValueError",
+ "Valid",
+ },
+ "encoding/pem": {
+ "Block",
+ "Decode",
+ "Encode",
+ "EncodeToMemory",
+ },
+ "encoding/xml": {
+ "Attr",
+ "CharData",
+ "Comment",
+ "CopyToken",
+ "Decoder",
+ "Directive",
+ "Encoder",
+ "EndElement",
+ "Escape",
+ "EscapeText",
+ "HTMLAutoClose",
+ "HTMLEntity",
+ "Header",
+ "Marshal",
+ "MarshalIndent",
+ "Marshaler",
+ "MarshalerAttr",
+ "Name",
+ "NewDecoder",
+ "NewEncoder",
+ "NewTokenDecoder",
+ "ProcInst",
+ "StartElement",
+ "SyntaxError",
+ "TagPathError",
+ "Token",
+ "TokenReader",
+ "Unmarshal",
+ "UnmarshalError",
+ "Unmarshaler",
+ "UnmarshalerAttr",
+ "UnsupportedTypeError",
+ },
+ "errors": {
+ "As",
+ "ErrUnsupported",
+ "Is",
+ "Join",
+ "New",
+ "Unwrap",
+ },
+ "expvar": {
+ "Do",
+ "Float",
+ "Func",
+ "Get",
+ "Handler",
+ "Int",
+ "KeyValue",
+ "Map",
+ "NewFloat",
+ "NewInt",
+ "NewMap",
+ "NewString",
+ "Publish",
+ "String",
+ "Var",
+ },
+ "flag": {
+ "Arg",
+ "Args",
+ "Bool",
+ "BoolFunc",
+ "BoolVar",
+ "CommandLine",
+ "ContinueOnError",
+ "Duration",
+ "DurationVar",
+ "ErrHelp",
+ "ErrorHandling",
+ "ExitOnError",
+ "Flag",
+ "FlagSet",
+ "Float64",
+ "Float64Var",
+ "Func",
+ "Getter",
+ "Int",
+ "Int64",
+ "Int64Var",
+ "IntVar",
+ "Lookup",
+ "NArg",
+ "NFlag",
+ "NewFlagSet",
+ "PanicOnError",
+ "Parse",
+ "Parsed",
+ "PrintDefaults",
+ "Set",
+ "String",
+ "StringVar",
+ "TextVar",
+ "Uint",
+ "Uint64",
+ "Uint64Var",
+ "UintVar",
+ "UnquoteUsage",
+ "Usage",
+ "Value",
+ "Var",
+ "Visit",
+ "VisitAll",
+ },
+ "fmt": {
+ "Append",
+ "Appendf",
+ "Appendln",
+ "Errorf",
+ "FormatString",
+ "Formatter",
+ "Fprint",
+ "Fprintf",
+ "Fprintln",
+ "Fscan",
+ "Fscanf",
+ "Fscanln",
+ "GoStringer",
+ "Print",
+ "Printf",
+ "Println",
+ "Scan",
+ "ScanState",
+ "Scanf",
+ "Scanln",
+ "Scanner",
+ "Sprint",
+ "Sprintf",
+ "Sprintln",
+ "Sscan",
+ "Sscanf",
+ "Sscanln",
+ "State",
+ "Stringer",
+ },
+ "go/ast": {
+ "ArrayType",
+ "AssignStmt",
+ "Bad",
+ "BadDecl",
+ "BadExpr",
+ "BadStmt",
+ "BasicLit",
+ "BinaryExpr",
+ "BlockStmt",
+ "BranchStmt",
+ "CallExpr",
+ "CaseClause",
+ "ChanDir",
+ "ChanType",
+ "CommClause",
+ "Comment",
+ "CommentGroup",
+ "CommentMap",
+ "CompositeLit",
+ "Con",
+ "Decl",
+ "DeclStmt",
+ "DeferStmt",
+ "Ellipsis",
+ "EmptyStmt",
+ "Expr",
+ "ExprStmt",
+ "Field",
+ "FieldFilter",
+ "FieldList",
+ "File",
+ "FileExports",
+ "Filter",
+ "FilterDecl",
+ "FilterFile",
+ "FilterFuncDuplicates",
+ "FilterImportDuplicates",
+ "FilterPackage",
+ "FilterUnassociatedComments",
+ "ForStmt",
+ "Fprint",
+ "Fun",
+ "FuncDecl",
+ "FuncLit",
+ "FuncType",
+ "GenDecl",
+ "GoStmt",
+ "Ident",
+ "IfStmt",
+ "ImportSpec",
+ "Importer",
+ "IncDecStmt",
+ "IndexExpr",
+ "IndexListExpr",
+ "Inspect",
+ "InterfaceType",
+ "IsExported",
+ "IsGenerated",
+ "KeyValueExpr",
+ "LabeledStmt",
+ "Lbl",
+ "MapType",
+ "MergeMode",
+ "MergePackageFiles",
+ "NewCommentMap",
+ "NewIdent",
+ "NewObj",
+ "NewPackage",
+ "NewScope",
+ "Node",
+ "NotNilFilter",
+ "ObjKind",
+ "Object",
+ "Package",
+ "PackageExports",
+ "ParenExpr",
+ "Pkg",
+ "Print",
+ "RECV",
+ "RangeStmt",
+ "ReturnStmt",
+ "SEND",
+ "Scope",
+ "SelectStmt",
+ "SelectorExpr",
+ "SendStmt",
+ "SliceExpr",
+ "SortImports",
+ "Spec",
+ "StarExpr",
+ "Stmt",
+ "StructType",
+ "SwitchStmt",
+ "Typ",
+ "TypeAssertExpr",
+ "TypeSpec",
+ "TypeSwitchStmt",
+ "UnaryExpr",
+ "ValueSpec",
+ "Var",
+ "Visitor",
+ "Walk",
+ },
+ "go/build": {
+ "AllowBinary",
+ "ArchChar",
+ "Context",
+ "Default",
+ "Directive",
+ "FindOnly",
+ "IgnoreVendor",
+ "Import",
+ "ImportComment",
+ "ImportDir",
+ "ImportMode",
+ "IsLocalImport",
+ "MultiplePackageError",
+ "NoGoError",
+ "Package",
+ "ToolDir",
+ },
+ "go/build/constraint": {
+ "AndExpr",
+ "Expr",
+ "GoVersion",
+ "IsGoBuild",
+ "IsPlusBuild",
+ "NotExpr",
+ "OrExpr",
+ "Parse",
+ "PlusBuildLines",
+ "SyntaxError",
+ "TagExpr",
+ },
+ "go/constant": {
+ "BinaryOp",
+ "BitLen",
+ "Bool",
+ "BoolVal",
+ "Bytes",
+ "Compare",
+ "Complex",
+ "Denom",
+ "Float",
+ "Float32Val",
+ "Float64Val",
+ "Imag",
+ "Int",
+ "Int64Val",
+ "Kind",
+ "Make",
+ "MakeBool",
+ "MakeFloat64",
+ "MakeFromBytes",
+ "MakeFromLiteral",
+ "MakeImag",
+ "MakeInt64",
+ "MakeString",
+ "MakeUint64",
+ "MakeUnknown",
+ "Num",
+ "Real",
+ "Shift",
+ "Sign",
+ "String",
+ "StringVal",
+ "ToComplex",
+ "ToFloat",
+ "ToInt",
+ "Uint64Val",
+ "UnaryOp",
+ "Unknown",
+ "Val",
+ "Value",
+ },
+ "go/doc": {
+ "AllDecls",
+ "AllMethods",
+ "Example",
+ "Examples",
+ "Filter",
+ "Func",
+ "IllegalPrefixes",
+ "IsPredeclared",
+ "Mode",
+ "New",
+ "NewFromFiles",
+ "Note",
+ "Package",
+ "PreserveAST",
+ "Synopsis",
+ "ToHTML",
+ "ToText",
+ "Type",
+ "Value",
+ },
+ "go/doc/comment": {
+ "Block",
+ "Code",
+ "DefaultLookupPackage",
+ "Doc",
+ "DocLink",
+ "Heading",
+ "Italic",
+ "Link",
+ "LinkDef",
+ "List",
+ "ListItem",
+ "Paragraph",
+ "Parser",
+ "Plain",
+ "Printer",
+ "Text",
+ },
+ "go/format": {
+ "Node",
+ "Source",
+ },
+ "go/importer": {
+ "Default",
+ "For",
+ "ForCompiler",
+ "Lookup",
+ },
+ "go/parser": {
+ "AllErrors",
+ "DeclarationErrors",
+ "ImportsOnly",
+ "Mode",
+ "PackageClauseOnly",
+ "ParseComments",
+ "ParseDir",
+ "ParseExpr",
+ "ParseExprFrom",
+ "ParseFile",
+ "SkipObjectResolution",
+ "SpuriousErrors",
+ "Trace",
+ },
+ "go/printer": {
+ "CommentedNode",
+ "Config",
+ "Fprint",
+ "Mode",
+ "RawFormat",
+ "SourcePos",
+ "TabIndent",
+ "UseSpaces",
+ },
+ "go/scanner": {
+ "Error",
+ "ErrorHandler",
+ "ErrorList",
+ "Mode",
+ "PrintError",
+ "ScanComments",
+ "Scanner",
+ },
+ "go/token": {
+ "ADD",
+ "ADD_ASSIGN",
+ "AND",
+ "AND_ASSIGN",
+ "AND_NOT",
+ "AND_NOT_ASSIGN",
+ "ARROW",
+ "ASSIGN",
+ "BREAK",
+ "CASE",
+ "CHAN",
+ "CHAR",
+ "COLON",
+ "COMMA",
+ "COMMENT",
+ "CONST",
+ "CONTINUE",
+ "DEC",
+ "DEFAULT",
+ "DEFER",
+ "DEFINE",
+ "ELLIPSIS",
+ "ELSE",
+ "EOF",
+ "EQL",
+ "FALLTHROUGH",
+ "FLOAT",
+ "FOR",
+ "FUNC",
+ "File",
+ "FileSet",
+ "GEQ",
+ "GO",
+ "GOTO",
+ "GTR",
+ "HighestPrec",
+ "IDENT",
+ "IF",
+ "ILLEGAL",
+ "IMAG",
+ "IMPORT",
+ "INC",
+ "INT",
+ "INTERFACE",
+ "IsExported",
+ "IsIdentifier",
+ "IsKeyword",
+ "LAND",
+ "LBRACE",
+ "LBRACK",
+ "LEQ",
+ "LOR",
+ "LPAREN",
+ "LSS",
+ "Lookup",
+ "LowestPrec",
+ "MAP",
+ "MUL",
+ "MUL_ASSIGN",
+ "NEQ",
+ "NOT",
+ "NewFileSet",
+ "NoPos",
+ "OR",
+ "OR_ASSIGN",
+ "PACKAGE",
+ "PERIOD",
+ "Pos",
+ "Position",
+ "QUO",
+ "QUO_ASSIGN",
+ "RANGE",
+ "RBRACE",
+ "RBRACK",
+ "REM",
+ "REM_ASSIGN",
+ "RETURN",
+ "RPAREN",
+ "SELECT",
+ "SEMICOLON",
+ "SHL",
+ "SHL_ASSIGN",
+ "SHR",
+ "SHR_ASSIGN",
+ "STRING",
+ "STRUCT",
+ "SUB",
+ "SUB_ASSIGN",
+ "SWITCH",
+ "TILDE",
+ "TYPE",
+ "Token",
+ "UnaryPrec",
+ "VAR",
+ "XOR",
+ "XOR_ASSIGN",
+ },
+ "go/types": {
+ "ArgumentError",
+ "Array",
+ "AssertableTo",
+ "AssignableTo",
+ "Basic",
+ "BasicInfo",
+ "BasicKind",
+ "Bool",
+ "Builtin",
+ "Byte",
+ "Chan",
+ "ChanDir",
+ "CheckExpr",
+ "Checker",
+ "Comparable",
+ "Complex128",
+ "Complex64",
+ "Config",
+ "Const",
+ "Context",
+ "ConvertibleTo",
+ "DefPredeclaredTestFuncs",
+ "Default",
+ "Error",
+ "Eval",
+ "ExprString",
+ "FieldVal",
+ "Float32",
+ "Float64",
+ "Func",
+ "Id",
+ "Identical",
+ "IdenticalIgnoreTags",
+ "Implements",
+ "ImportMode",
+ "Importer",
+ "ImporterFrom",
+ "Info",
+ "Initializer",
+ "Instance",
+ "Instantiate",
+ "Int",
+ "Int16",
+ "Int32",
+ "Int64",
+ "Int8",
+ "Interface",
+ "Invalid",
+ "IsBoolean",
+ "IsComplex",
+ "IsConstType",
+ "IsFloat",
+ "IsInteger",
+ "IsInterface",
+ "IsNumeric",
+ "IsOrdered",
+ "IsString",
+ "IsUnsigned",
+ "IsUntyped",
+ "Label",
+ "LookupFieldOrMethod",
+ "Map",
+ "MethodExpr",
+ "MethodSet",
+ "MethodVal",
+ "MissingMethod",
+ "Named",
+ "NewArray",
+ "NewChan",
+ "NewChecker",
+ "NewConst",
+ "NewContext",
+ "NewField",
+ "NewFunc",
+ "NewInterface",
+ "NewInterfaceType",
+ "NewLabel",
+ "NewMap",
+ "NewMethodSet",
+ "NewNamed",
+ "NewPackage",
+ "NewParam",
+ "NewPkgName",
+ "NewPointer",
+ "NewScope",
+ "NewSignature",
+ "NewSignatureType",
+ "NewSlice",
+ "NewStruct",
+ "NewTerm",
+ "NewTuple",
+ "NewTypeName",
+ "NewTypeParam",
+ "NewUnion",
+ "NewVar",
+ "Nil",
+ "Object",
+ "ObjectString",
+ "Package",
+ "PkgName",
+ "Pointer",
+ "Qualifier",
+ "RecvOnly",
+ "RelativeTo",
+ "Rune",
+ "Satisfies",
+ "Scope",
+ "Selection",
+ "SelectionKind",
+ "SelectionString",
+ "SendOnly",
+ "SendRecv",
+ "Signature",
+ "Sizes",
+ "SizesFor",
+ "Slice",
+ "StdSizes",
+ "String",
+ "Struct",
+ "Term",
+ "Tuple",
+ "Typ",
+ "Type",
+ "TypeAndValue",
+ "TypeList",
+ "TypeName",
+ "TypeParam",
+ "TypeParamList",
+ "TypeString",
+ "Uint",
+ "Uint16",
+ "Uint32",
+ "Uint64",
+ "Uint8",
+ "Uintptr",
+ "Union",
+ "Universe",
+ "Unsafe",
+ "UnsafePointer",
+ "UntypedBool",
+ "UntypedComplex",
+ "UntypedFloat",
+ "UntypedInt",
+ "UntypedNil",
+ "UntypedRune",
+ "UntypedString",
+ "Var",
+ "WriteExpr",
+ "WriteSignature",
+ "WriteType",
+ },
+ "hash": {
+ "Hash",
+ "Hash32",
+ "Hash64",
+ },
+ "hash/adler32": {
+ "Checksum",
+ "New",
+ "Size",
+ },
+ "hash/crc32": {
+ "Castagnoli",
+ "Checksum",
+ "ChecksumIEEE",
+ "IEEE",
+ "IEEETable",
+ "Koopman",
+ "MakeTable",
+ "New",
+ "NewIEEE",
+ "Size",
+ "Table",
+ "Update",
+ },
+ "hash/crc64": {
+ "Checksum",
+ "ECMA",
+ "ISO",
+ "MakeTable",
+ "New",
+ "Size",
+ "Table",
+ "Update",
+ },
+ "hash/fnv": {
+ "New128",
+ "New128a",
+ "New32",
+ "New32a",
+ "New64",
+ "New64a",
+ },
+ "hash/maphash": {
+ "Bytes",
+ "Hash",
+ "MakeSeed",
+ "Seed",
+ "String",
+ },
+ "html": {
+ "EscapeString",
+ "UnescapeString",
+ },
+ "html/template": {
+ "CSS",
+ "ErrAmbigContext",
+ "ErrBadHTML",
+ "ErrBranchEnd",
+ "ErrEndContext",
+ "ErrJSTemplate",
+ "ErrNoSuchTemplate",
+ "ErrOutputContext",
+ "ErrPartialCharset",
+ "ErrPartialEscape",
+ "ErrPredefinedEscaper",
+ "ErrRangeLoopReentry",
+ "ErrSlashAmbig",
+ "Error",
+ "ErrorCode",
+ "FuncMap",
+ "HTML",
+ "HTMLAttr",
+ "HTMLEscape",
+ "HTMLEscapeString",
+ "HTMLEscaper",
+ "IsTrue",
+ "JS",
+ "JSEscape",
+ "JSEscapeString",
+ "JSEscaper",
+ "JSStr",
+ "Must",
+ "New",
+ "OK",
+ "ParseFS",
+ "ParseFiles",
+ "ParseGlob",
+ "Srcset",
+ "Template",
+ "URL",
+ "URLQueryEscaper",
+ },
+ "image": {
+ "Alpha",
+ "Alpha16",
+ "Black",
+ "CMYK",
+ "Config",
+ "Decode",
+ "DecodeConfig",
+ "ErrFormat",
+ "Gray",
+ "Gray16",
+ "Image",
+ "NRGBA",
+ "NRGBA64",
+ "NYCbCrA",
+ "NewAlpha",
+ "NewAlpha16",
+ "NewCMYK",
+ "NewGray",
+ "NewGray16",
+ "NewNRGBA",
+ "NewNRGBA64",
+ "NewNYCbCrA",
+ "NewPaletted",
+ "NewRGBA",
+ "NewRGBA64",
+ "NewUniform",
+ "NewYCbCr",
+ "Opaque",
+ "Paletted",
+ "PalettedImage",
+ "Point",
+ "Pt",
+ "RGBA",
+ "RGBA64",
+ "RGBA64Image",
+ "Rect",
+ "Rectangle",
+ "RegisterFormat",
+ "Transparent",
+ "Uniform",
+ "White",
+ "YCbCr",
+ "YCbCrSubsampleRatio",
+ "YCbCrSubsampleRatio410",
+ "YCbCrSubsampleRatio411",
+ "YCbCrSubsampleRatio420",
+ "YCbCrSubsampleRatio422",
+ "YCbCrSubsampleRatio440",
+ "YCbCrSubsampleRatio444",
+ "ZP",
+ "ZR",
+ },
+ "image/color": {
+ "Alpha",
+ "Alpha16",
+ "Alpha16Model",
+ "AlphaModel",
+ "Black",
+ "CMYK",
+ "CMYKModel",
+ "CMYKToRGB",
+ "Color",
+ "Gray",
+ "Gray16",
+ "Gray16Model",
+ "GrayModel",
+ "Model",
+ "ModelFunc",
+ "NRGBA",
+ "NRGBA64",
+ "NRGBA64Model",
+ "NRGBAModel",
+ "NYCbCrA",
+ "NYCbCrAModel",
+ "Opaque",
+ "Palette",
+ "RGBA",
+ "RGBA64",
+ "RGBA64Model",
+ "RGBAModel",
+ "RGBToCMYK",
+ "RGBToYCbCr",
+ "Transparent",
+ "White",
+ "YCbCr",
+ "YCbCrModel",
+ "YCbCrToRGB",
+ },
+ "image/color/palette": {
+ "Plan9",
+ "WebSafe",
+ },
+ "image/draw": {
+ "Draw",
+ "DrawMask",
+ "Drawer",
+ "FloydSteinberg",
+ "Image",
+ "Op",
+ "Over",
+ "Quantizer",
+ "RGBA64Image",
+ "Src",
+ },
+ "image/gif": {
+ "Decode",
+ "DecodeAll",
+ "DecodeConfig",
+ "DisposalBackground",
+ "DisposalNone",
+ "DisposalPrevious",
+ "Encode",
+ "EncodeAll",
+ "GIF",
+ "Options",
+ },
+ "image/jpeg": {
+ "Decode",
+ "DecodeConfig",
+ "DefaultQuality",
+ "Encode",
+ "FormatError",
+ "Options",
+ "Reader",
+ "UnsupportedError",
+ },
+ "image/png": {
+ "BestCompression",
+ "BestSpeed",
+ "CompressionLevel",
+ "Decode",
+ "DecodeConfig",
+ "DefaultCompression",
+ "Encode",
+ "Encoder",
+ "EncoderBuffer",
+ "EncoderBufferPool",
+ "FormatError",
+ "NoCompression",
+ "UnsupportedError",
+ },
+ "index/suffixarray": {
+ "Index",
+ "New",
+ },
+ "io": {
+ "ByteReader",
+ "ByteScanner",
+ "ByteWriter",
+ "Closer",
+ "Copy",
+ "CopyBuffer",
+ "CopyN",
+ "Discard",
+ "EOF",
+ "ErrClosedPipe",
+ "ErrNoProgress",
+ "ErrShortBuffer",
+ "ErrShortWrite",
+ "ErrUnexpectedEOF",
+ "LimitReader",
+ "LimitedReader",
+ "MultiReader",
+ "MultiWriter",
+ "NewOffsetWriter",
+ "NewSectionReader",
+ "NopCloser",
+ "OffsetWriter",
+ "Pipe",
+ "PipeReader",
+ "PipeWriter",
+ "ReadAll",
+ "ReadAtLeast",
+ "ReadCloser",
+ "ReadFull",
+ "ReadSeekCloser",
+ "ReadSeeker",
+ "ReadWriteCloser",
+ "ReadWriteSeeker",
+ "ReadWriter",
+ "Reader",
+ "ReaderAt",
+ "ReaderFrom",
+ "RuneReader",
+ "RuneScanner",
+ "SectionReader",
+ "SeekCurrent",
+ "SeekEnd",
+ "SeekStart",
+ "Seeker",
+ "StringWriter",
+ "TeeReader",
+ "WriteCloser",
+ "WriteSeeker",
+ "WriteString",
+ "Writer",
+ "WriterAt",
+ "WriterTo",
+ },
+ "io/fs": {
+ "DirEntry",
+ "ErrClosed",
+ "ErrExist",
+ "ErrInvalid",
+ "ErrNotExist",
+ "ErrPermission",
+ "FS",
+ "File",
+ "FileInfo",
+ "FileInfoToDirEntry",
+ "FileMode",
+ "FormatDirEntry",
+ "FormatFileInfo",
+ "Glob",
+ "GlobFS",
+ "ModeAppend",
+ "ModeCharDevice",
+ "ModeDevice",
+ "ModeDir",
+ "ModeExclusive",
+ "ModeIrregular",
+ "ModeNamedPipe",
+ "ModePerm",
+ "ModeSetgid",
+ "ModeSetuid",
+ "ModeSocket",
+ "ModeSticky",
+ "ModeSymlink",
+ "ModeTemporary",
+ "ModeType",
+ "PathError",
+ "ReadDir",
+ "ReadDirFS",
+ "ReadDirFile",
+ "ReadFile",
+ "ReadFileFS",
+ "SkipAll",
+ "SkipDir",
+ "Stat",
+ "StatFS",
+ "Sub",
+ "SubFS",
+ "ValidPath",
+ "WalkDir",
+ "WalkDirFunc",
+ },
+ "io/ioutil": {
+ "Discard",
+ "NopCloser",
+ "ReadAll",
+ "ReadDir",
+ "ReadFile",
+ "TempDir",
+ "TempFile",
+ "WriteFile",
+ },
+ "log": {
+ "Default",
+ "Fatal",
+ "Fatalf",
+ "Fatalln",
+ "Flags",
+ "LUTC",
+ "Ldate",
+ "Llongfile",
+ "Lmicroseconds",
+ "Lmsgprefix",
+ "Logger",
+ "Lshortfile",
+ "LstdFlags",
+ "Ltime",
+ "New",
+ "Output",
+ "Panic",
+ "Panicf",
+ "Panicln",
+ "Prefix",
+ "Print",
+ "Printf",
+ "Println",
+ "SetFlags",
+ "SetOutput",
+ "SetPrefix",
+ "Writer",
+ },
+ "log/slog": {
+ "Any",
+ "AnyValue",
+ "Attr",
+ "Bool",
+ "BoolValue",
+ "Debug",
+ "DebugContext",
+ "Default",
+ "Duration",
+ "DurationValue",
+ "Error",
+ "ErrorContext",
+ "Float64",
+ "Float64Value",
+ "Group",
+ "GroupValue",
+ "Handler",
+ "HandlerOptions",
+ "Info",
+ "InfoContext",
+ "Int",
+ "Int64",
+ "Int64Value",
+ "IntValue",
+ "JSONHandler",
+ "Kind",
+ "KindAny",
+ "KindBool",
+ "KindDuration",
+ "KindFloat64",
+ "KindGroup",
+ "KindInt64",
+ "KindLogValuer",
+ "KindString",
+ "KindTime",
+ "KindUint64",
+ "Level",
+ "LevelDebug",
+ "LevelError",
+ "LevelInfo",
+ "LevelKey",
+ "LevelVar",
+ "LevelWarn",
+ "Leveler",
+ "Log",
+ "LogAttrs",
+ "LogValuer",
+ "Logger",
+ "MessageKey",
+ "New",
+ "NewJSONHandler",
+ "NewLogLogger",
+ "NewRecord",
+ "NewTextHandler",
+ "Record",
+ "SetDefault",
+ "Source",
+ "SourceKey",
+ "String",
+ "StringValue",
+ "TextHandler",
+ "Time",
+ "TimeKey",
+ "TimeValue",
+ "Uint64",
+ "Uint64Value",
+ "Value",
+ "Warn",
+ "WarnContext",
+ "With",
+ },
+ "log/syslog": {
+ "Dial",
+ "LOG_ALERT",
+ "LOG_AUTH",
+ "LOG_AUTHPRIV",
+ "LOG_CRIT",
+ "LOG_CRON",
+ "LOG_DAEMON",
+ "LOG_DEBUG",
+ "LOG_EMERG",
+ "LOG_ERR",
+ "LOG_FTP",
+ "LOG_INFO",
+ "LOG_KERN",
+ "LOG_LOCAL0",
+ "LOG_LOCAL1",
+ "LOG_LOCAL2",
+ "LOG_LOCAL3",
+ "LOG_LOCAL4",
+ "LOG_LOCAL5",
+ "LOG_LOCAL6",
+ "LOG_LOCAL7",
+ "LOG_LPR",
+ "LOG_MAIL",
+ "LOG_NEWS",
+ "LOG_NOTICE",
+ "LOG_SYSLOG",
+ "LOG_USER",
+ "LOG_UUCP",
+ "LOG_WARNING",
+ "New",
+ "NewLogger",
+ "Priority",
+ "Writer",
+ },
+ "maps": {
+ "Clone",
+ "Copy",
+ "DeleteFunc",
+ "Equal",
+ "EqualFunc",
+ },
+ "math": {
+ "Abs",
+ "Acos",
+ "Acosh",
+ "Asin",
+ "Asinh",
+ "Atan",
+ "Atan2",
+ "Atanh",
+ "Cbrt",
+ "Ceil",
+ "Copysign",
+ "Cos",
+ "Cosh",
+ "Dim",
+ "E",
+ "Erf",
+ "Erfc",
+ "Erfcinv",
+ "Erfinv",
+ "Exp",
+ "Exp2",
+ "Expm1",
+ "FMA",
+ "Float32bits",
+ "Float32frombits",
+ "Float64bits",
+ "Float64frombits",
+ "Floor",
+ "Frexp",
+ "Gamma",
+ "Hypot",
+ "Ilogb",
+ "Inf",
+ "IsInf",
+ "IsNaN",
+ "J0",
+ "J1",
+ "Jn",
+ "Ldexp",
+ "Lgamma",
+ "Ln10",
+ "Ln2",
+ "Log",
+ "Log10",
+ "Log10E",
+ "Log1p",
+ "Log2",
+ "Log2E",
+ "Logb",
+ "Max",
+ "MaxFloat32",
+ "MaxFloat64",
+ "MaxInt",
+ "MaxInt16",
+ "MaxInt32",
+ "MaxInt64",
+ "MaxInt8",
+ "MaxUint",
+ "MaxUint16",
+ "MaxUint32",
+ "MaxUint64",
+ "MaxUint8",
+ "Min",
+ "MinInt",
+ "MinInt16",
+ "MinInt32",
+ "MinInt64",
+ "MinInt8",
+ "Mod",
+ "Modf",
+ "NaN",
+ "Nextafter",
+ "Nextafter32",
+ "Phi",
+ "Pi",
+ "Pow",
+ "Pow10",
+ "Remainder",
+ "Round",
+ "RoundToEven",
+ "Signbit",
+ "Sin",
+ "Sincos",
+ "Sinh",
+ "SmallestNonzeroFloat32",
+ "SmallestNonzeroFloat64",
+ "Sqrt",
+ "Sqrt2",
+ "SqrtE",
+ "SqrtPhi",
+ "SqrtPi",
+ "Tan",
+ "Tanh",
+ "Trunc",
+ "Y0",
+ "Y1",
+ "Yn",
+ },
+ "math/big": {
+ "Above",
+ "Accuracy",
+ "AwayFromZero",
+ "Below",
+ "ErrNaN",
+ "Exact",
+ "Float",
+ "Int",
+ "Jacobi",
+ "MaxBase",
+ "MaxExp",
+ "MaxPrec",
+ "MinExp",
+ "NewFloat",
+ "NewInt",
+ "NewRat",
+ "ParseFloat",
+ "Rat",
+ "RoundingMode",
+ "ToNearestAway",
+ "ToNearestEven",
+ "ToNegativeInf",
+ "ToPositiveInf",
+ "ToZero",
+ "Word",
+ },
+ "math/bits": {
+ "Add",
+ "Add32",
+ "Add64",
+ "Div",
+ "Div32",
+ "Div64",
+ "LeadingZeros",
+ "LeadingZeros16",
+ "LeadingZeros32",
+ "LeadingZeros64",
+ "LeadingZeros8",
+ "Len",
+ "Len16",
+ "Len32",
+ "Len64",
+ "Len8",
+ "Mul",
+ "Mul32",
+ "Mul64",
+ "OnesCount",
+ "OnesCount16",
+ "OnesCount32",
+ "OnesCount64",
+ "OnesCount8",
+ "Rem",
+ "Rem32",
+ "Rem64",
+ "Reverse",
+ "Reverse16",
+ "Reverse32",
+ "Reverse64",
+ "Reverse8",
+ "ReverseBytes",
+ "ReverseBytes16",
+ "ReverseBytes32",
+ "ReverseBytes64",
+ "RotateLeft",
+ "RotateLeft16",
+ "RotateLeft32",
+ "RotateLeft64",
+ "RotateLeft8",
+ "Sub",
+ "Sub32",
+ "Sub64",
+ "TrailingZeros",
+ "TrailingZeros16",
+ "TrailingZeros32",
+ "TrailingZeros64",
+ "TrailingZeros8",
+ "UintSize",
+ },
+ "math/cmplx": {
+ "Abs",
+ "Acos",
+ "Acosh",
+ "Asin",
+ "Asinh",
+ "Atan",
+ "Atanh",
+ "Conj",
+ "Cos",
+ "Cosh",
+ "Cot",
+ "Exp",
+ "Inf",
+ "IsInf",
+ "IsNaN",
+ "Log",
+ "Log10",
+ "NaN",
+ "Phase",
+ "Polar",
+ "Pow",
+ "Rect",
+ "Sin",
+ "Sinh",
+ "Sqrt",
+ "Tan",
+ "Tanh",
+ },
+ "math/rand": {
+ "ExpFloat64",
+ "Float32",
+ "Float64",
+ "Int",
+ "Int31",
+ "Int31n",
+ "Int63",
+ "Int63n",
+ "Intn",
+ "New",
+ "NewSource",
+ "NewZipf",
+ "NormFloat64",
+ "Perm",
+ "Rand",
+ "Read",
+ "Seed",
+ "Shuffle",
+ "Source",
+ "Source64",
+ "Uint32",
+ "Uint64",
+ "Zipf",
+ },
+ "mime": {
+ "AddExtensionType",
+ "BEncoding",
+ "ErrInvalidMediaParameter",
+ "ExtensionsByType",
+ "FormatMediaType",
+ "ParseMediaType",
+ "QEncoding",
+ "TypeByExtension",
+ "WordDecoder",
+ "WordEncoder",
+ },
+ "mime/multipart": {
+ "ErrMessageTooLarge",
+ "File",
+ "FileHeader",
+ "Form",
+ "NewReader",
+ "NewWriter",
+ "Part",
+ "Reader",
+ "Writer",
+ },
+ "mime/quotedprintable": {
+ "NewReader",
+ "NewWriter",
+ "Reader",
+ "Writer",
+ },
+ "net": {
+ "Addr",
+ "AddrError",
+ "Buffers",
+ "CIDRMask",
+ "Conn",
+ "DNSConfigError",
+ "DNSError",
+ "DefaultResolver",
+ "Dial",
+ "DialIP",
+ "DialTCP",
+ "DialTimeout",
+ "DialUDP",
+ "DialUnix",
+ "Dialer",
+ "ErrClosed",
+ "ErrWriteToConnected",
+ "Error",
+ "FileConn",
+ "FileListener",
+ "FilePacketConn",
+ "FlagBroadcast",
+ "FlagLoopback",
+ "FlagMulticast",
+ "FlagPointToPoint",
+ "FlagRunning",
+ "FlagUp",
+ "Flags",
+ "HardwareAddr",
+ "IP",
+ "IPAddr",
+ "IPConn",
+ "IPMask",
+ "IPNet",
+ "IPv4",
+ "IPv4Mask",
+ "IPv4allrouter",
+ "IPv4allsys",
+ "IPv4bcast",
+ "IPv4len",
+ "IPv4zero",
+ "IPv6interfacelocalallnodes",
+ "IPv6len",
+ "IPv6linklocalallnodes",
+ "IPv6linklocalallrouters",
+ "IPv6loopback",
+ "IPv6unspecified",
+ "IPv6zero",
+ "Interface",
+ "InterfaceAddrs",
+ "InterfaceByIndex",
+ "InterfaceByName",
+ "Interfaces",
+ "InvalidAddrError",
+ "JoinHostPort",
+ "Listen",
+ "ListenConfig",
+ "ListenIP",
+ "ListenMulticastUDP",
+ "ListenPacket",
+ "ListenTCP",
+ "ListenUDP",
+ "ListenUnix",
+ "ListenUnixgram",
+ "Listener",
+ "LookupAddr",
+ "LookupCNAME",
+ "LookupHost",
+ "LookupIP",
+ "LookupMX",
+ "LookupNS",
+ "LookupPort",
+ "LookupSRV",
+ "LookupTXT",
+ "MX",
+ "NS",
+ "OpError",
+ "PacketConn",
+ "ParseCIDR",
+ "ParseError",
+ "ParseIP",
+ "ParseMAC",
+ "Pipe",
+ "ResolveIPAddr",
+ "ResolveTCPAddr",
+ "ResolveUDPAddr",
+ "ResolveUnixAddr",
+ "Resolver",
+ "SRV",
+ "SplitHostPort",
+ "TCPAddr",
+ "TCPAddrFromAddrPort",
+ "TCPConn",
+ "TCPListener",
+ "UDPAddr",
+ "UDPAddrFromAddrPort",
+ "UDPConn",
+ "UnixAddr",
+ "UnixConn",
+ "UnixListener",
+ "UnknownNetworkError",
+ },
+ "net/http": {
+ "AllowQuerySemicolons",
+ "CanonicalHeaderKey",
+ "Client",
+ "CloseNotifier",
+ "ConnState",
+ "Cookie",
+ "CookieJar",
+ "DefaultClient",
+ "DefaultMaxHeaderBytes",
+ "DefaultMaxIdleConnsPerHost",
+ "DefaultServeMux",
+ "DefaultTransport",
+ "DetectContentType",
+ "Dir",
+ "ErrAbortHandler",
+ "ErrBodyNotAllowed",
+ "ErrBodyReadAfterClose",
+ "ErrContentLength",
+ "ErrHandlerTimeout",
+ "ErrHeaderTooLong",
+ "ErrHijacked",
+ "ErrLineTooLong",
+ "ErrMissingBoundary",
+ "ErrMissingContentLength",
+ "ErrMissingFile",
+ "ErrNoCookie",
+ "ErrNoLocation",
+ "ErrNotMultipart",
+ "ErrNotSupported",
+ "ErrSchemeMismatch",
+ "ErrServerClosed",
+ "ErrShortBody",
+ "ErrSkipAltProtocol",
+ "ErrUnexpectedTrailer",
+ "ErrUseLastResponse",
+ "ErrWriteAfterFlush",
+ "Error",
+ "FS",
+ "File",
+ "FileServer",
+ "FileSystem",
+ "Flusher",
+ "Get",
+ "Handle",
+ "HandleFunc",
+ "Handler",
+ "HandlerFunc",
+ "Head",
+ "Header",
+ "Hijacker",
+ "ListenAndServe",
+ "ListenAndServeTLS",
+ "LocalAddrContextKey",
+ "MaxBytesError",
+ "MaxBytesHandler",
+ "MaxBytesReader",
+ "MethodConnect",
+ "MethodDelete",
+ "MethodGet",
+ "MethodHead",
+ "MethodOptions",
+ "MethodPatch",
+ "MethodPost",
+ "MethodPut",
+ "MethodTrace",
+ "NewFileTransport",
+ "NewRequest",
+ "NewRequestWithContext",
+ "NewResponseController",
+ "NewServeMux",
+ "NoBody",
+ "NotFound",
+ "NotFoundHandler",
+ "ParseHTTPVersion",
+ "ParseTime",
+ "Post",
+ "PostForm",
+ "ProtocolError",
+ "ProxyFromEnvironment",
+ "ProxyURL",
+ "PushOptions",
+ "Pusher",
+ "ReadRequest",
+ "ReadResponse",
+ "Redirect",
+ "RedirectHandler",
+ "Request",
+ "Response",
+ "ResponseController",
+ "ResponseWriter",
+ "RoundTripper",
+ "SameSite",
+ "SameSiteDefaultMode",
+ "SameSiteLaxMode",
+ "SameSiteNoneMode",
+ "SameSiteStrictMode",
+ "Serve",
+ "ServeContent",
+ "ServeFile",
+ "ServeMux",
+ "ServeTLS",
+ "Server",
+ "ServerContextKey",
+ "SetCookie",
+ "StateActive",
+ "StateClosed",
+ "StateHijacked",
+ "StateIdle",
+ "StateNew",
+ "StatusAccepted",
+ "StatusAlreadyReported",
+ "StatusBadGateway",
+ "StatusBadRequest",
+ "StatusConflict",
+ "StatusContinue",
+ "StatusCreated",
+ "StatusEarlyHints",
+ "StatusExpectationFailed",
+ "StatusFailedDependency",
+ "StatusForbidden",
+ "StatusFound",
+ "StatusGatewayTimeout",
+ "StatusGone",
+ "StatusHTTPVersionNotSupported",
+ "StatusIMUsed",
+ "StatusInsufficientStorage",
+ "StatusInternalServerError",
+ "StatusLengthRequired",
+ "StatusLocked",
+ "StatusLoopDetected",
+ "StatusMethodNotAllowed",
+ "StatusMisdirectedRequest",
+ "StatusMovedPermanently",
+ "StatusMultiStatus",
+ "StatusMultipleChoices",
+ "StatusNetworkAuthenticationRequired",
+ "StatusNoContent",
+ "StatusNonAuthoritativeInfo",
+ "StatusNotAcceptable",
+ "StatusNotExtended",
+ "StatusNotFound",
+ "StatusNotImplemented",
+ "StatusNotModified",
+ "StatusOK",
+ "StatusPartialContent",
+ "StatusPaymentRequired",
+ "StatusPermanentRedirect",
+ "StatusPreconditionFailed",
+ "StatusPreconditionRequired",
+ "StatusProcessing",
+ "StatusProxyAuthRequired",
+ "StatusRequestEntityTooLarge",
+ "StatusRequestHeaderFieldsTooLarge",
+ "StatusRequestTimeout",
+ "StatusRequestURITooLong",
+ "StatusRequestedRangeNotSatisfiable",
+ "StatusResetContent",
+ "StatusSeeOther",
+ "StatusServiceUnavailable",
+ "StatusSwitchingProtocols",
+ "StatusTeapot",
+ "StatusTemporaryRedirect",
+ "StatusText",
+ "StatusTooEarly",
+ "StatusTooManyRequests",
+ "StatusUnauthorized",
+ "StatusUnavailableForLegalReasons",
+ "StatusUnprocessableEntity",
+ "StatusUnsupportedMediaType",
+ "StatusUpgradeRequired",
+ "StatusUseProxy",
+ "StatusVariantAlsoNegotiates",
+ "StripPrefix",
+ "TimeFormat",
+ "TimeoutHandler",
+ "TrailerPrefix",
+ "Transport",
+ },
+ "net/http/cgi": {
+ "Handler",
+ "Request",
+ "RequestFromMap",
+ "Serve",
+ },
+ "net/http/cookiejar": {
+ "Jar",
+ "New",
+ "Options",
+ "PublicSuffixList",
+ },
+ "net/http/fcgi": {
+ "ErrConnClosed",
+ "ErrRequestAborted",
+ "ProcessEnv",
+ "Serve",
+ },
+ "net/http/httptest": {
+ "DefaultRemoteAddr",
+ "NewRecorder",
+ "NewRequest",
+ "NewServer",
+ "NewTLSServer",
+ "NewUnstartedServer",
+ "ResponseRecorder",
+ "Server",
+ },
+ "net/http/httptrace": {
+ "ClientTrace",
+ "ContextClientTrace",
+ "DNSDoneInfo",
+ "DNSStartInfo",
+ "GotConnInfo",
+ "WithClientTrace",
+ "WroteRequestInfo",
+ },
+ "net/http/httputil": {
+ "BufferPool",
+ "ClientConn",
+ "DumpRequest",
+ "DumpRequestOut",
+ "DumpResponse",
+ "ErrClosed",
+ "ErrLineTooLong",
+ "ErrPersistEOF",
+ "ErrPipeline",
+ "NewChunkedReader",
+ "NewChunkedWriter",
+ "NewClientConn",
+ "NewProxyClientConn",
+ "NewServerConn",
+ "NewSingleHostReverseProxy",
+ "ProxyRequest",
+ "ReverseProxy",
+ "ServerConn",
+ },
+ "net/http/pprof": {
+ "Cmdline",
+ "Handler",
+ "Index",
+ "Profile",
+ "Symbol",
+ "Trace",
+ },
+ "net/mail": {
+ "Address",
+ "AddressParser",
+ "ErrHeaderNotPresent",
+ "Header",
+ "Message",
+ "ParseAddress",
+ "ParseAddressList",
+ "ParseDate",
+ "ReadMessage",
+ },
+ "net/netip": {
+ "Addr",
+ "AddrFrom16",
+ "AddrFrom4",
+ "AddrFromSlice",
+ "AddrPort",
+ "AddrPortFrom",
+ "IPv4Unspecified",
+ "IPv6LinkLocalAllNodes",
+ "IPv6LinkLocalAllRouters",
+ "IPv6Loopback",
+ "IPv6Unspecified",
+ "MustParseAddr",
+ "MustParseAddrPort",
+ "MustParsePrefix",
+ "ParseAddr",
+ "ParseAddrPort",
+ "ParsePrefix",
+ "Prefix",
+ "PrefixFrom",
+ },
+ "net/rpc": {
+ "Accept",
+ "Call",
+ "Client",
+ "ClientCodec",
+ "DefaultDebugPath",
+ "DefaultRPCPath",
+ "DefaultServer",
+ "Dial",
+ "DialHTTP",
+ "DialHTTPPath",
+ "ErrShutdown",
+ "HandleHTTP",
+ "NewClient",
+ "NewClientWithCodec",
+ "NewServer",
+ "Register",
+ "RegisterName",
+ "Request",
+ "Response",
+ "ServeCodec",
+ "ServeConn",
+ "ServeRequest",
+ "Server",
+ "ServerCodec",
+ "ServerError",
+ },
+ "net/rpc/jsonrpc": {
+ "Dial",
+ "NewClient",
+ "NewClientCodec",
+ "NewServerCodec",
+ "ServeConn",
+ },
+ "net/smtp": {
+ "Auth",
+ "CRAMMD5Auth",
+ "Client",
+ "Dial",
+ "NewClient",
+ "PlainAuth",
+ "SendMail",
+ "ServerInfo",
+ },
+ "net/textproto": {
+ "CanonicalMIMEHeaderKey",
+ "Conn",
+ "Dial",
+ "Error",
+ "MIMEHeader",
+ "NewConn",
+ "NewReader",
+ "NewWriter",
+ "Pipeline",
+ "ProtocolError",
+ "Reader",
+ "TrimBytes",
+ "TrimString",
+ "Writer",
+ },
+ "net/url": {
+ "Error",
+ "EscapeError",
+ "InvalidHostError",
+ "JoinPath",
+ "Parse",
+ "ParseQuery",
+ "ParseRequestURI",
+ "PathEscape",
+ "PathUnescape",
+ "QueryEscape",
+ "QueryUnescape",
+ "URL",
+ "User",
+ "UserPassword",
+ "Userinfo",
+ "Values",
+ },
+ "os": {
+ "Args",
+ "Chdir",
+ "Chmod",
+ "Chown",
+ "Chtimes",
+ "Clearenv",
+ "Create",
+ "CreateTemp",
+ "DevNull",
+ "DirEntry",
+ "DirFS",
+ "Environ",
+ "ErrClosed",
+ "ErrDeadlineExceeded",
+ "ErrExist",
+ "ErrInvalid",
+ "ErrNoDeadline",
+ "ErrNotExist",
+ "ErrPermission",
+ "ErrProcessDone",
+ "Executable",
+ "Exit",
+ "Expand",
+ "ExpandEnv",
+ "File",
+ "FileInfo",
+ "FileMode",
+ "FindProcess",
+ "Getegid",
+ "Getenv",
+ "Geteuid",
+ "Getgid",
+ "Getgroups",
+ "Getpagesize",
+ "Getpid",
+ "Getppid",
+ "Getuid",
+ "Getwd",
+ "Hostname",
+ "Interrupt",
+ "IsExist",
+ "IsNotExist",
+ "IsPathSeparator",
+ "IsPermission",
+ "IsTimeout",
+ "Kill",
+ "Lchown",
+ "Link",
+ "LinkError",
+ "LookupEnv",
+ "Lstat",
+ "Mkdir",
+ "MkdirAll",
+ "MkdirTemp",
+ "ModeAppend",
+ "ModeCharDevice",
+ "ModeDevice",
+ "ModeDir",
+ "ModeExclusive",
+ "ModeIrregular",
+ "ModeNamedPipe",
+ "ModePerm",
+ "ModeSetgid",
+ "ModeSetuid",
+ "ModeSocket",
+ "ModeSticky",
+ "ModeSymlink",
+ "ModeTemporary",
+ "ModeType",
+ "NewFile",
+ "NewSyscallError",
+ "O_APPEND",
+ "O_CREATE",
+ "O_EXCL",
+ "O_RDONLY",
+ "O_RDWR",
+ "O_SYNC",
+ "O_TRUNC",
+ "O_WRONLY",
+ "Open",
+ "OpenFile",
+ "PathError",
+ "PathListSeparator",
+ "PathSeparator",
+ "Pipe",
+ "ProcAttr",
+ "Process",
+ "ProcessState",
+ "ReadDir",
+ "ReadFile",
+ "Readlink",
+ "Remove",
+ "RemoveAll",
+ "Rename",
+ "SEEK_CUR",
+ "SEEK_END",
+ "SEEK_SET",
+ "SameFile",
+ "Setenv",
+ "Signal",
+ "StartProcess",
+ "Stat",
+ "Stderr",
+ "Stdin",
+ "Stdout",
+ "Symlink",
+ "SyscallError",
+ "TempDir",
+ "Truncate",
+ "Unsetenv",
+ "UserCacheDir",
+ "UserConfigDir",
+ "UserHomeDir",
+ "WriteFile",
+ },
+ "os/exec": {
+ "Cmd",
+ "Command",
+ "CommandContext",
+ "ErrDot",
+ "ErrNotFound",
+ "ErrWaitDelay",
+ "Error",
+ "ExitError",
+ "LookPath",
+ },
+ "os/signal": {
+ "Ignore",
+ "Ignored",
+ "Notify",
+ "NotifyContext",
+ "Reset",
+ "Stop",
+ },
+ "os/user": {
+ "Current",
+ "Group",
+ "Lookup",
+ "LookupGroup",
+ "LookupGroupId",
+ "LookupId",
+ "UnknownGroupError",
+ "UnknownGroupIdError",
+ "UnknownUserError",
+ "UnknownUserIdError",
+ "User",
+ },
+ "path": {
+ "Base",
+ "Clean",
+ "Dir",
+ "ErrBadPattern",
+ "Ext",
+ "IsAbs",
+ "Join",
+ "Match",
+ "Split",
+ },
+ "path/filepath": {
+ "Abs",
+ "Base",
+ "Clean",
+ "Dir",
+ "ErrBadPattern",
+ "EvalSymlinks",
+ "Ext",
+ "FromSlash",
+ "Glob",
+ "HasPrefix",
+ "IsAbs",
+ "IsLocal",
+ "Join",
+ "ListSeparator",
+ "Match",
+ "Rel",
+ "Separator",
+ "SkipAll",
+ "SkipDir",
+ "Split",
+ "SplitList",
+ "ToSlash",
+ "VolumeName",
+ "Walk",
+ "WalkDir",
+ "WalkFunc",
+ },
+ "plugin": {
+ "Open",
+ "Plugin",
+ "Symbol",
+ },
+ "reflect": {
+ "Append",
+ "AppendSlice",
+ "Array",
+ "ArrayOf",
+ "Bool",
+ "BothDir",
+ "Chan",
+ "ChanDir",
+ "ChanOf",
+ "Complex128",
+ "Complex64",
+ "Copy",
+ "DeepEqual",
+ "Float32",
+ "Float64",
+ "Func",
+ "FuncOf",
+ "Indirect",
+ "Int",
+ "Int16",
+ "Int32",
+ "Int64",
+ "Int8",
+ "Interface",
+ "Invalid",
+ "Kind",
+ "MakeChan",
+ "MakeFunc",
+ "MakeMap",
+ "MakeMapWithSize",
+ "MakeSlice",
+ "Map",
+ "MapIter",
+ "MapOf",
+ "Method",
+ "New",
+ "NewAt",
+ "Pointer",
+ "PointerTo",
+ "Ptr",
+ "PtrTo",
+ "RecvDir",
+ "Select",
+ "SelectCase",
+ "SelectDefault",
+ "SelectDir",
+ "SelectRecv",
+ "SelectSend",
+ "SendDir",
+ "Slice",
+ "SliceHeader",
+ "SliceOf",
+ "String",
+ "StringHeader",
+ "Struct",
+ "StructField",
+ "StructOf",
+ "StructTag",
+ "Swapper",
+ "Type",
+ "TypeOf",
+ "Uint",
+ "Uint16",
+ "Uint32",
+ "Uint64",
+ "Uint8",
+ "Uintptr",
+ "UnsafePointer",
+ "Value",
+ "ValueError",
+ "ValueOf",
+ "VisibleFields",
+ "Zero",
+ },
+ "regexp": {
+ "Compile",
+ "CompilePOSIX",
+ "Match",
+ "MatchReader",
+ "MatchString",
+ "MustCompile",
+ "MustCompilePOSIX",
+ "QuoteMeta",
+ "Regexp",
+ },
+ "regexp/syntax": {
+ "ClassNL",
+ "Compile",
+ "DotNL",
+ "EmptyBeginLine",
+ "EmptyBeginText",
+ "EmptyEndLine",
+ "EmptyEndText",
+ "EmptyNoWordBoundary",
+ "EmptyOp",
+ "EmptyOpContext",
+ "EmptyWordBoundary",
+ "ErrInternalError",
+ "ErrInvalidCharClass",
+ "ErrInvalidCharRange",
+ "ErrInvalidEscape",
+ "ErrInvalidNamedCapture",
+ "ErrInvalidPerlOp",
+ "ErrInvalidRepeatOp",
+ "ErrInvalidRepeatSize",
+ "ErrInvalidUTF8",
+ "ErrLarge",
+ "ErrMissingBracket",
+ "ErrMissingParen",
+ "ErrMissingRepeatArgument",
+ "ErrNestingDepth",
+ "ErrTrailingBackslash",
+ "ErrUnexpectedParen",
+ "Error",
+ "ErrorCode",
+ "Flags",
+ "FoldCase",
+ "Inst",
+ "InstAlt",
+ "InstAltMatch",
+ "InstCapture",
+ "InstEmptyWidth",
+ "InstFail",
+ "InstMatch",
+ "InstNop",
+ "InstOp",
+ "InstRune",
+ "InstRune1",
+ "InstRuneAny",
+ "InstRuneAnyNotNL",
+ "IsWordChar",
+ "Literal",
+ "MatchNL",
+ "NonGreedy",
+ "OneLine",
+ "Op",
+ "OpAlternate",
+ "OpAnyChar",
+ "OpAnyCharNotNL",
+ "OpBeginLine",
+ "OpBeginText",
+ "OpCapture",
+ "OpCharClass",
+ "OpConcat",
+ "OpEmptyMatch",
+ "OpEndLine",
+ "OpEndText",
+ "OpLiteral",
+ "OpNoMatch",
+ "OpNoWordBoundary",
+ "OpPlus",
+ "OpQuest",
+ "OpRepeat",
+ "OpStar",
+ "OpWordBoundary",
+ "POSIX",
+ "Parse",
+ "Perl",
+ "PerlX",
+ "Prog",
+ "Regexp",
+ "Simple",
+ "UnicodeGroups",
+ "WasDollar",
+ },
+ "runtime": {
+ "BlockProfile",
+ "BlockProfileRecord",
+ "Breakpoint",
+ "CPUProfile",
+ "Caller",
+ "Callers",
+ "CallersFrames",
+ "Compiler",
+ "Error",
+ "Frame",
+ "Frames",
+ "Func",
+ "FuncForPC",
+ "GC",
+ "GOARCH",
+ "GOMAXPROCS",
+ "GOOS",
+ "GOROOT",
+ "Goexit",
+ "GoroutineProfile",
+ "Gosched",
+ "KeepAlive",
+ "LockOSThread",
+ "MemProfile",
+ "MemProfileRate",
+ "MemProfileRecord",
+ "MemStats",
+ "MutexProfile",
+ "NumCPU",
+ "NumCgoCall",
+ "NumGoroutine",
+ "PanicNilError",
+ "Pinner",
+ "ReadMemStats",
+ "ReadTrace",
+ "SetBlockProfileRate",
+ "SetCPUProfileRate",
+ "SetCgoTraceback",
+ "SetFinalizer",
+ "SetMutexProfileFraction",
+ "Stack",
+ "StackRecord",
+ "StartTrace",
+ "StopTrace",
+ "ThreadCreateProfile",
+ "TypeAssertionError",
+ "UnlockOSThread",
+ "Version",
+ },
+ "runtime/cgo": {
+ "Handle",
+ "Incomplete",
+ "NewHandle",
+ },
+ "runtime/coverage": {
+ "ClearCounters",
+ "WriteCounters",
+ "WriteCountersDir",
+ "WriteMeta",
+ "WriteMetaDir",
+ },
+ "runtime/debug": {
+ "BuildInfo",
+ "BuildSetting",
+ "FreeOSMemory",
+ "GCStats",
+ "Module",
+ "ParseBuildInfo",
+ "PrintStack",
+ "ReadBuildInfo",
+ "ReadGCStats",
+ "SetGCPercent",
+ "SetMaxStack",
+ "SetMaxThreads",
+ "SetMemoryLimit",
+ "SetPanicOnFault",
+ "SetTraceback",
+ "Stack",
+ "WriteHeapDump",
+ },
+ "runtime/metrics": {
+ "All",
+ "Description",
+ "Float64Histogram",
+ "KindBad",
+ "KindFloat64",
+ "KindFloat64Histogram",
+ "KindUint64",
+ "Read",
+ "Sample",
+ "Value",
+ "ValueKind",
+ },
+ "runtime/pprof": {
+ "Do",
+ "ForLabels",
+ "Label",
+ "LabelSet",
+ "Labels",
+ "Lookup",
+ "NewProfile",
+ "Profile",
+ "Profiles",
+ "SetGoroutineLabels",
+ "StartCPUProfile",
+ "StopCPUProfile",
+ "WithLabels",
+ "WriteHeapProfile",
+ },
+ "runtime/trace": {
+ "IsEnabled",
+ "Log",
+ "Logf",
+ "NewTask",
+ "Region",
+ "Start",
+ "StartRegion",
+ "Stop",
+ "Task",
+ "WithRegion",
+ },
+ "slices": {
+ "BinarySearch",
+ "BinarySearchFunc",
+ "Clip",
+ "Clone",
+ "Compact",
+ "CompactFunc",
+ "Compare",
+ "CompareFunc",
+ "Contains",
+ "ContainsFunc",
+ "Delete",
+ "DeleteFunc",
+ "Equal",
+ "EqualFunc",
+ "Grow",
+ "Index",
+ "IndexFunc",
+ "Insert",
+ "IsSorted",
+ "IsSortedFunc",
+ "Max",
+ "MaxFunc",
+ "Min",
+ "MinFunc",
+ "Replace",
+ "Reverse",
+ "Sort",
+ "SortFunc",
+ "SortStableFunc",
+ },
+ "sort": {
+ "Find",
+ "Float64Slice",
+ "Float64s",
+ "Float64sAreSorted",
+ "IntSlice",
+ "Interface",
+ "Ints",
+ "IntsAreSorted",
+ "IsSorted",
+ "Reverse",
+ "Search",
+ "SearchFloat64s",
+ "SearchInts",
+ "SearchStrings",
+ "Slice",
+ "SliceIsSorted",
+ "SliceStable",
+ "Sort",
+ "Stable",
+ "StringSlice",
+ "Strings",
+ "StringsAreSorted",
+ },
+ "strconv": {
+ "AppendBool",
+ "AppendFloat",
+ "AppendInt",
+ "AppendQuote",
+ "AppendQuoteRune",
+ "AppendQuoteRuneToASCII",
+ "AppendQuoteRuneToGraphic",
+ "AppendQuoteToASCII",
+ "AppendQuoteToGraphic",
+ "AppendUint",
+ "Atoi",
+ "CanBackquote",
+ "ErrRange",
+ "ErrSyntax",
+ "FormatBool",
+ "FormatComplex",
+ "FormatFloat",
+ "FormatInt",
+ "FormatUint",
+ "IntSize",
+ "IsGraphic",
+ "IsPrint",
+ "Itoa",
+ "NumError",
+ "ParseBool",
+ "ParseComplex",
+ "ParseFloat",
+ "ParseInt",
+ "ParseUint",
+ "Quote",
+ "QuoteRune",
+ "QuoteRuneToASCII",
+ "QuoteRuneToGraphic",
+ "QuoteToASCII",
+ "QuoteToGraphic",
+ "QuotedPrefix",
+ "Unquote",
+ "UnquoteChar",
+ },
+ "strings": {
+ "Builder",
+ "Clone",
+ "Compare",
+ "Contains",
+ "ContainsAny",
+ "ContainsFunc",
+ "ContainsRune",
+ "Count",
+ "Cut",
+ "CutPrefix",
+ "CutSuffix",
+ "EqualFold",
+ "Fields",
+ "FieldsFunc",
+ "HasPrefix",
+ "HasSuffix",
+ "Index",
+ "IndexAny",
+ "IndexByte",
+ "IndexFunc",
+ "IndexRune",
+ "Join",
+ "LastIndex",
+ "LastIndexAny",
+ "LastIndexByte",
+ "LastIndexFunc",
+ "Map",
+ "NewReader",
+ "NewReplacer",
+ "Reader",
+ "Repeat",
+ "Replace",
+ "ReplaceAll",
+ "Replacer",
+ "Split",
+ "SplitAfter",
+ "SplitAfterN",
+ "SplitN",
+ "Title",
+ "ToLower",
+ "ToLowerSpecial",
+ "ToTitle",
+ "ToTitleSpecial",
+ "ToUpper",
+ "ToUpperSpecial",
+ "ToValidUTF8",
+ "Trim",
+ "TrimFunc",
+ "TrimLeft",
+ "TrimLeftFunc",
+ "TrimPrefix",
+ "TrimRight",
+ "TrimRightFunc",
+ "TrimSpace",
+ "TrimSuffix",
+ },
+ "sync": {
+ "Cond",
+ "Locker",
+ "Map",
+ "Mutex",
+ "NewCond",
+ "Once",
+ "OnceFunc",
+ "OnceValue",
+ "OnceValues",
+ "Pool",
+ "RWMutex",
+ "WaitGroup",
+ },
+ "sync/atomic": {
+ "AddInt32",
+ "AddInt64",
+ "AddUint32",
+ "AddUint64",
+ "AddUintptr",
+ "Bool",
+ "CompareAndSwapInt32",
+ "CompareAndSwapInt64",
+ "CompareAndSwapPointer",
+ "CompareAndSwapUint32",
+ "CompareAndSwapUint64",
+ "CompareAndSwapUintptr",
+ "Int32",
+ "Int64",
+ "LoadInt32",
+ "LoadInt64",
+ "LoadPointer",
+ "LoadUint32",
+ "LoadUint64",
+ "LoadUintptr",
+ "Pointer",
+ "StoreInt32",
+ "StoreInt64",
+ "StorePointer",
+ "StoreUint32",
+ "StoreUint64",
+ "StoreUintptr",
+ "SwapInt32",
+ "SwapInt64",
+ "SwapPointer",
+ "SwapUint32",
+ "SwapUint64",
+ "SwapUintptr",
+ "Uint32",
+ "Uint64",
+ "Uintptr",
+ "Value",
+ },
+ "syscall": {
+ "AF_ALG",
+ "AF_APPLETALK",
+ "AF_ARP",
+ "AF_ASH",
+ "AF_ATM",
+ "AF_ATMPVC",
+ "AF_ATMSVC",
+ "AF_AX25",
+ "AF_BLUETOOTH",
+ "AF_BRIDGE",
+ "AF_CAIF",
+ "AF_CAN",
+ "AF_CCITT",
+ "AF_CHAOS",
+ "AF_CNT",
+ "AF_COIP",
+ "AF_DATAKIT",
+ "AF_DECnet",
+ "AF_DLI",
+ "AF_E164",
+ "AF_ECMA",
+ "AF_ECONET",
+ "AF_ENCAP",
+ "AF_FILE",
+ "AF_HYLINK",
+ "AF_IEEE80211",
+ "AF_IEEE802154",
+ "AF_IMPLINK",
+ "AF_INET",
+ "AF_INET6",
+ "AF_INET6_SDP",
+ "AF_INET_SDP",
+ "AF_IPX",
+ "AF_IRDA",
+ "AF_ISDN",
+ "AF_ISO",
+ "AF_IUCV",
+ "AF_KEY",
+ "AF_LAT",
+ "AF_LINK",
+ "AF_LLC",
+ "AF_LOCAL",
+ "AF_MAX",
+ "AF_MPLS",
+ "AF_NATM",
+ "AF_NDRV",
+ "AF_NETBEUI",
+ "AF_NETBIOS",
+ "AF_NETGRAPH",
+ "AF_NETLINK",
+ "AF_NETROM",
+ "AF_NS",
+ "AF_OROUTE",
+ "AF_OSI",
+ "AF_PACKET",
+ "AF_PHONET",
+ "AF_PPP",
+ "AF_PPPOX",
+ "AF_PUP",
+ "AF_RDS",
+ "AF_RESERVED_36",
+ "AF_ROSE",
+ "AF_ROUTE",
+ "AF_RXRPC",
+ "AF_SCLUSTER",
+ "AF_SECURITY",
+ "AF_SIP",
+ "AF_SLOW",
+ "AF_SNA",
+ "AF_SYSTEM",
+ "AF_TIPC",
+ "AF_UNIX",
+ "AF_UNSPEC",
+ "AF_UTUN",
+ "AF_VENDOR00",
+ "AF_VENDOR01",
+ "AF_VENDOR02",
+ "AF_VENDOR03",
+ "AF_VENDOR04",
+ "AF_VENDOR05",
+ "AF_VENDOR06",
+ "AF_VENDOR07",
+ "AF_VENDOR08",
+ "AF_VENDOR09",
+ "AF_VENDOR10",
+ "AF_VENDOR11",
+ "AF_VENDOR12",
+ "AF_VENDOR13",
+ "AF_VENDOR14",
+ "AF_VENDOR15",
+ "AF_VENDOR16",
+ "AF_VENDOR17",
+ "AF_VENDOR18",
+ "AF_VENDOR19",
+ "AF_VENDOR20",
+ "AF_VENDOR21",
+ "AF_VENDOR22",
+ "AF_VENDOR23",
+ "AF_VENDOR24",
+ "AF_VENDOR25",
+ "AF_VENDOR26",
+ "AF_VENDOR27",
+ "AF_VENDOR28",
+ "AF_VENDOR29",
+ "AF_VENDOR30",
+ "AF_VENDOR31",
+ "AF_VENDOR32",
+ "AF_VENDOR33",
+ "AF_VENDOR34",
+ "AF_VENDOR35",
+ "AF_VENDOR36",
+ "AF_VENDOR37",
+ "AF_VENDOR38",
+ "AF_VENDOR39",
+ "AF_VENDOR40",
+ "AF_VENDOR41",
+ "AF_VENDOR42",
+ "AF_VENDOR43",
+ "AF_VENDOR44",
+ "AF_VENDOR45",
+ "AF_VENDOR46",
+ "AF_VENDOR47",
+ "AF_WANPIPE",
+ "AF_X25",
+ "AI_CANONNAME",
+ "AI_NUMERICHOST",
+ "AI_PASSIVE",
+ "APPLICATION_ERROR",
+ "ARPHRD_ADAPT",
+ "ARPHRD_APPLETLK",
+ "ARPHRD_ARCNET",
+ "ARPHRD_ASH",
+ "ARPHRD_ATM",
+ "ARPHRD_AX25",
+ "ARPHRD_BIF",
+ "ARPHRD_CHAOS",
+ "ARPHRD_CISCO",
+ "ARPHRD_CSLIP",
+ "ARPHRD_CSLIP6",
+ "ARPHRD_DDCMP",
+ "ARPHRD_DLCI",
+ "ARPHRD_ECONET",
+ "ARPHRD_EETHER",
+ "ARPHRD_ETHER",
+ "ARPHRD_EUI64",
+ "ARPHRD_FCAL",
+ "ARPHRD_FCFABRIC",
+ "ARPHRD_FCPL",
+ "ARPHRD_FCPP",
+ "ARPHRD_FDDI",
+ "ARPHRD_FRAD",
+ "ARPHRD_FRELAY",
+ "ARPHRD_HDLC",
+ "ARPHRD_HIPPI",
+ "ARPHRD_HWX25",
+ "ARPHRD_IEEE1394",
+ "ARPHRD_IEEE802",
+ "ARPHRD_IEEE80211",
+ "ARPHRD_IEEE80211_PRISM",
+ "ARPHRD_IEEE80211_RADIOTAP",
+ "ARPHRD_IEEE802154",
+ "ARPHRD_IEEE802154_PHY",
+ "ARPHRD_IEEE802_TR",
+ "ARPHRD_INFINIBAND",
+ "ARPHRD_IPDDP",
+ "ARPHRD_IPGRE",
+ "ARPHRD_IRDA",
+ "ARPHRD_LAPB",
+ "ARPHRD_LOCALTLK",
+ "ARPHRD_LOOPBACK",
+ "ARPHRD_METRICOM",
+ "ARPHRD_NETROM",
+ "ARPHRD_NONE",
+ "ARPHRD_PIMREG",
+ "ARPHRD_PPP",
+ "ARPHRD_PRONET",
+ "ARPHRD_RAWHDLC",
+ "ARPHRD_ROSE",
+ "ARPHRD_RSRVD",
+ "ARPHRD_SIT",
+ "ARPHRD_SKIP",
+ "ARPHRD_SLIP",
+ "ARPHRD_SLIP6",
+ "ARPHRD_STRIP",
+ "ARPHRD_TUNNEL",
+ "ARPHRD_TUNNEL6",
+ "ARPHRD_VOID",
+ "ARPHRD_X25",
+ "AUTHTYPE_CLIENT",
+ "AUTHTYPE_SERVER",
+ "Accept",
+ "Accept4",
+ "AcceptEx",
+ "Access",
+ "Acct",
+ "AddrinfoW",
+ "Adjtime",
+ "Adjtimex",
+ "AllThreadsSyscall",
+ "AllThreadsSyscall6",
+ "AttachLsf",
+ "B0",
+ "B1000000",
+ "B110",
+ "B115200",
+ "B1152000",
+ "B1200",
+ "B134",
+ "B14400",
+ "B150",
+ "B1500000",
+ "B1800",
+ "B19200",
+ "B200",
+ "B2000000",
+ "B230400",
+ "B2400",
+ "B2500000",
+ "B28800",
+ "B300",
+ "B3000000",
+ "B3500000",
+ "B38400",
+ "B4000000",
+ "B460800",
+ "B4800",
+ "B50",
+ "B500000",
+ "B57600",
+ "B576000",
+ "B600",
+ "B7200",
+ "B75",
+ "B76800",
+ "B921600",
+ "B9600",
+ "BASE_PROTOCOL",
+ "BIOCFEEDBACK",
+ "BIOCFLUSH",
+ "BIOCGBLEN",
+ "BIOCGDIRECTION",
+ "BIOCGDIRFILT",
+ "BIOCGDLT",
+ "BIOCGDLTLIST",
+ "BIOCGETBUFMODE",
+ "BIOCGETIF",
+ "BIOCGETZMAX",
+ "BIOCGFEEDBACK",
+ "BIOCGFILDROP",
+ "BIOCGHDRCMPLT",
+ "BIOCGRSIG",
+ "BIOCGRTIMEOUT",
+ "BIOCGSEESENT",
+ "BIOCGSTATS",
+ "BIOCGSTATSOLD",
+ "BIOCGTSTAMP",
+ "BIOCIMMEDIATE",
+ "BIOCLOCK",
+ "BIOCPROMISC",
+ "BIOCROTZBUF",
+ "BIOCSBLEN",
+ "BIOCSDIRECTION",
+ "BIOCSDIRFILT",
+ "BIOCSDLT",
+ "BIOCSETBUFMODE",
+ "BIOCSETF",
+ "BIOCSETFNR",
+ "BIOCSETIF",
+ "BIOCSETWF",
+ "BIOCSETZBUF",
+ "BIOCSFEEDBACK",
+ "BIOCSFILDROP",
+ "BIOCSHDRCMPLT",
+ "BIOCSRSIG",
+ "BIOCSRTIMEOUT",
+ "BIOCSSEESENT",
+ "BIOCSTCPF",
+ "BIOCSTSTAMP",
+ "BIOCSUDPF",
+ "BIOCVERSION",
+ "BPF_A",
+ "BPF_ABS",
+ "BPF_ADD",
+ "BPF_ALIGNMENT",
+ "BPF_ALIGNMENT32",
+ "BPF_ALU",
+ "BPF_AND",
+ "BPF_B",
+ "BPF_BUFMODE_BUFFER",
+ "BPF_BUFMODE_ZBUF",
+ "BPF_DFLTBUFSIZE",
+ "BPF_DIRECTION_IN",
+ "BPF_DIRECTION_OUT",
+ "BPF_DIV",
+ "BPF_H",
+ "BPF_IMM",
+ "BPF_IND",
+ "BPF_JA",
+ "BPF_JEQ",
+ "BPF_JGE",
+ "BPF_JGT",
+ "BPF_JMP",
+ "BPF_JSET",
+ "BPF_K",
+ "BPF_LD",
+ "BPF_LDX",
+ "BPF_LEN",
+ "BPF_LSH",
+ "BPF_MAJOR_VERSION",
+ "BPF_MAXBUFSIZE",
+ "BPF_MAXINSNS",
+ "BPF_MEM",
+ "BPF_MEMWORDS",
+ "BPF_MINBUFSIZE",
+ "BPF_MINOR_VERSION",
+ "BPF_MISC",
+ "BPF_MSH",
+ "BPF_MUL",
+ "BPF_NEG",
+ "BPF_OR",
+ "BPF_RELEASE",
+ "BPF_RET",
+ "BPF_RSH",
+ "BPF_ST",
+ "BPF_STX",
+ "BPF_SUB",
+ "BPF_TAX",
+ "BPF_TXA",
+ "BPF_T_BINTIME",
+ "BPF_T_BINTIME_FAST",
+ "BPF_T_BINTIME_MONOTONIC",
+ "BPF_T_BINTIME_MONOTONIC_FAST",
+ "BPF_T_FAST",
+ "BPF_T_FLAG_MASK",
+ "BPF_T_FORMAT_MASK",
+ "BPF_T_MICROTIME",
+ "BPF_T_MICROTIME_FAST",
+ "BPF_T_MICROTIME_MONOTONIC",
+ "BPF_T_MICROTIME_MONOTONIC_FAST",
+ "BPF_T_MONOTONIC",
+ "BPF_T_MONOTONIC_FAST",
+ "BPF_T_NANOTIME",
+ "BPF_T_NANOTIME_FAST",
+ "BPF_T_NANOTIME_MONOTONIC",
+ "BPF_T_NANOTIME_MONOTONIC_FAST",
+ "BPF_T_NONE",
+ "BPF_T_NORMAL",
+ "BPF_W",
+ "BPF_X",
+ "BRKINT",
+ "Bind",
+ "BindToDevice",
+ "BpfBuflen",
+ "BpfDatalink",
+ "BpfHdr",
+ "BpfHeadercmpl",
+ "BpfInsn",
+ "BpfInterface",
+ "BpfJump",
+ "BpfProgram",
+ "BpfStat",
+ "BpfStats",
+ "BpfStmt",
+ "BpfTimeout",
+ "BpfTimeval",
+ "BpfVersion",
+ "BpfZbuf",
+ "BpfZbufHeader",
+ "ByHandleFileInformation",
+ "BytePtrFromString",
+ "ByteSliceFromString",
+ "CCR0_FLUSH",
+ "CERT_CHAIN_POLICY_AUTHENTICODE",
+ "CERT_CHAIN_POLICY_AUTHENTICODE_TS",
+ "CERT_CHAIN_POLICY_BASE",
+ "CERT_CHAIN_POLICY_BASIC_CONSTRAINTS",
+ "CERT_CHAIN_POLICY_EV",
+ "CERT_CHAIN_POLICY_MICROSOFT_ROOT",
+ "CERT_CHAIN_POLICY_NT_AUTH",
+ "CERT_CHAIN_POLICY_SSL",
+ "CERT_E_CN_NO_MATCH",
+ "CERT_E_EXPIRED",
+ "CERT_E_PURPOSE",
+ "CERT_E_ROLE",
+ "CERT_E_UNTRUSTEDROOT",
+ "CERT_STORE_ADD_ALWAYS",
+ "CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG",
+ "CERT_STORE_PROV_MEMORY",
+ "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT",
+ "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT",
+ "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT",
+ "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT",
+ "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT",
+ "CERT_TRUST_INVALID_BASIC_CONSTRAINTS",
+ "CERT_TRUST_INVALID_EXTENSION",
+ "CERT_TRUST_INVALID_NAME_CONSTRAINTS",
+ "CERT_TRUST_INVALID_POLICY_CONSTRAINTS",
+ "CERT_TRUST_IS_CYCLIC",
+ "CERT_TRUST_IS_EXPLICIT_DISTRUST",
+ "CERT_TRUST_IS_NOT_SIGNATURE_VALID",
+ "CERT_TRUST_IS_NOT_TIME_VALID",
+ "CERT_TRUST_IS_NOT_VALID_FOR_USAGE",
+ "CERT_TRUST_IS_OFFLINE_REVOCATION",
+ "CERT_TRUST_IS_REVOKED",
+ "CERT_TRUST_IS_UNTRUSTED_ROOT",
+ "CERT_TRUST_NO_ERROR",
+ "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY",
+ "CERT_TRUST_REVOCATION_STATUS_UNKNOWN",
+ "CFLUSH",
+ "CLOCAL",
+ "CLONE_CHILD_CLEARTID",
+ "CLONE_CHILD_SETTID",
+ "CLONE_CLEAR_SIGHAND",
+ "CLONE_CSIGNAL",
+ "CLONE_DETACHED",
+ "CLONE_FILES",
+ "CLONE_FS",
+ "CLONE_INTO_CGROUP",
+ "CLONE_IO",
+ "CLONE_NEWCGROUP",
+ "CLONE_NEWIPC",
+ "CLONE_NEWNET",
+ "CLONE_NEWNS",
+ "CLONE_NEWPID",
+ "CLONE_NEWTIME",
+ "CLONE_NEWUSER",
+ "CLONE_NEWUTS",
+ "CLONE_PARENT",
+ "CLONE_PARENT_SETTID",
+ "CLONE_PID",
+ "CLONE_PIDFD",
+ "CLONE_PTRACE",
+ "CLONE_SETTLS",
+ "CLONE_SIGHAND",
+ "CLONE_SYSVSEM",
+ "CLONE_THREAD",
+ "CLONE_UNTRACED",
+ "CLONE_VFORK",
+ "CLONE_VM",
+ "CPUID_CFLUSH",
+ "CREAD",
+ "CREATE_ALWAYS",
+ "CREATE_NEW",
+ "CREATE_NEW_PROCESS_GROUP",
+ "CREATE_UNICODE_ENVIRONMENT",
+ "CRYPT_DEFAULT_CONTAINER_OPTIONAL",
+ "CRYPT_DELETEKEYSET",
+ "CRYPT_MACHINE_KEYSET",
+ "CRYPT_NEWKEYSET",
+ "CRYPT_SILENT",
+ "CRYPT_VERIFYCONTEXT",
+ "CS5",
+ "CS6",
+ "CS7",
+ "CS8",
+ "CSIZE",
+ "CSTART",
+ "CSTATUS",
+ "CSTOP",
+ "CSTOPB",
+ "CSUSP",
+ "CTL_MAXNAME",
+ "CTL_NET",
+ "CTL_QUERY",
+ "CTRL_BREAK_EVENT",
+ "CTRL_CLOSE_EVENT",
+ "CTRL_C_EVENT",
+ "CTRL_LOGOFF_EVENT",
+ "CTRL_SHUTDOWN_EVENT",
+ "CancelIo",
+ "CancelIoEx",
+ "CertAddCertificateContextToStore",
+ "CertChainContext",
+ "CertChainElement",
+ "CertChainPara",
+ "CertChainPolicyPara",
+ "CertChainPolicyStatus",
+ "CertCloseStore",
+ "CertContext",
+ "CertCreateCertificateContext",
+ "CertEnhKeyUsage",
+ "CertEnumCertificatesInStore",
+ "CertFreeCertificateChain",
+ "CertFreeCertificateContext",
+ "CertGetCertificateChain",
+ "CertInfo",
+ "CertOpenStore",
+ "CertOpenSystemStore",
+ "CertRevocationCrlInfo",
+ "CertRevocationInfo",
+ "CertSimpleChain",
+ "CertTrustListInfo",
+ "CertTrustStatus",
+ "CertUsageMatch",
+ "CertVerifyCertificateChainPolicy",
+ "Chdir",
+ "CheckBpfVersion",
+ "Chflags",
+ "Chmod",
+ "Chown",
+ "Chroot",
+ "Clearenv",
+ "Close",
+ "CloseHandle",
+ "CloseOnExec",
+ "Closesocket",
+ "CmsgLen",
+ "CmsgSpace",
+ "Cmsghdr",
+ "CommandLineToArgv",
+ "ComputerName",
+ "Conn",
+ "Connect",
+ "ConnectEx",
+ "ConvertSidToStringSid",
+ "ConvertStringSidToSid",
+ "CopySid",
+ "Creat",
+ "CreateDirectory",
+ "CreateFile",
+ "CreateFileMapping",
+ "CreateHardLink",
+ "CreateIoCompletionPort",
+ "CreatePipe",
+ "CreateProcess",
+ "CreateProcessAsUser",
+ "CreateSymbolicLink",
+ "CreateToolhelp32Snapshot",
+ "Credential",
+ "CryptAcquireContext",
+ "CryptGenRandom",
+ "CryptReleaseContext",
+ "DIOCBSFLUSH",
+ "DIOCOSFPFLUSH",
+ "DLL",
+ "DLLError",
+ "DLT_A429",
+ "DLT_A653_ICM",
+ "DLT_AIRONET_HEADER",
+ "DLT_AOS",
+ "DLT_APPLE_IP_OVER_IEEE1394",
+ "DLT_ARCNET",
+ "DLT_ARCNET_LINUX",
+ "DLT_ATM_CLIP",
+ "DLT_ATM_RFC1483",
+ "DLT_AURORA",
+ "DLT_AX25",
+ "DLT_AX25_KISS",
+ "DLT_BACNET_MS_TP",
+ "DLT_BLUETOOTH_HCI_H4",
+ "DLT_BLUETOOTH_HCI_H4_WITH_PHDR",
+ "DLT_CAN20B",
+ "DLT_CAN_SOCKETCAN",
+ "DLT_CHAOS",
+ "DLT_CHDLC",
+ "DLT_CISCO_IOS",
+ "DLT_C_HDLC",
+ "DLT_C_HDLC_WITH_DIR",
+ "DLT_DBUS",
+ "DLT_DECT",
+ "DLT_DOCSIS",
+ "DLT_DVB_CI",
+ "DLT_ECONET",
+ "DLT_EN10MB",
+ "DLT_EN3MB",
+ "DLT_ENC",
+ "DLT_ERF",
+ "DLT_ERF_ETH",
+ "DLT_ERF_POS",
+ "DLT_FC_2",
+ "DLT_FC_2_WITH_FRAME_DELIMS",
+ "DLT_FDDI",
+ "DLT_FLEXRAY",
+ "DLT_FRELAY",
+ "DLT_FRELAY_WITH_DIR",
+ "DLT_GCOM_SERIAL",
+ "DLT_GCOM_T1E1",
+ "DLT_GPF_F",
+ "DLT_GPF_T",
+ "DLT_GPRS_LLC",
+ "DLT_GSMTAP_ABIS",
+ "DLT_GSMTAP_UM",
+ "DLT_HDLC",
+ "DLT_HHDLC",
+ "DLT_HIPPI",
+ "DLT_IBM_SN",
+ "DLT_IBM_SP",
+ "DLT_IEEE802",
+ "DLT_IEEE802_11",
+ "DLT_IEEE802_11_RADIO",
+ "DLT_IEEE802_11_RADIO_AVS",
+ "DLT_IEEE802_15_4",
+ "DLT_IEEE802_15_4_LINUX",
+ "DLT_IEEE802_15_4_NOFCS",
+ "DLT_IEEE802_15_4_NONASK_PHY",
+ "DLT_IEEE802_16_MAC_CPS",
+ "DLT_IEEE802_16_MAC_CPS_RADIO",
+ "DLT_IPFILTER",
+ "DLT_IPMB",
+ "DLT_IPMB_LINUX",
+ "DLT_IPNET",
+ "DLT_IPOIB",
+ "DLT_IPV4",
+ "DLT_IPV6",
+ "DLT_IP_OVER_FC",
+ "DLT_JUNIPER_ATM1",
+ "DLT_JUNIPER_ATM2",
+ "DLT_JUNIPER_ATM_CEMIC",
+ "DLT_JUNIPER_CHDLC",
+ "DLT_JUNIPER_ES",
+ "DLT_JUNIPER_ETHER",
+ "DLT_JUNIPER_FIBRECHANNEL",
+ "DLT_JUNIPER_FRELAY",
+ "DLT_JUNIPER_GGSN",
+ "DLT_JUNIPER_ISM",
+ "DLT_JUNIPER_MFR",
+ "DLT_JUNIPER_MLFR",
+ "DLT_JUNIPER_MLPPP",
+ "DLT_JUNIPER_MONITOR",
+ "DLT_JUNIPER_PIC_PEER",
+ "DLT_JUNIPER_PPP",
+ "DLT_JUNIPER_PPPOE",
+ "DLT_JUNIPER_PPPOE_ATM",
+ "DLT_JUNIPER_SERVICES",
+ "DLT_JUNIPER_SRX_E2E",
+ "DLT_JUNIPER_ST",
+ "DLT_JUNIPER_VP",
+ "DLT_JUNIPER_VS",
+ "DLT_LAPB_WITH_DIR",
+ "DLT_LAPD",
+ "DLT_LIN",
+ "DLT_LINUX_EVDEV",
+ "DLT_LINUX_IRDA",
+ "DLT_LINUX_LAPD",
+ "DLT_LINUX_PPP_WITHDIRECTION",
+ "DLT_LINUX_SLL",
+ "DLT_LOOP",
+ "DLT_LTALK",
+ "DLT_MATCHING_MAX",
+ "DLT_MATCHING_MIN",
+ "DLT_MFR",
+ "DLT_MOST",
+ "DLT_MPEG_2_TS",
+ "DLT_MPLS",
+ "DLT_MTP2",
+ "DLT_MTP2_WITH_PHDR",
+ "DLT_MTP3",
+ "DLT_MUX27010",
+ "DLT_NETANALYZER",
+ "DLT_NETANALYZER_TRANSPARENT",
+ "DLT_NFC_LLCP",
+ "DLT_NFLOG",
+ "DLT_NG40",
+ "DLT_NULL",
+ "DLT_PCI_EXP",
+ "DLT_PFLOG",
+ "DLT_PFSYNC",
+ "DLT_PPI",
+ "DLT_PPP",
+ "DLT_PPP_BSDOS",
+ "DLT_PPP_ETHER",
+ "DLT_PPP_PPPD",
+ "DLT_PPP_SERIAL",
+ "DLT_PPP_WITH_DIR",
+ "DLT_PPP_WITH_DIRECTION",
+ "DLT_PRISM_HEADER",
+ "DLT_PRONET",
+ "DLT_RAIF1",
+ "DLT_RAW",
+ "DLT_RAWAF_MASK",
+ "DLT_RIO",
+ "DLT_SCCP",
+ "DLT_SITA",
+ "DLT_SLIP",
+ "DLT_SLIP_BSDOS",
+ "DLT_STANAG_5066_D_PDU",
+ "DLT_SUNATM",
+ "DLT_SYMANTEC_FIREWALL",
+ "DLT_TZSP",
+ "DLT_USB",
+ "DLT_USB_LINUX",
+ "DLT_USB_LINUX_MMAPPED",
+ "DLT_USER0",
+ "DLT_USER1",
+ "DLT_USER10",
+ "DLT_USER11",
+ "DLT_USER12",
+ "DLT_USER13",
+ "DLT_USER14",
+ "DLT_USER15",
+ "DLT_USER2",
+ "DLT_USER3",
+ "DLT_USER4",
+ "DLT_USER5",
+ "DLT_USER6",
+ "DLT_USER7",
+ "DLT_USER8",
+ "DLT_USER9",
+ "DLT_WIHART",
+ "DLT_X2E_SERIAL",
+ "DLT_X2E_XORAYA",
+ "DNSMXData",
+ "DNSPTRData",
+ "DNSRecord",
+ "DNSSRVData",
+ "DNSTXTData",
+ "DNS_INFO_NO_RECORDS",
+ "DNS_TYPE_A",
+ "DNS_TYPE_A6",
+ "DNS_TYPE_AAAA",
+ "DNS_TYPE_ADDRS",
+ "DNS_TYPE_AFSDB",
+ "DNS_TYPE_ALL",
+ "DNS_TYPE_ANY",
+ "DNS_TYPE_ATMA",
+ "DNS_TYPE_AXFR",
+ "DNS_TYPE_CERT",
+ "DNS_TYPE_CNAME",
+ "DNS_TYPE_DHCID",
+ "DNS_TYPE_DNAME",
+ "DNS_TYPE_DNSKEY",
+ "DNS_TYPE_DS",
+ "DNS_TYPE_EID",
+ "DNS_TYPE_GID",
+ "DNS_TYPE_GPOS",
+ "DNS_TYPE_HINFO",
+ "DNS_TYPE_ISDN",
+ "DNS_TYPE_IXFR",
+ "DNS_TYPE_KEY",
+ "DNS_TYPE_KX",
+ "DNS_TYPE_LOC",
+ "DNS_TYPE_MAILA",
+ "DNS_TYPE_MAILB",
+ "DNS_TYPE_MB",
+ "DNS_TYPE_MD",
+ "DNS_TYPE_MF",
+ "DNS_TYPE_MG",
+ "DNS_TYPE_MINFO",
+ "DNS_TYPE_MR",
+ "DNS_TYPE_MX",
+ "DNS_TYPE_NAPTR",
+ "DNS_TYPE_NBSTAT",
+ "DNS_TYPE_NIMLOC",
+ "DNS_TYPE_NS",
+ "DNS_TYPE_NSAP",
+ "DNS_TYPE_NSAPPTR",
+ "DNS_TYPE_NSEC",
+ "DNS_TYPE_NULL",
+ "DNS_TYPE_NXT",
+ "DNS_TYPE_OPT",
+ "DNS_TYPE_PTR",
+ "DNS_TYPE_PX",
+ "DNS_TYPE_RP",
+ "DNS_TYPE_RRSIG",
+ "DNS_TYPE_RT",
+ "DNS_TYPE_SIG",
+ "DNS_TYPE_SINK",
+ "DNS_TYPE_SOA",
+ "DNS_TYPE_SRV",
+ "DNS_TYPE_TEXT",
+ "DNS_TYPE_TKEY",
+ "DNS_TYPE_TSIG",
+ "DNS_TYPE_UID",
+ "DNS_TYPE_UINFO",
+ "DNS_TYPE_UNSPEC",
+ "DNS_TYPE_WINS",
+ "DNS_TYPE_WINSR",
+ "DNS_TYPE_WKS",
+ "DNS_TYPE_X25",
+ "DT_BLK",
+ "DT_CHR",
+ "DT_DIR",
+ "DT_FIFO",
+ "DT_LNK",
+ "DT_REG",
+ "DT_SOCK",
+ "DT_UNKNOWN",
+ "DT_WHT",
+ "DUPLICATE_CLOSE_SOURCE",
+ "DUPLICATE_SAME_ACCESS",
+ "DeleteFile",
+ "DetachLsf",
+ "DeviceIoControl",
+ "Dirent",
+ "DnsNameCompare",
+ "DnsQuery",
+ "DnsRecordListFree",
+ "DnsSectionAdditional",
+ "DnsSectionAnswer",
+ "DnsSectionAuthority",
+ "DnsSectionQuestion",
+ "Dup",
+ "Dup2",
+ "Dup3",
+ "DuplicateHandle",
+ "E2BIG",
+ "EACCES",
+ "EADDRINUSE",
+ "EADDRNOTAVAIL",
+ "EADV",
+ "EAFNOSUPPORT",
+ "EAGAIN",
+ "EALREADY",
+ "EAUTH",
+ "EBADARCH",
+ "EBADE",
+ "EBADEXEC",
+ "EBADF",
+ "EBADFD",
+ "EBADMACHO",
+ "EBADMSG",
+ "EBADR",
+ "EBADRPC",
+ "EBADRQC",
+ "EBADSLT",
+ "EBFONT",
+ "EBUSY",
+ "ECANCELED",
+ "ECAPMODE",
+ "ECHILD",
+ "ECHO",
+ "ECHOCTL",
+ "ECHOE",
+ "ECHOK",
+ "ECHOKE",
+ "ECHONL",
+ "ECHOPRT",
+ "ECHRNG",
+ "ECOMM",
+ "ECONNABORTED",
+ "ECONNREFUSED",
+ "ECONNRESET",
+ "EDEADLK",
+ "EDEADLOCK",
+ "EDESTADDRREQ",
+ "EDEVERR",
+ "EDOM",
+ "EDOOFUS",
+ "EDOTDOT",
+ "EDQUOT",
+ "EEXIST",
+ "EFAULT",
+ "EFBIG",
+ "EFER_LMA",
+ "EFER_LME",
+ "EFER_NXE",
+ "EFER_SCE",
+ "EFTYPE",
+ "EHOSTDOWN",
+ "EHOSTUNREACH",
+ "EHWPOISON",
+ "EIDRM",
+ "EILSEQ",
+ "EINPROGRESS",
+ "EINTR",
+ "EINVAL",
+ "EIO",
+ "EIPSEC",
+ "EISCONN",
+ "EISDIR",
+ "EISNAM",
+ "EKEYEXPIRED",
+ "EKEYREJECTED",
+ "EKEYREVOKED",
+ "EL2HLT",
+ "EL2NSYNC",
+ "EL3HLT",
+ "EL3RST",
+ "ELAST",
+ "ELF_NGREG",
+ "ELF_PRARGSZ",
+ "ELIBACC",
+ "ELIBBAD",
+ "ELIBEXEC",
+ "ELIBMAX",
+ "ELIBSCN",
+ "ELNRNG",
+ "ELOOP",
+ "EMEDIUMTYPE",
+ "EMFILE",
+ "EMLINK",
+ "EMSGSIZE",
+ "EMT_TAGOVF",
+ "EMULTIHOP",
+ "EMUL_ENABLED",
+ "EMUL_LINUX",
+ "EMUL_LINUX32",
+ "EMUL_MAXID",
+ "EMUL_NATIVE",
+ "ENAMETOOLONG",
+ "ENAVAIL",
+ "ENDRUNDISC",
+ "ENEEDAUTH",
+ "ENETDOWN",
+ "ENETRESET",
+ "ENETUNREACH",
+ "ENFILE",
+ "ENOANO",
+ "ENOATTR",
+ "ENOBUFS",
+ "ENOCSI",
+ "ENODATA",
+ "ENODEV",
+ "ENOENT",
+ "ENOEXEC",
+ "ENOKEY",
+ "ENOLCK",
+ "ENOLINK",
+ "ENOMEDIUM",
+ "ENOMEM",
+ "ENOMSG",
+ "ENONET",
+ "ENOPKG",
+ "ENOPOLICY",
+ "ENOPROTOOPT",
+ "ENOSPC",
+ "ENOSR",
+ "ENOSTR",
+ "ENOSYS",
+ "ENOTBLK",
+ "ENOTCAPABLE",
+ "ENOTCONN",
+ "ENOTDIR",
+ "ENOTEMPTY",
+ "ENOTNAM",
+ "ENOTRECOVERABLE",
+ "ENOTSOCK",
+ "ENOTSUP",
+ "ENOTTY",
+ "ENOTUNIQ",
+ "ENXIO",
+ "EN_SW_CTL_INF",
+ "EN_SW_CTL_PREC",
+ "EN_SW_CTL_ROUND",
+ "EN_SW_DATACHAIN",
+ "EN_SW_DENORM",
+ "EN_SW_INVOP",
+ "EN_SW_OVERFLOW",
+ "EN_SW_PRECLOSS",
+ "EN_SW_UNDERFLOW",
+ "EN_SW_ZERODIV",
+ "EOPNOTSUPP",
+ "EOVERFLOW",
+ "EOWNERDEAD",
+ "EPERM",
+ "EPFNOSUPPORT",
+ "EPIPE",
+ "EPOLLERR",
+ "EPOLLET",
+ "EPOLLHUP",
+ "EPOLLIN",
+ "EPOLLMSG",
+ "EPOLLONESHOT",
+ "EPOLLOUT",
+ "EPOLLPRI",
+ "EPOLLRDBAND",
+ "EPOLLRDHUP",
+ "EPOLLRDNORM",
+ "EPOLLWRBAND",
+ "EPOLLWRNORM",
+ "EPOLL_CLOEXEC",
+ "EPOLL_CTL_ADD",
+ "EPOLL_CTL_DEL",
+ "EPOLL_CTL_MOD",
+ "EPOLL_NONBLOCK",
+ "EPROCLIM",
+ "EPROCUNAVAIL",
+ "EPROGMISMATCH",
+ "EPROGUNAVAIL",
+ "EPROTO",
+ "EPROTONOSUPPORT",
+ "EPROTOTYPE",
+ "EPWROFF",
+ "EQFULL",
+ "ERANGE",
+ "EREMCHG",
+ "EREMOTE",
+ "EREMOTEIO",
+ "ERESTART",
+ "ERFKILL",
+ "EROFS",
+ "ERPCMISMATCH",
+ "ERROR_ACCESS_DENIED",
+ "ERROR_ALREADY_EXISTS",
+ "ERROR_BROKEN_PIPE",
+ "ERROR_BUFFER_OVERFLOW",
+ "ERROR_DIR_NOT_EMPTY",
+ "ERROR_ENVVAR_NOT_FOUND",
+ "ERROR_FILE_EXISTS",
+ "ERROR_FILE_NOT_FOUND",
+ "ERROR_HANDLE_EOF",
+ "ERROR_INSUFFICIENT_BUFFER",
+ "ERROR_IO_PENDING",
+ "ERROR_MOD_NOT_FOUND",
+ "ERROR_MORE_DATA",
+ "ERROR_NETNAME_DELETED",
+ "ERROR_NOT_FOUND",
+ "ERROR_NO_MORE_FILES",
+ "ERROR_OPERATION_ABORTED",
+ "ERROR_PATH_NOT_FOUND",
+ "ERROR_PRIVILEGE_NOT_HELD",
+ "ERROR_PROC_NOT_FOUND",
+ "ESHLIBVERS",
+ "ESHUTDOWN",
+ "ESOCKTNOSUPPORT",
+ "ESPIPE",
+ "ESRCH",
+ "ESRMNT",
+ "ESTALE",
+ "ESTRPIPE",
+ "ETHERCAP_JUMBO_MTU",
+ "ETHERCAP_VLAN_HWTAGGING",
+ "ETHERCAP_VLAN_MTU",
+ "ETHERMIN",
+ "ETHERMTU",
+ "ETHERMTU_JUMBO",
+ "ETHERTYPE_8023",
+ "ETHERTYPE_AARP",
+ "ETHERTYPE_ACCTON",
+ "ETHERTYPE_AEONIC",
+ "ETHERTYPE_ALPHA",
+ "ETHERTYPE_AMBER",
+ "ETHERTYPE_AMOEBA",
+ "ETHERTYPE_AOE",
+ "ETHERTYPE_APOLLO",
+ "ETHERTYPE_APOLLODOMAIN",
+ "ETHERTYPE_APPLETALK",
+ "ETHERTYPE_APPLITEK",
+ "ETHERTYPE_ARGONAUT",
+ "ETHERTYPE_ARP",
+ "ETHERTYPE_AT",
+ "ETHERTYPE_ATALK",
+ "ETHERTYPE_ATOMIC",
+ "ETHERTYPE_ATT",
+ "ETHERTYPE_ATTSTANFORD",
+ "ETHERTYPE_AUTOPHON",
+ "ETHERTYPE_AXIS",
+ "ETHERTYPE_BCLOOP",
+ "ETHERTYPE_BOFL",
+ "ETHERTYPE_CABLETRON",
+ "ETHERTYPE_CHAOS",
+ "ETHERTYPE_COMDESIGN",
+ "ETHERTYPE_COMPUGRAPHIC",
+ "ETHERTYPE_COUNTERPOINT",
+ "ETHERTYPE_CRONUS",
+ "ETHERTYPE_CRONUSVLN",
+ "ETHERTYPE_DCA",
+ "ETHERTYPE_DDE",
+ "ETHERTYPE_DEBNI",
+ "ETHERTYPE_DECAM",
+ "ETHERTYPE_DECCUST",
+ "ETHERTYPE_DECDIAG",
+ "ETHERTYPE_DECDNS",
+ "ETHERTYPE_DECDTS",
+ "ETHERTYPE_DECEXPER",
+ "ETHERTYPE_DECLAST",
+ "ETHERTYPE_DECLTM",
+ "ETHERTYPE_DECMUMPS",
+ "ETHERTYPE_DECNETBIOS",
+ "ETHERTYPE_DELTACON",
+ "ETHERTYPE_DIDDLE",
+ "ETHERTYPE_DLOG1",
+ "ETHERTYPE_DLOG2",
+ "ETHERTYPE_DN",
+ "ETHERTYPE_DOGFIGHT",
+ "ETHERTYPE_DSMD",
+ "ETHERTYPE_ECMA",
+ "ETHERTYPE_ENCRYPT",
+ "ETHERTYPE_ES",
+ "ETHERTYPE_EXCELAN",
+ "ETHERTYPE_EXPERDATA",
+ "ETHERTYPE_FLIP",
+ "ETHERTYPE_FLOWCONTROL",
+ "ETHERTYPE_FRARP",
+ "ETHERTYPE_GENDYN",
+ "ETHERTYPE_HAYES",
+ "ETHERTYPE_HIPPI_FP",
+ "ETHERTYPE_HITACHI",
+ "ETHERTYPE_HP",
+ "ETHERTYPE_IEEEPUP",
+ "ETHERTYPE_IEEEPUPAT",
+ "ETHERTYPE_IMLBL",
+ "ETHERTYPE_IMLBLDIAG",
+ "ETHERTYPE_IP",
+ "ETHERTYPE_IPAS",
+ "ETHERTYPE_IPV6",
+ "ETHERTYPE_IPX",
+ "ETHERTYPE_IPXNEW",
+ "ETHERTYPE_KALPANA",
+ "ETHERTYPE_LANBRIDGE",
+ "ETHERTYPE_LANPROBE",
+ "ETHERTYPE_LAT",
+ "ETHERTYPE_LBACK",
+ "ETHERTYPE_LITTLE",
+ "ETHERTYPE_LLDP",
+ "ETHERTYPE_LOGICRAFT",
+ "ETHERTYPE_LOOPBACK",
+ "ETHERTYPE_MATRA",
+ "ETHERTYPE_MAX",
+ "ETHERTYPE_MERIT",
+ "ETHERTYPE_MICP",
+ "ETHERTYPE_MOPDL",
+ "ETHERTYPE_MOPRC",
+ "ETHERTYPE_MOTOROLA",
+ "ETHERTYPE_MPLS",
+ "ETHERTYPE_MPLS_MCAST",
+ "ETHERTYPE_MUMPS",
+ "ETHERTYPE_NBPCC",
+ "ETHERTYPE_NBPCLAIM",
+ "ETHERTYPE_NBPCLREQ",
+ "ETHERTYPE_NBPCLRSP",
+ "ETHERTYPE_NBPCREQ",
+ "ETHERTYPE_NBPCRSP",
+ "ETHERTYPE_NBPDG",
+ "ETHERTYPE_NBPDGB",
+ "ETHERTYPE_NBPDLTE",
+ "ETHERTYPE_NBPRAR",
+ "ETHERTYPE_NBPRAS",
+ "ETHERTYPE_NBPRST",
+ "ETHERTYPE_NBPSCD",
+ "ETHERTYPE_NBPVCD",
+ "ETHERTYPE_NBS",
+ "ETHERTYPE_NCD",
+ "ETHERTYPE_NESTAR",
+ "ETHERTYPE_NETBEUI",
+ "ETHERTYPE_NOVELL",
+ "ETHERTYPE_NS",
+ "ETHERTYPE_NSAT",
+ "ETHERTYPE_NSCOMPAT",
+ "ETHERTYPE_NTRAILER",
+ "ETHERTYPE_OS9",
+ "ETHERTYPE_OS9NET",
+ "ETHERTYPE_PACER",
+ "ETHERTYPE_PAE",
+ "ETHERTYPE_PCS",
+ "ETHERTYPE_PLANNING",
+ "ETHERTYPE_PPP",
+ "ETHERTYPE_PPPOE",
+ "ETHERTYPE_PPPOEDISC",
+ "ETHERTYPE_PRIMENTS",
+ "ETHERTYPE_PUP",
+ "ETHERTYPE_PUPAT",
+ "ETHERTYPE_QINQ",
+ "ETHERTYPE_RACAL",
+ "ETHERTYPE_RATIONAL",
+ "ETHERTYPE_RAWFR",
+ "ETHERTYPE_RCL",
+ "ETHERTYPE_RDP",
+ "ETHERTYPE_RETIX",
+ "ETHERTYPE_REVARP",
+ "ETHERTYPE_SCA",
+ "ETHERTYPE_SECTRA",
+ "ETHERTYPE_SECUREDATA",
+ "ETHERTYPE_SGITW",
+ "ETHERTYPE_SG_BOUNCE",
+ "ETHERTYPE_SG_DIAG",
+ "ETHERTYPE_SG_NETGAMES",
+ "ETHERTYPE_SG_RESV",
+ "ETHERTYPE_SIMNET",
+ "ETHERTYPE_SLOW",
+ "ETHERTYPE_SLOWPROTOCOLS",
+ "ETHERTYPE_SNA",
+ "ETHERTYPE_SNMP",
+ "ETHERTYPE_SONIX",
+ "ETHERTYPE_SPIDER",
+ "ETHERTYPE_SPRITE",
+ "ETHERTYPE_STP",
+ "ETHERTYPE_TALARIS",
+ "ETHERTYPE_TALARISMC",
+ "ETHERTYPE_TCPCOMP",
+ "ETHERTYPE_TCPSM",
+ "ETHERTYPE_TEC",
+ "ETHERTYPE_TIGAN",
+ "ETHERTYPE_TRAIL",
+ "ETHERTYPE_TRANSETHER",
+ "ETHERTYPE_TYMSHARE",
+ "ETHERTYPE_UBBST",
+ "ETHERTYPE_UBDEBUG",
+ "ETHERTYPE_UBDIAGLOOP",
+ "ETHERTYPE_UBDL",
+ "ETHERTYPE_UBNIU",
+ "ETHERTYPE_UBNMC",
+ "ETHERTYPE_VALID",
+ "ETHERTYPE_VARIAN",
+ "ETHERTYPE_VAXELN",
+ "ETHERTYPE_VEECO",
+ "ETHERTYPE_VEXP",
+ "ETHERTYPE_VGLAB",
+ "ETHERTYPE_VINES",
+ "ETHERTYPE_VINESECHO",
+ "ETHERTYPE_VINESLOOP",
+ "ETHERTYPE_VITAL",
+ "ETHERTYPE_VLAN",
+ "ETHERTYPE_VLTLMAN",
+ "ETHERTYPE_VPROD",
+ "ETHERTYPE_VURESERVED",
+ "ETHERTYPE_WATERLOO",
+ "ETHERTYPE_WELLFLEET",
+ "ETHERTYPE_X25",
+ "ETHERTYPE_X75",
+ "ETHERTYPE_XNSSM",
+ "ETHERTYPE_XTP",
+ "ETHER_ADDR_LEN",
+ "ETHER_ALIGN",
+ "ETHER_CRC_LEN",
+ "ETHER_CRC_POLY_BE",
+ "ETHER_CRC_POLY_LE",
+ "ETHER_HDR_LEN",
+ "ETHER_MAX_DIX_LEN",
+ "ETHER_MAX_LEN",
+ "ETHER_MAX_LEN_JUMBO",
+ "ETHER_MIN_LEN",
+ "ETHER_PPPOE_ENCAP_LEN",
+ "ETHER_TYPE_LEN",
+ "ETHER_VLAN_ENCAP_LEN",
+ "ETH_P_1588",
+ "ETH_P_8021Q",
+ "ETH_P_802_2",
+ "ETH_P_802_3",
+ "ETH_P_AARP",
+ "ETH_P_ALL",
+ "ETH_P_AOE",
+ "ETH_P_ARCNET",
+ "ETH_P_ARP",
+ "ETH_P_ATALK",
+ "ETH_P_ATMFATE",
+ "ETH_P_ATMMPOA",
+ "ETH_P_AX25",
+ "ETH_P_BPQ",
+ "ETH_P_CAIF",
+ "ETH_P_CAN",
+ "ETH_P_CONTROL",
+ "ETH_P_CUST",
+ "ETH_P_DDCMP",
+ "ETH_P_DEC",
+ "ETH_P_DIAG",
+ "ETH_P_DNA_DL",
+ "ETH_P_DNA_RC",
+ "ETH_P_DNA_RT",
+ "ETH_P_DSA",
+ "ETH_P_ECONET",
+ "ETH_P_EDSA",
+ "ETH_P_FCOE",
+ "ETH_P_FIP",
+ "ETH_P_HDLC",
+ "ETH_P_IEEE802154",
+ "ETH_P_IEEEPUP",
+ "ETH_P_IEEEPUPAT",
+ "ETH_P_IP",
+ "ETH_P_IPV6",
+ "ETH_P_IPX",
+ "ETH_P_IRDA",
+ "ETH_P_LAT",
+ "ETH_P_LINK_CTL",
+ "ETH_P_LOCALTALK",
+ "ETH_P_LOOP",
+ "ETH_P_MOBITEX",
+ "ETH_P_MPLS_MC",
+ "ETH_P_MPLS_UC",
+ "ETH_P_PAE",
+ "ETH_P_PAUSE",
+ "ETH_P_PHONET",
+ "ETH_P_PPPTALK",
+ "ETH_P_PPP_DISC",
+ "ETH_P_PPP_MP",
+ "ETH_P_PPP_SES",
+ "ETH_P_PUP",
+ "ETH_P_PUPAT",
+ "ETH_P_RARP",
+ "ETH_P_SCA",
+ "ETH_P_SLOW",
+ "ETH_P_SNAP",
+ "ETH_P_TEB",
+ "ETH_P_TIPC",
+ "ETH_P_TRAILER",
+ "ETH_P_TR_802_2",
+ "ETH_P_WAN_PPP",
+ "ETH_P_WCCP",
+ "ETH_P_X25",
+ "ETIME",
+ "ETIMEDOUT",
+ "ETOOMANYREFS",
+ "ETXTBSY",
+ "EUCLEAN",
+ "EUNATCH",
+ "EUSERS",
+ "EVFILT_AIO",
+ "EVFILT_FS",
+ "EVFILT_LIO",
+ "EVFILT_MACHPORT",
+ "EVFILT_PROC",
+ "EVFILT_READ",
+ "EVFILT_SIGNAL",
+ "EVFILT_SYSCOUNT",
+ "EVFILT_THREADMARKER",
+ "EVFILT_TIMER",
+ "EVFILT_USER",
+ "EVFILT_VM",
+ "EVFILT_VNODE",
+ "EVFILT_WRITE",
+ "EV_ADD",
+ "EV_CLEAR",
+ "EV_DELETE",
+ "EV_DISABLE",
+ "EV_DISPATCH",
+ "EV_DROP",
+ "EV_ENABLE",
+ "EV_EOF",
+ "EV_ERROR",
+ "EV_FLAG0",
+ "EV_FLAG1",
+ "EV_ONESHOT",
+ "EV_OOBAND",
+ "EV_POLL",
+ "EV_RECEIPT",
+ "EV_SYSFLAGS",
+ "EWINDOWS",
+ "EWOULDBLOCK",
+ "EXDEV",
+ "EXFULL",
+ "EXTA",
+ "EXTB",
+ "EXTPROC",
+ "Environ",
+ "EpollCreate",
+ "EpollCreate1",
+ "EpollCtl",
+ "EpollEvent",
+ "EpollWait",
+ "Errno",
+ "EscapeArg",
+ "Exchangedata",
+ "Exec",
+ "Exit",
+ "ExitProcess",
+ "FD_CLOEXEC",
+ "FD_SETSIZE",
+ "FILE_ACTION_ADDED",
+ "FILE_ACTION_MODIFIED",
+ "FILE_ACTION_REMOVED",
+ "FILE_ACTION_RENAMED_NEW_NAME",
+ "FILE_ACTION_RENAMED_OLD_NAME",
+ "FILE_APPEND_DATA",
+ "FILE_ATTRIBUTE_ARCHIVE",
+ "FILE_ATTRIBUTE_DIRECTORY",
+ "FILE_ATTRIBUTE_HIDDEN",
+ "FILE_ATTRIBUTE_NORMAL",
+ "FILE_ATTRIBUTE_READONLY",
+ "FILE_ATTRIBUTE_REPARSE_POINT",
+ "FILE_ATTRIBUTE_SYSTEM",
+ "FILE_BEGIN",
+ "FILE_CURRENT",
+ "FILE_END",
+ "FILE_FLAG_BACKUP_SEMANTICS",
+ "FILE_FLAG_OPEN_REPARSE_POINT",
+ "FILE_FLAG_OVERLAPPED",
+ "FILE_LIST_DIRECTORY",
+ "FILE_MAP_COPY",
+ "FILE_MAP_EXECUTE",
+ "FILE_MAP_READ",
+ "FILE_MAP_WRITE",
+ "FILE_NOTIFY_CHANGE_ATTRIBUTES",
+ "FILE_NOTIFY_CHANGE_CREATION",
+ "FILE_NOTIFY_CHANGE_DIR_NAME",
+ "FILE_NOTIFY_CHANGE_FILE_NAME",
+ "FILE_NOTIFY_CHANGE_LAST_ACCESS",
+ "FILE_NOTIFY_CHANGE_LAST_WRITE",
+ "FILE_NOTIFY_CHANGE_SIZE",
+ "FILE_SHARE_DELETE",
+ "FILE_SHARE_READ",
+ "FILE_SHARE_WRITE",
+ "FILE_SKIP_COMPLETION_PORT_ON_SUCCESS",
+ "FILE_SKIP_SET_EVENT_ON_HANDLE",
+ "FILE_TYPE_CHAR",
+ "FILE_TYPE_DISK",
+ "FILE_TYPE_PIPE",
+ "FILE_TYPE_REMOTE",
+ "FILE_TYPE_UNKNOWN",
+ "FILE_WRITE_ATTRIBUTES",
+ "FLUSHO",
+ "FORMAT_MESSAGE_ALLOCATE_BUFFER",
+ "FORMAT_MESSAGE_ARGUMENT_ARRAY",
+ "FORMAT_MESSAGE_FROM_HMODULE",
+ "FORMAT_MESSAGE_FROM_STRING",
+ "FORMAT_MESSAGE_FROM_SYSTEM",
+ "FORMAT_MESSAGE_IGNORE_INSERTS",
+ "FORMAT_MESSAGE_MAX_WIDTH_MASK",
+ "FSCTL_GET_REPARSE_POINT",
+ "F_ADDFILESIGS",
+ "F_ADDSIGS",
+ "F_ALLOCATEALL",
+ "F_ALLOCATECONTIG",
+ "F_CANCEL",
+ "F_CHKCLEAN",
+ "F_CLOSEM",
+ "F_DUP2FD",
+ "F_DUP2FD_CLOEXEC",
+ "F_DUPFD",
+ "F_DUPFD_CLOEXEC",
+ "F_EXLCK",
+ "F_FINDSIGS",
+ "F_FLUSH_DATA",
+ "F_FREEZE_FS",
+ "F_FSCTL",
+ "F_FSDIRMASK",
+ "F_FSIN",
+ "F_FSINOUT",
+ "F_FSOUT",
+ "F_FSPRIV",
+ "F_FSVOID",
+ "F_FULLFSYNC",
+ "F_GETCODEDIR",
+ "F_GETFD",
+ "F_GETFL",
+ "F_GETLEASE",
+ "F_GETLK",
+ "F_GETLK64",
+ "F_GETLKPID",
+ "F_GETNOSIGPIPE",
+ "F_GETOWN",
+ "F_GETOWN_EX",
+ "F_GETPATH",
+ "F_GETPATH_MTMINFO",
+ "F_GETPIPE_SZ",
+ "F_GETPROTECTIONCLASS",
+ "F_GETPROTECTIONLEVEL",
+ "F_GETSIG",
+ "F_GLOBAL_NOCACHE",
+ "F_LOCK",
+ "F_LOG2PHYS",
+ "F_LOG2PHYS_EXT",
+ "F_MARKDEPENDENCY",
+ "F_MAXFD",
+ "F_NOCACHE",
+ "F_NODIRECT",
+ "F_NOTIFY",
+ "F_OGETLK",
+ "F_OK",
+ "F_OSETLK",
+ "F_OSETLKW",
+ "F_PARAM_MASK",
+ "F_PARAM_MAX",
+ "F_PATHPKG_CHECK",
+ "F_PEOFPOSMODE",
+ "F_PREALLOCATE",
+ "F_RDADVISE",
+ "F_RDAHEAD",
+ "F_RDLCK",
+ "F_READAHEAD",
+ "F_READBOOTSTRAP",
+ "F_SETBACKINGSTORE",
+ "F_SETFD",
+ "F_SETFL",
+ "F_SETLEASE",
+ "F_SETLK",
+ "F_SETLK64",
+ "F_SETLKW",
+ "F_SETLKW64",
+ "F_SETLKWTIMEOUT",
+ "F_SETLK_REMOTE",
+ "F_SETNOSIGPIPE",
+ "F_SETOWN",
+ "F_SETOWN_EX",
+ "F_SETPIPE_SZ",
+ "F_SETPROTECTIONCLASS",
+ "F_SETSIG",
+ "F_SETSIZE",
+ "F_SHLCK",
+ "F_SINGLE_WRITER",
+ "F_TEST",
+ "F_THAW_FS",
+ "F_TLOCK",
+ "F_TRANSCODEKEY",
+ "F_ULOCK",
+ "F_UNLCK",
+ "F_UNLCKSYS",
+ "F_VOLPOSMODE",
+ "F_WRITEBOOTSTRAP",
+ "F_WRLCK",
+ "Faccessat",
+ "Fallocate",
+ "Fbootstraptransfer_t",
+ "Fchdir",
+ "Fchflags",
+ "Fchmod",
+ "Fchmodat",
+ "Fchown",
+ "Fchownat",
+ "FcntlFlock",
+ "FdSet",
+ "Fdatasync",
+ "FileNotifyInformation",
+ "Filetime",
+ "FindClose",
+ "FindFirstFile",
+ "FindNextFile",
+ "Flock",
+ "Flock_t",
+ "FlushBpf",
+ "FlushFileBuffers",
+ "FlushViewOfFile",
+ "ForkExec",
+ "ForkLock",
+ "FormatMessage",
+ "Fpathconf",
+ "FreeAddrInfoW",
+ "FreeEnvironmentStrings",
+ "FreeLibrary",
+ "Fsid",
+ "Fstat",
+ "Fstatat",
+ "Fstatfs",
+ "Fstore_t",
+ "Fsync",
+ "Ftruncate",
+ "FullPath",
+ "Futimes",
+ "Futimesat",
+ "GENERIC_ALL",
+ "GENERIC_EXECUTE",
+ "GENERIC_READ",
+ "GENERIC_WRITE",
+ "GUID",
+ "GetAcceptExSockaddrs",
+ "GetAdaptersInfo",
+ "GetAddrInfoW",
+ "GetCommandLine",
+ "GetComputerName",
+ "GetConsoleMode",
+ "GetCurrentDirectory",
+ "GetCurrentProcess",
+ "GetEnvironmentStrings",
+ "GetEnvironmentVariable",
+ "GetExitCodeProcess",
+ "GetFileAttributes",
+ "GetFileAttributesEx",
+ "GetFileExInfoStandard",
+ "GetFileExMaxInfoLevel",
+ "GetFileInformationByHandle",
+ "GetFileType",
+ "GetFullPathName",
+ "GetHostByName",
+ "GetIfEntry",
+ "GetLastError",
+ "GetLengthSid",
+ "GetLongPathName",
+ "GetProcAddress",
+ "GetProcessTimes",
+ "GetProtoByName",
+ "GetQueuedCompletionStatus",
+ "GetServByName",
+ "GetShortPathName",
+ "GetStartupInfo",
+ "GetStdHandle",
+ "GetSystemTimeAsFileTime",
+ "GetTempPath",
+ "GetTimeZoneInformation",
+ "GetTokenInformation",
+ "GetUserNameEx",
+ "GetUserProfileDirectory",
+ "GetVersion",
+ "Getcwd",
+ "Getdents",
+ "Getdirentries",
+ "Getdtablesize",
+ "Getegid",
+ "Getenv",
+ "Geteuid",
+ "Getfsstat",
+ "Getgid",
+ "Getgroups",
+ "Getpagesize",
+ "Getpeername",
+ "Getpgid",
+ "Getpgrp",
+ "Getpid",
+ "Getppid",
+ "Getpriority",
+ "Getrlimit",
+ "Getrusage",
+ "Getsid",
+ "Getsockname",
+ "Getsockopt",
+ "GetsockoptByte",
+ "GetsockoptICMPv6Filter",
+ "GetsockoptIPMreq",
+ "GetsockoptIPMreqn",
+ "GetsockoptIPv6MTUInfo",
+ "GetsockoptIPv6Mreq",
+ "GetsockoptInet4Addr",
+ "GetsockoptInt",
+ "GetsockoptUcred",
+ "Gettid",
+ "Gettimeofday",
+ "Getuid",
+ "Getwd",
+ "Getxattr",
+ "HANDLE_FLAG_INHERIT",
+ "HKEY_CLASSES_ROOT",
+ "HKEY_CURRENT_CONFIG",
+ "HKEY_CURRENT_USER",
+ "HKEY_DYN_DATA",
+ "HKEY_LOCAL_MACHINE",
+ "HKEY_PERFORMANCE_DATA",
+ "HKEY_USERS",
+ "HUPCL",
+ "Handle",
+ "Hostent",
+ "ICANON",
+ "ICMP6_FILTER",
+ "ICMPV6_FILTER",
+ "ICMPv6Filter",
+ "ICRNL",
+ "IEXTEN",
+ "IFAN_ARRIVAL",
+ "IFAN_DEPARTURE",
+ "IFA_ADDRESS",
+ "IFA_ANYCAST",
+ "IFA_BROADCAST",
+ "IFA_CACHEINFO",
+ "IFA_F_DADFAILED",
+ "IFA_F_DEPRECATED",
+ "IFA_F_HOMEADDRESS",
+ "IFA_F_NODAD",
+ "IFA_F_OPTIMISTIC",
+ "IFA_F_PERMANENT",
+ "IFA_F_SECONDARY",
+ "IFA_F_TEMPORARY",
+ "IFA_F_TENTATIVE",
+ "IFA_LABEL",
+ "IFA_LOCAL",
+ "IFA_MAX",
+ "IFA_MULTICAST",
+ "IFA_ROUTE",
+ "IFA_UNSPEC",
+ "IFF_ALLMULTI",
+ "IFF_ALTPHYS",
+ "IFF_AUTOMEDIA",
+ "IFF_BROADCAST",
+ "IFF_CANTCHANGE",
+ "IFF_CANTCONFIG",
+ "IFF_DEBUG",
+ "IFF_DRV_OACTIVE",
+ "IFF_DRV_RUNNING",
+ "IFF_DYING",
+ "IFF_DYNAMIC",
+ "IFF_LINK0",
+ "IFF_LINK1",
+ "IFF_LINK2",
+ "IFF_LOOPBACK",
+ "IFF_MASTER",
+ "IFF_MONITOR",
+ "IFF_MULTICAST",
+ "IFF_NOARP",
+ "IFF_NOTRAILERS",
+ "IFF_NO_PI",
+ "IFF_OACTIVE",
+ "IFF_ONE_QUEUE",
+ "IFF_POINTOPOINT",
+ "IFF_POINTTOPOINT",
+ "IFF_PORTSEL",
+ "IFF_PPROMISC",
+ "IFF_PROMISC",
+ "IFF_RENAMING",
+ "IFF_RUNNING",
+ "IFF_SIMPLEX",
+ "IFF_SLAVE",
+ "IFF_SMART",
+ "IFF_STATICARP",
+ "IFF_TAP",
+ "IFF_TUN",
+ "IFF_TUN_EXCL",
+ "IFF_UP",
+ "IFF_VNET_HDR",
+ "IFLA_ADDRESS",
+ "IFLA_BROADCAST",
+ "IFLA_COST",
+ "IFLA_IFALIAS",
+ "IFLA_IFNAME",
+ "IFLA_LINK",
+ "IFLA_LINKINFO",
+ "IFLA_LINKMODE",
+ "IFLA_MAP",
+ "IFLA_MASTER",
+ "IFLA_MAX",
+ "IFLA_MTU",
+ "IFLA_NET_NS_PID",
+ "IFLA_OPERSTATE",
+ "IFLA_PRIORITY",
+ "IFLA_PROTINFO",
+ "IFLA_QDISC",
+ "IFLA_STATS",
+ "IFLA_TXQLEN",
+ "IFLA_UNSPEC",
+ "IFLA_WEIGHT",
+ "IFLA_WIRELESS",
+ "IFNAMSIZ",
+ "IFT_1822",
+ "IFT_A12MPPSWITCH",
+ "IFT_AAL2",
+ "IFT_AAL5",
+ "IFT_ADSL",
+ "IFT_AFLANE8023",
+ "IFT_AFLANE8025",
+ "IFT_ARAP",
+ "IFT_ARCNET",
+ "IFT_ARCNETPLUS",
+ "IFT_ASYNC",
+ "IFT_ATM",
+ "IFT_ATMDXI",
+ "IFT_ATMFUNI",
+ "IFT_ATMIMA",
+ "IFT_ATMLOGICAL",
+ "IFT_ATMRADIO",
+ "IFT_ATMSUBINTERFACE",
+ "IFT_ATMVCIENDPT",
+ "IFT_ATMVIRTUAL",
+ "IFT_BGPPOLICYACCOUNTING",
+ "IFT_BLUETOOTH",
+ "IFT_BRIDGE",
+ "IFT_BSC",
+ "IFT_CARP",
+ "IFT_CCTEMUL",
+ "IFT_CELLULAR",
+ "IFT_CEPT",
+ "IFT_CES",
+ "IFT_CHANNEL",
+ "IFT_CNR",
+ "IFT_COFFEE",
+ "IFT_COMPOSITELINK",
+ "IFT_DCN",
+ "IFT_DIGITALPOWERLINE",
+ "IFT_DIGITALWRAPPEROVERHEADCHANNEL",
+ "IFT_DLSW",
+ "IFT_DOCSCABLEDOWNSTREAM",
+ "IFT_DOCSCABLEMACLAYER",
+ "IFT_DOCSCABLEUPSTREAM",
+ "IFT_DOCSCABLEUPSTREAMCHANNEL",
+ "IFT_DS0",
+ "IFT_DS0BUNDLE",
+ "IFT_DS1FDL",
+ "IFT_DS3",
+ "IFT_DTM",
+ "IFT_DUMMY",
+ "IFT_DVBASILN",
+ "IFT_DVBASIOUT",
+ "IFT_DVBRCCDOWNSTREAM",
+ "IFT_DVBRCCMACLAYER",
+ "IFT_DVBRCCUPSTREAM",
+ "IFT_ECONET",
+ "IFT_ENC",
+ "IFT_EON",
+ "IFT_EPLRS",
+ "IFT_ESCON",
+ "IFT_ETHER",
+ "IFT_FAITH",
+ "IFT_FAST",
+ "IFT_FASTETHER",
+ "IFT_FASTETHERFX",
+ "IFT_FDDI",
+ "IFT_FIBRECHANNEL",
+ "IFT_FRAMERELAYINTERCONNECT",
+ "IFT_FRAMERELAYMPI",
+ "IFT_FRDLCIENDPT",
+ "IFT_FRELAY",
+ "IFT_FRELAYDCE",
+ "IFT_FRF16MFRBUNDLE",
+ "IFT_FRFORWARD",
+ "IFT_G703AT2MB",
+ "IFT_G703AT64K",
+ "IFT_GIF",
+ "IFT_GIGABITETHERNET",
+ "IFT_GR303IDT",
+ "IFT_GR303RDT",
+ "IFT_H323GATEKEEPER",
+ "IFT_H323PROXY",
+ "IFT_HDH1822",
+ "IFT_HDLC",
+ "IFT_HDSL2",
+ "IFT_HIPERLAN2",
+ "IFT_HIPPI",
+ "IFT_HIPPIINTERFACE",
+ "IFT_HOSTPAD",
+ "IFT_HSSI",
+ "IFT_HY",
+ "IFT_IBM370PARCHAN",
+ "IFT_IDSL",
+ "IFT_IEEE1394",
+ "IFT_IEEE80211",
+ "IFT_IEEE80212",
+ "IFT_IEEE8023ADLAG",
+ "IFT_IFGSN",
+ "IFT_IMT",
+ "IFT_INFINIBAND",
+ "IFT_INTERLEAVE",
+ "IFT_IP",
+ "IFT_IPFORWARD",
+ "IFT_IPOVERATM",
+ "IFT_IPOVERCDLC",
+ "IFT_IPOVERCLAW",
+ "IFT_IPSWITCH",
+ "IFT_IPXIP",
+ "IFT_ISDN",
+ "IFT_ISDNBASIC",
+ "IFT_ISDNPRIMARY",
+ "IFT_ISDNS",
+ "IFT_ISDNU",
+ "IFT_ISO88022LLC",
+ "IFT_ISO88023",
+ "IFT_ISO88024",
+ "IFT_ISO88025",
+ "IFT_ISO88025CRFPINT",
+ "IFT_ISO88025DTR",
+ "IFT_ISO88025FIBER",
+ "IFT_ISO88026",
+ "IFT_ISUP",
+ "IFT_L2VLAN",
+ "IFT_L3IPVLAN",
+ "IFT_L3IPXVLAN",
+ "IFT_LAPB",
+ "IFT_LAPD",
+ "IFT_LAPF",
+ "IFT_LINEGROUP",
+ "IFT_LOCALTALK",
+ "IFT_LOOP",
+ "IFT_MEDIAMAILOVERIP",
+ "IFT_MFSIGLINK",
+ "IFT_MIOX25",
+ "IFT_MODEM",
+ "IFT_MPC",
+ "IFT_MPLS",
+ "IFT_MPLSTUNNEL",
+ "IFT_MSDSL",
+ "IFT_MVL",
+ "IFT_MYRINET",
+ "IFT_NFAS",
+ "IFT_NSIP",
+ "IFT_OPTICALCHANNEL",
+ "IFT_OPTICALTRANSPORT",
+ "IFT_OTHER",
+ "IFT_P10",
+ "IFT_P80",
+ "IFT_PARA",
+ "IFT_PDP",
+ "IFT_PFLOG",
+ "IFT_PFLOW",
+ "IFT_PFSYNC",
+ "IFT_PLC",
+ "IFT_PON155",
+ "IFT_PON622",
+ "IFT_POS",
+ "IFT_PPP",
+ "IFT_PPPMULTILINKBUNDLE",
+ "IFT_PROPATM",
+ "IFT_PROPBWAP2MP",
+ "IFT_PROPCNLS",
+ "IFT_PROPDOCSWIRELESSDOWNSTREAM",
+ "IFT_PROPDOCSWIRELESSMACLAYER",
+ "IFT_PROPDOCSWIRELESSUPSTREAM",
+ "IFT_PROPMUX",
+ "IFT_PROPVIRTUAL",
+ "IFT_PROPWIRELESSP2P",
+ "IFT_PTPSERIAL",
+ "IFT_PVC",
+ "IFT_Q2931",
+ "IFT_QLLC",
+ "IFT_RADIOMAC",
+ "IFT_RADSL",
+ "IFT_REACHDSL",
+ "IFT_RFC1483",
+ "IFT_RS232",
+ "IFT_RSRB",
+ "IFT_SDLC",
+ "IFT_SDSL",
+ "IFT_SHDSL",
+ "IFT_SIP",
+ "IFT_SIPSIG",
+ "IFT_SIPTG",
+ "IFT_SLIP",
+ "IFT_SMDSDXI",
+ "IFT_SMDSICIP",
+ "IFT_SONET",
+ "IFT_SONETOVERHEADCHANNEL",
+ "IFT_SONETPATH",
+ "IFT_SONETVT",
+ "IFT_SRP",
+ "IFT_SS7SIGLINK",
+ "IFT_STACKTOSTACK",
+ "IFT_STARLAN",
+ "IFT_STF",
+ "IFT_T1",
+ "IFT_TDLC",
+ "IFT_TELINK",
+ "IFT_TERMPAD",
+ "IFT_TR008",
+ "IFT_TRANSPHDLC",
+ "IFT_TUNNEL",
+ "IFT_ULTRA",
+ "IFT_USB",
+ "IFT_V11",
+ "IFT_V35",
+ "IFT_V36",
+ "IFT_V37",
+ "IFT_VDSL",
+ "IFT_VIRTUALIPADDRESS",
+ "IFT_VIRTUALTG",
+ "IFT_VOICEDID",
+ "IFT_VOICEEM",
+ "IFT_VOICEEMFGD",
+ "IFT_VOICEENCAP",
+ "IFT_VOICEFGDEANA",
+ "IFT_VOICEFXO",
+ "IFT_VOICEFXS",
+ "IFT_VOICEOVERATM",
+ "IFT_VOICEOVERCABLE",
+ "IFT_VOICEOVERFRAMERELAY",
+ "IFT_VOICEOVERIP",
+ "IFT_X213",
+ "IFT_X25",
+ "IFT_X25DDN",
+ "IFT_X25HUNTGROUP",
+ "IFT_X25MLP",
+ "IFT_X25PLE",
+ "IFT_XETHER",
+ "IGNBRK",
+ "IGNCR",
+ "IGNORE",
+ "IGNPAR",
+ "IMAXBEL",
+ "INFINITE",
+ "INLCR",
+ "INPCK",
+ "INVALID_FILE_ATTRIBUTES",
+ "IN_ACCESS",
+ "IN_ALL_EVENTS",
+ "IN_ATTRIB",
+ "IN_CLASSA_HOST",
+ "IN_CLASSA_MAX",
+ "IN_CLASSA_NET",
+ "IN_CLASSA_NSHIFT",
+ "IN_CLASSB_HOST",
+ "IN_CLASSB_MAX",
+ "IN_CLASSB_NET",
+ "IN_CLASSB_NSHIFT",
+ "IN_CLASSC_HOST",
+ "IN_CLASSC_NET",
+ "IN_CLASSC_NSHIFT",
+ "IN_CLASSD_HOST",
+ "IN_CLASSD_NET",
+ "IN_CLASSD_NSHIFT",
+ "IN_CLOEXEC",
+ "IN_CLOSE",
+ "IN_CLOSE_NOWRITE",
+ "IN_CLOSE_WRITE",
+ "IN_CREATE",
+ "IN_DELETE",
+ "IN_DELETE_SELF",
+ "IN_DONT_FOLLOW",
+ "IN_EXCL_UNLINK",
+ "IN_IGNORED",
+ "IN_ISDIR",
+ "IN_LINKLOCALNETNUM",
+ "IN_LOOPBACKNET",
+ "IN_MASK_ADD",
+ "IN_MODIFY",
+ "IN_MOVE",
+ "IN_MOVED_FROM",
+ "IN_MOVED_TO",
+ "IN_MOVE_SELF",
+ "IN_NONBLOCK",
+ "IN_ONESHOT",
+ "IN_ONLYDIR",
+ "IN_OPEN",
+ "IN_Q_OVERFLOW",
+ "IN_RFC3021_HOST",
+ "IN_RFC3021_MASK",
+ "IN_RFC3021_NET",
+ "IN_RFC3021_NSHIFT",
+ "IN_UNMOUNT",
+ "IOC_IN",
+ "IOC_INOUT",
+ "IOC_OUT",
+ "IOC_VENDOR",
+ "IOC_WS2",
+ "IO_REPARSE_TAG_SYMLINK",
+ "IPMreq",
+ "IPMreqn",
+ "IPPROTO_3PC",
+ "IPPROTO_ADFS",
+ "IPPROTO_AH",
+ "IPPROTO_AHIP",
+ "IPPROTO_APES",
+ "IPPROTO_ARGUS",
+ "IPPROTO_AX25",
+ "IPPROTO_BHA",
+ "IPPROTO_BLT",
+ "IPPROTO_BRSATMON",
+ "IPPROTO_CARP",
+ "IPPROTO_CFTP",
+ "IPPROTO_CHAOS",
+ "IPPROTO_CMTP",
+ "IPPROTO_COMP",
+ "IPPROTO_CPHB",
+ "IPPROTO_CPNX",
+ "IPPROTO_DCCP",
+ "IPPROTO_DDP",
+ "IPPROTO_DGP",
+ "IPPROTO_DIVERT",
+ "IPPROTO_DIVERT_INIT",
+ "IPPROTO_DIVERT_RESP",
+ "IPPROTO_DONE",
+ "IPPROTO_DSTOPTS",
+ "IPPROTO_EGP",
+ "IPPROTO_EMCON",
+ "IPPROTO_ENCAP",
+ "IPPROTO_EON",
+ "IPPROTO_ESP",
+ "IPPROTO_ETHERIP",
+ "IPPROTO_FRAGMENT",
+ "IPPROTO_GGP",
+ "IPPROTO_GMTP",
+ "IPPROTO_GRE",
+ "IPPROTO_HELLO",
+ "IPPROTO_HMP",
+ "IPPROTO_HOPOPTS",
+ "IPPROTO_ICMP",
+ "IPPROTO_ICMPV6",
+ "IPPROTO_IDP",
+ "IPPROTO_IDPR",
+ "IPPROTO_IDRP",
+ "IPPROTO_IGMP",
+ "IPPROTO_IGP",
+ "IPPROTO_IGRP",
+ "IPPROTO_IL",
+ "IPPROTO_INLSP",
+ "IPPROTO_INP",
+ "IPPROTO_IP",
+ "IPPROTO_IPCOMP",
+ "IPPROTO_IPCV",
+ "IPPROTO_IPEIP",
+ "IPPROTO_IPIP",
+ "IPPROTO_IPPC",
+ "IPPROTO_IPV4",
+ "IPPROTO_IPV6",
+ "IPPROTO_IPV6_ICMP",
+ "IPPROTO_IRTP",
+ "IPPROTO_KRYPTOLAN",
+ "IPPROTO_LARP",
+ "IPPROTO_LEAF1",
+ "IPPROTO_LEAF2",
+ "IPPROTO_MAX",
+ "IPPROTO_MAXID",
+ "IPPROTO_MEAS",
+ "IPPROTO_MH",
+ "IPPROTO_MHRP",
+ "IPPROTO_MICP",
+ "IPPROTO_MOBILE",
+ "IPPROTO_MPLS",
+ "IPPROTO_MTP",
+ "IPPROTO_MUX",
+ "IPPROTO_ND",
+ "IPPROTO_NHRP",
+ "IPPROTO_NONE",
+ "IPPROTO_NSP",
+ "IPPROTO_NVPII",
+ "IPPROTO_OLD_DIVERT",
+ "IPPROTO_OSPFIGP",
+ "IPPROTO_PFSYNC",
+ "IPPROTO_PGM",
+ "IPPROTO_PIGP",
+ "IPPROTO_PIM",
+ "IPPROTO_PRM",
+ "IPPROTO_PUP",
+ "IPPROTO_PVP",
+ "IPPROTO_RAW",
+ "IPPROTO_RCCMON",
+ "IPPROTO_RDP",
+ "IPPROTO_ROUTING",
+ "IPPROTO_RSVP",
+ "IPPROTO_RVD",
+ "IPPROTO_SATEXPAK",
+ "IPPROTO_SATMON",
+ "IPPROTO_SCCSP",
+ "IPPROTO_SCTP",
+ "IPPROTO_SDRP",
+ "IPPROTO_SEND",
+ "IPPROTO_SEP",
+ "IPPROTO_SKIP",
+ "IPPROTO_SPACER",
+ "IPPROTO_SRPC",
+ "IPPROTO_ST",
+ "IPPROTO_SVMTP",
+ "IPPROTO_SWIPE",
+ "IPPROTO_TCF",
+ "IPPROTO_TCP",
+ "IPPROTO_TLSP",
+ "IPPROTO_TP",
+ "IPPROTO_TPXX",
+ "IPPROTO_TRUNK1",
+ "IPPROTO_TRUNK2",
+ "IPPROTO_TTP",
+ "IPPROTO_UDP",
+ "IPPROTO_UDPLITE",
+ "IPPROTO_VINES",
+ "IPPROTO_VISA",
+ "IPPROTO_VMTP",
+ "IPPROTO_VRRP",
+ "IPPROTO_WBEXPAK",
+ "IPPROTO_WBMON",
+ "IPPROTO_WSN",
+ "IPPROTO_XNET",
+ "IPPROTO_XTP",
+ "IPV6_2292DSTOPTS",
+ "IPV6_2292HOPLIMIT",
+ "IPV6_2292HOPOPTS",
+ "IPV6_2292NEXTHOP",
+ "IPV6_2292PKTINFO",
+ "IPV6_2292PKTOPTIONS",
+ "IPV6_2292RTHDR",
+ "IPV6_ADDRFORM",
+ "IPV6_ADD_MEMBERSHIP",
+ "IPV6_AUTHHDR",
+ "IPV6_AUTH_LEVEL",
+ "IPV6_AUTOFLOWLABEL",
+ "IPV6_BINDANY",
+ "IPV6_BINDV6ONLY",
+ "IPV6_BOUND_IF",
+ "IPV6_CHECKSUM",
+ "IPV6_DEFAULT_MULTICAST_HOPS",
+ "IPV6_DEFAULT_MULTICAST_LOOP",
+ "IPV6_DEFHLIM",
+ "IPV6_DONTFRAG",
+ "IPV6_DROP_MEMBERSHIP",
+ "IPV6_DSTOPTS",
+ "IPV6_ESP_NETWORK_LEVEL",
+ "IPV6_ESP_TRANS_LEVEL",
+ "IPV6_FAITH",
+ "IPV6_FLOWINFO_MASK",
+ "IPV6_FLOWLABEL_MASK",
+ "IPV6_FRAGTTL",
+ "IPV6_FW_ADD",
+ "IPV6_FW_DEL",
+ "IPV6_FW_FLUSH",
+ "IPV6_FW_GET",
+ "IPV6_FW_ZERO",
+ "IPV6_HLIMDEC",
+ "IPV6_HOPLIMIT",
+ "IPV6_HOPOPTS",
+ "IPV6_IPCOMP_LEVEL",
+ "IPV6_IPSEC_POLICY",
+ "IPV6_JOIN_ANYCAST",
+ "IPV6_JOIN_GROUP",
+ "IPV6_LEAVE_ANYCAST",
+ "IPV6_LEAVE_GROUP",
+ "IPV6_MAXHLIM",
+ "IPV6_MAXOPTHDR",
+ "IPV6_MAXPACKET",
+ "IPV6_MAX_GROUP_SRC_FILTER",
+ "IPV6_MAX_MEMBERSHIPS",
+ "IPV6_MAX_SOCK_SRC_FILTER",
+ "IPV6_MIN_MEMBERSHIPS",
+ "IPV6_MMTU",
+ "IPV6_MSFILTER",
+ "IPV6_MTU",
+ "IPV6_MTU_DISCOVER",
+ "IPV6_MULTICAST_HOPS",
+ "IPV6_MULTICAST_IF",
+ "IPV6_MULTICAST_LOOP",
+ "IPV6_NEXTHOP",
+ "IPV6_OPTIONS",
+ "IPV6_PATHMTU",
+ "IPV6_PIPEX",
+ "IPV6_PKTINFO",
+ "IPV6_PMTUDISC_DO",
+ "IPV6_PMTUDISC_DONT",
+ "IPV6_PMTUDISC_PROBE",
+ "IPV6_PMTUDISC_WANT",
+ "IPV6_PORTRANGE",
+ "IPV6_PORTRANGE_DEFAULT",
+ "IPV6_PORTRANGE_HIGH",
+ "IPV6_PORTRANGE_LOW",
+ "IPV6_PREFER_TEMPADDR",
+ "IPV6_RECVDSTOPTS",
+ "IPV6_RECVDSTPORT",
+ "IPV6_RECVERR",
+ "IPV6_RECVHOPLIMIT",
+ "IPV6_RECVHOPOPTS",
+ "IPV6_RECVPATHMTU",
+ "IPV6_RECVPKTINFO",
+ "IPV6_RECVRTHDR",
+ "IPV6_RECVTCLASS",
+ "IPV6_ROUTER_ALERT",
+ "IPV6_RTABLE",
+ "IPV6_RTHDR",
+ "IPV6_RTHDRDSTOPTS",
+ "IPV6_RTHDR_LOOSE",
+ "IPV6_RTHDR_STRICT",
+ "IPV6_RTHDR_TYPE_0",
+ "IPV6_RXDSTOPTS",
+ "IPV6_RXHOPOPTS",
+ "IPV6_SOCKOPT_RESERVED1",
+ "IPV6_TCLASS",
+ "IPV6_UNICAST_HOPS",
+ "IPV6_USE_MIN_MTU",
+ "IPV6_V6ONLY",
+ "IPV6_VERSION",
+ "IPV6_VERSION_MASK",
+ "IPV6_XFRM_POLICY",
+ "IP_ADD_MEMBERSHIP",
+ "IP_ADD_SOURCE_MEMBERSHIP",
+ "IP_AUTH_LEVEL",
+ "IP_BINDANY",
+ "IP_BLOCK_SOURCE",
+ "IP_BOUND_IF",
+ "IP_DEFAULT_MULTICAST_LOOP",
+ "IP_DEFAULT_MULTICAST_TTL",
+ "IP_DF",
+ "IP_DIVERTFL",
+ "IP_DONTFRAG",
+ "IP_DROP_MEMBERSHIP",
+ "IP_DROP_SOURCE_MEMBERSHIP",
+ "IP_DUMMYNET3",
+ "IP_DUMMYNET_CONFIGURE",
+ "IP_DUMMYNET_DEL",
+ "IP_DUMMYNET_FLUSH",
+ "IP_DUMMYNET_GET",
+ "IP_EF",
+ "IP_ERRORMTU",
+ "IP_ESP_NETWORK_LEVEL",
+ "IP_ESP_TRANS_LEVEL",
+ "IP_FAITH",
+ "IP_FREEBIND",
+ "IP_FW3",
+ "IP_FW_ADD",
+ "IP_FW_DEL",
+ "IP_FW_FLUSH",
+ "IP_FW_GET",
+ "IP_FW_NAT_CFG",
+ "IP_FW_NAT_DEL",
+ "IP_FW_NAT_GET_CONFIG",
+ "IP_FW_NAT_GET_LOG",
+ "IP_FW_RESETLOG",
+ "IP_FW_TABLE_ADD",
+ "IP_FW_TABLE_DEL",
+ "IP_FW_TABLE_FLUSH",
+ "IP_FW_TABLE_GETSIZE",
+ "IP_FW_TABLE_LIST",
+ "IP_FW_ZERO",
+ "IP_HDRINCL",
+ "IP_IPCOMP_LEVEL",
+ "IP_IPSECFLOWINFO",
+ "IP_IPSEC_LOCAL_AUTH",
+ "IP_IPSEC_LOCAL_CRED",
+ "IP_IPSEC_LOCAL_ID",
+ "IP_IPSEC_POLICY",
+ "IP_IPSEC_REMOTE_AUTH",
+ "IP_IPSEC_REMOTE_CRED",
+ "IP_IPSEC_REMOTE_ID",
+ "IP_MAXPACKET",
+ "IP_MAX_GROUP_SRC_FILTER",
+ "IP_MAX_MEMBERSHIPS",
+ "IP_MAX_SOCK_MUTE_FILTER",
+ "IP_MAX_SOCK_SRC_FILTER",
+ "IP_MAX_SOURCE_FILTER",
+ "IP_MF",
+ "IP_MINFRAGSIZE",
+ "IP_MINTTL",
+ "IP_MIN_MEMBERSHIPS",
+ "IP_MSFILTER",
+ "IP_MSS",
+ "IP_MTU",
+ "IP_MTU_DISCOVER",
+ "IP_MULTICAST_IF",
+ "IP_MULTICAST_IFINDEX",
+ "IP_MULTICAST_LOOP",
+ "IP_MULTICAST_TTL",
+ "IP_MULTICAST_VIF",
+ "IP_NAT__XXX",
+ "IP_OFFMASK",
+ "IP_OLD_FW_ADD",
+ "IP_OLD_FW_DEL",
+ "IP_OLD_FW_FLUSH",
+ "IP_OLD_FW_GET",
+ "IP_OLD_FW_RESETLOG",
+ "IP_OLD_FW_ZERO",
+ "IP_ONESBCAST",
+ "IP_OPTIONS",
+ "IP_ORIGDSTADDR",
+ "IP_PASSSEC",
+ "IP_PIPEX",
+ "IP_PKTINFO",
+ "IP_PKTOPTIONS",
+ "IP_PMTUDISC",
+ "IP_PMTUDISC_DO",
+ "IP_PMTUDISC_DONT",
+ "IP_PMTUDISC_PROBE",
+ "IP_PMTUDISC_WANT",
+ "IP_PORTRANGE",
+ "IP_PORTRANGE_DEFAULT",
+ "IP_PORTRANGE_HIGH",
+ "IP_PORTRANGE_LOW",
+ "IP_RECVDSTADDR",
+ "IP_RECVDSTPORT",
+ "IP_RECVERR",
+ "IP_RECVIF",
+ "IP_RECVOPTS",
+ "IP_RECVORIGDSTADDR",
+ "IP_RECVPKTINFO",
+ "IP_RECVRETOPTS",
+ "IP_RECVRTABLE",
+ "IP_RECVTOS",
+ "IP_RECVTTL",
+ "IP_RETOPTS",
+ "IP_RF",
+ "IP_ROUTER_ALERT",
+ "IP_RSVP_OFF",
+ "IP_RSVP_ON",
+ "IP_RSVP_VIF_OFF",
+ "IP_RSVP_VIF_ON",
+ "IP_RTABLE",
+ "IP_SENDSRCADDR",
+ "IP_STRIPHDR",
+ "IP_TOS",
+ "IP_TRAFFIC_MGT_BACKGROUND",
+ "IP_TRANSPARENT",
+ "IP_TTL",
+ "IP_UNBLOCK_SOURCE",
+ "IP_XFRM_POLICY",
+ "IPv6MTUInfo",
+ "IPv6Mreq",
+ "ISIG",
+ "ISTRIP",
+ "IUCLC",
+ "IUTF8",
+ "IXANY",
+ "IXOFF",
+ "IXON",
+ "IfAddrmsg",
+ "IfAnnounceMsghdr",
+ "IfData",
+ "IfInfomsg",
+ "IfMsghdr",
+ "IfaMsghdr",
+ "IfmaMsghdr",
+ "IfmaMsghdr2",
+ "ImplementsGetwd",
+ "Inet4Pktinfo",
+ "Inet6Pktinfo",
+ "InotifyAddWatch",
+ "InotifyEvent",
+ "InotifyInit",
+ "InotifyInit1",
+ "InotifyRmWatch",
+ "InterfaceAddrMessage",
+ "InterfaceAnnounceMessage",
+ "InterfaceInfo",
+ "InterfaceMessage",
+ "InterfaceMulticastAddrMessage",
+ "InvalidHandle",
+ "Ioperm",
+ "Iopl",
+ "Iovec",
+ "IpAdapterInfo",
+ "IpAddrString",
+ "IpAddressString",
+ "IpMaskString",
+ "Issetugid",
+ "KEY_ALL_ACCESS",
+ "KEY_CREATE_LINK",
+ "KEY_CREATE_SUB_KEY",
+ "KEY_ENUMERATE_SUB_KEYS",
+ "KEY_EXECUTE",
+ "KEY_NOTIFY",
+ "KEY_QUERY_VALUE",
+ "KEY_READ",
+ "KEY_SET_VALUE",
+ "KEY_WOW64_32KEY",
+ "KEY_WOW64_64KEY",
+ "KEY_WRITE",
+ "Kevent",
+ "Kevent_t",
+ "Kill",
+ "Klogctl",
+ "Kqueue",
+ "LANG_ENGLISH",
+ "LAYERED_PROTOCOL",
+ "LCNT_OVERLOAD_FLUSH",
+ "LINUX_REBOOT_CMD_CAD_OFF",
+ "LINUX_REBOOT_CMD_CAD_ON",
+ "LINUX_REBOOT_CMD_HALT",
+ "LINUX_REBOOT_CMD_KEXEC",
+ "LINUX_REBOOT_CMD_POWER_OFF",
+ "LINUX_REBOOT_CMD_RESTART",
+ "LINUX_REBOOT_CMD_RESTART2",
+ "LINUX_REBOOT_CMD_SW_SUSPEND",
+ "LINUX_REBOOT_MAGIC1",
+ "LINUX_REBOOT_MAGIC2",
+ "LOCK_EX",
+ "LOCK_NB",
+ "LOCK_SH",
+ "LOCK_UN",
+ "LazyDLL",
+ "LazyProc",
+ "Lchown",
+ "Linger",
+ "Link",
+ "Listen",
+ "Listxattr",
+ "LoadCancelIoEx",
+ "LoadConnectEx",
+ "LoadCreateSymbolicLink",
+ "LoadDLL",
+ "LoadGetAddrInfo",
+ "LoadLibrary",
+ "LoadSetFileCompletionNotificationModes",
+ "LocalFree",
+ "Log2phys_t",
+ "LookupAccountName",
+ "LookupAccountSid",
+ "LookupSID",
+ "LsfJump",
+ "LsfSocket",
+ "LsfStmt",
+ "Lstat",
+ "MADV_AUTOSYNC",
+ "MADV_CAN_REUSE",
+ "MADV_CORE",
+ "MADV_DOFORK",
+ "MADV_DONTFORK",
+ "MADV_DONTNEED",
+ "MADV_FREE",
+ "MADV_FREE_REUSABLE",
+ "MADV_FREE_REUSE",
+ "MADV_HUGEPAGE",
+ "MADV_HWPOISON",
+ "MADV_MERGEABLE",
+ "MADV_NOCORE",
+ "MADV_NOHUGEPAGE",
+ "MADV_NORMAL",
+ "MADV_NOSYNC",
+ "MADV_PROTECT",
+ "MADV_RANDOM",
+ "MADV_REMOVE",
+ "MADV_SEQUENTIAL",
+ "MADV_SPACEAVAIL",
+ "MADV_UNMERGEABLE",
+ "MADV_WILLNEED",
+ "MADV_ZERO_WIRED_PAGES",
+ "MAP_32BIT",
+ "MAP_ALIGNED_SUPER",
+ "MAP_ALIGNMENT_16MB",
+ "MAP_ALIGNMENT_1TB",
+ "MAP_ALIGNMENT_256TB",
+ "MAP_ALIGNMENT_4GB",
+ "MAP_ALIGNMENT_64KB",
+ "MAP_ALIGNMENT_64PB",
+ "MAP_ALIGNMENT_MASK",
+ "MAP_ALIGNMENT_SHIFT",
+ "MAP_ANON",
+ "MAP_ANONYMOUS",
+ "MAP_COPY",
+ "MAP_DENYWRITE",
+ "MAP_EXECUTABLE",
+ "MAP_FILE",
+ "MAP_FIXED",
+ "MAP_FLAGMASK",
+ "MAP_GROWSDOWN",
+ "MAP_HASSEMAPHORE",
+ "MAP_HUGETLB",
+ "MAP_INHERIT",
+ "MAP_INHERIT_COPY",
+ "MAP_INHERIT_DEFAULT",
+ "MAP_INHERIT_DONATE_COPY",
+ "MAP_INHERIT_NONE",
+ "MAP_INHERIT_SHARE",
+ "MAP_JIT",
+ "MAP_LOCKED",
+ "MAP_NOCACHE",
+ "MAP_NOCORE",
+ "MAP_NOEXTEND",
+ "MAP_NONBLOCK",
+ "MAP_NORESERVE",
+ "MAP_NOSYNC",
+ "MAP_POPULATE",
+ "MAP_PREFAULT_READ",
+ "MAP_PRIVATE",
+ "MAP_RENAME",
+ "MAP_RESERVED0080",
+ "MAP_RESERVED0100",
+ "MAP_SHARED",
+ "MAP_STACK",
+ "MAP_TRYFIXED",
+ "MAP_TYPE",
+ "MAP_WIRED",
+ "MAXIMUM_REPARSE_DATA_BUFFER_SIZE",
+ "MAXLEN_IFDESCR",
+ "MAXLEN_PHYSADDR",
+ "MAX_ADAPTER_ADDRESS_LENGTH",
+ "MAX_ADAPTER_DESCRIPTION_LENGTH",
+ "MAX_ADAPTER_NAME_LENGTH",
+ "MAX_COMPUTERNAME_LENGTH",
+ "MAX_INTERFACE_NAME_LEN",
+ "MAX_LONG_PATH",
+ "MAX_PATH",
+ "MAX_PROTOCOL_CHAIN",
+ "MCL_CURRENT",
+ "MCL_FUTURE",
+ "MNT_DETACH",
+ "MNT_EXPIRE",
+ "MNT_FORCE",
+ "MSG_BCAST",
+ "MSG_CMSG_CLOEXEC",
+ "MSG_COMPAT",
+ "MSG_CONFIRM",
+ "MSG_CONTROLMBUF",
+ "MSG_CTRUNC",
+ "MSG_DONTROUTE",
+ "MSG_DONTWAIT",
+ "MSG_EOF",
+ "MSG_EOR",
+ "MSG_ERRQUEUE",
+ "MSG_FASTOPEN",
+ "MSG_FIN",
+ "MSG_FLUSH",
+ "MSG_HAVEMORE",
+ "MSG_HOLD",
+ "MSG_IOVUSRSPACE",
+ "MSG_LENUSRSPACE",
+ "MSG_MCAST",
+ "MSG_MORE",
+ "MSG_NAMEMBUF",
+ "MSG_NBIO",
+ "MSG_NEEDSA",
+ "MSG_NOSIGNAL",
+ "MSG_NOTIFICATION",
+ "MSG_OOB",
+ "MSG_PEEK",
+ "MSG_PROXY",
+ "MSG_RCVMORE",
+ "MSG_RST",
+ "MSG_SEND",
+ "MSG_SYN",
+ "MSG_TRUNC",
+ "MSG_TRYHARD",
+ "MSG_USERFLAGS",
+ "MSG_WAITALL",
+ "MSG_WAITFORONE",
+ "MSG_WAITSTREAM",
+ "MS_ACTIVE",
+ "MS_ASYNC",
+ "MS_BIND",
+ "MS_DEACTIVATE",
+ "MS_DIRSYNC",
+ "MS_INVALIDATE",
+ "MS_I_VERSION",
+ "MS_KERNMOUNT",
+ "MS_KILLPAGES",
+ "MS_MANDLOCK",
+ "MS_MGC_MSK",
+ "MS_MGC_VAL",
+ "MS_MOVE",
+ "MS_NOATIME",
+ "MS_NODEV",
+ "MS_NODIRATIME",
+ "MS_NOEXEC",
+ "MS_NOSUID",
+ "MS_NOUSER",
+ "MS_POSIXACL",
+ "MS_PRIVATE",
+ "MS_RDONLY",
+ "MS_REC",
+ "MS_RELATIME",
+ "MS_REMOUNT",
+ "MS_RMT_MASK",
+ "MS_SHARED",
+ "MS_SILENT",
+ "MS_SLAVE",
+ "MS_STRICTATIME",
+ "MS_SYNC",
+ "MS_SYNCHRONOUS",
+ "MS_UNBINDABLE",
+ "Madvise",
+ "MapViewOfFile",
+ "MaxTokenInfoClass",
+ "Mclpool",
+ "MibIfRow",
+ "Mkdir",
+ "Mkdirat",
+ "Mkfifo",
+ "Mknod",
+ "Mknodat",
+ "Mlock",
+ "Mlockall",
+ "Mmap",
+ "Mount",
+ "MoveFile",
+ "Mprotect",
+ "Msghdr",
+ "Munlock",
+ "Munlockall",
+ "Munmap",
+ "MustLoadDLL",
+ "NAME_MAX",
+ "NETLINK_ADD_MEMBERSHIP",
+ "NETLINK_AUDIT",
+ "NETLINK_BROADCAST_ERROR",
+ "NETLINK_CONNECTOR",
+ "NETLINK_DNRTMSG",
+ "NETLINK_DROP_MEMBERSHIP",
+ "NETLINK_ECRYPTFS",
+ "NETLINK_FIB_LOOKUP",
+ "NETLINK_FIREWALL",
+ "NETLINK_GENERIC",
+ "NETLINK_INET_DIAG",
+ "NETLINK_IP6_FW",
+ "NETLINK_ISCSI",
+ "NETLINK_KOBJECT_UEVENT",
+ "NETLINK_NETFILTER",
+ "NETLINK_NFLOG",
+ "NETLINK_NO_ENOBUFS",
+ "NETLINK_PKTINFO",
+ "NETLINK_RDMA",
+ "NETLINK_ROUTE",
+ "NETLINK_SCSITRANSPORT",
+ "NETLINK_SELINUX",
+ "NETLINK_UNUSED",
+ "NETLINK_USERSOCK",
+ "NETLINK_XFRM",
+ "NET_RT_DUMP",
+ "NET_RT_DUMP2",
+ "NET_RT_FLAGS",
+ "NET_RT_IFLIST",
+ "NET_RT_IFLIST2",
+ "NET_RT_IFLISTL",
+ "NET_RT_IFMALIST",
+ "NET_RT_MAXID",
+ "NET_RT_OIFLIST",
+ "NET_RT_OOIFLIST",
+ "NET_RT_STAT",
+ "NET_RT_STATS",
+ "NET_RT_TABLE",
+ "NET_RT_TRASH",
+ "NLA_ALIGNTO",
+ "NLA_F_NESTED",
+ "NLA_F_NET_BYTEORDER",
+ "NLA_HDRLEN",
+ "NLMSG_ALIGNTO",
+ "NLMSG_DONE",
+ "NLMSG_ERROR",
+ "NLMSG_HDRLEN",
+ "NLMSG_MIN_TYPE",
+ "NLMSG_NOOP",
+ "NLMSG_OVERRUN",
+ "NLM_F_ACK",
+ "NLM_F_APPEND",
+ "NLM_F_ATOMIC",
+ "NLM_F_CREATE",
+ "NLM_F_DUMP",
+ "NLM_F_ECHO",
+ "NLM_F_EXCL",
+ "NLM_F_MATCH",
+ "NLM_F_MULTI",
+ "NLM_F_REPLACE",
+ "NLM_F_REQUEST",
+ "NLM_F_ROOT",
+ "NOFLSH",
+ "NOTE_ABSOLUTE",
+ "NOTE_ATTRIB",
+ "NOTE_BACKGROUND",
+ "NOTE_CHILD",
+ "NOTE_CRITICAL",
+ "NOTE_DELETE",
+ "NOTE_EOF",
+ "NOTE_EXEC",
+ "NOTE_EXIT",
+ "NOTE_EXITSTATUS",
+ "NOTE_EXIT_CSERROR",
+ "NOTE_EXIT_DECRYPTFAIL",
+ "NOTE_EXIT_DETAIL",
+ "NOTE_EXIT_DETAIL_MASK",
+ "NOTE_EXIT_MEMORY",
+ "NOTE_EXIT_REPARENTED",
+ "NOTE_EXTEND",
+ "NOTE_FFAND",
+ "NOTE_FFCOPY",
+ "NOTE_FFCTRLMASK",
+ "NOTE_FFLAGSMASK",
+ "NOTE_FFNOP",
+ "NOTE_FFOR",
+ "NOTE_FORK",
+ "NOTE_LEEWAY",
+ "NOTE_LINK",
+ "NOTE_LOWAT",
+ "NOTE_NONE",
+ "NOTE_NSECONDS",
+ "NOTE_PCTRLMASK",
+ "NOTE_PDATAMASK",
+ "NOTE_REAP",
+ "NOTE_RENAME",
+ "NOTE_RESOURCEEND",
+ "NOTE_REVOKE",
+ "NOTE_SECONDS",
+ "NOTE_SIGNAL",
+ "NOTE_TRACK",
+ "NOTE_TRACKERR",
+ "NOTE_TRIGGER",
+ "NOTE_TRUNCATE",
+ "NOTE_USECONDS",
+ "NOTE_VM_ERROR",
+ "NOTE_VM_PRESSURE",
+ "NOTE_VM_PRESSURE_SUDDEN_TERMINATE",
+ "NOTE_VM_PRESSURE_TERMINATE",
+ "NOTE_WRITE",
+ "NameCanonical",
+ "NameCanonicalEx",
+ "NameDisplay",
+ "NameDnsDomain",
+ "NameFullyQualifiedDN",
+ "NameSamCompatible",
+ "NameServicePrincipal",
+ "NameUniqueId",
+ "NameUnknown",
+ "NameUserPrincipal",
+ "Nanosleep",
+ "NetApiBufferFree",
+ "NetGetJoinInformation",
+ "NetSetupDomainName",
+ "NetSetupUnjoined",
+ "NetSetupUnknownStatus",
+ "NetSetupWorkgroupName",
+ "NetUserGetInfo",
+ "NetlinkMessage",
+ "NetlinkRIB",
+ "NetlinkRouteAttr",
+ "NetlinkRouteRequest",
+ "NewCallback",
+ "NewCallbackCDecl",
+ "NewLazyDLL",
+ "NlAttr",
+ "NlMsgerr",
+ "NlMsghdr",
+ "NsecToFiletime",
+ "NsecToTimespec",
+ "NsecToTimeval",
+ "Ntohs",
+ "OCRNL",
+ "OFDEL",
+ "OFILL",
+ "OFIOGETBMAP",
+ "OID_PKIX_KP_SERVER_AUTH",
+ "OID_SERVER_GATED_CRYPTO",
+ "OID_SGC_NETSCAPE",
+ "OLCUC",
+ "ONLCR",
+ "ONLRET",
+ "ONOCR",
+ "ONOEOT",
+ "OPEN_ALWAYS",
+ "OPEN_EXISTING",
+ "OPOST",
+ "O_ACCMODE",
+ "O_ALERT",
+ "O_ALT_IO",
+ "O_APPEND",
+ "O_ASYNC",
+ "O_CLOEXEC",
+ "O_CREAT",
+ "O_DIRECT",
+ "O_DIRECTORY",
+ "O_DP_GETRAWENCRYPTED",
+ "O_DSYNC",
+ "O_EVTONLY",
+ "O_EXCL",
+ "O_EXEC",
+ "O_EXLOCK",
+ "O_FSYNC",
+ "O_LARGEFILE",
+ "O_NDELAY",
+ "O_NOATIME",
+ "O_NOCTTY",
+ "O_NOFOLLOW",
+ "O_NONBLOCK",
+ "O_NOSIGPIPE",
+ "O_POPUP",
+ "O_RDONLY",
+ "O_RDWR",
+ "O_RSYNC",
+ "O_SHLOCK",
+ "O_SYMLINK",
+ "O_SYNC",
+ "O_TRUNC",
+ "O_TTY_INIT",
+ "O_WRONLY",
+ "Open",
+ "OpenCurrentProcessToken",
+ "OpenProcess",
+ "OpenProcessToken",
+ "Openat",
+ "Overlapped",
+ "PACKET_ADD_MEMBERSHIP",
+ "PACKET_BROADCAST",
+ "PACKET_DROP_MEMBERSHIP",
+ "PACKET_FASTROUTE",
+ "PACKET_HOST",
+ "PACKET_LOOPBACK",
+ "PACKET_MR_ALLMULTI",
+ "PACKET_MR_MULTICAST",
+ "PACKET_MR_PROMISC",
+ "PACKET_MULTICAST",
+ "PACKET_OTHERHOST",
+ "PACKET_OUTGOING",
+ "PACKET_RECV_OUTPUT",
+ "PACKET_RX_RING",
+ "PACKET_STATISTICS",
+ "PAGE_EXECUTE_READ",
+ "PAGE_EXECUTE_READWRITE",
+ "PAGE_EXECUTE_WRITECOPY",
+ "PAGE_READONLY",
+ "PAGE_READWRITE",
+ "PAGE_WRITECOPY",
+ "PARENB",
+ "PARMRK",
+ "PARODD",
+ "PENDIN",
+ "PFL_HIDDEN",
+ "PFL_MATCHES_PROTOCOL_ZERO",
+ "PFL_MULTIPLE_PROTO_ENTRIES",
+ "PFL_NETWORKDIRECT_PROVIDER",
+ "PFL_RECOMMENDED_PROTO_ENTRY",
+ "PF_FLUSH",
+ "PKCS_7_ASN_ENCODING",
+ "PMC5_PIPELINE_FLUSH",
+ "PRIO_PGRP",
+ "PRIO_PROCESS",
+ "PRIO_USER",
+ "PRI_IOFLUSH",
+ "PROCESS_QUERY_INFORMATION",
+ "PROCESS_TERMINATE",
+ "PROT_EXEC",
+ "PROT_GROWSDOWN",
+ "PROT_GROWSUP",
+ "PROT_NONE",
+ "PROT_READ",
+ "PROT_WRITE",
+ "PROV_DH_SCHANNEL",
+ "PROV_DSS",
+ "PROV_DSS_DH",
+ "PROV_EC_ECDSA_FULL",
+ "PROV_EC_ECDSA_SIG",
+ "PROV_EC_ECNRA_FULL",
+ "PROV_EC_ECNRA_SIG",
+ "PROV_FORTEZZA",
+ "PROV_INTEL_SEC",
+ "PROV_MS_EXCHANGE",
+ "PROV_REPLACE_OWF",
+ "PROV_RNG",
+ "PROV_RSA_AES",
+ "PROV_RSA_FULL",
+ "PROV_RSA_SCHANNEL",
+ "PROV_RSA_SIG",
+ "PROV_SPYRUS_LYNKS",
+ "PROV_SSL",
+ "PR_CAPBSET_DROP",
+ "PR_CAPBSET_READ",
+ "PR_CLEAR_SECCOMP_FILTER",
+ "PR_ENDIAN_BIG",
+ "PR_ENDIAN_LITTLE",
+ "PR_ENDIAN_PPC_LITTLE",
+ "PR_FPEMU_NOPRINT",
+ "PR_FPEMU_SIGFPE",
+ "PR_FP_EXC_ASYNC",
+ "PR_FP_EXC_DISABLED",
+ "PR_FP_EXC_DIV",
+ "PR_FP_EXC_INV",
+ "PR_FP_EXC_NONRECOV",
+ "PR_FP_EXC_OVF",
+ "PR_FP_EXC_PRECISE",
+ "PR_FP_EXC_RES",
+ "PR_FP_EXC_SW_ENABLE",
+ "PR_FP_EXC_UND",
+ "PR_GET_DUMPABLE",
+ "PR_GET_ENDIAN",
+ "PR_GET_FPEMU",
+ "PR_GET_FPEXC",
+ "PR_GET_KEEPCAPS",
+ "PR_GET_NAME",
+ "PR_GET_PDEATHSIG",
+ "PR_GET_SECCOMP",
+ "PR_GET_SECCOMP_FILTER",
+ "PR_GET_SECUREBITS",
+ "PR_GET_TIMERSLACK",
+ "PR_GET_TIMING",
+ "PR_GET_TSC",
+ "PR_GET_UNALIGN",
+ "PR_MCE_KILL",
+ "PR_MCE_KILL_CLEAR",
+ "PR_MCE_KILL_DEFAULT",
+ "PR_MCE_KILL_EARLY",
+ "PR_MCE_KILL_GET",
+ "PR_MCE_KILL_LATE",
+ "PR_MCE_KILL_SET",
+ "PR_SECCOMP_FILTER_EVENT",
+ "PR_SECCOMP_FILTER_SYSCALL",
+ "PR_SET_DUMPABLE",
+ "PR_SET_ENDIAN",
+ "PR_SET_FPEMU",
+ "PR_SET_FPEXC",
+ "PR_SET_KEEPCAPS",
+ "PR_SET_NAME",
+ "PR_SET_PDEATHSIG",
+ "PR_SET_PTRACER",
+ "PR_SET_SECCOMP",
+ "PR_SET_SECCOMP_FILTER",
+ "PR_SET_SECUREBITS",
+ "PR_SET_TIMERSLACK",
+ "PR_SET_TIMING",
+ "PR_SET_TSC",
+ "PR_SET_UNALIGN",
+ "PR_TASK_PERF_EVENTS_DISABLE",
+ "PR_TASK_PERF_EVENTS_ENABLE",
+ "PR_TIMING_STATISTICAL",
+ "PR_TIMING_TIMESTAMP",
+ "PR_TSC_ENABLE",
+ "PR_TSC_SIGSEGV",
+ "PR_UNALIGN_NOPRINT",
+ "PR_UNALIGN_SIGBUS",
+ "PTRACE_ARCH_PRCTL",
+ "PTRACE_ATTACH",
+ "PTRACE_CONT",
+ "PTRACE_DETACH",
+ "PTRACE_EVENT_CLONE",
+ "PTRACE_EVENT_EXEC",
+ "PTRACE_EVENT_EXIT",
+ "PTRACE_EVENT_FORK",
+ "PTRACE_EVENT_VFORK",
+ "PTRACE_EVENT_VFORK_DONE",
+ "PTRACE_GETCRUNCHREGS",
+ "PTRACE_GETEVENTMSG",
+ "PTRACE_GETFPREGS",
+ "PTRACE_GETFPXREGS",
+ "PTRACE_GETHBPREGS",
+ "PTRACE_GETREGS",
+ "PTRACE_GETREGSET",
+ "PTRACE_GETSIGINFO",
+ "PTRACE_GETVFPREGS",
+ "PTRACE_GETWMMXREGS",
+ "PTRACE_GET_THREAD_AREA",
+ "PTRACE_KILL",
+ "PTRACE_OLDSETOPTIONS",
+ "PTRACE_O_MASK",
+ "PTRACE_O_TRACECLONE",
+ "PTRACE_O_TRACEEXEC",
+ "PTRACE_O_TRACEEXIT",
+ "PTRACE_O_TRACEFORK",
+ "PTRACE_O_TRACESYSGOOD",
+ "PTRACE_O_TRACEVFORK",
+ "PTRACE_O_TRACEVFORKDONE",
+ "PTRACE_PEEKDATA",
+ "PTRACE_PEEKTEXT",
+ "PTRACE_PEEKUSR",
+ "PTRACE_POKEDATA",
+ "PTRACE_POKETEXT",
+ "PTRACE_POKEUSR",
+ "PTRACE_SETCRUNCHREGS",
+ "PTRACE_SETFPREGS",
+ "PTRACE_SETFPXREGS",
+ "PTRACE_SETHBPREGS",
+ "PTRACE_SETOPTIONS",
+ "PTRACE_SETREGS",
+ "PTRACE_SETREGSET",
+ "PTRACE_SETSIGINFO",
+ "PTRACE_SETVFPREGS",
+ "PTRACE_SETWMMXREGS",
+ "PTRACE_SET_SYSCALL",
+ "PTRACE_SET_THREAD_AREA",
+ "PTRACE_SINGLEBLOCK",
+ "PTRACE_SINGLESTEP",
+ "PTRACE_SYSCALL",
+ "PTRACE_SYSEMU",
+ "PTRACE_SYSEMU_SINGLESTEP",
+ "PTRACE_TRACEME",
+ "PT_ATTACH",
+ "PT_ATTACHEXC",
+ "PT_CONTINUE",
+ "PT_DATA_ADDR",
+ "PT_DENY_ATTACH",
+ "PT_DETACH",
+ "PT_FIRSTMACH",
+ "PT_FORCEQUOTA",
+ "PT_KILL",
+ "PT_MASK",
+ "PT_READ_D",
+ "PT_READ_I",
+ "PT_READ_U",
+ "PT_SIGEXC",
+ "PT_STEP",
+ "PT_TEXT_ADDR",
+ "PT_TEXT_END_ADDR",
+ "PT_THUPDATE",
+ "PT_TRACE_ME",
+ "PT_WRITE_D",
+ "PT_WRITE_I",
+ "PT_WRITE_U",
+ "ParseDirent",
+ "ParseNetlinkMessage",
+ "ParseNetlinkRouteAttr",
+ "ParseRoutingMessage",
+ "ParseRoutingSockaddr",
+ "ParseSocketControlMessage",
+ "ParseUnixCredentials",
+ "ParseUnixRights",
+ "PathMax",
+ "Pathconf",
+ "Pause",
+ "Pipe",
+ "Pipe2",
+ "PivotRoot",
+ "Pointer",
+ "PostQueuedCompletionStatus",
+ "Pread",
+ "Proc",
+ "ProcAttr",
+ "Process32First",
+ "Process32Next",
+ "ProcessEntry32",
+ "ProcessInformation",
+ "Protoent",
+ "PtraceAttach",
+ "PtraceCont",
+ "PtraceDetach",
+ "PtraceGetEventMsg",
+ "PtraceGetRegs",
+ "PtracePeekData",
+ "PtracePeekText",
+ "PtracePokeData",
+ "PtracePokeText",
+ "PtraceRegs",
+ "PtraceSetOptions",
+ "PtraceSetRegs",
+ "PtraceSingleStep",
+ "PtraceSyscall",
+ "Pwrite",
+ "REG_BINARY",
+ "REG_DWORD",
+ "REG_DWORD_BIG_ENDIAN",
+ "REG_DWORD_LITTLE_ENDIAN",
+ "REG_EXPAND_SZ",
+ "REG_FULL_RESOURCE_DESCRIPTOR",
+ "REG_LINK",
+ "REG_MULTI_SZ",
+ "REG_NONE",
+ "REG_QWORD",
+ "REG_QWORD_LITTLE_ENDIAN",
+ "REG_RESOURCE_LIST",
+ "REG_RESOURCE_REQUIREMENTS_LIST",
+ "REG_SZ",
+ "RLIMIT_AS",
+ "RLIMIT_CORE",
+ "RLIMIT_CPU",
+ "RLIMIT_CPU_USAGE_MONITOR",
+ "RLIMIT_DATA",
+ "RLIMIT_FSIZE",
+ "RLIMIT_NOFILE",
+ "RLIMIT_STACK",
+ "RLIM_INFINITY",
+ "RTAX_ADVMSS",
+ "RTAX_AUTHOR",
+ "RTAX_BRD",
+ "RTAX_CWND",
+ "RTAX_DST",
+ "RTAX_FEATURES",
+ "RTAX_FEATURE_ALLFRAG",
+ "RTAX_FEATURE_ECN",
+ "RTAX_FEATURE_SACK",
+ "RTAX_FEATURE_TIMESTAMP",
+ "RTAX_GATEWAY",
+ "RTAX_GENMASK",
+ "RTAX_HOPLIMIT",
+ "RTAX_IFA",
+ "RTAX_IFP",
+ "RTAX_INITCWND",
+ "RTAX_INITRWND",
+ "RTAX_LABEL",
+ "RTAX_LOCK",
+ "RTAX_MAX",
+ "RTAX_MTU",
+ "RTAX_NETMASK",
+ "RTAX_REORDERING",
+ "RTAX_RTO_MIN",
+ "RTAX_RTT",
+ "RTAX_RTTVAR",
+ "RTAX_SRC",
+ "RTAX_SRCMASK",
+ "RTAX_SSTHRESH",
+ "RTAX_TAG",
+ "RTAX_UNSPEC",
+ "RTAX_WINDOW",
+ "RTA_ALIGNTO",
+ "RTA_AUTHOR",
+ "RTA_BRD",
+ "RTA_CACHEINFO",
+ "RTA_DST",
+ "RTA_FLOW",
+ "RTA_GATEWAY",
+ "RTA_GENMASK",
+ "RTA_IFA",
+ "RTA_IFP",
+ "RTA_IIF",
+ "RTA_LABEL",
+ "RTA_MAX",
+ "RTA_METRICS",
+ "RTA_MULTIPATH",
+ "RTA_NETMASK",
+ "RTA_OIF",
+ "RTA_PREFSRC",
+ "RTA_PRIORITY",
+ "RTA_SRC",
+ "RTA_SRCMASK",
+ "RTA_TABLE",
+ "RTA_TAG",
+ "RTA_UNSPEC",
+ "RTCF_DIRECTSRC",
+ "RTCF_DOREDIRECT",
+ "RTCF_LOG",
+ "RTCF_MASQ",
+ "RTCF_NAT",
+ "RTCF_VALVE",
+ "RTF_ADDRCLASSMASK",
+ "RTF_ADDRCONF",
+ "RTF_ALLONLINK",
+ "RTF_ANNOUNCE",
+ "RTF_BLACKHOLE",
+ "RTF_BROADCAST",
+ "RTF_CACHE",
+ "RTF_CLONED",
+ "RTF_CLONING",
+ "RTF_CONDEMNED",
+ "RTF_DEFAULT",
+ "RTF_DELCLONE",
+ "RTF_DONE",
+ "RTF_DYNAMIC",
+ "RTF_FLOW",
+ "RTF_FMASK",
+ "RTF_GATEWAY",
+ "RTF_GWFLAG_COMPAT",
+ "RTF_HOST",
+ "RTF_IFREF",
+ "RTF_IFSCOPE",
+ "RTF_INTERFACE",
+ "RTF_IRTT",
+ "RTF_LINKRT",
+ "RTF_LLDATA",
+ "RTF_LLINFO",
+ "RTF_LOCAL",
+ "RTF_MASK",
+ "RTF_MODIFIED",
+ "RTF_MPATH",
+ "RTF_MPLS",
+ "RTF_MSS",
+ "RTF_MTU",
+ "RTF_MULTICAST",
+ "RTF_NAT",
+ "RTF_NOFORWARD",
+ "RTF_NONEXTHOP",
+ "RTF_NOPMTUDISC",
+ "RTF_PERMANENT_ARP",
+ "RTF_PINNED",
+ "RTF_POLICY",
+ "RTF_PRCLONING",
+ "RTF_PROTO1",
+ "RTF_PROTO2",
+ "RTF_PROTO3",
+ "RTF_PROXY",
+ "RTF_REINSTATE",
+ "RTF_REJECT",
+ "RTF_RNH_LOCKED",
+ "RTF_ROUTER",
+ "RTF_SOURCE",
+ "RTF_SRC",
+ "RTF_STATIC",
+ "RTF_STICKY",
+ "RTF_THROW",
+ "RTF_TUNNEL",
+ "RTF_UP",
+ "RTF_USETRAILERS",
+ "RTF_WASCLONED",
+ "RTF_WINDOW",
+ "RTF_XRESOLVE",
+ "RTM_ADD",
+ "RTM_BASE",
+ "RTM_CHANGE",
+ "RTM_CHGADDR",
+ "RTM_DELACTION",
+ "RTM_DELADDR",
+ "RTM_DELADDRLABEL",
+ "RTM_DELETE",
+ "RTM_DELLINK",
+ "RTM_DELMADDR",
+ "RTM_DELNEIGH",
+ "RTM_DELQDISC",
+ "RTM_DELROUTE",
+ "RTM_DELRULE",
+ "RTM_DELTCLASS",
+ "RTM_DELTFILTER",
+ "RTM_DESYNC",
+ "RTM_F_CLONED",
+ "RTM_F_EQUALIZE",
+ "RTM_F_NOTIFY",
+ "RTM_F_PREFIX",
+ "RTM_GET",
+ "RTM_GET2",
+ "RTM_GETACTION",
+ "RTM_GETADDR",
+ "RTM_GETADDRLABEL",
+ "RTM_GETANYCAST",
+ "RTM_GETDCB",
+ "RTM_GETLINK",
+ "RTM_GETMULTICAST",
+ "RTM_GETNEIGH",
+ "RTM_GETNEIGHTBL",
+ "RTM_GETQDISC",
+ "RTM_GETROUTE",
+ "RTM_GETRULE",
+ "RTM_GETTCLASS",
+ "RTM_GETTFILTER",
+ "RTM_IEEE80211",
+ "RTM_IFANNOUNCE",
+ "RTM_IFINFO",
+ "RTM_IFINFO2",
+ "RTM_LLINFO_UPD",
+ "RTM_LOCK",
+ "RTM_LOSING",
+ "RTM_MAX",
+ "RTM_MAXSIZE",
+ "RTM_MISS",
+ "RTM_NEWACTION",
+ "RTM_NEWADDR",
+ "RTM_NEWADDRLABEL",
+ "RTM_NEWLINK",
+ "RTM_NEWMADDR",
+ "RTM_NEWMADDR2",
+ "RTM_NEWNDUSEROPT",
+ "RTM_NEWNEIGH",
+ "RTM_NEWNEIGHTBL",
+ "RTM_NEWPREFIX",
+ "RTM_NEWQDISC",
+ "RTM_NEWROUTE",
+ "RTM_NEWRULE",
+ "RTM_NEWTCLASS",
+ "RTM_NEWTFILTER",
+ "RTM_NR_FAMILIES",
+ "RTM_NR_MSGTYPES",
+ "RTM_OIFINFO",
+ "RTM_OLDADD",
+ "RTM_OLDDEL",
+ "RTM_OOIFINFO",
+ "RTM_REDIRECT",
+ "RTM_RESOLVE",
+ "RTM_RTTUNIT",
+ "RTM_SETDCB",
+ "RTM_SETGATE",
+ "RTM_SETLINK",
+ "RTM_SETNEIGHTBL",
+ "RTM_VERSION",
+ "RTNH_ALIGNTO",
+ "RTNH_F_DEAD",
+ "RTNH_F_ONLINK",
+ "RTNH_F_PERVASIVE",
+ "RTNLGRP_IPV4_IFADDR",
+ "RTNLGRP_IPV4_MROUTE",
+ "RTNLGRP_IPV4_ROUTE",
+ "RTNLGRP_IPV4_RULE",
+ "RTNLGRP_IPV6_IFADDR",
+ "RTNLGRP_IPV6_IFINFO",
+ "RTNLGRP_IPV6_MROUTE",
+ "RTNLGRP_IPV6_PREFIX",
+ "RTNLGRP_IPV6_ROUTE",
+ "RTNLGRP_IPV6_RULE",
+ "RTNLGRP_LINK",
+ "RTNLGRP_ND_USEROPT",
+ "RTNLGRP_NEIGH",
+ "RTNLGRP_NONE",
+ "RTNLGRP_NOTIFY",
+ "RTNLGRP_TC",
+ "RTN_ANYCAST",
+ "RTN_BLACKHOLE",
+ "RTN_BROADCAST",
+ "RTN_LOCAL",
+ "RTN_MAX",
+ "RTN_MULTICAST",
+ "RTN_NAT",
+ "RTN_PROHIBIT",
+ "RTN_THROW",
+ "RTN_UNICAST",
+ "RTN_UNREACHABLE",
+ "RTN_UNSPEC",
+ "RTN_XRESOLVE",
+ "RTPROT_BIRD",
+ "RTPROT_BOOT",
+ "RTPROT_DHCP",
+ "RTPROT_DNROUTED",
+ "RTPROT_GATED",
+ "RTPROT_KERNEL",
+ "RTPROT_MRT",
+ "RTPROT_NTK",
+ "RTPROT_RA",
+ "RTPROT_REDIRECT",
+ "RTPROT_STATIC",
+ "RTPROT_UNSPEC",
+ "RTPROT_XORP",
+ "RTPROT_ZEBRA",
+ "RTV_EXPIRE",
+ "RTV_HOPCOUNT",
+ "RTV_MTU",
+ "RTV_RPIPE",
+ "RTV_RTT",
+ "RTV_RTTVAR",
+ "RTV_SPIPE",
+ "RTV_SSTHRESH",
+ "RTV_WEIGHT",
+ "RT_CACHING_CONTEXT",
+ "RT_CLASS_DEFAULT",
+ "RT_CLASS_LOCAL",
+ "RT_CLASS_MAIN",
+ "RT_CLASS_MAX",
+ "RT_CLASS_UNSPEC",
+ "RT_DEFAULT_FIB",
+ "RT_NORTREF",
+ "RT_SCOPE_HOST",
+ "RT_SCOPE_LINK",
+ "RT_SCOPE_NOWHERE",
+ "RT_SCOPE_SITE",
+ "RT_SCOPE_UNIVERSE",
+ "RT_TABLEID_MAX",
+ "RT_TABLE_COMPAT",
+ "RT_TABLE_DEFAULT",
+ "RT_TABLE_LOCAL",
+ "RT_TABLE_MAIN",
+ "RT_TABLE_MAX",
+ "RT_TABLE_UNSPEC",
+ "RUSAGE_CHILDREN",
+ "RUSAGE_SELF",
+ "RUSAGE_THREAD",
+ "Radvisory_t",
+ "RawConn",
+ "RawSockaddr",
+ "RawSockaddrAny",
+ "RawSockaddrDatalink",
+ "RawSockaddrInet4",
+ "RawSockaddrInet6",
+ "RawSockaddrLinklayer",
+ "RawSockaddrNetlink",
+ "RawSockaddrUnix",
+ "RawSyscall",
+ "RawSyscall6",
+ "Read",
+ "ReadConsole",
+ "ReadDirectoryChanges",
+ "ReadDirent",
+ "ReadFile",
+ "Readlink",
+ "Reboot",
+ "Recvfrom",
+ "Recvmsg",
+ "RegCloseKey",
+ "RegEnumKeyEx",
+ "RegOpenKeyEx",
+ "RegQueryInfoKey",
+ "RegQueryValueEx",
+ "RemoveDirectory",
+ "Removexattr",
+ "Rename",
+ "Renameat",
+ "Revoke",
+ "Rlimit",
+ "Rmdir",
+ "RouteMessage",
+ "RouteRIB",
+ "RoutingMessage",
+ "RtAttr",
+ "RtGenmsg",
+ "RtMetrics",
+ "RtMsg",
+ "RtMsghdr",
+ "RtNexthop",
+ "Rusage",
+ "SCM_BINTIME",
+ "SCM_CREDENTIALS",
+ "SCM_CREDS",
+ "SCM_RIGHTS",
+ "SCM_TIMESTAMP",
+ "SCM_TIMESTAMPING",
+ "SCM_TIMESTAMPNS",
+ "SCM_TIMESTAMP_MONOTONIC",
+ "SHUT_RD",
+ "SHUT_RDWR",
+ "SHUT_WR",
+ "SID",
+ "SIDAndAttributes",
+ "SIGABRT",
+ "SIGALRM",
+ "SIGBUS",
+ "SIGCHLD",
+ "SIGCLD",
+ "SIGCONT",
+ "SIGEMT",
+ "SIGFPE",
+ "SIGHUP",
+ "SIGILL",
+ "SIGINFO",
+ "SIGINT",
+ "SIGIO",
+ "SIGIOT",
+ "SIGKILL",
+ "SIGLIBRT",
+ "SIGLWP",
+ "SIGPIPE",
+ "SIGPOLL",
+ "SIGPROF",
+ "SIGPWR",
+ "SIGQUIT",
+ "SIGSEGV",
+ "SIGSTKFLT",
+ "SIGSTOP",
+ "SIGSYS",
+ "SIGTERM",
+ "SIGTHR",
+ "SIGTRAP",
+ "SIGTSTP",
+ "SIGTTIN",
+ "SIGTTOU",
+ "SIGUNUSED",
+ "SIGURG",
+ "SIGUSR1",
+ "SIGUSR2",
+ "SIGVTALRM",
+ "SIGWINCH",
+ "SIGXCPU",
+ "SIGXFSZ",
+ "SIOCADDDLCI",
+ "SIOCADDMULTI",
+ "SIOCADDRT",
+ "SIOCAIFADDR",
+ "SIOCAIFGROUP",
+ "SIOCALIFADDR",
+ "SIOCARPIPLL",
+ "SIOCATMARK",
+ "SIOCAUTOADDR",
+ "SIOCAUTONETMASK",
+ "SIOCBRDGADD",
+ "SIOCBRDGADDS",
+ "SIOCBRDGARL",
+ "SIOCBRDGDADDR",
+ "SIOCBRDGDEL",
+ "SIOCBRDGDELS",
+ "SIOCBRDGFLUSH",
+ "SIOCBRDGFRL",
+ "SIOCBRDGGCACHE",
+ "SIOCBRDGGFD",
+ "SIOCBRDGGHT",
+ "SIOCBRDGGIFFLGS",
+ "SIOCBRDGGMA",
+ "SIOCBRDGGPARAM",
+ "SIOCBRDGGPRI",
+ "SIOCBRDGGRL",
+ "SIOCBRDGGSIFS",
+ "SIOCBRDGGTO",
+ "SIOCBRDGIFS",
+ "SIOCBRDGRTS",
+ "SIOCBRDGSADDR",
+ "SIOCBRDGSCACHE",
+ "SIOCBRDGSFD",
+ "SIOCBRDGSHT",
+ "SIOCBRDGSIFCOST",
+ "SIOCBRDGSIFFLGS",
+ "SIOCBRDGSIFPRIO",
+ "SIOCBRDGSMA",
+ "SIOCBRDGSPRI",
+ "SIOCBRDGSPROTO",
+ "SIOCBRDGSTO",
+ "SIOCBRDGSTXHC",
+ "SIOCDARP",
+ "SIOCDELDLCI",
+ "SIOCDELMULTI",
+ "SIOCDELRT",
+ "SIOCDEVPRIVATE",
+ "SIOCDIFADDR",
+ "SIOCDIFGROUP",
+ "SIOCDIFPHYADDR",
+ "SIOCDLIFADDR",
+ "SIOCDRARP",
+ "SIOCGARP",
+ "SIOCGDRVSPEC",
+ "SIOCGETKALIVE",
+ "SIOCGETLABEL",
+ "SIOCGETPFLOW",
+ "SIOCGETPFSYNC",
+ "SIOCGETSGCNT",
+ "SIOCGETVIFCNT",
+ "SIOCGETVLAN",
+ "SIOCGHIWAT",
+ "SIOCGIFADDR",
+ "SIOCGIFADDRPREF",
+ "SIOCGIFALIAS",
+ "SIOCGIFALTMTU",
+ "SIOCGIFASYNCMAP",
+ "SIOCGIFBOND",
+ "SIOCGIFBR",
+ "SIOCGIFBRDADDR",
+ "SIOCGIFCAP",
+ "SIOCGIFCONF",
+ "SIOCGIFCOUNT",
+ "SIOCGIFDATA",
+ "SIOCGIFDESCR",
+ "SIOCGIFDEVMTU",
+ "SIOCGIFDLT",
+ "SIOCGIFDSTADDR",
+ "SIOCGIFENCAP",
+ "SIOCGIFFIB",
+ "SIOCGIFFLAGS",
+ "SIOCGIFGATTR",
+ "SIOCGIFGENERIC",
+ "SIOCGIFGMEMB",
+ "SIOCGIFGROUP",
+ "SIOCGIFHARDMTU",
+ "SIOCGIFHWADDR",
+ "SIOCGIFINDEX",
+ "SIOCGIFKPI",
+ "SIOCGIFMAC",
+ "SIOCGIFMAP",
+ "SIOCGIFMEDIA",
+ "SIOCGIFMEM",
+ "SIOCGIFMETRIC",
+ "SIOCGIFMTU",
+ "SIOCGIFNAME",
+ "SIOCGIFNETMASK",
+ "SIOCGIFPDSTADDR",
+ "SIOCGIFPFLAGS",
+ "SIOCGIFPHYS",
+ "SIOCGIFPRIORITY",
+ "SIOCGIFPSRCADDR",
+ "SIOCGIFRDOMAIN",
+ "SIOCGIFRTLABEL",
+ "SIOCGIFSLAVE",
+ "SIOCGIFSTATUS",
+ "SIOCGIFTIMESLOT",
+ "SIOCGIFTXQLEN",
+ "SIOCGIFVLAN",
+ "SIOCGIFWAKEFLAGS",
+ "SIOCGIFXFLAGS",
+ "SIOCGLIFADDR",
+ "SIOCGLIFPHYADDR",
+ "SIOCGLIFPHYRTABLE",
+ "SIOCGLIFPHYTTL",
+ "SIOCGLINKSTR",
+ "SIOCGLOWAT",
+ "SIOCGPGRP",
+ "SIOCGPRIVATE_0",
+ "SIOCGPRIVATE_1",
+ "SIOCGRARP",
+ "SIOCGSPPPPARAMS",
+ "SIOCGSTAMP",
+ "SIOCGSTAMPNS",
+ "SIOCGVH",
+ "SIOCGVNETID",
+ "SIOCIFCREATE",
+ "SIOCIFCREATE2",
+ "SIOCIFDESTROY",
+ "SIOCIFGCLONERS",
+ "SIOCINITIFADDR",
+ "SIOCPROTOPRIVATE",
+ "SIOCRSLVMULTI",
+ "SIOCRTMSG",
+ "SIOCSARP",
+ "SIOCSDRVSPEC",
+ "SIOCSETKALIVE",
+ "SIOCSETLABEL",
+ "SIOCSETPFLOW",
+ "SIOCSETPFSYNC",
+ "SIOCSETVLAN",
+ "SIOCSHIWAT",
+ "SIOCSIFADDR",
+ "SIOCSIFADDRPREF",
+ "SIOCSIFALTMTU",
+ "SIOCSIFASYNCMAP",
+ "SIOCSIFBOND",
+ "SIOCSIFBR",
+ "SIOCSIFBRDADDR",
+ "SIOCSIFCAP",
+ "SIOCSIFDESCR",
+ "SIOCSIFDSTADDR",
+ "SIOCSIFENCAP",
+ "SIOCSIFFIB",
+ "SIOCSIFFLAGS",
+ "SIOCSIFGATTR",
+ "SIOCSIFGENERIC",
+ "SIOCSIFHWADDR",
+ "SIOCSIFHWBROADCAST",
+ "SIOCSIFKPI",
+ "SIOCSIFLINK",
+ "SIOCSIFLLADDR",
+ "SIOCSIFMAC",
+ "SIOCSIFMAP",
+ "SIOCSIFMEDIA",
+ "SIOCSIFMEM",
+ "SIOCSIFMETRIC",
+ "SIOCSIFMTU",
+ "SIOCSIFNAME",
+ "SIOCSIFNETMASK",
+ "SIOCSIFPFLAGS",
+ "SIOCSIFPHYADDR",
+ "SIOCSIFPHYS",
+ "SIOCSIFPRIORITY",
+ "SIOCSIFRDOMAIN",
+ "SIOCSIFRTLABEL",
+ "SIOCSIFRVNET",
+ "SIOCSIFSLAVE",
+ "SIOCSIFTIMESLOT",
+ "SIOCSIFTXQLEN",
+ "SIOCSIFVLAN",
+ "SIOCSIFVNET",
+ "SIOCSIFXFLAGS",
+ "SIOCSLIFPHYADDR",
+ "SIOCSLIFPHYRTABLE",
+ "SIOCSLIFPHYTTL",
+ "SIOCSLINKSTR",
+ "SIOCSLOWAT",
+ "SIOCSPGRP",
+ "SIOCSRARP",
+ "SIOCSSPPPPARAMS",
+ "SIOCSVH",
+ "SIOCSVNETID",
+ "SIOCZIFDATA",
+ "SIO_GET_EXTENSION_FUNCTION_POINTER",
+ "SIO_GET_INTERFACE_LIST",
+ "SIO_KEEPALIVE_VALS",
+ "SIO_UDP_CONNRESET",
+ "SOCK_CLOEXEC",
+ "SOCK_DCCP",
+ "SOCK_DGRAM",
+ "SOCK_FLAGS_MASK",
+ "SOCK_MAXADDRLEN",
+ "SOCK_NONBLOCK",
+ "SOCK_NOSIGPIPE",
+ "SOCK_PACKET",
+ "SOCK_RAW",
+ "SOCK_RDM",
+ "SOCK_SEQPACKET",
+ "SOCK_STREAM",
+ "SOL_AAL",
+ "SOL_ATM",
+ "SOL_DECNET",
+ "SOL_ICMPV6",
+ "SOL_IP",
+ "SOL_IPV6",
+ "SOL_IRDA",
+ "SOL_PACKET",
+ "SOL_RAW",
+ "SOL_SOCKET",
+ "SOL_TCP",
+ "SOL_X25",
+ "SOMAXCONN",
+ "SO_ACCEPTCONN",
+ "SO_ACCEPTFILTER",
+ "SO_ATTACH_FILTER",
+ "SO_BINDANY",
+ "SO_BINDTODEVICE",
+ "SO_BINTIME",
+ "SO_BROADCAST",
+ "SO_BSDCOMPAT",
+ "SO_DEBUG",
+ "SO_DETACH_FILTER",
+ "SO_DOMAIN",
+ "SO_DONTROUTE",
+ "SO_DONTTRUNC",
+ "SO_ERROR",
+ "SO_KEEPALIVE",
+ "SO_LABEL",
+ "SO_LINGER",
+ "SO_LINGER_SEC",
+ "SO_LISTENINCQLEN",
+ "SO_LISTENQLEN",
+ "SO_LISTENQLIMIT",
+ "SO_MARK",
+ "SO_NETPROC",
+ "SO_NKE",
+ "SO_NOADDRERR",
+ "SO_NOHEADER",
+ "SO_NOSIGPIPE",
+ "SO_NOTIFYCONFLICT",
+ "SO_NO_CHECK",
+ "SO_NO_DDP",
+ "SO_NO_OFFLOAD",
+ "SO_NP_EXTENSIONS",
+ "SO_NREAD",
+ "SO_NUMRCVPKT",
+ "SO_NWRITE",
+ "SO_OOBINLINE",
+ "SO_OVERFLOWED",
+ "SO_PASSCRED",
+ "SO_PASSSEC",
+ "SO_PEERCRED",
+ "SO_PEERLABEL",
+ "SO_PEERNAME",
+ "SO_PEERSEC",
+ "SO_PRIORITY",
+ "SO_PROTOCOL",
+ "SO_PROTOTYPE",
+ "SO_RANDOMPORT",
+ "SO_RCVBUF",
+ "SO_RCVBUFFORCE",
+ "SO_RCVLOWAT",
+ "SO_RCVTIMEO",
+ "SO_RESTRICTIONS",
+ "SO_RESTRICT_DENYIN",
+ "SO_RESTRICT_DENYOUT",
+ "SO_RESTRICT_DENYSET",
+ "SO_REUSEADDR",
+ "SO_REUSEPORT",
+ "SO_REUSESHAREUID",
+ "SO_RTABLE",
+ "SO_RXQ_OVFL",
+ "SO_SECURITY_AUTHENTICATION",
+ "SO_SECURITY_ENCRYPTION_NETWORK",
+ "SO_SECURITY_ENCRYPTION_TRANSPORT",
+ "SO_SETFIB",
+ "SO_SNDBUF",
+ "SO_SNDBUFFORCE",
+ "SO_SNDLOWAT",
+ "SO_SNDTIMEO",
+ "SO_SPLICE",
+ "SO_TIMESTAMP",
+ "SO_TIMESTAMPING",
+ "SO_TIMESTAMPNS",
+ "SO_TIMESTAMP_MONOTONIC",
+ "SO_TYPE",
+ "SO_UPCALLCLOSEWAIT",
+ "SO_UPDATE_ACCEPT_CONTEXT",
+ "SO_UPDATE_CONNECT_CONTEXT",
+ "SO_USELOOPBACK",
+ "SO_USER_COOKIE",
+ "SO_VENDOR",
+ "SO_WANTMORE",
+ "SO_WANTOOBFLAG",
+ "SSLExtraCertChainPolicyPara",
+ "STANDARD_RIGHTS_ALL",
+ "STANDARD_RIGHTS_EXECUTE",
+ "STANDARD_RIGHTS_READ",
+ "STANDARD_RIGHTS_REQUIRED",
+ "STANDARD_RIGHTS_WRITE",
+ "STARTF_USESHOWWINDOW",
+ "STARTF_USESTDHANDLES",
+ "STD_ERROR_HANDLE",
+ "STD_INPUT_HANDLE",
+ "STD_OUTPUT_HANDLE",
+ "SUBLANG_ENGLISH_US",
+ "SW_FORCEMINIMIZE",
+ "SW_HIDE",
+ "SW_MAXIMIZE",
+ "SW_MINIMIZE",
+ "SW_NORMAL",
+ "SW_RESTORE",
+ "SW_SHOW",
+ "SW_SHOWDEFAULT",
+ "SW_SHOWMAXIMIZED",
+ "SW_SHOWMINIMIZED",
+ "SW_SHOWMINNOACTIVE",
+ "SW_SHOWNA",
+ "SW_SHOWNOACTIVATE",
+ "SW_SHOWNORMAL",
+ "SYMBOLIC_LINK_FLAG_DIRECTORY",
+ "SYNCHRONIZE",
+ "SYSCTL_VERSION",
+ "SYSCTL_VERS_0",
+ "SYSCTL_VERS_1",
+ "SYSCTL_VERS_MASK",
+ "SYS_ABORT2",
+ "SYS_ACCEPT",
+ "SYS_ACCEPT4",
+ "SYS_ACCEPT_NOCANCEL",
+ "SYS_ACCESS",
+ "SYS_ACCESS_EXTENDED",
+ "SYS_ACCT",
+ "SYS_ADD_KEY",
+ "SYS_ADD_PROFIL",
+ "SYS_ADJFREQ",
+ "SYS_ADJTIME",
+ "SYS_ADJTIMEX",
+ "SYS_AFS_SYSCALL",
+ "SYS_AIO_CANCEL",
+ "SYS_AIO_ERROR",
+ "SYS_AIO_FSYNC",
+ "SYS_AIO_MLOCK",
+ "SYS_AIO_READ",
+ "SYS_AIO_RETURN",
+ "SYS_AIO_SUSPEND",
+ "SYS_AIO_SUSPEND_NOCANCEL",
+ "SYS_AIO_WAITCOMPLETE",
+ "SYS_AIO_WRITE",
+ "SYS_ALARM",
+ "SYS_ARCH_PRCTL",
+ "SYS_ARM_FADVISE64_64",
+ "SYS_ARM_SYNC_FILE_RANGE",
+ "SYS_ATGETMSG",
+ "SYS_ATPGETREQ",
+ "SYS_ATPGETRSP",
+ "SYS_ATPSNDREQ",
+ "SYS_ATPSNDRSP",
+ "SYS_ATPUTMSG",
+ "SYS_ATSOCKET",
+ "SYS_AUDIT",
+ "SYS_AUDITCTL",
+ "SYS_AUDITON",
+ "SYS_AUDIT_SESSION_JOIN",
+ "SYS_AUDIT_SESSION_PORT",
+ "SYS_AUDIT_SESSION_SELF",
+ "SYS_BDFLUSH",
+ "SYS_BIND",
+ "SYS_BINDAT",
+ "SYS_BREAK",
+ "SYS_BRK",
+ "SYS_BSDTHREAD_CREATE",
+ "SYS_BSDTHREAD_REGISTER",
+ "SYS_BSDTHREAD_TERMINATE",
+ "SYS_CAPGET",
+ "SYS_CAPSET",
+ "SYS_CAP_ENTER",
+ "SYS_CAP_FCNTLS_GET",
+ "SYS_CAP_FCNTLS_LIMIT",
+ "SYS_CAP_GETMODE",
+ "SYS_CAP_GETRIGHTS",
+ "SYS_CAP_IOCTLS_GET",
+ "SYS_CAP_IOCTLS_LIMIT",
+ "SYS_CAP_NEW",
+ "SYS_CAP_RIGHTS_GET",
+ "SYS_CAP_RIGHTS_LIMIT",
+ "SYS_CHDIR",
+ "SYS_CHFLAGS",
+ "SYS_CHFLAGSAT",
+ "SYS_CHMOD",
+ "SYS_CHMOD_EXTENDED",
+ "SYS_CHOWN",
+ "SYS_CHOWN32",
+ "SYS_CHROOT",
+ "SYS_CHUD",
+ "SYS_CLOCK_ADJTIME",
+ "SYS_CLOCK_GETCPUCLOCKID2",
+ "SYS_CLOCK_GETRES",
+ "SYS_CLOCK_GETTIME",
+ "SYS_CLOCK_NANOSLEEP",
+ "SYS_CLOCK_SETTIME",
+ "SYS_CLONE",
+ "SYS_CLOSE",
+ "SYS_CLOSEFROM",
+ "SYS_CLOSE_NOCANCEL",
+ "SYS_CONNECT",
+ "SYS_CONNECTAT",
+ "SYS_CONNECT_NOCANCEL",
+ "SYS_COPYFILE",
+ "SYS_CPUSET",
+ "SYS_CPUSET_GETAFFINITY",
+ "SYS_CPUSET_GETID",
+ "SYS_CPUSET_SETAFFINITY",
+ "SYS_CPUSET_SETID",
+ "SYS_CREAT",
+ "SYS_CREATE_MODULE",
+ "SYS_CSOPS",
+ "SYS_CSOPS_AUDITTOKEN",
+ "SYS_DELETE",
+ "SYS_DELETE_MODULE",
+ "SYS_DUP",
+ "SYS_DUP2",
+ "SYS_DUP3",
+ "SYS_EACCESS",
+ "SYS_EPOLL_CREATE",
+ "SYS_EPOLL_CREATE1",
+ "SYS_EPOLL_CTL",
+ "SYS_EPOLL_CTL_OLD",
+ "SYS_EPOLL_PWAIT",
+ "SYS_EPOLL_WAIT",
+ "SYS_EPOLL_WAIT_OLD",
+ "SYS_EVENTFD",
+ "SYS_EVENTFD2",
+ "SYS_EXCHANGEDATA",
+ "SYS_EXECVE",
+ "SYS_EXIT",
+ "SYS_EXIT_GROUP",
+ "SYS_EXTATTRCTL",
+ "SYS_EXTATTR_DELETE_FD",
+ "SYS_EXTATTR_DELETE_FILE",
+ "SYS_EXTATTR_DELETE_LINK",
+ "SYS_EXTATTR_GET_FD",
+ "SYS_EXTATTR_GET_FILE",
+ "SYS_EXTATTR_GET_LINK",
+ "SYS_EXTATTR_LIST_FD",
+ "SYS_EXTATTR_LIST_FILE",
+ "SYS_EXTATTR_LIST_LINK",
+ "SYS_EXTATTR_SET_FD",
+ "SYS_EXTATTR_SET_FILE",
+ "SYS_EXTATTR_SET_LINK",
+ "SYS_FACCESSAT",
+ "SYS_FADVISE64",
+ "SYS_FADVISE64_64",
+ "SYS_FALLOCATE",
+ "SYS_FANOTIFY_INIT",
+ "SYS_FANOTIFY_MARK",
+ "SYS_FCHDIR",
+ "SYS_FCHFLAGS",
+ "SYS_FCHMOD",
+ "SYS_FCHMODAT",
+ "SYS_FCHMOD_EXTENDED",
+ "SYS_FCHOWN",
+ "SYS_FCHOWN32",
+ "SYS_FCHOWNAT",
+ "SYS_FCHROOT",
+ "SYS_FCNTL",
+ "SYS_FCNTL64",
+ "SYS_FCNTL_NOCANCEL",
+ "SYS_FDATASYNC",
+ "SYS_FEXECVE",
+ "SYS_FFCLOCK_GETCOUNTER",
+ "SYS_FFCLOCK_GETESTIMATE",
+ "SYS_FFCLOCK_SETESTIMATE",
+ "SYS_FFSCTL",
+ "SYS_FGETATTRLIST",
+ "SYS_FGETXATTR",
+ "SYS_FHOPEN",
+ "SYS_FHSTAT",
+ "SYS_FHSTATFS",
+ "SYS_FILEPORT_MAKEFD",
+ "SYS_FILEPORT_MAKEPORT",
+ "SYS_FKTRACE",
+ "SYS_FLISTXATTR",
+ "SYS_FLOCK",
+ "SYS_FORK",
+ "SYS_FPATHCONF",
+ "SYS_FREEBSD6_FTRUNCATE",
+ "SYS_FREEBSD6_LSEEK",
+ "SYS_FREEBSD6_MMAP",
+ "SYS_FREEBSD6_PREAD",
+ "SYS_FREEBSD6_PWRITE",
+ "SYS_FREEBSD6_TRUNCATE",
+ "SYS_FREMOVEXATTR",
+ "SYS_FSCTL",
+ "SYS_FSETATTRLIST",
+ "SYS_FSETXATTR",
+ "SYS_FSGETPATH",
+ "SYS_FSTAT",
+ "SYS_FSTAT64",
+ "SYS_FSTAT64_EXTENDED",
+ "SYS_FSTATAT",
+ "SYS_FSTATAT64",
+ "SYS_FSTATFS",
+ "SYS_FSTATFS64",
+ "SYS_FSTATV",
+ "SYS_FSTATVFS1",
+ "SYS_FSTAT_EXTENDED",
+ "SYS_FSYNC",
+ "SYS_FSYNC_NOCANCEL",
+ "SYS_FSYNC_RANGE",
+ "SYS_FTIME",
+ "SYS_FTRUNCATE",
+ "SYS_FTRUNCATE64",
+ "SYS_FUTEX",
+ "SYS_FUTIMENS",
+ "SYS_FUTIMES",
+ "SYS_FUTIMESAT",
+ "SYS_GETATTRLIST",
+ "SYS_GETAUDIT",
+ "SYS_GETAUDIT_ADDR",
+ "SYS_GETAUID",
+ "SYS_GETCONTEXT",
+ "SYS_GETCPU",
+ "SYS_GETCWD",
+ "SYS_GETDENTS",
+ "SYS_GETDENTS64",
+ "SYS_GETDIRENTRIES",
+ "SYS_GETDIRENTRIES64",
+ "SYS_GETDIRENTRIESATTR",
+ "SYS_GETDTABLECOUNT",
+ "SYS_GETDTABLESIZE",
+ "SYS_GETEGID",
+ "SYS_GETEGID32",
+ "SYS_GETEUID",
+ "SYS_GETEUID32",
+ "SYS_GETFH",
+ "SYS_GETFSSTAT",
+ "SYS_GETFSSTAT64",
+ "SYS_GETGID",
+ "SYS_GETGID32",
+ "SYS_GETGROUPS",
+ "SYS_GETGROUPS32",
+ "SYS_GETHOSTUUID",
+ "SYS_GETITIMER",
+ "SYS_GETLCID",
+ "SYS_GETLOGIN",
+ "SYS_GETLOGINCLASS",
+ "SYS_GETPEERNAME",
+ "SYS_GETPGID",
+ "SYS_GETPGRP",
+ "SYS_GETPID",
+ "SYS_GETPMSG",
+ "SYS_GETPPID",
+ "SYS_GETPRIORITY",
+ "SYS_GETRESGID",
+ "SYS_GETRESGID32",
+ "SYS_GETRESUID",
+ "SYS_GETRESUID32",
+ "SYS_GETRLIMIT",
+ "SYS_GETRTABLE",
+ "SYS_GETRUSAGE",
+ "SYS_GETSGROUPS",
+ "SYS_GETSID",
+ "SYS_GETSOCKNAME",
+ "SYS_GETSOCKOPT",
+ "SYS_GETTHRID",
+ "SYS_GETTID",
+ "SYS_GETTIMEOFDAY",
+ "SYS_GETUID",
+ "SYS_GETUID32",
+ "SYS_GETVFSSTAT",
+ "SYS_GETWGROUPS",
+ "SYS_GETXATTR",
+ "SYS_GET_KERNEL_SYMS",
+ "SYS_GET_MEMPOLICY",
+ "SYS_GET_ROBUST_LIST",
+ "SYS_GET_THREAD_AREA",
+ "SYS_GSSD_SYSCALL",
+ "SYS_GTTY",
+ "SYS_IDENTITYSVC",
+ "SYS_IDLE",
+ "SYS_INITGROUPS",
+ "SYS_INIT_MODULE",
+ "SYS_INOTIFY_ADD_WATCH",
+ "SYS_INOTIFY_INIT",
+ "SYS_INOTIFY_INIT1",
+ "SYS_INOTIFY_RM_WATCH",
+ "SYS_IOCTL",
+ "SYS_IOPERM",
+ "SYS_IOPL",
+ "SYS_IOPOLICYSYS",
+ "SYS_IOPRIO_GET",
+ "SYS_IOPRIO_SET",
+ "SYS_IO_CANCEL",
+ "SYS_IO_DESTROY",
+ "SYS_IO_GETEVENTS",
+ "SYS_IO_SETUP",
+ "SYS_IO_SUBMIT",
+ "SYS_IPC",
+ "SYS_ISSETUGID",
+ "SYS_JAIL",
+ "SYS_JAIL_ATTACH",
+ "SYS_JAIL_GET",
+ "SYS_JAIL_REMOVE",
+ "SYS_JAIL_SET",
+ "SYS_KAS_INFO",
+ "SYS_KDEBUG_TRACE",
+ "SYS_KENV",
+ "SYS_KEVENT",
+ "SYS_KEVENT64",
+ "SYS_KEXEC_LOAD",
+ "SYS_KEYCTL",
+ "SYS_KILL",
+ "SYS_KLDFIND",
+ "SYS_KLDFIRSTMOD",
+ "SYS_KLDLOAD",
+ "SYS_KLDNEXT",
+ "SYS_KLDSTAT",
+ "SYS_KLDSYM",
+ "SYS_KLDUNLOAD",
+ "SYS_KLDUNLOADF",
+ "SYS_KMQ_NOTIFY",
+ "SYS_KMQ_OPEN",
+ "SYS_KMQ_SETATTR",
+ "SYS_KMQ_TIMEDRECEIVE",
+ "SYS_KMQ_TIMEDSEND",
+ "SYS_KMQ_UNLINK",
+ "SYS_KQUEUE",
+ "SYS_KQUEUE1",
+ "SYS_KSEM_CLOSE",
+ "SYS_KSEM_DESTROY",
+ "SYS_KSEM_GETVALUE",
+ "SYS_KSEM_INIT",
+ "SYS_KSEM_OPEN",
+ "SYS_KSEM_POST",
+ "SYS_KSEM_TIMEDWAIT",
+ "SYS_KSEM_TRYWAIT",
+ "SYS_KSEM_UNLINK",
+ "SYS_KSEM_WAIT",
+ "SYS_KTIMER_CREATE",
+ "SYS_KTIMER_DELETE",
+ "SYS_KTIMER_GETOVERRUN",
+ "SYS_KTIMER_GETTIME",
+ "SYS_KTIMER_SETTIME",
+ "SYS_KTRACE",
+ "SYS_LCHFLAGS",
+ "SYS_LCHMOD",
+ "SYS_LCHOWN",
+ "SYS_LCHOWN32",
+ "SYS_LEDGER",
+ "SYS_LGETFH",
+ "SYS_LGETXATTR",
+ "SYS_LINK",
+ "SYS_LINKAT",
+ "SYS_LIO_LISTIO",
+ "SYS_LISTEN",
+ "SYS_LISTXATTR",
+ "SYS_LLISTXATTR",
+ "SYS_LOCK",
+ "SYS_LOOKUP_DCOOKIE",
+ "SYS_LPATHCONF",
+ "SYS_LREMOVEXATTR",
+ "SYS_LSEEK",
+ "SYS_LSETXATTR",
+ "SYS_LSTAT",
+ "SYS_LSTAT64",
+ "SYS_LSTAT64_EXTENDED",
+ "SYS_LSTATV",
+ "SYS_LSTAT_EXTENDED",
+ "SYS_LUTIMES",
+ "SYS_MAC_SYSCALL",
+ "SYS_MADVISE",
+ "SYS_MADVISE1",
+ "SYS_MAXSYSCALL",
+ "SYS_MBIND",
+ "SYS_MIGRATE_PAGES",
+ "SYS_MINCORE",
+ "SYS_MINHERIT",
+ "SYS_MKCOMPLEX",
+ "SYS_MKDIR",
+ "SYS_MKDIRAT",
+ "SYS_MKDIR_EXTENDED",
+ "SYS_MKFIFO",
+ "SYS_MKFIFOAT",
+ "SYS_MKFIFO_EXTENDED",
+ "SYS_MKNOD",
+ "SYS_MKNODAT",
+ "SYS_MLOCK",
+ "SYS_MLOCKALL",
+ "SYS_MMAP",
+ "SYS_MMAP2",
+ "SYS_MODCTL",
+ "SYS_MODFIND",
+ "SYS_MODFNEXT",
+ "SYS_MODIFY_LDT",
+ "SYS_MODNEXT",
+ "SYS_MODSTAT",
+ "SYS_MODWATCH",
+ "SYS_MOUNT",
+ "SYS_MOVE_PAGES",
+ "SYS_MPROTECT",
+ "SYS_MPX",
+ "SYS_MQUERY",
+ "SYS_MQ_GETSETATTR",
+ "SYS_MQ_NOTIFY",
+ "SYS_MQ_OPEN",
+ "SYS_MQ_TIMEDRECEIVE",
+ "SYS_MQ_TIMEDSEND",
+ "SYS_MQ_UNLINK",
+ "SYS_MREMAP",
+ "SYS_MSGCTL",
+ "SYS_MSGGET",
+ "SYS_MSGRCV",
+ "SYS_MSGRCV_NOCANCEL",
+ "SYS_MSGSND",
+ "SYS_MSGSND_NOCANCEL",
+ "SYS_MSGSYS",
+ "SYS_MSYNC",
+ "SYS_MSYNC_NOCANCEL",
+ "SYS_MUNLOCK",
+ "SYS_MUNLOCKALL",
+ "SYS_MUNMAP",
+ "SYS_NAME_TO_HANDLE_AT",
+ "SYS_NANOSLEEP",
+ "SYS_NEWFSTATAT",
+ "SYS_NFSCLNT",
+ "SYS_NFSSERVCTL",
+ "SYS_NFSSVC",
+ "SYS_NFSTAT",
+ "SYS_NICE",
+ "SYS_NLM_SYSCALL",
+ "SYS_NLSTAT",
+ "SYS_NMOUNT",
+ "SYS_NSTAT",
+ "SYS_NTP_ADJTIME",
+ "SYS_NTP_GETTIME",
+ "SYS_NUMA_GETAFFINITY",
+ "SYS_NUMA_SETAFFINITY",
+ "SYS_OABI_SYSCALL_BASE",
+ "SYS_OBREAK",
+ "SYS_OLDFSTAT",
+ "SYS_OLDLSTAT",
+ "SYS_OLDOLDUNAME",
+ "SYS_OLDSTAT",
+ "SYS_OLDUNAME",
+ "SYS_OPEN",
+ "SYS_OPENAT",
+ "SYS_OPENBSD_POLL",
+ "SYS_OPEN_BY_HANDLE_AT",
+ "SYS_OPEN_DPROTECTED_NP",
+ "SYS_OPEN_EXTENDED",
+ "SYS_OPEN_NOCANCEL",
+ "SYS_OVADVISE",
+ "SYS_PACCEPT",
+ "SYS_PATHCONF",
+ "SYS_PAUSE",
+ "SYS_PCICONFIG_IOBASE",
+ "SYS_PCICONFIG_READ",
+ "SYS_PCICONFIG_WRITE",
+ "SYS_PDFORK",
+ "SYS_PDGETPID",
+ "SYS_PDKILL",
+ "SYS_PERF_EVENT_OPEN",
+ "SYS_PERSONALITY",
+ "SYS_PID_HIBERNATE",
+ "SYS_PID_RESUME",
+ "SYS_PID_SHUTDOWN_SOCKETS",
+ "SYS_PID_SUSPEND",
+ "SYS_PIPE",
+ "SYS_PIPE2",
+ "SYS_PIVOT_ROOT",
+ "SYS_PMC_CONTROL",
+ "SYS_PMC_GET_INFO",
+ "SYS_POLL",
+ "SYS_POLLTS",
+ "SYS_POLL_NOCANCEL",
+ "SYS_POSIX_FADVISE",
+ "SYS_POSIX_FALLOCATE",
+ "SYS_POSIX_OPENPT",
+ "SYS_POSIX_SPAWN",
+ "SYS_PPOLL",
+ "SYS_PRCTL",
+ "SYS_PREAD",
+ "SYS_PREAD64",
+ "SYS_PREADV",
+ "SYS_PREAD_NOCANCEL",
+ "SYS_PRLIMIT64",
+ "SYS_PROCCTL",
+ "SYS_PROCESS_POLICY",
+ "SYS_PROCESS_VM_READV",
+ "SYS_PROCESS_VM_WRITEV",
+ "SYS_PROC_INFO",
+ "SYS_PROF",
+ "SYS_PROFIL",
+ "SYS_PSELECT",
+ "SYS_PSELECT6",
+ "SYS_PSET_ASSIGN",
+ "SYS_PSET_CREATE",
+ "SYS_PSET_DESTROY",
+ "SYS_PSYNCH_CVBROAD",
+ "SYS_PSYNCH_CVCLRPREPOST",
+ "SYS_PSYNCH_CVSIGNAL",
+ "SYS_PSYNCH_CVWAIT",
+ "SYS_PSYNCH_MUTEXDROP",
+ "SYS_PSYNCH_MUTEXWAIT",
+ "SYS_PSYNCH_RW_DOWNGRADE",
+ "SYS_PSYNCH_RW_LONGRDLOCK",
+ "SYS_PSYNCH_RW_RDLOCK",
+ "SYS_PSYNCH_RW_UNLOCK",
+ "SYS_PSYNCH_RW_UNLOCK2",
+ "SYS_PSYNCH_RW_UPGRADE",
+ "SYS_PSYNCH_RW_WRLOCK",
+ "SYS_PSYNCH_RW_YIELDWRLOCK",
+ "SYS_PTRACE",
+ "SYS_PUTPMSG",
+ "SYS_PWRITE",
+ "SYS_PWRITE64",
+ "SYS_PWRITEV",
+ "SYS_PWRITE_NOCANCEL",
+ "SYS_QUERY_MODULE",
+ "SYS_QUOTACTL",
+ "SYS_RASCTL",
+ "SYS_RCTL_ADD_RULE",
+ "SYS_RCTL_GET_LIMITS",
+ "SYS_RCTL_GET_RACCT",
+ "SYS_RCTL_GET_RULES",
+ "SYS_RCTL_REMOVE_RULE",
+ "SYS_READ",
+ "SYS_READAHEAD",
+ "SYS_READDIR",
+ "SYS_READLINK",
+ "SYS_READLINKAT",
+ "SYS_READV",
+ "SYS_READV_NOCANCEL",
+ "SYS_READ_NOCANCEL",
+ "SYS_REBOOT",
+ "SYS_RECV",
+ "SYS_RECVFROM",
+ "SYS_RECVFROM_NOCANCEL",
+ "SYS_RECVMMSG",
+ "SYS_RECVMSG",
+ "SYS_RECVMSG_NOCANCEL",
+ "SYS_REMAP_FILE_PAGES",
+ "SYS_REMOVEXATTR",
+ "SYS_RENAME",
+ "SYS_RENAMEAT",
+ "SYS_REQUEST_KEY",
+ "SYS_RESTART_SYSCALL",
+ "SYS_REVOKE",
+ "SYS_RFORK",
+ "SYS_RMDIR",
+ "SYS_RTPRIO",
+ "SYS_RTPRIO_THREAD",
+ "SYS_RT_SIGACTION",
+ "SYS_RT_SIGPENDING",
+ "SYS_RT_SIGPROCMASK",
+ "SYS_RT_SIGQUEUEINFO",
+ "SYS_RT_SIGRETURN",
+ "SYS_RT_SIGSUSPEND",
+ "SYS_RT_SIGTIMEDWAIT",
+ "SYS_RT_TGSIGQUEUEINFO",
+ "SYS_SBRK",
+ "SYS_SCHED_GETAFFINITY",
+ "SYS_SCHED_GETPARAM",
+ "SYS_SCHED_GETSCHEDULER",
+ "SYS_SCHED_GET_PRIORITY_MAX",
+ "SYS_SCHED_GET_PRIORITY_MIN",
+ "SYS_SCHED_RR_GET_INTERVAL",
+ "SYS_SCHED_SETAFFINITY",
+ "SYS_SCHED_SETPARAM",
+ "SYS_SCHED_SETSCHEDULER",
+ "SYS_SCHED_YIELD",
+ "SYS_SCTP_GENERIC_RECVMSG",
+ "SYS_SCTP_GENERIC_SENDMSG",
+ "SYS_SCTP_GENERIC_SENDMSG_IOV",
+ "SYS_SCTP_PEELOFF",
+ "SYS_SEARCHFS",
+ "SYS_SECURITY",
+ "SYS_SELECT",
+ "SYS_SELECT_NOCANCEL",
+ "SYS_SEMCONFIG",
+ "SYS_SEMCTL",
+ "SYS_SEMGET",
+ "SYS_SEMOP",
+ "SYS_SEMSYS",
+ "SYS_SEMTIMEDOP",
+ "SYS_SEM_CLOSE",
+ "SYS_SEM_DESTROY",
+ "SYS_SEM_GETVALUE",
+ "SYS_SEM_INIT",
+ "SYS_SEM_OPEN",
+ "SYS_SEM_POST",
+ "SYS_SEM_TRYWAIT",
+ "SYS_SEM_UNLINK",
+ "SYS_SEM_WAIT",
+ "SYS_SEM_WAIT_NOCANCEL",
+ "SYS_SEND",
+ "SYS_SENDFILE",
+ "SYS_SENDFILE64",
+ "SYS_SENDMMSG",
+ "SYS_SENDMSG",
+ "SYS_SENDMSG_NOCANCEL",
+ "SYS_SENDTO",
+ "SYS_SENDTO_NOCANCEL",
+ "SYS_SETATTRLIST",
+ "SYS_SETAUDIT",
+ "SYS_SETAUDIT_ADDR",
+ "SYS_SETAUID",
+ "SYS_SETCONTEXT",
+ "SYS_SETDOMAINNAME",
+ "SYS_SETEGID",
+ "SYS_SETEUID",
+ "SYS_SETFIB",
+ "SYS_SETFSGID",
+ "SYS_SETFSGID32",
+ "SYS_SETFSUID",
+ "SYS_SETFSUID32",
+ "SYS_SETGID",
+ "SYS_SETGID32",
+ "SYS_SETGROUPS",
+ "SYS_SETGROUPS32",
+ "SYS_SETHOSTNAME",
+ "SYS_SETITIMER",
+ "SYS_SETLCID",
+ "SYS_SETLOGIN",
+ "SYS_SETLOGINCLASS",
+ "SYS_SETNS",
+ "SYS_SETPGID",
+ "SYS_SETPRIORITY",
+ "SYS_SETPRIVEXEC",
+ "SYS_SETREGID",
+ "SYS_SETREGID32",
+ "SYS_SETRESGID",
+ "SYS_SETRESGID32",
+ "SYS_SETRESUID",
+ "SYS_SETRESUID32",
+ "SYS_SETREUID",
+ "SYS_SETREUID32",
+ "SYS_SETRLIMIT",
+ "SYS_SETRTABLE",
+ "SYS_SETSGROUPS",
+ "SYS_SETSID",
+ "SYS_SETSOCKOPT",
+ "SYS_SETTID",
+ "SYS_SETTID_WITH_PID",
+ "SYS_SETTIMEOFDAY",
+ "SYS_SETUID",
+ "SYS_SETUID32",
+ "SYS_SETWGROUPS",
+ "SYS_SETXATTR",
+ "SYS_SET_MEMPOLICY",
+ "SYS_SET_ROBUST_LIST",
+ "SYS_SET_THREAD_AREA",
+ "SYS_SET_TID_ADDRESS",
+ "SYS_SGETMASK",
+ "SYS_SHARED_REGION_CHECK_NP",
+ "SYS_SHARED_REGION_MAP_AND_SLIDE_NP",
+ "SYS_SHMAT",
+ "SYS_SHMCTL",
+ "SYS_SHMDT",
+ "SYS_SHMGET",
+ "SYS_SHMSYS",
+ "SYS_SHM_OPEN",
+ "SYS_SHM_UNLINK",
+ "SYS_SHUTDOWN",
+ "SYS_SIGACTION",
+ "SYS_SIGALTSTACK",
+ "SYS_SIGNAL",
+ "SYS_SIGNALFD",
+ "SYS_SIGNALFD4",
+ "SYS_SIGPENDING",
+ "SYS_SIGPROCMASK",
+ "SYS_SIGQUEUE",
+ "SYS_SIGQUEUEINFO",
+ "SYS_SIGRETURN",
+ "SYS_SIGSUSPEND",
+ "SYS_SIGSUSPEND_NOCANCEL",
+ "SYS_SIGTIMEDWAIT",
+ "SYS_SIGWAIT",
+ "SYS_SIGWAITINFO",
+ "SYS_SOCKET",
+ "SYS_SOCKETCALL",
+ "SYS_SOCKETPAIR",
+ "SYS_SPLICE",
+ "SYS_SSETMASK",
+ "SYS_SSTK",
+ "SYS_STACK_SNAPSHOT",
+ "SYS_STAT",
+ "SYS_STAT64",
+ "SYS_STAT64_EXTENDED",
+ "SYS_STATFS",
+ "SYS_STATFS64",
+ "SYS_STATV",
+ "SYS_STATVFS1",
+ "SYS_STAT_EXTENDED",
+ "SYS_STIME",
+ "SYS_STTY",
+ "SYS_SWAPCONTEXT",
+ "SYS_SWAPCTL",
+ "SYS_SWAPOFF",
+ "SYS_SWAPON",
+ "SYS_SYMLINK",
+ "SYS_SYMLINKAT",
+ "SYS_SYNC",
+ "SYS_SYNCFS",
+ "SYS_SYNC_FILE_RANGE",
+ "SYS_SYSARCH",
+ "SYS_SYSCALL",
+ "SYS_SYSCALL_BASE",
+ "SYS_SYSFS",
+ "SYS_SYSINFO",
+ "SYS_SYSLOG",
+ "SYS_TEE",
+ "SYS_TGKILL",
+ "SYS_THREAD_SELFID",
+ "SYS_THR_CREATE",
+ "SYS_THR_EXIT",
+ "SYS_THR_KILL",
+ "SYS_THR_KILL2",
+ "SYS_THR_NEW",
+ "SYS_THR_SELF",
+ "SYS_THR_SET_NAME",
+ "SYS_THR_SUSPEND",
+ "SYS_THR_WAKE",
+ "SYS_TIME",
+ "SYS_TIMERFD_CREATE",
+ "SYS_TIMERFD_GETTIME",
+ "SYS_TIMERFD_SETTIME",
+ "SYS_TIMER_CREATE",
+ "SYS_TIMER_DELETE",
+ "SYS_TIMER_GETOVERRUN",
+ "SYS_TIMER_GETTIME",
+ "SYS_TIMER_SETTIME",
+ "SYS_TIMES",
+ "SYS_TKILL",
+ "SYS_TRUNCATE",
+ "SYS_TRUNCATE64",
+ "SYS_TUXCALL",
+ "SYS_UGETRLIMIT",
+ "SYS_ULIMIT",
+ "SYS_UMASK",
+ "SYS_UMASK_EXTENDED",
+ "SYS_UMOUNT",
+ "SYS_UMOUNT2",
+ "SYS_UNAME",
+ "SYS_UNDELETE",
+ "SYS_UNLINK",
+ "SYS_UNLINKAT",
+ "SYS_UNMOUNT",
+ "SYS_UNSHARE",
+ "SYS_USELIB",
+ "SYS_USTAT",
+ "SYS_UTIME",
+ "SYS_UTIMENSAT",
+ "SYS_UTIMES",
+ "SYS_UTRACE",
+ "SYS_UUIDGEN",
+ "SYS_VADVISE",
+ "SYS_VFORK",
+ "SYS_VHANGUP",
+ "SYS_VM86",
+ "SYS_VM86OLD",
+ "SYS_VMSPLICE",
+ "SYS_VM_PRESSURE_MONITOR",
+ "SYS_VSERVER",
+ "SYS_WAIT4",
+ "SYS_WAIT4_NOCANCEL",
+ "SYS_WAIT6",
+ "SYS_WAITEVENT",
+ "SYS_WAITID",
+ "SYS_WAITID_NOCANCEL",
+ "SYS_WAITPID",
+ "SYS_WATCHEVENT",
+ "SYS_WORKQ_KERNRETURN",
+ "SYS_WORKQ_OPEN",
+ "SYS_WRITE",
+ "SYS_WRITEV",
+ "SYS_WRITEV_NOCANCEL",
+ "SYS_WRITE_NOCANCEL",
+ "SYS_YIELD",
+ "SYS__LLSEEK",
+ "SYS__LWP_CONTINUE",
+ "SYS__LWP_CREATE",
+ "SYS__LWP_CTL",
+ "SYS__LWP_DETACH",
+ "SYS__LWP_EXIT",
+ "SYS__LWP_GETNAME",
+ "SYS__LWP_GETPRIVATE",
+ "SYS__LWP_KILL",
+ "SYS__LWP_PARK",
+ "SYS__LWP_SELF",
+ "SYS__LWP_SETNAME",
+ "SYS__LWP_SETPRIVATE",
+ "SYS__LWP_SUSPEND",
+ "SYS__LWP_UNPARK",
+ "SYS__LWP_UNPARK_ALL",
+ "SYS__LWP_WAIT",
+ "SYS__LWP_WAKEUP",
+ "SYS__NEWSELECT",
+ "SYS__PSET_BIND",
+ "SYS__SCHED_GETAFFINITY",
+ "SYS__SCHED_GETPARAM",
+ "SYS__SCHED_SETAFFINITY",
+ "SYS__SCHED_SETPARAM",
+ "SYS__SYSCTL",
+ "SYS__UMTX_LOCK",
+ "SYS__UMTX_OP",
+ "SYS__UMTX_UNLOCK",
+ "SYS___ACL_ACLCHECK_FD",
+ "SYS___ACL_ACLCHECK_FILE",
+ "SYS___ACL_ACLCHECK_LINK",
+ "SYS___ACL_DELETE_FD",
+ "SYS___ACL_DELETE_FILE",
+ "SYS___ACL_DELETE_LINK",
+ "SYS___ACL_GET_FD",
+ "SYS___ACL_GET_FILE",
+ "SYS___ACL_GET_LINK",
+ "SYS___ACL_SET_FD",
+ "SYS___ACL_SET_FILE",
+ "SYS___ACL_SET_LINK",
+ "SYS___CAP_RIGHTS_GET",
+ "SYS___CLONE",
+ "SYS___DISABLE_THREADSIGNAL",
+ "SYS___GETCWD",
+ "SYS___GETLOGIN",
+ "SYS___GET_TCB",
+ "SYS___MAC_EXECVE",
+ "SYS___MAC_GETFSSTAT",
+ "SYS___MAC_GET_FD",
+ "SYS___MAC_GET_FILE",
+ "SYS___MAC_GET_LCID",
+ "SYS___MAC_GET_LCTX",
+ "SYS___MAC_GET_LINK",
+ "SYS___MAC_GET_MOUNT",
+ "SYS___MAC_GET_PID",
+ "SYS___MAC_GET_PROC",
+ "SYS___MAC_MOUNT",
+ "SYS___MAC_SET_FD",
+ "SYS___MAC_SET_FILE",
+ "SYS___MAC_SET_LCTX",
+ "SYS___MAC_SET_LINK",
+ "SYS___MAC_SET_PROC",
+ "SYS___MAC_SYSCALL",
+ "SYS___OLD_SEMWAIT_SIGNAL",
+ "SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL",
+ "SYS___POSIX_CHOWN",
+ "SYS___POSIX_FCHOWN",
+ "SYS___POSIX_LCHOWN",
+ "SYS___POSIX_RENAME",
+ "SYS___PTHREAD_CANCELED",
+ "SYS___PTHREAD_CHDIR",
+ "SYS___PTHREAD_FCHDIR",
+ "SYS___PTHREAD_KILL",
+ "SYS___PTHREAD_MARKCANCEL",
+ "SYS___PTHREAD_SIGMASK",
+ "SYS___QUOTACTL",
+ "SYS___SEMCTL",
+ "SYS___SEMWAIT_SIGNAL",
+ "SYS___SEMWAIT_SIGNAL_NOCANCEL",
+ "SYS___SETLOGIN",
+ "SYS___SETUGID",
+ "SYS___SET_TCB",
+ "SYS___SIGACTION_SIGTRAMP",
+ "SYS___SIGTIMEDWAIT",
+ "SYS___SIGWAIT",
+ "SYS___SIGWAIT_NOCANCEL",
+ "SYS___SYSCTL",
+ "SYS___TFORK",
+ "SYS___THREXIT",
+ "SYS___THRSIGDIVERT",
+ "SYS___THRSLEEP",
+ "SYS___THRWAKEUP",
+ "S_ARCH1",
+ "S_ARCH2",
+ "S_BLKSIZE",
+ "S_IEXEC",
+ "S_IFBLK",
+ "S_IFCHR",
+ "S_IFDIR",
+ "S_IFIFO",
+ "S_IFLNK",
+ "S_IFMT",
+ "S_IFREG",
+ "S_IFSOCK",
+ "S_IFWHT",
+ "S_IREAD",
+ "S_IRGRP",
+ "S_IROTH",
+ "S_IRUSR",
+ "S_IRWXG",
+ "S_IRWXO",
+ "S_IRWXU",
+ "S_ISGID",
+ "S_ISTXT",
+ "S_ISUID",
+ "S_ISVTX",
+ "S_IWGRP",
+ "S_IWOTH",
+ "S_IWRITE",
+ "S_IWUSR",
+ "S_IXGRP",
+ "S_IXOTH",
+ "S_IXUSR",
+ "S_LOGIN_SET",
+ "SecurityAttributes",
+ "Seek",
+ "Select",
+ "Sendfile",
+ "Sendmsg",
+ "SendmsgN",
+ "Sendto",
+ "Servent",
+ "SetBpf",
+ "SetBpfBuflen",
+ "SetBpfDatalink",
+ "SetBpfHeadercmpl",
+ "SetBpfImmediate",
+ "SetBpfInterface",
+ "SetBpfPromisc",
+ "SetBpfTimeout",
+ "SetCurrentDirectory",
+ "SetEndOfFile",
+ "SetEnvironmentVariable",
+ "SetFileAttributes",
+ "SetFileCompletionNotificationModes",
+ "SetFilePointer",
+ "SetFileTime",
+ "SetHandleInformation",
+ "SetKevent",
+ "SetLsfPromisc",
+ "SetNonblock",
+ "Setdomainname",
+ "Setegid",
+ "Setenv",
+ "Seteuid",
+ "Setfsgid",
+ "Setfsuid",
+ "Setgid",
+ "Setgroups",
+ "Sethostname",
+ "Setlogin",
+ "Setpgid",
+ "Setpriority",
+ "Setprivexec",
+ "Setregid",
+ "Setresgid",
+ "Setresuid",
+ "Setreuid",
+ "Setrlimit",
+ "Setsid",
+ "Setsockopt",
+ "SetsockoptByte",
+ "SetsockoptICMPv6Filter",
+ "SetsockoptIPMreq",
+ "SetsockoptIPMreqn",
+ "SetsockoptIPv6Mreq",
+ "SetsockoptInet4Addr",
+ "SetsockoptInt",
+ "SetsockoptLinger",
+ "SetsockoptString",
+ "SetsockoptTimeval",
+ "Settimeofday",
+ "Setuid",
+ "Setxattr",
+ "Shutdown",
+ "SidTypeAlias",
+ "SidTypeComputer",
+ "SidTypeDeletedAccount",
+ "SidTypeDomain",
+ "SidTypeGroup",
+ "SidTypeInvalid",
+ "SidTypeLabel",
+ "SidTypeUnknown",
+ "SidTypeUser",
+ "SidTypeWellKnownGroup",
+ "Signal",
+ "SizeofBpfHdr",
+ "SizeofBpfInsn",
+ "SizeofBpfProgram",
+ "SizeofBpfStat",
+ "SizeofBpfVersion",
+ "SizeofBpfZbuf",
+ "SizeofBpfZbufHeader",
+ "SizeofCmsghdr",
+ "SizeofICMPv6Filter",
+ "SizeofIPMreq",
+ "SizeofIPMreqn",
+ "SizeofIPv6MTUInfo",
+ "SizeofIPv6Mreq",
+ "SizeofIfAddrmsg",
+ "SizeofIfAnnounceMsghdr",
+ "SizeofIfData",
+ "SizeofIfInfomsg",
+ "SizeofIfMsghdr",
+ "SizeofIfaMsghdr",
+ "SizeofIfmaMsghdr",
+ "SizeofIfmaMsghdr2",
+ "SizeofInet4Pktinfo",
+ "SizeofInet6Pktinfo",
+ "SizeofInotifyEvent",
+ "SizeofLinger",
+ "SizeofMsghdr",
+ "SizeofNlAttr",
+ "SizeofNlMsgerr",
+ "SizeofNlMsghdr",
+ "SizeofRtAttr",
+ "SizeofRtGenmsg",
+ "SizeofRtMetrics",
+ "SizeofRtMsg",
+ "SizeofRtMsghdr",
+ "SizeofRtNexthop",
+ "SizeofSockFilter",
+ "SizeofSockFprog",
+ "SizeofSockaddrAny",
+ "SizeofSockaddrDatalink",
+ "SizeofSockaddrInet4",
+ "SizeofSockaddrInet6",
+ "SizeofSockaddrLinklayer",
+ "SizeofSockaddrNetlink",
+ "SizeofSockaddrUnix",
+ "SizeofTCPInfo",
+ "SizeofUcred",
+ "SlicePtrFromStrings",
+ "SockFilter",
+ "SockFprog",
+ "Sockaddr",
+ "SockaddrDatalink",
+ "SockaddrGen",
+ "SockaddrInet4",
+ "SockaddrInet6",
+ "SockaddrLinklayer",
+ "SockaddrNetlink",
+ "SockaddrUnix",
+ "Socket",
+ "SocketControlMessage",
+ "SocketDisableIPv6",
+ "Socketpair",
+ "Splice",
+ "StartProcess",
+ "StartupInfo",
+ "Stat",
+ "Stat_t",
+ "Statfs",
+ "Statfs_t",
+ "Stderr",
+ "Stdin",
+ "Stdout",
+ "StringBytePtr",
+ "StringByteSlice",
+ "StringSlicePtr",
+ "StringToSid",
+ "StringToUTF16",
+ "StringToUTF16Ptr",
+ "Symlink",
+ "Sync",
+ "SyncFileRange",
+ "SysProcAttr",
+ "SysProcIDMap",
+ "Syscall",
+ "Syscall12",
+ "Syscall15",
+ "Syscall18",
+ "Syscall6",
+ "Syscall9",
+ "SyscallN",
+ "Sysctl",
+ "SysctlUint32",
+ "Sysctlnode",
+ "Sysinfo",
+ "Sysinfo_t",
+ "Systemtime",
+ "TCGETS",
+ "TCIFLUSH",
+ "TCIOFLUSH",
+ "TCOFLUSH",
+ "TCPInfo",
+ "TCPKeepalive",
+ "TCP_CA_NAME_MAX",
+ "TCP_CONGCTL",
+ "TCP_CONGESTION",
+ "TCP_CONNECTIONTIMEOUT",
+ "TCP_CORK",
+ "TCP_DEFER_ACCEPT",
+ "TCP_ENABLE_ECN",
+ "TCP_INFO",
+ "TCP_KEEPALIVE",
+ "TCP_KEEPCNT",
+ "TCP_KEEPIDLE",
+ "TCP_KEEPINIT",
+ "TCP_KEEPINTVL",
+ "TCP_LINGER2",
+ "TCP_MAXBURST",
+ "TCP_MAXHLEN",
+ "TCP_MAXOLEN",
+ "TCP_MAXSEG",
+ "TCP_MAXWIN",
+ "TCP_MAX_SACK",
+ "TCP_MAX_WINSHIFT",
+ "TCP_MD5SIG",
+ "TCP_MD5SIG_MAXKEYLEN",
+ "TCP_MINMSS",
+ "TCP_MINMSSOVERLOAD",
+ "TCP_MSS",
+ "TCP_NODELAY",
+ "TCP_NOOPT",
+ "TCP_NOPUSH",
+ "TCP_NOTSENT_LOWAT",
+ "TCP_NSTATES",
+ "TCP_QUICKACK",
+ "TCP_RXT_CONNDROPTIME",
+ "TCP_RXT_FINDROP",
+ "TCP_SACK_ENABLE",
+ "TCP_SENDMOREACKS",
+ "TCP_SYNCNT",
+ "TCP_VENDOR",
+ "TCP_WINDOW_CLAMP",
+ "TCSAFLUSH",
+ "TCSETS",
+ "TF_DISCONNECT",
+ "TF_REUSE_SOCKET",
+ "TF_USE_DEFAULT_WORKER",
+ "TF_USE_KERNEL_APC",
+ "TF_USE_SYSTEM_THREAD",
+ "TF_WRITE_BEHIND",
+ "TH32CS_INHERIT",
+ "TH32CS_SNAPALL",
+ "TH32CS_SNAPHEAPLIST",
+ "TH32CS_SNAPMODULE",
+ "TH32CS_SNAPMODULE32",
+ "TH32CS_SNAPPROCESS",
+ "TH32CS_SNAPTHREAD",
+ "TIME_ZONE_ID_DAYLIGHT",
+ "TIME_ZONE_ID_STANDARD",
+ "TIME_ZONE_ID_UNKNOWN",
+ "TIOCCBRK",
+ "TIOCCDTR",
+ "TIOCCONS",
+ "TIOCDCDTIMESTAMP",
+ "TIOCDRAIN",
+ "TIOCDSIMICROCODE",
+ "TIOCEXCL",
+ "TIOCEXT",
+ "TIOCFLAG_CDTRCTS",
+ "TIOCFLAG_CLOCAL",
+ "TIOCFLAG_CRTSCTS",
+ "TIOCFLAG_MDMBUF",
+ "TIOCFLAG_PPS",
+ "TIOCFLAG_SOFTCAR",
+ "TIOCFLUSH",
+ "TIOCGDEV",
+ "TIOCGDRAINWAIT",
+ "TIOCGETA",
+ "TIOCGETD",
+ "TIOCGFLAGS",
+ "TIOCGICOUNT",
+ "TIOCGLCKTRMIOS",
+ "TIOCGLINED",
+ "TIOCGPGRP",
+ "TIOCGPTN",
+ "TIOCGQSIZE",
+ "TIOCGRANTPT",
+ "TIOCGRS485",
+ "TIOCGSERIAL",
+ "TIOCGSID",
+ "TIOCGSIZE",
+ "TIOCGSOFTCAR",
+ "TIOCGTSTAMP",
+ "TIOCGWINSZ",
+ "TIOCINQ",
+ "TIOCIXOFF",
+ "TIOCIXON",
+ "TIOCLINUX",
+ "TIOCMBIC",
+ "TIOCMBIS",
+ "TIOCMGDTRWAIT",
+ "TIOCMGET",
+ "TIOCMIWAIT",
+ "TIOCMODG",
+ "TIOCMODS",
+ "TIOCMSDTRWAIT",
+ "TIOCMSET",
+ "TIOCM_CAR",
+ "TIOCM_CD",
+ "TIOCM_CTS",
+ "TIOCM_DCD",
+ "TIOCM_DSR",
+ "TIOCM_DTR",
+ "TIOCM_LE",
+ "TIOCM_RI",
+ "TIOCM_RNG",
+ "TIOCM_RTS",
+ "TIOCM_SR",
+ "TIOCM_ST",
+ "TIOCNOTTY",
+ "TIOCNXCL",
+ "TIOCOUTQ",
+ "TIOCPKT",
+ "TIOCPKT_DATA",
+ "TIOCPKT_DOSTOP",
+ "TIOCPKT_FLUSHREAD",
+ "TIOCPKT_FLUSHWRITE",
+ "TIOCPKT_IOCTL",
+ "TIOCPKT_NOSTOP",
+ "TIOCPKT_START",
+ "TIOCPKT_STOP",
+ "TIOCPTMASTER",
+ "TIOCPTMGET",
+ "TIOCPTSNAME",
+ "TIOCPTYGNAME",
+ "TIOCPTYGRANT",
+ "TIOCPTYUNLK",
+ "TIOCRCVFRAME",
+ "TIOCREMOTE",
+ "TIOCSBRK",
+ "TIOCSCONS",
+ "TIOCSCTTY",
+ "TIOCSDRAINWAIT",
+ "TIOCSDTR",
+ "TIOCSERCONFIG",
+ "TIOCSERGETLSR",
+ "TIOCSERGETMULTI",
+ "TIOCSERGSTRUCT",
+ "TIOCSERGWILD",
+ "TIOCSERSETMULTI",
+ "TIOCSERSWILD",
+ "TIOCSER_TEMT",
+ "TIOCSETA",
+ "TIOCSETAF",
+ "TIOCSETAW",
+ "TIOCSETD",
+ "TIOCSFLAGS",
+ "TIOCSIG",
+ "TIOCSLCKTRMIOS",
+ "TIOCSLINED",
+ "TIOCSPGRP",
+ "TIOCSPTLCK",
+ "TIOCSQSIZE",
+ "TIOCSRS485",
+ "TIOCSSERIAL",
+ "TIOCSSIZE",
+ "TIOCSSOFTCAR",
+ "TIOCSTART",
+ "TIOCSTAT",
+ "TIOCSTI",
+ "TIOCSTOP",
+ "TIOCSTSTAMP",
+ "TIOCSWINSZ",
+ "TIOCTIMESTAMP",
+ "TIOCUCNTL",
+ "TIOCVHANGUP",
+ "TIOCXMTFRAME",
+ "TOKEN_ADJUST_DEFAULT",
+ "TOKEN_ADJUST_GROUPS",
+ "TOKEN_ADJUST_PRIVILEGES",
+ "TOKEN_ADJUST_SESSIONID",
+ "TOKEN_ALL_ACCESS",
+ "TOKEN_ASSIGN_PRIMARY",
+ "TOKEN_DUPLICATE",
+ "TOKEN_EXECUTE",
+ "TOKEN_IMPERSONATE",
+ "TOKEN_QUERY",
+ "TOKEN_QUERY_SOURCE",
+ "TOKEN_READ",
+ "TOKEN_WRITE",
+ "TOSTOP",
+ "TRUNCATE_EXISTING",
+ "TUNATTACHFILTER",
+ "TUNDETACHFILTER",
+ "TUNGETFEATURES",
+ "TUNGETIFF",
+ "TUNGETSNDBUF",
+ "TUNGETVNETHDRSZ",
+ "TUNSETDEBUG",
+ "TUNSETGROUP",
+ "TUNSETIFF",
+ "TUNSETLINK",
+ "TUNSETNOCSUM",
+ "TUNSETOFFLOAD",
+ "TUNSETOWNER",
+ "TUNSETPERSIST",
+ "TUNSETSNDBUF",
+ "TUNSETTXFILTER",
+ "TUNSETVNETHDRSZ",
+ "Tee",
+ "TerminateProcess",
+ "Termios",
+ "Tgkill",
+ "Time",
+ "Time_t",
+ "Times",
+ "Timespec",
+ "TimespecToNsec",
+ "Timeval",
+ "Timeval32",
+ "TimevalToNsec",
+ "Timex",
+ "Timezoneinformation",
+ "Tms",
+ "Token",
+ "TokenAccessInformation",
+ "TokenAuditPolicy",
+ "TokenDefaultDacl",
+ "TokenElevation",
+ "TokenElevationType",
+ "TokenGroups",
+ "TokenGroupsAndPrivileges",
+ "TokenHasRestrictions",
+ "TokenImpersonationLevel",
+ "TokenIntegrityLevel",
+ "TokenLinkedToken",
+ "TokenLogonSid",
+ "TokenMandatoryPolicy",
+ "TokenOrigin",
+ "TokenOwner",
+ "TokenPrimaryGroup",
+ "TokenPrivileges",
+ "TokenRestrictedSids",
+ "TokenSandBoxInert",
+ "TokenSessionId",
+ "TokenSessionReference",
+ "TokenSource",
+ "TokenStatistics",
+ "TokenType",
+ "TokenUIAccess",
+ "TokenUser",
+ "TokenVirtualizationAllowed",
+ "TokenVirtualizationEnabled",
+ "Tokenprimarygroup",
+ "Tokenuser",
+ "TranslateAccountName",
+ "TranslateName",
+ "TransmitFile",
+ "TransmitFileBuffers",
+ "Truncate",
+ "UNIX_PATH_MAX",
+ "USAGE_MATCH_TYPE_AND",
+ "USAGE_MATCH_TYPE_OR",
+ "UTF16FromString",
+ "UTF16PtrFromString",
+ "UTF16ToString",
+ "Ucred",
+ "Umask",
+ "Uname",
+ "Undelete",
+ "UnixCredentials",
+ "UnixRights",
+ "Unlink",
+ "Unlinkat",
+ "UnmapViewOfFile",
+ "Unmount",
+ "Unsetenv",
+ "Unshare",
+ "UserInfo10",
+ "Ustat",
+ "Ustat_t",
+ "Utimbuf",
+ "Utime",
+ "Utimes",
+ "UtimesNano",
+ "Utsname",
+ "VDISCARD",
+ "VDSUSP",
+ "VEOF",
+ "VEOL",
+ "VEOL2",
+ "VERASE",
+ "VERASE2",
+ "VINTR",
+ "VKILL",
+ "VLNEXT",
+ "VMIN",
+ "VQUIT",
+ "VREPRINT",
+ "VSTART",
+ "VSTATUS",
+ "VSTOP",
+ "VSUSP",
+ "VSWTC",
+ "VT0",
+ "VT1",
+ "VTDLY",
+ "VTIME",
+ "VWERASE",
+ "VirtualLock",
+ "VirtualUnlock",
+ "WAIT_ABANDONED",
+ "WAIT_FAILED",
+ "WAIT_OBJECT_0",
+ "WAIT_TIMEOUT",
+ "WALL",
+ "WALLSIG",
+ "WALTSIG",
+ "WCLONE",
+ "WCONTINUED",
+ "WCOREFLAG",
+ "WEXITED",
+ "WLINUXCLONE",
+ "WNOHANG",
+ "WNOTHREAD",
+ "WNOWAIT",
+ "WNOZOMBIE",
+ "WOPTSCHECKED",
+ "WORDSIZE",
+ "WSABuf",
+ "WSACleanup",
+ "WSADESCRIPTION_LEN",
+ "WSAData",
+ "WSAEACCES",
+ "WSAECONNABORTED",
+ "WSAECONNRESET",
+ "WSAEnumProtocols",
+ "WSAID_CONNECTEX",
+ "WSAIoctl",
+ "WSAPROTOCOL_LEN",
+ "WSAProtocolChain",
+ "WSAProtocolInfo",
+ "WSARecv",
+ "WSARecvFrom",
+ "WSASYS_STATUS_LEN",
+ "WSASend",
+ "WSASendTo",
+ "WSASendto",
+ "WSAStartup",
+ "WSTOPPED",
+ "WTRAPPED",
+ "WUNTRACED",
+ "Wait4",
+ "WaitForSingleObject",
+ "WaitStatus",
+ "Win32FileAttributeData",
+ "Win32finddata",
+ "Write",
+ "WriteConsole",
+ "WriteFile",
+ "X509_ASN_ENCODING",
+ "XCASE",
+ "XP1_CONNECTIONLESS",
+ "XP1_CONNECT_DATA",
+ "XP1_DISCONNECT_DATA",
+ "XP1_EXPEDITED_DATA",
+ "XP1_GRACEFUL_CLOSE",
+ "XP1_GUARANTEED_DELIVERY",
+ "XP1_GUARANTEED_ORDER",
+ "XP1_IFS_HANDLES",
+ "XP1_MESSAGE_ORIENTED",
+ "XP1_MULTIPOINT_CONTROL_PLANE",
+ "XP1_MULTIPOINT_DATA_PLANE",
+ "XP1_PARTIAL_MESSAGE",
+ "XP1_PSEUDO_STREAM",
+ "XP1_QOS_SUPPORTED",
+ "XP1_SAN_SUPPORT_SDP",
+ "XP1_SUPPORT_BROADCAST",
+ "XP1_SUPPORT_MULTIPOINT",
+ "XP1_UNI_RECV",
+ "XP1_UNI_SEND",
+ },
+ "syscall/js": {
+ "CopyBytesToGo",
+ "CopyBytesToJS",
+ "Error",
+ "Func",
+ "FuncOf",
+ "Global",
+ "Null",
+ "Type",
+ "TypeBoolean",
+ "TypeFunction",
+ "TypeNull",
+ "TypeNumber",
+ "TypeObject",
+ "TypeString",
+ "TypeSymbol",
+ "TypeUndefined",
+ "Undefined",
+ "Value",
+ "ValueError",
+ "ValueOf",
+ },
+ "testing": {
+ "AllocsPerRun",
+ "B",
+ "Benchmark",
+ "BenchmarkResult",
+ "Cover",
+ "CoverBlock",
+ "CoverMode",
+ "Coverage",
+ "F",
+ "Init",
+ "InternalBenchmark",
+ "InternalExample",
+ "InternalFuzzTarget",
+ "InternalTest",
+ "M",
+ "Main",
+ "MainStart",
+ "PB",
+ "RegisterCover",
+ "RunBenchmarks",
+ "RunExamples",
+ "RunTests",
+ "Short",
+ "T",
+ "TB",
+ "Testing",
+ "Verbose",
+ },
+ "testing/fstest": {
+ "MapFS",
+ "MapFile",
+ "TestFS",
+ },
+ "testing/iotest": {
+ "DataErrReader",
+ "ErrReader",
+ "ErrTimeout",
+ "HalfReader",
+ "NewReadLogger",
+ "NewWriteLogger",
+ "OneByteReader",
+ "TestReader",
+ "TimeoutReader",
+ "TruncateWriter",
+ },
+ "testing/quick": {
+ "Check",
+ "CheckEqual",
+ "CheckEqualError",
+ "CheckError",
+ "Config",
+ "Generator",
+ "SetupError",
+ "Value",
+ },
+ "testing/slogtest": {
+ "TestHandler",
+ },
+ "text/scanner": {
+ "Char",
+ "Comment",
+ "EOF",
+ "Float",
+ "GoTokens",
+ "GoWhitespace",
+ "Ident",
+ "Int",
+ "Position",
+ "RawString",
+ "ScanChars",
+ "ScanComments",
+ "ScanFloats",
+ "ScanIdents",
+ "ScanInts",
+ "ScanRawStrings",
+ "ScanStrings",
+ "Scanner",
+ "SkipComments",
+ "String",
+ "TokenString",
+ },
+ "text/tabwriter": {
+ "AlignRight",
+ "Debug",
+ "DiscardEmptyColumns",
+ "Escape",
+ "FilterHTML",
+ "NewWriter",
+ "StripEscape",
+ "TabIndent",
+ "Writer",
+ },
+ "text/template": {
+ "ExecError",
+ "FuncMap",
+ "HTMLEscape",
+ "HTMLEscapeString",
+ "HTMLEscaper",
+ "IsTrue",
+ "JSEscape",
+ "JSEscapeString",
+ "JSEscaper",
+ "Must",
+ "New",
+ "ParseFS",
+ "ParseFiles",
+ "ParseGlob",
+ "Template",
+ "URLQueryEscaper",
+ },
+ "text/template/parse": {
+ "ActionNode",
+ "BoolNode",
+ "BranchNode",
+ "BreakNode",
+ "ChainNode",
+ "CommandNode",
+ "CommentNode",
+ "ContinueNode",
+ "DotNode",
+ "FieldNode",
+ "IdentifierNode",
+ "IfNode",
+ "IsEmptyTree",
+ "ListNode",
+ "Mode",
+ "New",
+ "NewIdentifier",
+ "NilNode",
+ "Node",
+ "NodeAction",
+ "NodeBool",
+ "NodeBreak",
+ "NodeChain",
+ "NodeCommand",
+ "NodeComment",
+ "NodeContinue",
+ "NodeDot",
+ "NodeField",
+ "NodeIdentifier",
+ "NodeIf",
+ "NodeList",
+ "NodeNil",
+ "NodeNumber",
+ "NodePipe",
+ "NodeRange",
+ "NodeString",
+ "NodeTemplate",
+ "NodeText",
+ "NodeType",
+ "NodeVariable",
+ "NodeWith",
+ "NumberNode",
+ "Parse",
+ "ParseComments",
+ "PipeNode",
+ "Pos",
+ "RangeNode",
+ "SkipFuncCheck",
+ "StringNode",
+ "TemplateNode",
+ "TextNode",
+ "Tree",
+ "VariableNode",
+ "WithNode",
+ },
+ "time": {
+ "ANSIC",
+ "After",
+ "AfterFunc",
+ "April",
+ "August",
+ "Date",
+ "DateOnly",
+ "DateTime",
+ "December",
+ "Duration",
+ "February",
+ "FixedZone",
+ "Friday",
+ "Hour",
+ "January",
+ "July",
+ "June",
+ "Kitchen",
+ "Layout",
+ "LoadLocation",
+ "LoadLocationFromTZData",
+ "Local",
+ "Location",
+ "March",
+ "May",
+ "Microsecond",
+ "Millisecond",
+ "Minute",
+ "Monday",
+ "Month",
+ "Nanosecond",
+ "NewTicker",
+ "NewTimer",
+ "November",
+ "Now",
+ "October",
+ "Parse",
+ "ParseDuration",
+ "ParseError",
+ "ParseInLocation",
+ "RFC1123",
+ "RFC1123Z",
+ "RFC3339",
+ "RFC3339Nano",
+ "RFC822",
+ "RFC822Z",
+ "RFC850",
+ "RubyDate",
+ "Saturday",
+ "Second",
+ "September",
+ "Since",
+ "Sleep",
+ "Stamp",
+ "StampMicro",
+ "StampMilli",
+ "StampNano",
+ "Sunday",
+ "Thursday",
+ "Tick",
+ "Ticker",
+ "Time",
+ "TimeOnly",
+ "Timer",
+ "Tuesday",
+ "UTC",
+ "Unix",
+ "UnixDate",
+ "UnixMicro",
+ "UnixMilli",
+ "Until",
+ "Wednesday",
+ "Weekday",
+ },
+ "unicode": {
+ "ASCII_Hex_Digit",
+ "Adlam",
+ "Ahom",
+ "Anatolian_Hieroglyphs",
+ "Arabic",
+ "Armenian",
+ "Avestan",
+ "AzeriCase",
+ "Balinese",
+ "Bamum",
+ "Bassa_Vah",
+ "Batak",
+ "Bengali",
+ "Bhaiksuki",
+ "Bidi_Control",
+ "Bopomofo",
+ "Brahmi",
+ "Braille",
+ "Buginese",
+ "Buhid",
+ "C",
+ "Canadian_Aboriginal",
+ "Carian",
+ "CaseRange",
+ "CaseRanges",
+ "Categories",
+ "Caucasian_Albanian",
+ "Cc",
+ "Cf",
+ "Chakma",
+ "Cham",
+ "Cherokee",
+ "Chorasmian",
+ "Co",
+ "Common",
+ "Coptic",
+ "Cs",
+ "Cuneiform",
+ "Cypriot",
+ "Cypro_Minoan",
+ "Cyrillic",
+ "Dash",
+ "Deprecated",
+ "Deseret",
+ "Devanagari",
+ "Diacritic",
+ "Digit",
+ "Dives_Akuru",
+ "Dogra",
+ "Duployan",
+ "Egyptian_Hieroglyphs",
+ "Elbasan",
+ "Elymaic",
+ "Ethiopic",
+ "Extender",
+ "FoldCategory",
+ "FoldScript",
+ "Georgian",
+ "Glagolitic",
+ "Gothic",
+ "Grantha",
+ "GraphicRanges",
+ "Greek",
+ "Gujarati",
+ "Gunjala_Gondi",
+ "Gurmukhi",
+ "Han",
+ "Hangul",
+ "Hanifi_Rohingya",
+ "Hanunoo",
+ "Hatran",
+ "Hebrew",
+ "Hex_Digit",
+ "Hiragana",
+ "Hyphen",
+ "IDS_Binary_Operator",
+ "IDS_Trinary_Operator",
+ "Ideographic",
+ "Imperial_Aramaic",
+ "In",
+ "Inherited",
+ "Inscriptional_Pahlavi",
+ "Inscriptional_Parthian",
+ "Is",
+ "IsControl",
+ "IsDigit",
+ "IsGraphic",
+ "IsLetter",
+ "IsLower",
+ "IsMark",
+ "IsNumber",
+ "IsOneOf",
+ "IsPrint",
+ "IsPunct",
+ "IsSpace",
+ "IsSymbol",
+ "IsTitle",
+ "IsUpper",
+ "Javanese",
+ "Join_Control",
+ "Kaithi",
+ "Kannada",
+ "Katakana",
+ "Kawi",
+ "Kayah_Li",
+ "Kharoshthi",
+ "Khitan_Small_Script",
+ "Khmer",
+ "Khojki",
+ "Khudawadi",
+ "L",
+ "Lao",
+ "Latin",
+ "Lepcha",
+ "Letter",
+ "Limbu",
+ "Linear_A",
+ "Linear_B",
+ "Lisu",
+ "Ll",
+ "Lm",
+ "Lo",
+ "Logical_Order_Exception",
+ "Lower",
+ "LowerCase",
+ "Lt",
+ "Lu",
+ "Lycian",
+ "Lydian",
+ "M",
+ "Mahajani",
+ "Makasar",
+ "Malayalam",
+ "Mandaic",
+ "Manichaean",
+ "Marchen",
+ "Mark",
+ "Masaram_Gondi",
+ "MaxASCII",
+ "MaxCase",
+ "MaxLatin1",
+ "MaxRune",
+ "Mc",
+ "Me",
+ "Medefaidrin",
+ "Meetei_Mayek",
+ "Mende_Kikakui",
+ "Meroitic_Cursive",
+ "Meroitic_Hieroglyphs",
+ "Miao",
+ "Mn",
+ "Modi",
+ "Mongolian",
+ "Mro",
+ "Multani",
+ "Myanmar",
+ "N",
+ "Nabataean",
+ "Nag_Mundari",
+ "Nandinagari",
+ "Nd",
+ "New_Tai_Lue",
+ "Newa",
+ "Nko",
+ "Nl",
+ "No",
+ "Noncharacter_Code_Point",
+ "Number",
+ "Nushu",
+ "Nyiakeng_Puachue_Hmong",
+ "Ogham",
+ "Ol_Chiki",
+ "Old_Hungarian",
+ "Old_Italic",
+ "Old_North_Arabian",
+ "Old_Permic",
+ "Old_Persian",
+ "Old_Sogdian",
+ "Old_South_Arabian",
+ "Old_Turkic",
+ "Old_Uyghur",
+ "Oriya",
+ "Osage",
+ "Osmanya",
+ "Other",
+ "Other_Alphabetic",
+ "Other_Default_Ignorable_Code_Point",
+ "Other_Grapheme_Extend",
+ "Other_ID_Continue",
+ "Other_ID_Start",
+ "Other_Lowercase",
+ "Other_Math",
+ "Other_Uppercase",
+ "P",
+ "Pahawh_Hmong",
+ "Palmyrene",
+ "Pattern_Syntax",
+ "Pattern_White_Space",
+ "Pau_Cin_Hau",
+ "Pc",
+ "Pd",
+ "Pe",
+ "Pf",
+ "Phags_Pa",
+ "Phoenician",
+ "Pi",
+ "Po",
+ "Prepended_Concatenation_Mark",
+ "PrintRanges",
+ "Properties",
+ "Ps",
+ "Psalter_Pahlavi",
+ "Punct",
+ "Quotation_Mark",
+ "Radical",
+ "Range16",
+ "Range32",
+ "RangeTable",
+ "Regional_Indicator",
+ "Rejang",
+ "ReplacementChar",
+ "Runic",
+ "S",
+ "STerm",
+ "Samaritan",
+ "Saurashtra",
+ "Sc",
+ "Scripts",
+ "Sentence_Terminal",
+ "Sharada",
+ "Shavian",
+ "Siddham",
+ "SignWriting",
+ "SimpleFold",
+ "Sinhala",
+ "Sk",
+ "Sm",
+ "So",
+ "Soft_Dotted",
+ "Sogdian",
+ "Sora_Sompeng",
+ "Soyombo",
+ "Space",
+ "SpecialCase",
+ "Sundanese",
+ "Syloti_Nagri",
+ "Symbol",
+ "Syriac",
+ "Tagalog",
+ "Tagbanwa",
+ "Tai_Le",
+ "Tai_Tham",
+ "Tai_Viet",
+ "Takri",
+ "Tamil",
+ "Tangsa",
+ "Tangut",
+ "Telugu",
+ "Terminal_Punctuation",
+ "Thaana",
+ "Thai",
+ "Tibetan",
+ "Tifinagh",
+ "Tirhuta",
+ "Title",
+ "TitleCase",
+ "To",
+ "ToLower",
+ "ToTitle",
+ "ToUpper",
+ "Toto",
+ "TurkishCase",
+ "Ugaritic",
+ "Unified_Ideograph",
+ "Upper",
+ "UpperCase",
+ "UpperLower",
+ "Vai",
+ "Variation_Selector",
+ "Version",
+ "Vithkuqi",
+ "Wancho",
+ "Warang_Citi",
+ "White_Space",
+ "Yezidi",
+ "Yi",
+ "Z",
+ "Zanabazar_Square",
+ "Zl",
+ "Zp",
+ "Zs",
+ },
+ "unicode/utf16": {
+ "AppendRune",
+ "Decode",
+ "DecodeRune",
+ "Encode",
+ "EncodeRune",
+ "IsSurrogate",
+ },
+ "unicode/utf8": {
+ "AppendRune",
+ "DecodeLastRune",
+ "DecodeLastRuneInString",
+ "DecodeRune",
+ "DecodeRuneInString",
+ "EncodeRune",
+ "FullRune",
+ "FullRuneInString",
+ "MaxRune",
+ "RuneCount",
+ "RuneCountInString",
+ "RuneError",
+ "RuneLen",
+ "RuneSelf",
+ "RuneStart",
+ "UTFMax",
+ "Valid",
+ "ValidRune",
+ "ValidString",
+ },
+ "unsafe": {
+ "Add",
+ "Alignof",
+ "Offsetof",
+ "Pointer",
+ "Sizeof",
+ "Slice",
+ "SliceData",
+ "String",
+ "StringData",
+ },
+}