[
  {
    "path": ".gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n\n# Custom Ignores\nstats\n*.profile"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Dean Karn\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "README.md",
    "content": "Package stats\n=============\n\n![Project status](https://img.shields.io/badge/version-1.0.2-green.svg)\n[![Build Status](https://semaphoreci.com/api/v1/projects/b5c5d4f1-ec31-441f-a6d2-88f4e73105df/563578/badge.svg)](https://semaphoreci.com/joeybloggs/stats)\n[![GoDoc](https://godoc.org/gopkg.in/go-playground/stats.v1?status.svg)](https://godoc.org/gopkg.in/go-playground/stats.v1)\n\nPackage stats allows for gathering of statistics regarding your Go application and system it is running on and\nsent them via UDP to a server where you can do whatever you wish to the stats; display, store in database or\nsend off to a logging service.\n\n###### We currently gather the following Go related information:\n\n* # of Garbabage collects\n* Last Garbage Collection\n* Last Garbage Collection Pause Duration\n* Memory Allocated\n* Memory Heap Allocated\n* Memory Heap System Allocated\n* Go version\n* Number of goroutines\n* HTTP request logging; when implemented via middleware\n\n###### And the following System Information:\n\n* Host Information; hostname, OS....\n* CPU Information; type, model, # of cores...\n* Total CPU Timings\n* Per Core CPU Timings\n* Memory + Swap Information\n\nInstallation\n------------\n\nUse go get.\n\n\tgo get gopkg.in/go-playground/stats.v1\n\nor to update\n\n\tgo get -u gopkg.in/go-playground/stats.v1\n\nThen import the validator package into your own code.\n\n\timport \"gopkg.in/go-playground/stats.v1\"\n\n#### Example\nServer\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"gopkg.in/go-playground/stats.v1\"\n)\n\nfunc main() {\n\n\tconfig := &stats.ServerConfig{\n\t\tDomain: \"\",\n\t\tPort:   3008,\n\t\tDebug:  false,\n\t}\n\n\tserver, err := stats.NewServer(config)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfor stat := range server.Run() {\n\n\t\t// calculate CPU times\n\t\t// totalCPUTimes := stat.CalculateTotalCPUTimes()\n\t\t// perCoreCPUTimes := stat.CalculateCPUTimes()\n\n\t\t// Do whatever you want with the data\n\t\t// * Save to database\n\t\t// * Stream elsewhere\n\t\t// * Print to console\n\t\t//\n\n\t\tfmt.Println(stat)\n\t}\n}\n```\n\nClient\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"runtime\"\n\n\t\"gopkg.in/go-playground/stats.v1\"\n)\n\nvar statsClient *stats.ClientStats\n\nfunc main() {\n\n\tserverConfig := &stats.ServerConfig{\n\t\tDomain: \"remoteserver\",\n\t\tPort:   3008,\n\t\tDebug:  false,\n\t}\n\n\tclientConfig := &stats.ClientConfig{\n\t\tDomain:           \"\",\n\t\tPort:             3009,\n\t\tPollInterval:     1000,\n\t\tDebug:            false,\n\t\tLogHostInfo:      true,\n\t\tLogCPUInfo:       true,\n\t\tLogTotalCPUTimes: true,\n\t\tLogPerCPUTimes:   true,\n\t\tLogMemory:        true,\n\t\tLogGoMemory:      true,\n\t}\n\n\tclient, err := stats.NewClient(clientConfig, serverConfig)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgo client.Run()\n\n\t// if you want to capture HTTP requests in a middleware you'll have\n\t// to have access to the client.\n\t// see below for middleware example\n\tstatsClient = client\n}\n\n// LoggingRecoveryHandler ...\n//\n//\n// Middleware example for capturing HTTP Request info\n// NOTE: this is standard go middlware, but could be adapted to other types/styles easily\n//\nfunc LoggingRecoveryHandler(next http.Handler) http.Handler {\n\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\n\t\t// log incoming request\n\t\tlogReq := statsClient.NewHTTPRequest(w, r)\n\n\t\tdefer func() {\n\t\t\tif err := recover(); err != nil {\n\t\t\t\ttrace := make([]byte, 1<<16)\n\t\t\t\tn := runtime.Stack(trace, true)\n\n\t\t\t\t// log failure\n\t\t\t\tlogReq.Failure(fmt.Sprintf(\"%s\\n%s\", err, trace[:n]))\n\n\t\t\t\thttp.Error(w, \"Friendly error message\", 500)\n\t\t\t\treturn\n\t\t\t}\n\t\t}()\n\n\t\tnext.ServeHTTP(logReq.Writer(), r)\n\n\t\t// log completion\n\t\tlogReq.Complete()\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n```\n\nLicense\n------\n- [MIT License](https://github.com/go-playground/stats/blob/v1/LICENSE), Copyright (c) 2015 Dean Karn\n- [BSD License](https://github.com/go-playground/stats/tree/v1/vendor/github.com/shirou/gopsutil/LICENSE)\n\t- Copyright (c) 2014, WAKAYAMA Shirou\n\t- Copyright (c) 2009 The Go Authors. All rights reserved.\n- [BSD License](https://github.com/go-playground/stats/tree/v1/vendor/github.com/shirou/w32/LICENSE), Copyright (c) 2010-2012 The w32 Authors. All rights reserved."
  },
  {
    "path": "client.go",
    "content": "package stats\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\ntype httpStats struct {\n\tlock     sync.RWMutex\n\trequests []*HTTPRequest\n}\n\nfunc (h *httpStats) add(r *HTTPRequest) {\n\th.lock.Lock()\n\tdefer h.lock.Unlock()\n\th.requests = append(h.requests, r)\n}\n\nfunc (h *httpStats) extract() []*HTTPRequest {\n\th.lock.Lock()\n\tdefer h.lock.Unlock()\n\n\told := h.requests\n\th.requests = []*HTTPRequest{}\n\treturn old\n}\n\n// ClientConfig is used to initialize a new ClientStats object\ntype ClientConfig struct {\n\tDomain           string\n\tPort             int\n\tPollInterval     int\n\tDebug            bool\n\tLogHostInfo      bool\n\tLogCPUInfo       bool\n\tLogTotalCPUTimes bool\n\tLogPerCPUTimes   bool\n\tLogMemory        bool\n\tLogGoMemory      bool\n\tCustomBufferSize int\n}\n\n// ClientStats is the object used to collect and send data to the server for processing\ntype ClientStats struct {\n\tlocalAddr        string\n\tserverAddr       string\n\tstop             chan struct{}\n\tinterval         int\n\tdebug            bool\n\thttpStats        *httpStats\n\tlogHostInfo      bool\n\tlogCPUInfo       bool\n\tlogTotalCPUTimes bool\n\tlogPerCPUTimes   bool\n\tlogMemory        bool\n\tlogGoMemory      bool\n\tbufferSize       int\n}\n\n// NewClient create a new client object for use\nfunc NewClient(clientConfig *ClientConfig, serverConfig *ServerConfig) (*ClientStats, error) {\n\n\tbSize := clientConfig.CustomBufferSize\n\tif bSize == 0 {\n\t\tbSize = defaultBufferSize\n\t}\n\n\treturn &ClientStats{\n\t\tlocalAddr:        clientConfig.Domain + \":\" + strconv.Itoa(clientConfig.Port),\n\t\tserverAddr:       serverConfig.Domain + \":\" + strconv.Itoa(serverConfig.Port),\n\t\tinterval:         clientConfig.PollInterval,\n\t\tstop:             make(chan struct{}),\n\t\tdebug:            clientConfig.Debug,\n\t\thttpStats:        new(httpStats),\n\t\tlogHostInfo:      clientConfig.LogHostInfo,\n\t\tlogCPUInfo:       clientConfig.LogCPUInfo,\n\t\tlogTotalCPUTimes: clientConfig.LogTotalCPUTimes,\n\t\tlogPerCPUTimes:   clientConfig.LogPerCPUTimes,\n\t\tlogMemory:        clientConfig.LogMemory,\n\t\tlogGoMemory:      clientConfig.LogGoMemory,\n\t\tbufferSize:       bSize,\n\t}, nil\n}\n\n// Run starts sending the profiling stats to the server\n// NOTE: the server must be running prior to starting\nfunc (c *ClientStats) Run() {\n\n\tvar localAddr *net.UDPAddr\n\tvar serverAddr *net.UDPAddr\n\tvar client *net.UDPConn\n\tvar err error\n\n\tserverAddr, err = net.ResolveUDPAddr(udp, c.serverAddr)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tlocalAddr, err = net.ResolveUDPAddr(udp, c.localAddr)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tclient, err = net.DialUDP(udp, localAddr, serverAddr)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer client.Close()\n\n\tclient.SetWriteBuffer(c.bufferSize)\n\n\tstats := new(Stats)\n\n\tif c.logHostInfo {\n\t\tstats.GetHostInfo()\n\t}\n\n\tif c.logCPUInfo {\n\t\tstats.GetCPUInfo()\n\t}\n\n\tvar bytesWritten int\n\tvar bytes []byte\n\tticker := time.NewTicker(time.Millisecond * time.Duration(c.interval))\n\tdefer ticker.Stop()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ticker.C:\n\n\t\t\tif c.logTotalCPUTimes {\n\t\t\t\tstats.GetTotalCPUTimes()\n\t\t\t}\n\n\t\t\tif c.logPerCPUTimes {\n\t\t\t\tstats.GetCPUTimes()\n\t\t\t}\n\n\t\t\tstats.GetMemoryInfo(c.logMemory, c.logGoMemory)\n\t\t\tstats.HTTPRequests = c.httpStats.extract()\n\n\t\t\tbytes, err = json.Marshal(stats)\n\t\t\tbytesWritten, err = client.Write(bytes)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif c.debug {\n\t\t\t\tfmt.Println(\"Wrote:\", bytesWritten, \"bytes\")\n\t\t\t}\n\n\t\tcase <-c.stop:\n\t\t\tfmt.Println(\"done\")\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// Stop halts the client from sending any more data to the server,\n// but may be run again at any time.\nfunc (c *ClientStats) Stop() {\n\tc.stop <- struct{}{}\n}\n"
  },
  {
    "path": "examples/client/client.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"runtime\"\n\n\t\"gopkg.in/go-playground/stats.v1\"\n)\n\nvar statsClient *stats.ClientStats\n\nfunc main() {\n\n\tserverConfig := &stats.ServerConfig{\n\t\tDomain: \"localhost\",\n\t\tPort:   3008,\n\t\tDebug:  false,\n\t}\n\n\tclientConfig := &stats.ClientConfig{\n\t\tDomain:           \"\",\n\t\tPort:             3009,\n\t\tPollInterval:     1000,\n\t\tDebug:            false,\n\t\tLogHostInfo:      true,\n\t\tLogCPUInfo:       true,\n\t\tLogTotalCPUTimes: true,\n\t\tLogPerCPUTimes:   true,\n\t\tLogMemory:        true,\n\t\tLogGoMemory:      true,\n\t}\n\n\tclient, err := stats.NewClient(clientConfig, serverConfig)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgo client.Run()\n\n\t// if you want to capture HTTP requests in a middleware you'll have\n\t// to have access to the client.\n\t// see below for middleware example\n\tstatsClient = client\n\n\t<-make(chan struct{})\n}\n\n// LoggingRecoveryHandler ...\n//\n//\n// Middleware example for capturing HTTP Request info\n// NOTE: this is standard go middlware, but could be adapted to other types/styles easily\n//\nfunc LoggingRecoveryHandler(next http.Handler) http.Handler {\n\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\n\t\t// log incoming request\n\t\tlogReq := statsClient.NewHTTPRequest(w, r)\n\n\t\tdefer func() {\n\t\t\tif err := recover(); err != nil {\n\t\t\t\ttrace := make([]byte, 1<<16)\n\t\t\t\tn := runtime.Stack(trace, true)\n\n\t\t\t\t// log failure\n\t\t\t\tlogReq.Failure(fmt.Sprintf(\"%s\\n%s\", err, trace[:n]))\n\n\t\t\t\thttp.Error(w, \"Friendly error message\", 500)\n\t\t\t\treturn\n\t\t\t}\n\t\t}()\n\n\t\tnext.ServeHTTP(logReq.Writer(), r)\n\n\t\t// log completion\n\t\tlogReq.Complete()\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "examples/server/server.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"gopkg.in/go-playground/stats.v1\"\n)\n\nfunc main() {\n\n\tconfig := &stats.ServerConfig{\n\t\tDomain: \"\",\n\t\tPort:   3008,\n\t\tDebug:  false,\n\t}\n\n\tserver, err := stats.NewServer(config)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfor stat := range server.Run() {\n\n\t\t// calculate CPU times\n\t\t// totalCPUTimes := stat.CalculateTotalCPUTimes()\n\t\t// perCoreCPUTimes := stat.CalculateCPUTimes()\n\n\t\t// Do whatever you want with the data\n\t\t// * Save to database\n\t\t// * Stream elsewhere\n\t\t// * Print to console\n\t\t//\n\n\t\tfmt.Println(stat)\n\t}\n}\n"
  },
  {
    "path": "http.go",
    "content": "package stats\n\nimport (\n\t\"net/http\"\n\t\"time\"\n)\n\n// LogResponseWritter wraps the standard http.ResponseWritter allowing for more\n// verbose logging\ntype LogResponseWritter struct {\n\tstatus int\n\tsize   int\n\thttp.ResponseWriter\n}\n\n// Status provides an easy way to retrieve the status code\nfunc (w *LogResponseWritter) Status() int {\n\treturn w.status\n}\n\n// Size provides an easy way to retrieve the response size in bytes\nfunc (w *LogResponseWritter) Size() int {\n\treturn w.size\n}\n\n// Header returns & satisfies the http.ResponseWriter interface\nfunc (w *LogResponseWritter) Header() http.Header {\n\treturn w.ResponseWriter.Header()\n}\n\n// Write satisfies the http.ResponseWriter interface and\n// captures data written, in bytes\nfunc (w *LogResponseWritter) Write(data []byte) (int, error) {\n\n\twritten, err := w.ResponseWriter.Write(data)\n\tw.size += written\n\n\treturn written, err\n}\n\n// WriteHeader satisfies the http.ResponseWriter interface and\n// allows us to cach the status code\nfunc (w *LogResponseWritter) WriteHeader(statusCode int) {\n\n\tw.status = statusCode\n\tw.ResponseWriter.WriteHeader(statusCode)\n}\n\n// HTTPRequest contains information about the life of an http request\ntype HTTPRequest struct {\n\tURL                   string      `json:\"url\"`\n\tMethod                string      `json:\"method\"`\n\tRequestContentLength  int64       `json:\"reqContent\"`\n\tHeaders               http.Header `json:\"headers\"`\n\tStart                 time.Time   `json:\"start\"`\n\tEnd                   time.Time   `json:\"end\"`\n\tDuration              int64       `json:\"duration\"`\n\tResponseContentLength int64       `json:\"resContent\"`\n\tStatusCode            int         `json:\"status\"`\n\tHasErrors             bool        `json:\"hasErrs\"`\n\tError                 string      `json:\"err\"`\n\twriter                *LogResponseWritter\n\tclientStats           *ClientStats\n}\n\n// NewHTTPRequest creates a new HTTPRequest for monitoring which wraps the ResponseWriter in order\n// to collect stats so you need to call the Writer() function from the HTTPRequest created by this call\nfunc (s *ClientStats) NewHTTPRequest(w http.ResponseWriter, r *http.Request) *HTTPRequest {\n\n\treturn &HTTPRequest{\n\t\tStart:                time.Now().UTC(),\n\t\tURL:                  r.URL.String(),\n\t\tMethod:               r.Method,\n\t\tRequestContentLength: r.ContentLength,\n\t\tHeaders:              r.Header,\n\t\twriter:               &LogResponseWritter{status: 200, ResponseWriter: w},\n\t\tclientStats:          s,\n\t}\n}\n\n// Writer returns a wrapped http.ResponseWriter for logging purposes\nfunc (r *HTTPRequest) Writer() http.ResponseWriter {\n\treturn r.writer\n}\n\n// Failure records an HTTP failure and automatically completes the request\nfunc (r *HTTPRequest) Failure(err string) {\n\tr.HasErrors = true\n\tr.Error = err\n\tr.Complete()\n}\n\n// Complete finalizes an HTTPRequest and logs it.\nfunc (r *HTTPRequest) Complete() {\n\n\tr.End = time.Now().UTC()\n\tr.Duration = r.End.Sub(r.Start).Nanoseconds()\n\tr.ResponseContentLength = int64(r.writer.Size())\n\tr.StatusCode = r.writer.Status()\n\tr.clientStats.httpStats.add(r)\n}\n"
  },
  {
    "path": "server.go",
    "content": "package stats\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n)\n\n// ServerConfig is used to initialize a new ServerStats object\ntype ServerConfig struct {\n\tDomain           string\n\tPort             int\n\tDebug            bool\n\tCustomBufferSize int\n}\n\n// ServerStats is the object used to receive, store and send data for usage\ntype ServerStats struct {\n\taddr       string\n\tdebug      bool\n\tbufferSize int\n}\n\n// NewServer create a new server object for use\nfunc NewServer(config *ServerConfig) (*ServerStats, error) {\n\n\tbSize := config.CustomBufferSize\n\tif bSize == 0 {\n\t\tbSize = defaultBufferSize\n\t}\n\n\treturn &ServerStats{\n\t\taddr:       config.Domain + \":\" + strconv.Itoa(config.Port),\n\t\tdebug:      config.Debug,\n\t\tbufferSize: bSize,\n\t}, nil\n}\n\n// Run starts receiving the profiling stats for storage and usage\nfunc (s *ServerStats) Run() <-chan *Stats {\n\n\tresults := make(chan *Stats)\n\n\tgo func(results chan<- *Stats) {\n\n\t\tvar serverAddr *net.UDPAddr\n\t\tvar server *net.UDPConn\n\t\tvar err error\n\n\t\tserverAddr, err = net.ResolveUDPAddr(udp, s.addr)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tserver, err = net.ListenUDP(udp, serverAddr)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdefer server.Close()\n\n\t\tserver.SetReadBuffer(s.bufferSize)\n\n\t\tvar addr *net.UDPAddr\n\t\tvar bytesRead int\n\t\tbuff := make([]byte, s.bufferSize)\n\t\tstats := new(Stats)\n\n\t\tfor {\n\n\t\t\tbytesRead, addr, err = server.ReadFromUDP(buff)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"Error:%s bytes read %d\\n\", err, bytesRead)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif s.debug {\n\t\t\t\tfmt.Printf(\"Recieved: %s from %s Read %d bytes\\n\", string(buff[0:bytesRead]), addr, bytesRead)\n\t\t\t}\n\n\t\t\tif err := json.Unmarshal(buff[0:bytesRead], &stats); err != nil {\n\t\t\t\tfmt.Println(\"Error Unmarshalling:\", err)\n\t\t\t}\n\n\t\t\tresults <- stats\n\t\t}\n\t}(results)\n\n\treturn results\n}\n"
  },
  {
    "path": "stats.go",
    "content": "package stats\n\nimport (\n\t\"runtime\"\n\n\t\"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/host\"\n\t\"github.com/shirou/gopsutil/mem\"\n)\n\nconst (\n\tudp               = \"udp\"\n\tdefaultBufferSize = 1024 * 1000\n)\n\n// CPUPercentages contains the CPU percentage information\ntype CPUPercentages struct {\n\tCPU       string\n\tUser      float64\n\tSystem    float64\n\tIdle      float64\n\tNice      float64\n\tIOWait    float64\n\tIRQ       float64\n\tSoftIRQ   float64\n\tSteal     float64\n\tGuest     float64\n\tGuestNice float64\n\tStolen    float64\n\tTotal     float64\n}\n\n// GoMemory contains go specific memory metrics\ntype GoMemory struct {\n\tNumGC               uint32 `json:\"numgc\"`\n\tLastGC              uint64 `json:\"lastgc\"`\n\tLastGCPauseDuration uint64 `json:\"lastgcpause\"`\n\tAlloc               uint64 `json:\"alloc\"`\n\tHeapAlloc           uint64 `json:\"heap\"`\n\tHeapSys             uint64 `json:\"sys\"`\n\tlastNumGC           uint32\n\tmem                 *runtime.MemStats\n}\n\n// GoInfo contains go specific metrics and stats\ntype GoInfo struct {\n\tVersion    string   `json:\"gover\"`\n\tMemory     GoMemory `json:\"gomem\"`\n\tGoRoutines int      `json:\"goroutines\"`\n}\n\n// MemInfo contains memory info including swap information\ntype MemInfo struct {\n\tMemory *mem.VirtualMemoryStat `json:\"mem,omitempty\"`\n\tSwap   *mem.SwapMemoryStat    `json:\"swap,omitempty\"`\n}\n\n// CPUInfo contains CPU information\ntype CPUInfo struct {\n\tCPU            []cpu.CPUInfoStat  `json:\"cpu,omitempty\"`\n\tPerCPUTimes    []cpu.CPUTimesStat `json:\"percputimes,omitempty\"`\n\tTotalTimes     []cpu.CPUTimesStat `json:\"totaltimes,omitempty\"`\n\tPrevCPUTimes   []cpu.CPUTimesStat `json:\"prevpercputimes,omitempty\"`\n\tPrevTotalTimes []cpu.CPUTimesStat `json:\"prevtotaltimes,omitempty\"`\n}\n\n// Stats contains all of the statistics to be passed and Encoded/Decoded on the Client and Server sides\ntype Stats struct {\n\tHostInfo     *host.HostInfoStat `json:\"hostInfo,omitempty\"`\n\tCPUInfo      *CPUInfo           `json:\"cpu,omitempty\"`\n\tMemInfo      *MemInfo           `json:\"memInfo,omitempty\"`\n\tGoInfo       *GoInfo            `json:\"goInfo,omitempty\"`\n\tHTTPRequests []*HTTPRequest     `json:\"http\"`\n}\n\nfunc (s *Stats) initGoInfo() {\n\ts.GoInfo = new(GoInfo)\n\ts.GoInfo.Memory.mem = new(runtime.MemStats)\n}\n\n// GetHostInfo populates Stats with host system information\nfunc (s *Stats) GetHostInfo() {\n\n\tif s.GoInfo == nil {\n\t\ts.initGoInfo()\n\t}\n\n\tinfo, _ := host.HostInfo()\n\n\ts.HostInfo = info\n\ts.GoInfo.Version = runtime.Version()\n}\n\n// GetCPUInfo populates Stats with hosts CPU information\nfunc (s *Stats) GetCPUInfo() {\n\n\tif s.CPUInfo == nil {\n\t\ts.CPUInfo = new(CPUInfo)\n\t}\n\n\ts.CPUInfo.CPU, _ = cpu.CPUInfo()\n}\n\n// GetCPUTimes populates Stats with hosts CPU timing information\nfunc (s *Stats) GetCPUTimes() {\n\n\tif s.CPUInfo == nil {\n\t\ts.CPUInfo = new(CPUInfo)\n\t}\n\n\ts.CPUInfo.PrevCPUTimes = s.CPUInfo.PerCPUTimes\n\ts.CPUInfo.PerCPUTimes, _ = cpu.CPUTimes(true)\n\n\tif len(s.CPUInfo.PrevCPUTimes) == 0 {\n\t\ts.CPUInfo.PrevCPUTimes = s.CPUInfo.PerCPUTimes\n\t}\n}\n\n// CalculateCPUTimes calculates the total CPU times percentages per core\nfunc (s *Stats) CalculateCPUTimes() []CPUPercentages {\n\n\tpercentages := make([]CPUPercentages, len(s.CPUInfo.PerCPUTimes))\n\n\tif len(s.CPUInfo.PrevCPUTimes) == 0 || len(s.CPUInfo.PerCPUTimes) == 0 {\n\t\treturn percentages\n\t}\n\n\tvar diff float64\n\tvar total float64\n\tvar prevTotal float64\n\tvar prevStat cpu.CPUTimesStat\n\tvar cpuStat *CPUPercentages\n\n\tfor i, t := range s.CPUInfo.PerCPUTimes {\n\t\tcpuStat = &percentages[i]\n\t\tprevStat = s.CPUInfo.PrevCPUTimes[i]\n\n\t\ttotal = t.User + t.System + t.Idle + t.Nice + t.Iowait + t.Irq + t.Softirq + t.Steal + t.Guest + t.GuestNice + t.Stolen\n\t\tprevTotal = prevStat.User + prevStat.System + prevStat.Idle + prevStat.Nice + prevStat.Iowait + prevStat.Irq + prevStat.Softirq + prevStat.Steal + prevStat.Guest + prevStat.GuestNice + prevStat.Stolen\n\n\t\tdiff = total - prevTotal\n\n\t\tcpuStat.CPU = t.CPU\n\t\tcpuStat.User = (t.User - prevStat.User) / diff * 100\n\t\tcpuStat.System = (t.System - prevStat.System) / diff * 100\n\t\tcpuStat.Idle = (t.Idle - prevStat.Idle) / diff * 100\n\t\tcpuStat.Nice = (t.Nice - prevStat.Nice) / diff * 100\n\t\tcpuStat.IOWait = (t.Iowait - prevStat.Iowait) / diff * 100\n\t\tcpuStat.IRQ = (t.Irq - prevStat.Irq) / diff * 100\n\t\tcpuStat.SoftIRQ = (t.Softirq - prevStat.Softirq) / diff * 100\n\t\tcpuStat.Steal = (t.Steal - prevStat.Steal) / diff * 100\n\t\tcpuStat.Guest = (t.Guest - prevStat.Guest) / diff * 100\n\t\tcpuStat.GuestNice = (t.GuestNice - prevStat.GuestNice) / diff * 100\n\t\tcpuStat.Stolen = (t.Stolen - prevStat.Stolen) / diff * 100\n\t\tcpuStat.Total = 100 * (diff - (t.Idle - prevStat.Idle)) / diff\n\t}\n\n\treturn percentages\n}\n\n// GetAllCPUInfo populates Stats with hosts CPU information and Timings\nfunc (s *Stats) GetAllCPUInfo() {\n\ts.GetCPUInfo()\n\ts.GetCPUTimes()\n}\n\n// GetTotalCPUTimes populates Stats with hosts CPU timing information\nfunc (s *Stats) GetTotalCPUTimes() {\n\n\tif s.CPUInfo == nil {\n\t\ts.CPUInfo = new(CPUInfo)\n\t}\n\n\ts.CPUInfo.PrevTotalTimes = s.CPUInfo.TotalTimes\n\ts.CPUInfo.TotalTimes, _ = cpu.CPUTimes(false)\n\n\tif len(s.CPUInfo.PrevTotalTimes) == 0 {\n\t\ts.CPUInfo.PrevTotalTimes = s.CPUInfo.TotalTimes\n\t}\n}\n\n// CalculateTotalCPUTimes calculates the total CPU times percentages\nfunc (s *Stats) CalculateTotalCPUTimes() []CPUPercentages {\n\n\tpercentages := make([]CPUPercentages, len(s.CPUInfo.TotalTimes))\n\n\tif len(s.CPUInfo.PrevTotalTimes) == 0 || len(s.CPUInfo.TotalTimes) == 0 {\n\t\treturn percentages\n\t}\n\n\tvar diff float64\n\tvar total float64\n\tvar prevTotal float64\n\tvar prevStat cpu.CPUTimesStat\n\tvar cpuStat *CPUPercentages\n\n\tfor i, t := range s.CPUInfo.TotalTimes {\n\t\tcpuStat = &percentages[i]\n\t\tprevStat = s.CPUInfo.PrevTotalTimes[i]\n\n\t\ttotal = t.User + t.System + t.Idle + t.Nice + t.Iowait + t.Irq + t.Softirq + t.Steal + t.Guest + t.GuestNice + t.Stolen\n\t\tprevTotal = prevStat.User + prevStat.System + prevStat.Idle + prevStat.Nice + prevStat.Iowait + prevStat.Irq + prevStat.Softirq + prevStat.Steal + prevStat.Guest + prevStat.GuestNice + prevStat.Stolen\n\n\t\tdiff = total - prevTotal\n\n\t\tcpuStat.CPU = t.CPU\n\t\tcpuStat.User = (t.User - prevStat.User) / diff * 100\n\t\tcpuStat.System = (t.System - prevStat.System) / diff * 100\n\t\tcpuStat.Idle = (t.Idle - prevStat.Idle) / diff * 100\n\t\tcpuStat.Nice = (t.Nice - prevStat.Nice) / diff * 100\n\t\tcpuStat.IOWait = (t.Iowait - prevStat.Iowait) / diff * 100\n\t\tcpuStat.IRQ = (t.Irq - prevStat.Irq) / diff * 100\n\t\tcpuStat.SoftIRQ = (t.Softirq - prevStat.Softirq) / diff * 100\n\t\tcpuStat.Steal = (t.Steal - prevStat.Steal) / diff * 100\n\t\tcpuStat.Guest = (t.Guest - prevStat.Guest) / diff * 100\n\t\tcpuStat.GuestNice = (t.GuestNice - prevStat.GuestNice) / diff * 100\n\t\tcpuStat.Stolen = (t.Stolen - prevStat.Stolen) / diff * 100\n\t\tcpuStat.Total = 100 * (diff - (t.Idle - prevStat.Idle)) / diff\n\t}\n\n\treturn percentages\n}\n\n// GetMemoryInfo populates Stats with host and go process memory information\nfunc (s *Stats) GetMemoryInfo(logMemory, logGoMemory bool) {\n\n\tif logGoMemory {\n\t\tif s.GoInfo == nil {\n\t\t\ts.initGoInfo()\n\t\t}\n\n\t\truntime.ReadMemStats(s.GoInfo.Memory.mem)\n\t\ts.GoInfo.GoRoutines = runtime.NumGoroutine()\n\t\ts.GoInfo.Memory.Alloc = s.GoInfo.Memory.mem.Alloc\n\t\ts.GoInfo.Memory.HeapAlloc = s.GoInfo.Memory.mem.HeapAlloc\n\t\ts.GoInfo.Memory.HeapSys = s.GoInfo.Memory.mem.HeapSys\n\n\t\tif s.GoInfo.Memory.LastGC != s.GoInfo.Memory.mem.LastGC {\n\t\t\ts.GoInfo.Memory.LastGC = s.GoInfo.Memory.mem.LastGC\n\t\t\ts.GoInfo.Memory.NumGC = s.GoInfo.Memory.mem.NumGC - s.GoInfo.Memory.lastNumGC\n\t\t\ts.GoInfo.Memory.lastNumGC = s.GoInfo.Memory.mem.NumGC\n\t\t\ts.GoInfo.Memory.LastGCPauseDuration = s.GoInfo.Memory.mem.PauseNs[(s.GoInfo.Memory.mem.NumGC+255)%256]\n\t\t} else {\n\t\t\ts.GoInfo.Memory.NumGC = 0\n\t\t\ts.GoInfo.Memory.LastGCPauseDuration = 0\n\t\t}\n\t}\n\n\tif logMemory {\n\n\t\tif s.MemInfo == nil {\n\t\t\ts.MemInfo = new(MemInfo)\n\t\t}\n\n\t\ts.MemInfo.Memory, _ = mem.VirtualMemory()\n\t\ts.MemInfo.Swap, _ = mem.SwapMemory()\n\t}\n}\n"
  },
  {
    "path": "stats_test.go",
    "content": "package stats\n\nimport (\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t. \"gopkg.in/go-playground/assert.v1\"\n)\n\n// NOTES:\n// - Run \"go test\" to run tests\n// - Run \"gocov test | gocov report\" to report on test converage by file\n// - Run \"gocov test | gocov annotate -\" to report on all code and functions, those ,marked with \"MISS\" were never called\n//\n// or\n//\n// -- may be a good idea to change to output path to somewherelike /tmp\n// go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html\n//\n\nfunc TestMain(m *testing.M) {\n\t// setup\n\t//\n\t// setup server for tests\n\tconfig := &ServerConfig{\n\t\tDomain: \"\",\n\t\tPort:   3010,\n\t}\n\n\tserver, err := NewServer(config)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgo server.Run()\n\n\t<-time.Tick(time.Second * 1)\n\n\tos.Exit(m.Run())\n\n\t// teardown\n}\n\nfunc TestClientSendingData(t *testing.T) {\n\n\tserverConfig := &ServerConfig{\n\t\tDomain: \"\",\n\t\tPort:   3010,\n\t}\n\n\tlocalConfig := &ClientConfig{\n\t\tDomain:           \"\",\n\t\tPort:             3011,\n\t\tPollInterval:     1000,\n\t\tLogHostInfo:      true,\n\t\tLogCPUInfo:       true,\n\t\tLogTotalCPUTimes: true,\n\t\tLogPerCPUTimes:   true,\n\t\tLogMemory:        true,\n\t\tLogGoMemory:      true,\n\t}\n\n\tclient, err := NewClient(localConfig, serverConfig)\n\tEqual(t, err, nil)\n\n\tgo client.Run()\n\n\tticker := time.NewTicker(time.Second * 1)\n\ti := 0\n\tfor range ticker.C {\n\t\tif i == 1 {\n\t\t\tclient.Stop()\n\t\t\treturn\n\t\t}\n\t\ti++\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/StackExchange/wmi/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Stack Exchange\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/StackExchange/wmi/README.md",
    "content": "wmi\n===\n\nPackage wmi provides a WQL interface for WMI on Windows.\n"
  },
  {
    "path": "vendor/github.com/StackExchange/wmi/wmi.go",
    "content": "// +build windows\n\n/*\nPackage wmi provides a WQL interface for WMI on Windows.\n\nExample code to print names of running processes:\n\n\ttype Win32_Process struct {\n\t\tName string\n\t}\n\n\tfunc main() {\n\t\tvar dst []Win32_Process\n\t\tq := wmi.CreateQuery(&dst, \"\")\n\t\terr := wmi.Query(q, &dst)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tfor i, v := range dst {\n\t\t\tprintln(i, v.Name)\n\t\t}\n\t}\n\n*/\npackage wmi\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-ole/go-ole\"\n\t\"github.com/go-ole/go-ole/oleutil\"\n)\n\nvar l = log.New(os.Stdout, \"\", log.LstdFlags)\n\nvar (\n\tErrInvalidEntityType = errors.New(\"wmi: invalid entity type\")\n\t// ErrNilCreateObject is the error returned if CreateObject returns nil even\n\t// if the error was nil.\n\tErrNilCreateObject = errors.New(\"wmi: create object returned nil\")\n\tlock               sync.Mutex\n)\n\n// S_FALSE is returned by CoInitializeEx if it was already called on this thread.\nconst S_FALSE = 0x00000001\n\n// QueryNamespace invokes Query with the given namespace on the local machine.\nfunc QueryNamespace(query string, dst interface{}, namespace string) error {\n\treturn Query(query, dst, nil, namespace)\n}\n\n// Query runs the WQL query and appends the values to dst.\n//\n// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in\n// the query must have the same name in dst. Supported types are all signed and\n// unsigned integers, time.Time, string, bool, or a pointer to one of those.\n// Array types are not supported.\n//\n// By default, the local machine and default namespace are used. These can be\n// changed using connectServerArgs. See\n// http://msdn.microsoft.com/en-us/library/aa393720.aspx for details.\n//\n// Query is a wrapper around DefaultClient.Query.\nfunc Query(query string, dst interface{}, connectServerArgs ...interface{}) error {\n\treturn DefaultClient.Query(query, dst, connectServerArgs...)\n}\n\n// A Client is an WMI query client.\n//\n// Its zero value (DefaultClient) is a usable client.\ntype Client struct {\n\t// NonePtrZero specifies if nil values for fields which aren't pointers\n\t// should be returned as the field types zero value.\n\t//\n\t// Setting this to true allows stucts without pointer fields to be used\n\t// without the risk failure should a nil value returned from WMI.\n\tNonePtrZero bool\n\n\t// PtrNil specifies if nil values for pointer fields should be returned\n\t// as nil.\n\t//\n\t// Setting this to true will set pointer fields to nil where WMI\n\t// returned nil, otherwise the types zero value will be returned.\n\tPtrNil bool\n\n\t// AllowMissingFields specifies that struct fields not present in the\n\t// query result should not result in an error.\n\t//\n\t// Setting this to true allows custom queries to be used with full\n\t// struct definitions instead of having to define multiple structs.\n\tAllowMissingFields bool\n}\n\n// DefaultClient is the default Client and is used by Query, QueryNamespace\nvar DefaultClient = &Client{}\n\n// Query runs the WQL query and appends the values to dst.\n//\n// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in\n// the query must have the same name in dst. Supported types are all signed and\n// unsigned integers, time.Time, string, bool, or a pointer to one of those.\n// Array types are not supported.\n//\n// By default, the local machine and default namespace are used. These can be\n// changed using connectServerArgs. See\n// http://msdn.microsoft.com/en-us/library/aa393720.aspx for details.\nfunc (c *Client) Query(query string, dst interface{}, connectServerArgs ...interface{}) error {\n\tdv := reflect.ValueOf(dst)\n\tif dv.Kind() != reflect.Ptr || dv.IsNil() {\n\t\treturn ErrInvalidEntityType\n\t}\n\tdv = dv.Elem()\n\tmat, elemType := checkMultiArg(dv)\n\tif mat == multiArgTypeInvalid {\n\t\treturn ErrInvalidEntityType\n\t}\n\n\tlock.Lock()\n\tdefer lock.Unlock()\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\terr := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)\n\tif err != nil {\n\t\toleCode := err.(*ole.OleError).Code()\n\t\tif oleCode != ole.S_OK && oleCode != S_FALSE {\n\t\t\treturn err\n\t\t}\n\t}\n\tdefer ole.CoUninitialize()\n\n\tunknown, err := oleutil.CreateObject(\"WbemScripting.SWbemLocator\")\n\tif err != nil {\n\t\treturn err\n\t} else if unknown == nil {\n\t\treturn ErrNilCreateObject\n\t}\n\tdefer unknown.Release()\n\n\twmi, err := unknown.QueryInterface(ole.IID_IDispatch)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer wmi.Release()\n\n\t// service is a SWbemServices\n\tserviceRaw, err := oleutil.CallMethod(wmi, \"ConnectServer\", connectServerArgs...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tservice := serviceRaw.ToIDispatch()\n\tdefer serviceRaw.Clear()\n\n\t// result is a SWBemObjectSet\n\tresultRaw, err := oleutil.CallMethod(service, \"ExecQuery\", query)\n\tif err != nil {\n\t\treturn err\n\t}\n\tresult := resultRaw.ToIDispatch()\n\tdefer resultRaw.Clear()\n\n\tcount, err := oleInt64(result, \"Count\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tenumProperty, err := result.GetProperty(\"_NewEnum\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer enumProperty.Clear()\n\n\tenum, err := enumProperty.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif enum == nil {\n\t\treturn fmt.Errorf(\"can't get IEnumVARIANT, enum is nil\")\n\t}\n\tdefer enum.Release()\n\n\t// Initialize a slice with Count capacity\n\tdv.Set(reflect.MakeSlice(dv.Type(), 0, int(count)))\n\n\tvar errFieldMismatch error\n\tfor itemRaw, length, err := enum.Next(1); length > 0; itemRaw, length, err = enum.Next(1) {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr := func() error {\n\t\t\t// item is a SWbemObject, but really a Win32_Process\n\t\t\titem := itemRaw.ToIDispatch()\n\t\t\tdefer item.Release()\n\n\t\t\tev := reflect.New(elemType)\n\t\t\tif err = c.loadEntity(ev.Interface(), item); err != nil {\n\t\t\t\tif _, ok := err.(*ErrFieldMismatch); ok {\n\t\t\t\t\t// We continue loading entities even in the face of field mismatch errors.\n\t\t\t\t\t// If we encounter any other error, that other error is returned. Otherwise,\n\t\t\t\t\t// an ErrFieldMismatch is returned.\n\t\t\t\t\terrFieldMismatch = err\n\t\t\t\t} else {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif mat != multiArgTypeStructPtr {\n\t\t\t\tev = ev.Elem()\n\t\t\t}\n\t\t\tdv.Set(reflect.Append(dv, ev))\n\t\t\treturn nil\n\t\t}()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn errFieldMismatch\n}\n\n// ErrFieldMismatch is returned when a field is to be loaded into a different\n// type than the one it was stored from, or when a field is missing or\n// unexported in the destination struct.\n// StructType is the type of the struct pointed to by the destination argument.\ntype ErrFieldMismatch struct {\n\tStructType reflect.Type\n\tFieldName  string\n\tReason     string\n}\n\nfunc (e *ErrFieldMismatch) Error() string {\n\treturn fmt.Sprintf(\"wmi: cannot load field %q into a %q: %s\",\n\t\te.FieldName, e.StructType, e.Reason)\n}\n\nvar timeType = reflect.TypeOf(time.Time{})\n\n// loadEntity loads a SWbemObject into a struct pointer.\nfunc (c *Client) loadEntity(dst interface{}, src *ole.IDispatch) (errFieldMismatch error) {\n\tv := reflect.ValueOf(dst).Elem()\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tf := v.Field(i)\n\t\tof := f\n\t\tisPtr := f.Kind() == reflect.Ptr\n\t\tif isPtr {\n\t\t\tptr := reflect.New(f.Type().Elem())\n\t\t\tf.Set(ptr)\n\t\t\tf = f.Elem()\n\t\t}\n\t\tn := v.Type().Field(i).Name\n\t\tif !f.CanSet() {\n\t\t\treturn &ErrFieldMismatch{\n\t\t\t\tStructType: of.Type(),\n\t\t\t\tFieldName:  n,\n\t\t\t\tReason:     \"CanSet() is false\",\n\t\t\t}\n\t\t}\n\t\tprop, err := oleutil.GetProperty(src, n)\n\t\tif err != nil {\n\t\t\tif !c.AllowMissingFields {\n\t\t\t\terrFieldMismatch = &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"no such struct field\",\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tdefer prop.Clear()\n\n\t\tswitch val := prop.Value().(type) {\n\t\tcase int8, int16, int32, int64, int:\n\t\t\tv := reflect.ValueOf(val).Int()\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tf.SetInt(v)\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tf.SetUint(uint64(v))\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not an integer class\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase uint8, uint16, uint32, uint64:\n\t\t\tv := reflect.ValueOf(val).Uint()\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tf.SetInt(int64(v))\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tf.SetUint(v)\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not an integer class\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase string:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.String:\n\t\t\t\tf.SetString(val)\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tiv, err := strconv.ParseInt(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tf.SetInt(iv)\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tuv, err := strconv.ParseUint(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tf.SetUint(uv)\n\t\t\tcase reflect.Struct:\n\t\t\t\tswitch f.Type() {\n\t\t\t\tcase timeType:\n\t\t\t\t\tif len(val) == 25 {\n\t\t\t\t\t\tmins, err := strconv.Atoi(val[22:])\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval = val[:22] + fmt.Sprintf(\"%02d%02d\", mins/60, mins%60)\n\t\t\t\t\t}\n\t\t\t\t\tt, err := time.Parse(\"20060102150405.000000-0700\", val)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tf.Set(reflect.ValueOf(t))\n\t\t\t\t}\n\t\t\t}\n\t\tcase bool:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Bool:\n\t\t\t\tf.SetBool(val)\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not a bool\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase float32:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Float32:\n\t\t\t\tf.SetFloat(float64(val))\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not a Float32\",\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\ttypeof := reflect.TypeOf(val)\n\t\t\tif typeof == nil && (isPtr || c.NonePtrZero) {\n\t\t\t\tif (isPtr && c.PtrNil) || (!isPtr && c.NonePtrZero) {\n\t\t\t\t\tof.Set(reflect.Zero(of.Type()))\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn &ErrFieldMismatch{\n\t\t\t\tStructType: of.Type(),\n\t\t\t\tFieldName:  n,\n\t\t\t\tReason:     fmt.Sprintf(\"unsupported type (%T)\", val),\n\t\t\t}\n\t\t}\n\t}\n\treturn errFieldMismatch\n}\n\ntype multiArgType int\n\nconst (\n\tmultiArgTypeInvalid multiArgType = iota\n\tmultiArgTypeStruct\n\tmultiArgTypeStructPtr\n)\n\n// checkMultiArg checks that v has type []S, []*S for some struct type S.\n//\n// It returns what category the slice's elements are, and the reflect.Type\n// that represents S.\nfunc checkMultiArg(v reflect.Value) (m multiArgType, elemType reflect.Type) {\n\tif v.Kind() != reflect.Slice {\n\t\treturn multiArgTypeInvalid, nil\n\t}\n\telemType = v.Type().Elem()\n\tswitch elemType.Kind() {\n\tcase reflect.Struct:\n\t\treturn multiArgTypeStruct, elemType\n\tcase reflect.Ptr:\n\t\telemType = elemType.Elem()\n\t\tif elemType.Kind() == reflect.Struct {\n\t\t\treturn multiArgTypeStructPtr, elemType\n\t\t}\n\t}\n\treturn multiArgTypeInvalid, nil\n}\n\nfunc oleInt64(item *ole.IDispatch, prop string) (int64, error) {\n\tv, err := oleutil.GetProperty(item, prop)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer v.Clear()\n\n\ti := int64(v.Val)\n\treturn i, nil\n}\n\n// CreateQuery returns a WQL query string that queries all columns of src. where\n// is an optional string that is appended to the query, to be used with WHERE\n// clauses. In such a case, the \"WHERE\" string should appear at the beginning.\nfunc CreateQuery(src interface{}, where string) string {\n\tvar b bytes.Buffer\n\tb.WriteString(\"SELECT \")\n\ts := reflect.Indirect(reflect.ValueOf(src))\n\tt := s.Type()\n\tif s.Kind() == reflect.Slice {\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() != reflect.Struct {\n\t\treturn \"\"\n\t}\n\tvar fields []string\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfields = append(fields, t.Field(i).Name)\n\t}\n\tb.WriteString(strings.Join(fields, \", \"))\n\tb.WriteString(\" FROM \")\n\tb.WriteString(t.Name())\n\tb.WriteString(\" \" + where)\n\treturn b.String()\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ChangeLog.md",
    "content": "# Version 1.x.x\n\n* **Add more test cases and reference new test COM server project.** (Placeholder for future additions)\n\n# Version 1.2.0-alphaX\n\n**Minimum supported version is now Go 1.4. Go 1.1 support is deprecated, but should still build.**\n\n * Added CI configuration for Travis-CI and AppVeyor.\n * Added test InterfaceID and ClassID for the COM Test Server project.\n * Added more inline documentation (#83).\n * Added IEnumVARIANT implementation (#88).\n * Added IEnumVARIANT test cases (#99, #100, #101).\n * Added support for retrieving `time.Time` from VARIANT (#92).\n * Added test case for IUnknown (#64).\n * Added test case for IDispatch (#64).\n * Added test cases for scalar variants (#64, #76).\n\n# Version 1.1.1\n\n * Fixes for Linux build.\n * Fixes for Windows build.\n\n# Version 1.1.0\n\nThe change to provide building on all platforms is a new feature. The increase in minor version reflects that and allows those who wish to stay on 1.0.x to continue to do so. Support for 1.0.x will be limited to bug fixes.\n\n * Move GUID out of variables.go into its own file to make new documentation available.\n * Move OleError out of ole.go into its own file to make new documentation available.\n * Add documentation to utility functions.\n * Add documentation to variant receiver functions.\n * Add documentation to ole structures.\n * Make variant available to other systems outside of Windows.\n * Make OLE structures available to other systems outside of Windows.\n\n## New Features\n\n * Library should now be built on all platforms supported by Go. Library will NOOP on any platform that is not Windows.\n * More functions are now documented and available on godoc.org.\n\n# Version 1.0.1\n\n 1. Fix package references from repository location change.\n\n# Version 1.0.0\n\nThis version is stable enough for use. The COM API is still incomplete, but provides enough functionality for accessing COM servers using IDispatch interface.\n\nThere is no changelog for this version. Check commits for history.\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/README.md",
    "content": "#Go OLE\n\n[![Build status](https://ci.appveyor.com/api/projects/status/qr0u2sf7q43us9fj?svg=true)](https://ci.appveyor.com/project/jacobsantos/go-ole-jgs28)\n[![Build Status](https://travis-ci.org/go-ole/go-ole.svg?branch=master)](https://travis-ci.org/go-ole/go-ole)\n[![GoDoc](https://godoc.org/github.com/go-ole/go-ole?status.svg)](https://godoc.org/github.com/go-ole/go-ole)\n\nGo bindings for Windows COM using shared libraries instead of cgo.\n\nBy Yasuhiro Matsumoto.\n\n## Install\n\nTo experiment with go-ole, you can just compile and run the example program:\n\n```\ngo get github.com/go-ole/go-ole\ncd /path/to/go-ole/\ngo test\n\ncd /path/to/go-ole/example/excel\ngo run excel.go\n```\n\n## Continuous Integration\n\nContinuous integration configuration has been added for both Travis-CI and AppVeyor. You will have to add these to your own account for your fork in order for it to run.\n\n**Travis-CI**\n\nTravis-CI was added to check builds on Linux to ensure that `go get` works when cross building. Currently, Travis-CI is not used to test cross-building, but this may be changed in the future. It is also not currently possible to test the library on Linux, since COM API is specific to Windows and it is not currently possible to run a COM server on Linux or even connect to a remote COM server.\n\n**AppVeyor**\n\nAppVeyor is used to build on Windows using the (in-development) test COM server. It is currently only used to test the build and ensure that the code works on Windows. It will be used to register a COM server and then run the test cases based on the test COM server.\n\nThe tests currently do run and do pass and this should be maintained with commits.\n\n##Versioning\n\nGo OLE uses [semantic versioning](http://semver.org) for version numbers, which is similar to the version contract of the Go language. Which means that the major version will always maintain backwards compatibility with minor versions. Minor versions will only add new additions and changes. Fixes will always be in patch. \n\nThis contract should allow you to upgrade to new minor and patch versions without breakage or modifications to your existing code. Leave a ticket, if there is breakage, so that it could be fixed.\n\n##LICENSE\n\nUnder the MIT License: http://mattn.mit-license.org/2013\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/appveyor.yml",
    "content": "# Notes:\n#   - Minimal appveyor.yml file is an empty file. All sections are optional.\n#   - Indent each level of configuration with 2 spaces. Do not use tabs!\n#   - All section names are case-sensitive.\n#   - Section names should be unique on each level.\n\nversion: \"1.3.0.{build}-alpha-{branch}\"\n\nos: Windows Server 2012 R2\n\nbranches:\n  only:\n    - master\n    - v1.2\n    - v1.1\n    - v1.0\n\nskip_tags: true\n\nclone_folder: c:\\gopath\\src\\github.com\\go-ole\\go-ole\n\nenvironment:\n  GOPATH: c:\\gopath\n  matrix:\n  - GOARCH: amd64\n    GOVERSION: 1.4\n    GOROOT: c:\\go\n    DOWNLOADPLATFORM: \"x64\"\n\ninstall:\n  - choco install mingw\n  - SET PATH=c:\\tools\\mingw64\\bin;%PATH%\n  # - Download COM Server\n  - ps: Start-FileDownload \"https://github.com/go-ole/test-com-server/releases/download/v1.0.2/test-com-server-${env:DOWNLOADPLATFORM}.zip\"\n  - 7z e test-com-server-%DOWNLOADPLATFORM%.zip -oc:\\gopath\\src\\github.com\\go-ole\\go-ole > NUL\n  - c:\\gopath\\src\\github.com\\go-ole\\go-ole\\build\\register-assembly.bat\n  # - set\n  - go version\n  - go env\n  - c:\\gopath\\src\\github.com\\go-ole\\go-ole\\build\\compile-go.bat\n  - go tool dist install -v cmd/8a\n  - go tool dist install -v cmd/8c\n  - go tool dist install -v cmd/8g\n  - go tool dist install -v cmd/8l\n  - go tool dist install -v cmd/6a\n  - go tool dist install -v cmd/6c\n  - go tool dist install -v cmd/6g\n  - go tool dist install -v cmd/6l\n  - go get -u golang.org/x/tools/cmd/cover\n  - go get -u golang.org/x/tools/cmd/godoc\n  - go get -u golang.org/x/tools/cmd/stringer\n\nbuild_script:\n  - cd c:\\gopath\\src\\github.com\\go-ole\\go-ole\n  - go get -v -t ./...\n  - go build\n  - go test -v -cover ./...\n\n# disable automatic tests\ntest: off\n\n# disable deployment\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/com.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"time\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nvar (\n\tprocCoInitialize, _            = modole32.FindProc(\"CoInitialize\")\n\tprocCoInitializeEx, _          = modole32.FindProc(\"CoInitializeEx\")\n\tprocCoUninitialize, _          = modole32.FindProc(\"CoUninitialize\")\n\tprocCoCreateInstance, _        = modole32.FindProc(\"CoCreateInstance\")\n\tprocCoTaskMemFree, _           = modole32.FindProc(\"CoTaskMemFree\")\n\tprocCLSIDFromProgID, _         = modole32.FindProc(\"CLSIDFromProgID\")\n\tprocCLSIDFromString, _         = modole32.FindProc(\"CLSIDFromString\")\n\tprocStringFromCLSID, _         = modole32.FindProc(\"StringFromCLSID\")\n\tprocStringFromIID, _           = modole32.FindProc(\"StringFromIID\")\n\tprocIIDFromString, _           = modole32.FindProc(\"IIDFromString\")\n\tprocGetUserDefaultLCID, _      = modkernel32.FindProc(\"GetUserDefaultLCID\")\n\tprocCopyMemory, _              = modkernel32.FindProc(\"RtlMoveMemory\")\n\tprocVariantInit, _             = modoleaut32.FindProc(\"VariantInit\")\n\tprocVariantClear, _            = modoleaut32.FindProc(\"VariantClear\")\n\tprocVariantTimeToSystemTime, _ = modoleaut32.FindProc(\"VariantTimeToSystemTime\")\n\tprocSysAllocString, _          = modoleaut32.FindProc(\"SysAllocString\")\n\tprocSysAllocStringLen, _       = modoleaut32.FindProc(\"SysAllocStringLen\")\n\tprocSysFreeString, _           = modoleaut32.FindProc(\"SysFreeString\")\n\tprocSysStringLen, _            = modoleaut32.FindProc(\"SysStringLen\")\n\tprocCreateDispTypeInfo, _      = modoleaut32.FindProc(\"CreateDispTypeInfo\")\n\tprocCreateStdDispatch, _       = modoleaut32.FindProc(\"CreateStdDispatch\")\n\tprocGetActiveObject, _         = modoleaut32.FindProc(\"GetActiveObject\")\n\n\tprocGetMessageW, _      = moduser32.FindProc(\"GetMessageW\")\n\tprocDispatchMessageW, _ = moduser32.FindProc(\"DispatchMessageW\")\n)\n\n// coInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc coInitialize() (err error) {\n\t// http://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx\n\t// Suggests that no value should be passed to CoInitialized.\n\t// Could just be Call() since the parameter is optional. <-- Needs testing to be sure.\n\thr, _, _ := procCoInitialize.Call(uintptr(0))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// coInitializeEx initializes COM library with concurrency model.\nfunc coInitializeEx(coinit uint32) (err error) {\n\t// http://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v=vs.85).aspx\n\t// Suggests that the first parameter is not only optional but should always be NULL.\n\thr, _, _ := procCoInitializeEx.Call(uintptr(0), uintptr(coinit))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// CoInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc CoInitialize(p uintptr) (err error) {\n\t// p is ignored and won't be used.\n\t// Avoid any variable not used errors.\n\tp = uintptr(0)\n\treturn coInitialize()\n}\n\n// CoInitializeEx initializes COM library with concurrency model.\nfunc CoInitializeEx(p uintptr, coinit uint32) (err error) {\n\t// Avoid any variable not used errors.\n\tp = uintptr(0)\n\treturn coInitializeEx(coinit)\n}\n\n// CoUninitialize uninitializes COM Library.\nfunc CoUninitialize() {\n\tprocCoUninitialize.Call()\n}\n\n// CoTaskMemFree frees memory pointer.\nfunc CoTaskMemFree(memptr uintptr) {\n\tprocCoTaskMemFree.Call(memptr)\n}\n\n// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.\n//\n// The Programmatic Identifier must be registered, because it will be looked up\n// in the Windows Registry. The registry entry has the following keys: CLSID,\n// Insertable, Protocol and Shell\n// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).\n//\n// programID identifies the class id with less precision and is not guaranteed\n// to be unique. These are usually found in the registry under\n// HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes, usually with the format of\n// \"Program.Component.Version\" with version being optional.\n//\n// CLSIDFromProgID in Windows API.\nfunc CLSIDFromProgID(progId string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpszProgID := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))\n\thr, _, _ := procCLSIDFromProgID.Call(lpszProgID, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// CLSIDFromString retrieves Class ID from string representation.\n//\n// This is technically the string version of the GUID and will convert the\n// string to object.\n//\n// CLSIDFromString in Windows API.\nfunc CLSIDFromString(str string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(str)))\n\thr, _, _ := procCLSIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// StringFromCLSID returns GUID formated string from GUID object.\nfunc StringFromCLSID(clsid *GUID) (str string, err error) {\n\tvar p *uint16\n\thr, _, _ := procStringFromCLSID.Call(uintptr(unsafe.Pointer(clsid)), uintptr(unsafe.Pointer(&p)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tstr = LpOleStrToString(p)\n\treturn\n}\n\n// IIDFromString returns GUID from program ID.\nfunc IIDFromString(progId string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))\n\thr, _, _ := procIIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// StringFromIID returns GUID formatted string from GUID object.\nfunc StringFromIID(iid *GUID) (str string, err error) {\n\tvar p *uint16\n\thr, _, _ := procStringFromIID.Call(uintptr(unsafe.Pointer(iid)), uintptr(unsafe.Pointer(&p)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tstr = LpOleStrToString(p)\n\treturn\n}\n\n// CreateInstance of single uninitialized object with GUID.\nfunc CreateInstance(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {\n\tif iid == nil {\n\t\tiid = IID_IUnknown\n\t}\n\thr, _, _ := procCoCreateInstance.Call(\n\t\tuintptr(unsafe.Pointer(clsid)),\n\t\t0,\n\t\tCLSCTX_SERVER,\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&unk)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// GetActiveObject retrieves pointer to active object.\nfunc GetActiveObject(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {\n\tif iid == nil {\n\t\tiid = IID_IUnknown\n\t}\n\thr, _, _ := procGetActiveObject.Call(\n\t\tuintptr(unsafe.Pointer(clsid)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&unk)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// VariantInit initializes variant.\nfunc VariantInit(v *VARIANT) (err error) {\n\thr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// VariantClear clears value in Variant settings to VT_EMPTY.\nfunc VariantClear(v *VARIANT) (err error) {\n\thr, _, _ := procVariantClear.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// SysAllocString allocates memory for string and copies string into memory.\nfunc SysAllocString(v string) (ss *int16) {\n\tpss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))\n\tss = (*int16)(unsafe.Pointer(pss))\n\treturn\n}\n\n// SysAllocStringLen copies up to length of given string returning pointer.\nfunc SysAllocStringLen(v string) (ss *int16) {\n\tutf16 := utf16.Encode([]rune(v + \"\\x00\"))\n\tptr := &utf16[0]\n\n\tpss, _, _ := procSysAllocStringLen.Call(uintptr(unsafe.Pointer(ptr)), uintptr(len(utf16)-1))\n\tss = (*int16)(unsafe.Pointer(pss))\n\treturn\n}\n\n// SysFreeString frees string system memory. This must be called with SysAllocString.\nfunc SysFreeString(v *int16) (err error) {\n\thr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// SysStringLen is the length of the system allocated string.\nfunc SysStringLen(v *int16) uint32 {\n\tl, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))\n\treturn uint32(l)\n}\n\n// CreateStdDispatch provides default IDispatch implementation for IUnknown.\n//\n// This handles default IDispatch implementation for objects. It haves a few\n// limitations with only supporting one language. It will also only return\n// default exception codes.\nfunc CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (disp *IDispatch, err error) {\n\thr, _, _ := procCreateStdDispatch.Call(\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\tv,\n\t\tuintptr(unsafe.Pointer(ptinfo)),\n\t\tuintptr(unsafe.Pointer(&disp)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.\n//\n// This will not handle the full implementation of the interface.\nfunc CreateDispTypeInfo(idata *INTERFACEDATA) (pptinfo *IUnknown, err error) {\n\thr, _, _ := procCreateDispTypeInfo.Call(\n\t\tuintptr(unsafe.Pointer(idata)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&pptinfo)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// copyMemory moves location of a block of memory.\nfunc copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {\n\tprocCopyMemory.Call(uintptr(dest), uintptr(src), uintptr(length))\n}\n\n// GetUserDefaultLCID retrieves current user default locale.\nfunc GetUserDefaultLCID() (lcid uint32) {\n\tret, _, _ := procGetUserDefaultLCID.Call()\n\tlcid = uint32(ret)\n\treturn\n}\n\n// GetMessage in message queue from runtime.\n//\n// This function appears to block. PeekMessage does not block.\nfunc GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) {\n\tr0, _, err := procGetMessageW.Call(uintptr(unsafe.Pointer(msg)), uintptr(hwnd), uintptr(MsgFilterMin), uintptr(MsgFilterMax))\n\tret = int32(r0)\n\treturn\n}\n\n// DispatchMessage to window procedure.\nfunc DispatchMessage(msg *Msg) (ret int32) {\n\tr0, _, _ := procDispatchMessageW.Call(uintptr(unsafe.Pointer(msg)))\n\tret = int32(r0)\n\treturn\n}\n\n// GetVariantDate converts COM Variant Time value to Go time.Time.\nfunc GetVariantDate(value float64) (time.Time, error) {\n\tvar st syscall.Systemtime\n\tr, _, _ := procVariantTimeToSystemTime.Call(uintptr(unsafe.Pointer(&value)), uintptr(unsafe.Pointer(&st)))\n\tif r != 0 {\n\t\treturn time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), nil), nil\n\t}\n\treturn time.Now(), errors.New(\"Could not convert to time, passing current time.\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/com_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport (\n\t\"time\"\n\t\"unsafe\"\n)\n\n// coInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc coInitialize() error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// coInitializeEx initializes COM library with concurrency model.\nfunc coInitializeEx(coinit uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc CoInitialize(p uintptr) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoInitializeEx initializes COM library with concurrency model.\nfunc CoInitializeEx(p uintptr, coinit uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoUninitialize uninitializes COM Library.\nfunc CoUninitialize() {}\n\n// CoTaskMemFree frees memory pointer.\nfunc CoTaskMemFree(memptr uintptr) {}\n\n// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.\n//\n// The Programmatic Identifier must be registered, because it will be looked up\n// in the Windows Registry. The registry entry has the following keys: CLSID,\n// Insertable, Protocol and Shell\n// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).\n//\n// programID identifies the class id with less precision and is not guaranteed\n// to be unique. These are usually found in the registry under\n// HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes, usually with the format of\n// \"Program.Component.Version\" with version being optional.\n//\n// CLSIDFromProgID in Windows API.\nfunc CLSIDFromProgID(progId string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// CLSIDFromString retrieves Class ID from string representation.\n//\n// This is technically the string version of the GUID and will convert the\n// string to object.\n//\n// CLSIDFromString in Windows API.\nfunc CLSIDFromString(str string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// StringFromCLSID returns GUID formated string from GUID object.\nfunc StringFromCLSID(clsid *GUID) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// IIDFromString returns GUID from program ID.\nfunc IIDFromString(progId string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// StringFromIID returns GUID formatted string from GUID object.\nfunc StringFromIID(iid *GUID) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// CreateInstance of single uninitialized object with GUID.\nfunc CreateInstance(clsid *GUID, iid *GUID) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// GetActiveObject retrieves pointer to active object.\nfunc GetActiveObject(clsid *GUID, iid *GUID) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// VariantInit initializes variant.\nfunc VariantInit(v *VARIANT) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// VariantClear clears value in Variant settings to VT_EMPTY.\nfunc VariantClear(v *VARIANT) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// SysAllocString allocates memory for string and copies string into memory.\nfunc SysAllocString(v string) *int16 {\n\tu := int16(0)\n\treturn &u\n}\n\n// SysAllocStringLen copies up to length of given string returning pointer.\nfunc SysAllocStringLen(v string) *int16 {\n\tu := int16(0)\n\treturn &u\n}\n\n// SysFreeString frees string system memory. This must be called with SysAllocString.\nfunc SysFreeString(v *int16) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// SysStringLen is the length of the system allocated string.\nfunc SysStringLen(v *int16) uint32 {\n\treturn uint32(0)\n}\n\n// CreateStdDispatch provides default IDispatch implementation for IUnknown.\n//\n// This handles default IDispatch implementation for objects. It haves a few\n// limitations with only supporting one language. It will also only return\n// default exception codes.\nfunc CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (*IDispatch, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.\n//\n// This will not handle the full implementation of the interface.\nfunc CreateDispTypeInfo(idata *INTERFACEDATA) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// copyMemory moves location of a block of memory.\nfunc copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {}\n\n// GetUserDefaultLCID retrieves current user default locale.\nfunc GetUserDefaultLCID() uint32 {\n\treturn uint32(0)\n}\n\n// GetMessage in message queue from runtime.\n//\n// This function appears to block. PeekMessage does not block.\nfunc GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (int32, error) {\n\treturn int32(0), NewError(E_NOTIMPL)\n}\n\n// DispatchMessage to window procedure.\nfunc DispatchMessage(msg *Msg) int32 {\n\treturn int32(0)\n}\n\nfunc GetVariantDate(value float64) (time.Time, error) {\n\treturn time.Now(), NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/connect.go",
    "content": "package ole\n\n// Connection contains IUnknown for fluent interface interaction.\n//\n// Deprecated. Use oleutil package instead.\ntype Connection struct {\n\tObject *IUnknown // Access COM\n}\n\n// Initialize COM.\nfunc (*Connection) Initialize() (err error) {\n\treturn coInitialize()\n}\n\n// Uninitialize COM.\nfunc (*Connection) Uninitialize() {\n\tCoUninitialize()\n}\n\n// Create IUnknown object based first on ProgId and then from String.\nfunc (c *Connection) Create(progId string) (err error) {\n\tvar clsid *GUID\n\tclsid, err = CLSIDFromProgID(progId)\n\tif err != nil {\n\t\tclsid, err = CLSIDFromString(progId)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tunknown, err := CreateInstance(clsid, IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\tc.Object = unknown\n\n\treturn\n}\n\n// Release IUnknown object.\nfunc (c *Connection) Release() {\n\tc.Object.Release()\n}\n\n// Load COM object from list of programIDs or strings.\nfunc (c *Connection) Load(names ...string) (errors []error) {\n\tvar tempErrors []error = make([]error, len(names))\n\tvar numErrors int = 0\n\tfor _, name := range names {\n\t\terr := c.Create(name)\n\t\tif err != nil {\n\t\t\ttempErrors = append(tempErrors, err)\n\t\t\tnumErrors += 1\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\n\tcopy(errors, tempErrors[0:numErrors])\n\treturn\n}\n\n// Dispatch returns Dispatch object.\nfunc (c *Connection) Dispatch() (object *Dispatch, err error) {\n\tdispatch, err := c.Object.QueryInterface(IID_IDispatch)\n\tif err != nil {\n\t\treturn\n\t}\n\tobject = &Dispatch{dispatch}\n\treturn\n}\n\n// Dispatch stores IDispatch object.\ntype Dispatch struct {\n\tObject *IDispatch // Dispatch object.\n}\n\n// Call method on IDispatch with parameters.\nfunc (d *Dispatch) Call(method string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(method)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_METHOD, params)\n\treturn\n}\n\n// MustCall method on IDispatch with parameters.\nfunc (d *Dispatch) MustCall(method string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(method)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_METHOD, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn\n}\n\n// Get property on IDispatch with parameters.\nfunc (d *Dispatch) Get(name string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)\n\treturn\n}\n\n// MustGet property on IDispatch with parameters.\nfunc (d *Dispatch) MustGet(name string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn\n}\n\n// Set property on IDispatch with parameters.\nfunc (d *Dispatch) Set(name string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)\n\treturn\n}\n\n// MustSet property on IDispatch with parameters.\nfunc (d *Dispatch) MustSet(name string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn\n}\n\n// GetId retrieves ID of name on IDispatch.\nfunc (d *Dispatch) GetId(name string) (id int32, err error) {\n\tvar dispid []int32\n\tdispid, err = d.Object.GetIDsOfName([]string{name})\n\tif err != nil {\n\t\treturn\n\t}\n\tid = dispid[0]\n\treturn\n}\n\n// GetIds retrieves all IDs of names on IDispatch.\nfunc (d *Dispatch) GetIds(names ...string) (dispid []int32, err error) {\n\tdispid, err = d.Object.GetIDsOfName(names)\n\treturn\n}\n\n// Invoke IDispatch on DisplayID of dispatch type with parameters.\n//\n// There have been problems where if send cascading params..., it would error\n// out because the parameters would be empty.\nfunc (d *Dispatch) Invoke(id int32, dispatch int16, params []interface{}) (result *VARIANT, err error) {\n\tif len(params) < 1 {\n\t\tresult, err = d.Object.Invoke(id, dispatch)\n\t} else {\n\t\tresult, err = d.Object.Invoke(id, dispatch, params...)\n\t}\n\treturn\n}\n\n// Release IDispatch object.\nfunc (d *Dispatch) Release() {\n\td.Object.Release()\n}\n\n// Connect initializes COM and attempts to load IUnknown based on given names.\nfunc Connect(names ...string) (connection *Connection) {\n\tconnection.Initialize()\n\tconnection.Load(names...)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/constants.go",
    "content": "package ole\n\nconst (\n\tCLSCTX_INPROC_SERVER   = 1\n\tCLSCTX_INPROC_HANDLER  = 2\n\tCLSCTX_LOCAL_SERVER    = 4\n\tCLSCTX_INPROC_SERVER16 = 8\n\tCLSCTX_REMOTE_SERVER   = 16\n\tCLSCTX_ALL             = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER\n\tCLSCTX_INPROC          = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER\n\tCLSCTX_SERVER          = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER\n)\n\nconst (\n\tCOINIT_APARTMENTTHREADED = 0x2\n\tCOINIT_MULTITHREADED     = 0x0\n\tCOINIT_DISABLE_OLE1DDE   = 0x4\n\tCOINIT_SPEED_OVER_MEMORY = 0x8\n)\n\nconst (\n\tDISPATCH_METHOD         = 1\n\tDISPATCH_PROPERTYGET    = 2\n\tDISPATCH_PROPERTYPUT    = 4\n\tDISPATCH_PROPERTYPUTREF = 8\n)\n\nconst (\n\tS_OK           = 0x00000000\n\tE_UNEXPECTED   = 0x8000FFFF\n\tE_NOTIMPL      = 0x80004001\n\tE_OUTOFMEMORY  = 0x8007000E\n\tE_INVALIDARG   = 0x80070057\n\tE_NOINTERFACE  = 0x80004002\n\tE_POINTER      = 0x80004003\n\tE_HANDLE       = 0x80070006\n\tE_ABORT        = 0x80004004\n\tE_FAIL         = 0x80004005\n\tE_ACCESSDENIED = 0x80070005\n\tE_PENDING      = 0x8000000A\n\n\tCO_E_CLASSSTRING = 0x800401F3\n)\n\nconst (\n\tCC_FASTCALL = iota\n\tCC_CDECL\n\tCC_MSCPASCAL\n\tCC_PASCAL = CC_MSCPASCAL\n\tCC_MACPASCAL\n\tCC_STDCALL\n\tCC_FPFASTCALL\n\tCC_SYSCALL\n\tCC_MPWCDECL\n\tCC_MPWPASCAL\n\tCC_MAX = CC_MPWPASCAL\n)\n\ntype VT uint16\n\nconst (\n\tVT_EMPTY           VT = 0x0\n\tVT_NULL            VT = 0x1\n\tVT_I2              VT = 0x2\n\tVT_I4              VT = 0x3\n\tVT_R4              VT = 0x4\n\tVT_R8              VT = 0x5\n\tVT_CY              VT = 0x6\n\tVT_DATE            VT = 0x7\n\tVT_BSTR            VT = 0x8\n\tVT_DISPATCH        VT = 0x9\n\tVT_ERROR           VT = 0xa\n\tVT_BOOL            VT = 0xb\n\tVT_VARIANT         VT = 0xc\n\tVT_UNKNOWN         VT = 0xd\n\tVT_DECIMAL         VT = 0xe\n\tVT_I1              VT = 0x10\n\tVT_UI1             VT = 0x11\n\tVT_UI2             VT = 0x12\n\tVT_UI4             VT = 0x13\n\tVT_I8              VT = 0x14\n\tVT_UI8             VT = 0x15\n\tVT_INT             VT = 0x16\n\tVT_UINT            VT = 0x17\n\tVT_VOID            VT = 0x18\n\tVT_HRESULT         VT = 0x19\n\tVT_PTR             VT = 0x1a\n\tVT_SAFEARRAY       VT = 0x1b\n\tVT_CARRAY          VT = 0x1c\n\tVT_USERDEFINED     VT = 0x1d\n\tVT_LPSTR           VT = 0x1e\n\tVT_LPWSTR          VT = 0x1f\n\tVT_RECORD          VT = 0x24\n\tVT_INT_PTR         VT = 0x25\n\tVT_UINT_PTR        VT = 0x26\n\tVT_FILETIME        VT = 0x40\n\tVT_BLOB            VT = 0x41\n\tVT_STREAM          VT = 0x42\n\tVT_STORAGE         VT = 0x43\n\tVT_STREAMED_OBJECT VT = 0x44\n\tVT_STORED_OBJECT   VT = 0x45\n\tVT_BLOB_OBJECT     VT = 0x46\n\tVT_CF              VT = 0x47\n\tVT_CLSID           VT = 0x48\n\tVT_BSTR_BLOB       VT = 0xfff\n\tVT_VECTOR          VT = 0x1000\n\tVT_ARRAY           VT = 0x2000\n\tVT_BYREF           VT = 0x4000\n\tVT_RESERVED        VT = 0x8000\n\tVT_ILLEGAL         VT = 0xffff\n\tVT_ILLEGALMASKED   VT = 0xfff\n\tVT_TYPEMASK        VT = 0xfff\n)\n\nconst (\n\tDISPID_UNKNOWN     = -1\n\tDISPID_VALUE       = 0\n\tDISPID_PROPERTYPUT = -3\n\tDISPID_NEWENUM     = -4\n\tDISPID_EVALUATE    = -5\n\tDISPID_CONSTRUCTOR = -6\n\tDISPID_DESTRUCTOR  = -7\n\tDISPID_COLLECT     = -8\n)\n\nconst (\n\tTKIND_ENUM      = 1\n\tTKIND_RECORD    = 2\n\tTKIND_MODULE    = 3\n\tTKIND_INTERFACE = 4\n\tTKIND_DISPATCH  = 5\n\tTKIND_COCLASS   = 6\n\tTKIND_ALIAS     = 7\n\tTKIND_UNION     = 8\n\tTKIND_MAX       = 9\n)\n\n// Safe Array Feature Flags\n\nconst (\n\tFADF_AUTO        = 0x0001\n\tFADF_STATIC      = 0x0002\n\tFADF_EMBEDDED    = 0x0004\n\tFADF_FIXEDSIZE   = 0x0010\n\tFADF_RECORD      = 0x0020\n\tFADF_HAVEIID     = 0x0040\n\tFADF_HAVEVARTYPE = 0x0080\n\tFADF_BSTR        = 0x0100\n\tFADF_UNKNOWN     = 0x0200\n\tFADF_DISPATCH    = 0x0400\n\tFADF_VARIANT     = 0x0800\n\tFADF_RESERVED    = 0xF008\n)\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error.go",
    "content": "package ole\n\n// OleError stores COM errors.\ntype OleError struct {\n\thr          uintptr\n\tdescription string\n\tsubError    error\n}\n\n// NewError creates new error with HResult.\nfunc NewError(hr uintptr) *OleError {\n\treturn &OleError{hr: hr}\n}\n\n// NewErrorWithDescription creates new COM error with HResult and description.\nfunc NewErrorWithDescription(hr uintptr, description string) *OleError {\n\treturn &OleError{hr: hr, description: description}\n}\n\n// NewErrorWithSubError creates new COM error with parent error.\nfunc NewErrorWithSubError(hr uintptr, description string, err error) *OleError {\n\treturn &OleError{hr: hr, description: description, subError: err}\n}\n\n// Code is the HResult.\nfunc (v *OleError) Code() uintptr {\n\treturn uintptr(v.hr)\n}\n\n// String description, either manually set or format message with error code.\nfunc (v *OleError) String() string {\n\tif v.description != \"\" {\n\t\treturn errstr(int(v.hr)) + \" (\" + v.description + \")\"\n\t}\n\treturn errstr(int(v.hr))\n}\n\n// Error implements error interface.\nfunc (v *OleError) Error() string {\n\treturn v.String()\n}\n\n// Description retrieves error summary, if there is one.\nfunc (v *OleError) Description() string {\n\treturn v.description\n}\n\n// SubError returns parent error, if there is one.\nfunc (v *OleError) SubError() error {\n\treturn v.subError\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error_func.go",
    "content": "// +build !windows\n\npackage ole\n\n// errstr converts error code to string.\nfunc errstr(errno int) string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n)\n\n// errstr converts error code to string.\nfunc errstr(errno int) string {\n\t// ask windows for the remaining errors\n\tvar flags uint32 = syscall.FORMAT_MESSAGE_FROM_SYSTEM | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS\n\tb := make([]uint16, 300)\n\tn, err := syscall.FormatMessage(flags, 0, uint32(errno), 0, b, nil)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"error %d (FormatMessage failed with: %v)\", errno, err)\n\t}\n\t// trim terminating \\r and \\n\n\tfor ; n > 0 && (b[n-1] == '\\n' || b[n-1] == '\\r'); n-- {\n\t}\n\treturn string(utf16.Decode(b[:n]))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/guid.go",
    "content": "package ole\n\nvar (\n\t// IID_NULL is null Interface ID, used when no other Interface ID is known.\n\tIID_NULL = NewGUID(\"{00000000-0000-0000-0000-000000000000}\")\n\n\t// IID_IUnknown is for IUnknown interfaces.\n\tIID_IUnknown = NewGUID(\"{00000000-0000-0000-C000-000000000046}\")\n\n\t// IID_IDispatch is for IDispatch interfaces.\n\tIID_IDispatch = NewGUID(\"{00020400-0000-0000-C000-000000000046}\")\n\n\t// IID_IEnumVariant is for IEnumVariant interfaces\n\tIID_IEnumVariant = NewGUID(\"{00020404-0000-0000-C000-000000000046}\")\n\n\t// IID_IConnectionPointContainer is for IConnectionPointContainer interfaces.\n\tIID_IConnectionPointContainer = NewGUID(\"{B196B284-BAB4-101A-B69C-00AA00341D07}\")\n\n\t// IID_IConnectionPoint is for IConnectionPoint interfaces.\n\tIID_IConnectionPoint = NewGUID(\"{B196B286-BAB4-101A-B69C-00AA00341D07}\")\n\n\t// IID_IInspectable is for IInspectable interfaces.\n\tIID_IInspectable = NewGUID(\"{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}\")\n\n\t// IID_IProvideClassInfo is for IProvideClassInfo interfaces.\n\tIID_IProvideClassInfo = NewGUID(\"{B196B283-BAB4-101A-B69C-00AA00341D07}\")\n)\n\n// These are for testing and not part of any library.\nvar (\n\t// IID_ICOMTestString is for ICOMTestString interfaces.\n\t//\n\t// {E0133EB4-C36F-469A-9D3D-C66B84BE19ED}\n\tIID_ICOMTestString = NewGUID(\"{E0133EB4-C36F-469A-9D3D-C66B84BE19ED}\")\n\n\t// IID_ICOMTestInt8 is for ICOMTestInt8 interfaces.\n\t//\n\t// {BEB06610-EB84-4155-AF58-E2BFF53680B4}\n\tIID_ICOMTestInt8 = NewGUID(\"{BEB06610-EB84-4155-AF58-E2BFF53680B4}\")\n\n\t// IID_ICOMTestInt16 is for ICOMTestInt16 interfaces.\n\t//\n\t// {DAA3F9FA-761E-4976-A860-8364CE55F6FC}\n\tIID_ICOMTestInt16 = NewGUID(\"{DAA3F9FA-761E-4976-A860-8364CE55F6FC}\")\n\n\t// IID_ICOMTestInt32 is for ICOMTestInt32 interfaces.\n\t//\n\t// {E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}\n\tIID_ICOMTestInt32 = NewGUID(\"{E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}\")\n\n\t// IID_ICOMTestInt64 is for ICOMTestInt64 interfaces.\n\t//\n\t// {8D437CBC-B3ED-485C-BC32-C336432A1623}\n\tIID_ICOMTestInt64 = NewGUID(\"{8D437CBC-B3ED-485C-BC32-C336432A1623}\")\n\n\t// IID_ICOMTestFloat is for ICOMTestFloat interfaces.\n\t//\n\t// {BF1ED004-EA02-456A-AA55-2AC8AC6B054C}\n\tIID_ICOMTestFloat = NewGUID(\"{BF1ED004-EA02-456A-AA55-2AC8AC6B054C}\")\n\n\t// IID_ICOMTestDouble is for ICOMTestDouble interfaces.\n\t//\n\t// {BF908A81-8687-4E93-999F-D86FAB284BA0}\n\tIID_ICOMTestDouble = NewGUID(\"{BF908A81-8687-4E93-999F-D86FAB284BA0}\")\n\n\t// IID_ICOMTestBoolean is for ICOMTestBoolean interfaces.\n\t//\n\t// {D530E7A6-4EE8-40D1-8931-3D63B8605010}\n\tIID_ICOMTestBoolean = NewGUID(\"{D530E7A6-4EE8-40D1-8931-3D63B8605010}\")\n\n\t// IID_ICOMEchoTestObject is for ICOMEchoTestObject interfaces.\n\t//\n\t// {6485B1EF-D780-4834-A4FE-1EBB51746CA3}\n\tIID_ICOMEchoTestObject = NewGUID(\"{6485B1EF-D780-4834-A4FE-1EBB51746CA3}\")\n\n\t// IID_ICOMTestTypes is for ICOMTestTypes interfaces.\n\t//\n\t// {CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}\n\tIID_ICOMTestTypes = NewGUID(\"{CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}\")\n\n\t// CLSID_COMEchoTestObject is for COMEchoTestObject class.\n\t//\n\t// {3C24506A-AE9E-4D50-9157-EF317281F1B0}\n\tCLSID_COMEchoTestObject = NewGUID(\"{3C24506A-AE9E-4D50-9157-EF317281F1B0}\")\n\n\t// CLSID_COMTestScalarClass is for COMTestScalarClass class.\n\t//\n\t// {865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}\n\tCLSID_COMTestScalarClass = NewGUID(\"{865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}\")\n)\n\nconst hextable = \"0123456789ABCDEF\"\nconst emptyGUID = \"{00000000-0000-0000-0000-000000000000}\"\n\n// GUID is Windows API specific GUID type.\n//\n// This exists to match Windows GUID type for direct passing for COM.\n// Format is in xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx.\ntype GUID struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n\n// NewGUID converts the given string into a globally unique identifier that is\n// compliant with the Windows API.\n//\n// The supplied string may be in any of these formats:\n//\n//  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n//  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\n//\n// The conversion of the supplied string is not case-sensitive.\nfunc NewGUID(guid string) *GUID {\n\td := []byte(guid)\n\tvar d1, d2, d3, d4a, d4b []byte\n\n\tswitch len(d) {\n\tcase 38:\n\t\tif d[0] != '{' || d[37] != '}' {\n\t\t\treturn nil\n\t\t}\n\t\td = d[1:37]\n\t\tfallthrough\n\tcase 36:\n\t\tif d[8] != '-' || d[13] != '-' || d[18] != '-' || d[23] != '-' {\n\t\t\treturn nil\n\t\t}\n\t\td1 = d[0:8]\n\t\td2 = d[9:13]\n\t\td3 = d[14:18]\n\t\td4a = d[19:23]\n\t\td4b = d[24:36]\n\tcase 32:\n\t\td1 = d[0:8]\n\t\td2 = d[8:12]\n\t\td3 = d[12:16]\n\t\td4a = d[16:20]\n\t\td4b = d[20:32]\n\tdefault:\n\t\treturn nil\n\t}\n\n\tvar g GUID\n\tvar ok1, ok2, ok3, ok4 bool\n\tg.Data1, ok1 = decodeHexUint32(d1)\n\tg.Data2, ok2 = decodeHexUint16(d2)\n\tg.Data3, ok3 = decodeHexUint16(d3)\n\tg.Data4, ok4 = decodeHexByte64(d4a, d4b)\n\tif ok1 && ok2 && ok3 && ok4 {\n\t\treturn &g\n\t}\n\treturn nil\n}\n\nfunc decodeHexUint32(src []byte) (value uint32, ok bool) {\n\tvar b1, b2, b3, b4 byte\n\tvar ok1, ok2, ok3, ok4 bool\n\tb1, ok1 = decodeHexByte(src[0], src[1])\n\tb2, ok2 = decodeHexByte(src[2], src[3])\n\tb3, ok3 = decodeHexByte(src[4], src[5])\n\tb4, ok4 = decodeHexByte(src[6], src[7])\n\tvalue = (uint32(b1) << 24) | (uint32(b2) << 16) | (uint32(b3) << 8) | uint32(b4)\n\tok = ok1 && ok2 && ok3 && ok4\n\treturn\n}\n\nfunc decodeHexUint16(src []byte) (value uint16, ok bool) {\n\tvar b1, b2 byte\n\tvar ok1, ok2 bool\n\tb1, ok1 = decodeHexByte(src[0], src[1])\n\tb2, ok2 = decodeHexByte(src[2], src[3])\n\tvalue = (uint16(b1) << 8) | uint16(b2)\n\tok = ok1 && ok2\n\treturn\n}\n\nfunc decodeHexByte64(s1 []byte, s2 []byte) (value [8]byte, ok bool) {\n\tvar ok1, ok2, ok3, ok4, ok5, ok6, ok7, ok8 bool\n\tvalue[0], ok1 = decodeHexByte(s1[0], s1[1])\n\tvalue[1], ok2 = decodeHexByte(s1[2], s1[3])\n\tvalue[2], ok3 = decodeHexByte(s2[0], s2[1])\n\tvalue[3], ok4 = decodeHexByte(s2[2], s2[3])\n\tvalue[4], ok5 = decodeHexByte(s2[4], s2[5])\n\tvalue[5], ok6 = decodeHexByte(s2[6], s2[7])\n\tvalue[6], ok7 = decodeHexByte(s2[8], s2[9])\n\tvalue[7], ok8 = decodeHexByte(s2[10], s2[11])\n\tok = ok1 && ok2 && ok3 && ok4 && ok5 && ok6 && ok7 && ok8\n\treturn\n}\n\nfunc decodeHexByte(c1, c2 byte) (value byte, ok bool) {\n\tvar n1, n2 byte\n\tvar ok1, ok2 bool\n\tn1, ok1 = decodeHexChar(c1)\n\tn2, ok2 = decodeHexChar(c2)\n\tvalue = (n1 << 4) | n2\n\tok = ok1 && ok2\n\treturn\n}\n\nfunc decodeHexChar(c byte) (byte, bool) {\n\tswitch {\n\tcase '0' <= c && c <= '9':\n\t\treturn c - '0', true\n\tcase 'a' <= c && c <= 'f':\n\t\treturn c - 'a' + 10, true\n\tcase 'A' <= c && c <= 'F':\n\t\treturn c - 'A' + 10, true\n\t}\n\n\treturn 0, false\n}\n\n// String converts the GUID to string form. It will adhere to this pattern:\n//\n//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\n//\n// If the GUID is nil, the string representation of an empty GUID is returned:\n//\n//  {00000000-0000-0000-0000-000000000000}\nfunc (guid *GUID) String() string {\n\tif guid == nil {\n\t\treturn emptyGUID\n\t}\n\n\tvar c [38]byte\n\tc[0] = '{'\n\tputUint32Hex(c[1:9], guid.Data1)\n\tc[9] = '-'\n\tputUint16Hex(c[10:14], guid.Data2)\n\tc[14] = '-'\n\tputUint16Hex(c[15:19], guid.Data3)\n\tc[19] = '-'\n\tputByteHex(c[20:24], guid.Data4[0:2])\n\tc[24] = '-'\n\tputByteHex(c[25:37], guid.Data4[2:8])\n\tc[37] = '}'\n\treturn string(c[:])\n}\n\nfunc putUint32Hex(b []byte, v uint32) {\n\tb[0] = hextable[byte(v>>24)>>4]\n\tb[1] = hextable[byte(v>>24)&0x0f]\n\tb[2] = hextable[byte(v>>16)>>4]\n\tb[3] = hextable[byte(v>>16)&0x0f]\n\tb[4] = hextable[byte(v>>8)>>4]\n\tb[5] = hextable[byte(v>>8)&0x0f]\n\tb[6] = hextable[byte(v)>>4]\n\tb[7] = hextable[byte(v)&0x0f]\n}\n\nfunc putUint16Hex(b []byte, v uint16) {\n\tb[0] = hextable[byte(v>>8)>>4]\n\tb[1] = hextable[byte(v>>8)&0x0f]\n\tb[2] = hextable[byte(v)>>4]\n\tb[3] = hextable[byte(v)&0x0f]\n}\n\nfunc putByteHex(dst, src []byte) {\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i*2] = hextable[src[i]>>4]\n\t\tdst[i*2+1] = hextable[src[i]&0x0f]\n\t}\n}\n\n// IsEqualGUID compares two GUID.\n//\n// Not constant time comparison.\nfunc IsEqualGUID(guid1 *GUID, guid2 *GUID) bool {\n\treturn guid1.Data1 == guid2.Data1 &&\n\t\tguid1.Data2 == guid2.Data2 &&\n\t\tguid1.Data3 == guid2.Data3 &&\n\t\tguid1.Data4[0] == guid2.Data4[0] &&\n\t\tguid1.Data4[1] == guid2.Data4[1] &&\n\t\tguid1.Data4[2] == guid2.Data4[2] &&\n\t\tguid1.Data4[3] == guid2.Data4[3] &&\n\t\tguid1.Data4[4] == guid2.Data4[4] &&\n\t\tguid1.Data4[5] == guid2.Data4[5] &&\n\t\tguid1.Data4[6] == guid2.Data4[6] &&\n\t\tguid1.Data4[7] == guid2.Data4[7]\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IConnectionPoint struct {\n\tIUnknown\n}\n\ntype IConnectionPointVtbl struct {\n\tIUnknownVtbl\n\tGetConnectionInterface      uintptr\n\tGetConnectionPointContainer uintptr\n\tAdvise                      uintptr\n\tUnadvise                    uintptr\n\tEnumConnections             uintptr\n}\n\nfunc (v *IConnectionPoint) VTable() *IConnectionPointVtbl {\n\treturn (*IConnectionPointVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport \"unsafe\"\n\nfunc (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {\n\treturn int32(0)\n}\n\nfunc (v *IConnectionPoint) Advise(unknown *IUnknown) (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPoint) Unadvise(cookie uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {\n\t// XXX: This doesn't look like it does what it's supposed to\n\treturn release((*IUnknown)(unsafe.Pointer(v)))\n}\n\nfunc (v *IConnectionPoint) Advise(unknown *IUnknown) (cookie uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().Advise,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(unknown)),\n\t\tuintptr(unsafe.Pointer(&cookie)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (v *IConnectionPoint) Unadvise(cookie uint32) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().Unadvise,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(cookie),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IConnectionPointContainer struct {\n\tIUnknown\n}\n\ntype IConnectionPointContainerVtbl struct {\n\tIUnknownVtbl\n\tEnumConnectionPoints uintptr\n\tFindConnectionPoint  uintptr\n}\n\nfunc (v *IConnectionPointContainer) VTable() *IConnectionPointContainerVtbl {\n\treturn (*IConnectionPointContainerVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().FindConnectionPoint,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(point)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IDispatch struct {\n\tIUnknown\n}\n\ntype IDispatchVtbl struct {\n\tIUnknownVtbl\n\tGetTypeInfoCount uintptr\n\tGetTypeInfo      uintptr\n\tGetIDsOfNames    uintptr\n\tInvoke           uintptr\n}\n\nfunc (v *IDispatch) VTable() *IDispatchVtbl {\n\treturn (*IDispatchVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IDispatch) GetIDsOfName(names []string) (dispid []int32, err error) {\n\tdispid, err = getIDsOfName(v, names)\n\treturn\n}\n\nfunc (v *IDispatch) Invoke(dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {\n\tresult, err = invoke(v, dispid, dispatch, params...)\n\treturn\n}\n\nfunc (v *IDispatch) GetTypeInfoCount() (c uint32, err error) {\n\tc, err = getTypeInfoCount(v)\n\treturn\n}\n\nfunc (v *IDispatch) GetTypeInfo() (tinfo *ITypeInfo, err error) {\n\ttinfo, err = getTypeInfo(v)\n\treturn\n}\n\n// GetSingleIDOfName is a helper that returns single display ID for IDispatch name.\n//\n// This replaces the common pattern of attempting to get a single name from the list of available\n// IDs. It gives the first ID, if it is available.\nfunc (v *IDispatch) GetSingleIDOfName(name string) (displayID int32, err error) {\n\tvar displayIDs []int32\n\tdisplayIDs, err = v.GetIDsOfName([]string{name})\n\tif err != nil {\n\t\treturn\n\t}\n\tdisplayID = displayIDs[0]\n\treturn\n}\n\n// InvokeWithOptionalArgs accepts arguments as an array, works like Invoke.\n//\n// Accepts name and will attempt to retrieve Display ID to pass to Invoke.\n//\n// Passing params as an array is a workaround that could be fixed in later versions of Go that\n// prevent passing empty params. During testing it was discovered that this is an acceptable way of\n// getting around not being able to pass params normally.\nfunc (v *IDispatch) InvokeWithOptionalArgs(name string, dispatch int16, params []interface{}) (result *VARIANT, err error) {\n\tdisplayID, err := v.GetSingleIDOfName(name)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif len(params) < 1 {\n\t\tresult, err = v.Invoke(displayID, dispatch)\n\t} else {\n\t\tresult, err = v.Invoke(displayID, dispatch, params...)\n\t}\n\n\treturn\n}\n\n// CallMethod invokes named function with arguments on object.\nfunc (v *IDispatch) CallMethod(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_METHOD, params)\n}\n\n// GetProperty retrieves the property with the name with the ability to pass arguments.\n//\n// Most of the time you will not need to pass arguments as most objects do not allow for this\n// feature. Or at least, should not allow for this feature. Some servers don't follow best practices\n// and this is provided for those edge cases.\nfunc (v *IDispatch) GetProperty(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYGET, params)\n}\n\n// PutProperty attempts to mutate a property in the object.\nfunc (v *IDispatch) PutProperty(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYPUT, params)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc getIDsOfName(disp *IDispatch, names []string) ([]int32, error) {\n\treturn []int32{}, NewError(E_NOTIMPL)\n}\n\nfunc getTypeInfoCount(disp *IDispatch) (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n\nfunc getTypeInfo(disp *IDispatch) (*ITypeInfo, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (*VARIANT, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\nfunc getIDsOfName(disp *IDispatch, names []string) (dispid []int32, err error) {\n\twnames := make([]*uint16, len(names))\n\tfor i := 0; i < len(names); i++ {\n\t\twnames[i] = syscall.StringToUTF16Ptr(names[i])\n\t}\n\tdispid = make([]int32, len(names))\n\tnamelen := uint32(len(names))\n\thr, _, _ := syscall.Syscall6(\n\t\tdisp.VTable().GetIDsOfNames,\n\t\t6,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(unsafe.Pointer(&wnames[0])),\n\t\tuintptr(namelen),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&dispid[0])))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc getTypeInfoCount(disp *IDispatch) (c uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetTypeInfoCount,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(&c)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc getTypeInfo(disp *IDispatch) (tinfo *ITypeInfo, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetTypeInfo,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&tinfo)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {\n\tvar dispparams DISPPARAMS\n\n\tif dispatch&DISPATCH_PROPERTYPUT != 0 {\n\t\tdispnames := [1]int32{DISPID_PROPERTYPUT}\n\t\tdispparams.rgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))\n\t\tdispparams.cNamedArgs = 1\n\t}\n\tvar vargs []VARIANT\n\tif len(params) > 0 {\n\t\tvargs = make([]VARIANT, len(params))\n\t\tfor i, v := range params {\n\t\t\t//n := len(params)-i-1\n\t\t\tn := len(params) - i - 1\n\t\t\tVariantInit(&vargs[n])\n\t\t\tswitch vv := v.(type) {\n\t\t\tcase bool:\n\t\t\t\tif vv {\n\t\t\t\t\tvargs[n] = NewVariant(VT_BOOL, 0xffff)\n\t\t\t\t} else {\n\t\t\t\t\tvargs[n] = NewVariant(VT_BOOL, 0)\n\t\t\t\t}\n\t\t\tcase *bool:\n\t\t\t\tvargs[n] = NewVariant(VT_BOOL|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*bool)))))\n\t\t\tcase uint8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1, int64(v.(uint8)))\n\t\t\tcase *uint8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))\n\t\t\tcase int8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1, int64(v.(int8)))\n\t\t\tcase *int8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))\n\t\t\tcase int16:\n\t\t\t\tvargs[n] = NewVariant(VT_I2, int64(v.(int16)))\n\t\t\tcase *int16:\n\t\t\t\tvargs[n] = NewVariant(VT_I2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int16)))))\n\t\t\tcase uint16:\n\t\t\t\tvargs[n] = NewVariant(VT_UI2, int64(v.(uint16)))\n\t\t\tcase *uint16:\n\t\t\t\tvargs[n] = NewVariant(VT_UI2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint16)))))\n\t\t\tcase int32:\n\t\t\t\tvargs[n] = NewVariant(VT_I4, int64(v.(int32)))\n\t\t\tcase *int32:\n\t\t\t\tvargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int32)))))\n\t\t\tcase uint32:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4, int64(v.(uint32)))\n\t\t\tcase *uint32:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint32)))))\n\t\t\tcase int64:\n\t\t\t\tvargs[n] = NewVariant(VT_I8, int64(v.(int64)))\n\t\t\tcase *int64:\n\t\t\t\tvargs[n] = NewVariant(VT_I8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int64)))))\n\t\t\tcase uint64:\n\t\t\t\tvargs[n] = NewVariant(VT_UI8, int64(uintptr(v.(uint64))))\n\t\t\tcase *uint64:\n\t\t\t\tvargs[n] = NewVariant(VT_UI8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint64)))))\n\t\t\tcase int:\n\t\t\t\tvargs[n] = NewVariant(VT_I4, int64(v.(int)))\n\t\t\tcase *int:\n\t\t\t\tvargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int)))))\n\t\t\tcase uint:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4, int64(v.(uint)))\n\t\t\tcase *uint:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint)))))\n\t\t\tcase float32:\n\t\t\t\tvargs[n] = NewVariant(VT_R4, *(*int64)(unsafe.Pointer(&vv)))\n\t\t\tcase *float32:\n\t\t\t\tvargs[n] = NewVariant(VT_R4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float32)))))\n\t\t\tcase float64:\n\t\t\t\tvargs[n] = NewVariant(VT_R8, *(*int64)(unsafe.Pointer(&vv)))\n\t\t\tcase *float64:\n\t\t\t\tvargs[n] = NewVariant(VT_R8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float64)))))\n\t\t\tcase string:\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(v.(string))))))\n\t\t\tcase *string:\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*string)))))\n\t\t\tcase time.Time:\n\t\t\t\ts := vv.Format(\"2006-01-02 15:04:05\")\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(s)))))\n\t\t\tcase *time.Time:\n\t\t\t\ts := vv.Format(\"2006-01-02 15:04:05\")\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(&s))))\n\t\t\tcase *IDispatch:\n\t\t\t\tvargs[n] = NewVariant(VT_DISPATCH, int64(uintptr(unsafe.Pointer(v.(*IDispatch)))))\n\t\t\tcase **IDispatch:\n\t\t\t\tvargs[n] = NewVariant(VT_DISPATCH|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(**IDispatch)))))\n\t\t\tcase nil:\n\t\t\t\tvargs[n] = NewVariant(VT_NULL, 0)\n\t\t\tcase *VARIANT:\n\t\t\t\tvargs[n] = NewVariant(VT_VARIANT|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*VARIANT)))))\n\t\t\tcase []byte:\n\t\t\t\tsafeByteArray := safeArrayFromByteSlice(v.([]byte))\n\t\t\t\tvargs[n] = NewVariant(VT_ARRAY|VT_UI1, int64(uintptr(unsafe.Pointer(safeByteArray))))\n\t\t\t\tdefer VariantClear(&vargs[n])\n\t\t\tcase []string:\n\t\t\t\tsafeByteArray := safeArrayFromStringSlice(v.([]string))\n\t\t\t\tvargs[n] = NewVariant(VT_ARRAY|VT_BSTR, int64(uintptr(unsafe.Pointer(safeByteArray))))\n\t\t\t\tdefer VariantClear(&vargs[n])\n\t\t\tdefault:\n\t\t\t\tpanic(\"unknown type\")\n\t\t\t}\n\t\t}\n\t\tdispparams.rgvarg = uintptr(unsafe.Pointer(&vargs[0]))\n\t\tdispparams.cArgs = uint32(len(params))\n\t}\n\n\tresult = new(VARIANT)\n\tvar excepInfo EXCEPINFO\n\tVariantInit(result)\n\thr, _, _ := syscall.Syscall9(\n\t\tdisp.VTable().Invoke,\n\t\t9,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(dispid),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(dispatch),\n\t\tuintptr(unsafe.Pointer(&dispparams)),\n\t\tuintptr(unsafe.Pointer(result)),\n\t\tuintptr(unsafe.Pointer(&excepInfo)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewErrorWithSubError(hr, BstrToString(excepInfo.bstrDescription), excepInfo)\n\t}\n\tfor i, varg := range vargs {\n\t\tn := len(params) - i - 1\n\t\tif varg.VT == VT_BSTR && varg.Val != 0 {\n\t\t\tSysFreeString(((*int16)(unsafe.Pointer(uintptr(varg.Val)))))\n\t\t}\n\t\tif varg.VT == (VT_BSTR|VT_BYREF) && varg.Val != 0 {\n\t\t\t*(params[n].(*string)) = LpOleStrToString(*(**uint16)(unsafe.Pointer(uintptr(varg.Val))))\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IEnumVARIANT struct {\n\tIUnknown\n}\n\ntype IEnumVARIANTVtbl struct {\n\tIUnknownVtbl\n\tNext  uintptr\n\tSkip  uintptr\n\tReset uintptr\n\tClone uintptr\n}\n\nfunc (v *IEnumVARIANT) VTable() *IEnumVARIANTVtbl {\n\treturn (*IEnumVARIANTVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (enum *IEnumVARIANT) Clone() (*IEnumVARIANT, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Reset() error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Skip(celt uint) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Next(celt uint) (VARIANT, uint, error) {\n\treturn NewVariant(VT_NULL, int64(0)), 0, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (enum *IEnumVARIANT) Clone() (cloned *IEnumVARIANT, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Clone,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(unsafe.Pointer(&cloned)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Reset() (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Reset,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\t0,\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Skip(celt uint) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Skip,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(celt),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Next(celt uint) (array VARIANT, length uint, err error) {\n\thr, _, _ := syscall.Syscall6(\n\t\tenum.VTable().Next,\n\t\t4,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(celt),\n\t\tuintptr(unsafe.Pointer(&array)),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IInspectable struct {\n\tIUnknown\n}\n\ntype IInspectableVtbl struct {\n\tIUnknownVtbl\n\tGetIIds             uintptr\n\tGetRuntimeClassName uintptr\n\tGetTrustLevel       uintptr\n}\n\nfunc (v *IInspectable) VTable() *IInspectableVtbl {\n\treturn (*IInspectableVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *IInspectable) GetIids() ([]*GUID, error) {\n\treturn []*GUID{}, NewError(E_NOTIMPL)\n}\n\nfunc (v *IInspectable) GetRuntimeClassName() (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\nfunc (v *IInspectable) GetTrustLevel() (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IInspectable) GetIids() (iids []*GUID, err error) {\n\tvar count uint32\n\tvar array uintptr\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetIIds,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&count)),\n\t\tuintptr(unsafe.Pointer(&array)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t\treturn\n\t}\n\tdefer CoTaskMemFree(array)\n\n\tiids = make([]*GUID, count)\n\tbyteCount := count * uint32(unsafe.Sizeof(GUID{}))\n\tslicehdr := reflect.SliceHeader{Data: array, Len: int(byteCount), Cap: int(byteCount)}\n\tbyteSlice := *(*[]byte)(unsafe.Pointer(&slicehdr))\n\treader := bytes.NewReader(byteSlice)\n\tfor i := range iids {\n\t\tguid := GUID{}\n\t\terr = binary.Read(reader, binary.LittleEndian, &guid)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tiids[i] = &guid\n\t}\n\treturn\n}\n\nfunc (v *IInspectable) GetRuntimeClassName() (s string, err error) {\n\tvar hstring HString\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetRuntimeClassName,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&hstring)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t\treturn\n\t}\n\ts = hstring.String()\n\tDeleteHString(hstring)\n\treturn\n}\n\nfunc (v *IInspectable) GetTrustLevel() (level uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetTrustLevel,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&level)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IProvideClassInfo struct {\n\tIUnknown\n}\n\ntype IProvideClassInfoVtbl struct {\n\tIUnknownVtbl\n\tGetClassInfo uintptr\n}\n\nfunc (v *IProvideClassInfo) VTable() *IProvideClassInfoVtbl {\n\treturn (*IProvideClassInfoVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IProvideClassInfo) GetClassInfo() (cinfo *ITypeInfo, err error) {\n\tcinfo, err = getClassInfo(v)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetClassInfo,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(&tinfo)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype ITypeInfo struct {\n\tIUnknown\n}\n\ntype ITypeInfoVtbl struct {\n\tIUnknownVtbl\n\tGetTypeAttr          uintptr\n\tGetTypeComp          uintptr\n\tGetFuncDesc          uintptr\n\tGetVarDesc           uintptr\n\tGetNames             uintptr\n\tGetRefTypeOfImplType uintptr\n\tGetImplTypeFlags     uintptr\n\tGetIDsOfNames        uintptr\n\tInvoke               uintptr\n\tGetDocumentation     uintptr\n\tGetDllEntry          uintptr\n\tGetRefTypeInfo       uintptr\n\tAddressOfMember      uintptr\n\tCreateInstance       uintptr\n\tGetMops              uintptr\n\tGetContainingTypeLib uintptr\n\tReleaseTypeAttr      uintptr\n\tReleaseFuncDesc      uintptr\n\tReleaseVarDesc       uintptr\n}\n\nfunc (v *ITypeInfo) VTable() *ITypeInfoVtbl {\n\treturn (*ITypeInfoVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *ITypeInfo) GetTypeAttr() (*TYPEATTR, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *ITypeInfo) GetTypeAttr() (tattr *TYPEATTR, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tuintptr(v.VTable().GetTypeAttr),\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&tattr)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IUnknown struct {\n\tRawVTable *interface{}\n}\n\ntype IUnknownVtbl struct {\n\tQueryInterface uintptr\n\tAddRef         uintptr\n\tRelease        uintptr\n}\n\ntype UnknownLike interface {\n\tQueryInterface(iid *GUID) (disp *IDispatch, err error)\n\tAddRef() int32\n\tRelease() int32\n}\n\nfunc (v *IUnknown) VTable() *IUnknownVtbl {\n\treturn (*IUnknownVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IUnknown) PutQueryInterface(interfaceID *GUID, obj interface{}) error {\n\treturn reflectQueryInterface(v, v.VTable().QueryInterface, interfaceID, obj)\n}\n\nfunc (v *IUnknown) IDispatch(interfaceID *GUID) (dispatch *IDispatch, err error) {\n\terr = v.PutQueryInterface(interfaceID, &dispatch)\n\treturn\n}\n\nfunc (v *IUnknown) IEnumVARIANT(interfaceID *GUID) (enum *IEnumVARIANT, err error) {\n\terr = v.PutQueryInterface(interfaceID, &enum)\n\treturn\n}\n\nfunc (v *IUnknown) QueryInterface(iid *GUID) (*IDispatch, error) {\n\treturn queryInterface(v, iid)\n}\n\nfunc (v *IUnknown) MustQueryInterface(iid *GUID) (disp *IDispatch) {\n\tunk, err := queryInterface(v, iid)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn unk\n}\n\nfunc (v *IUnknown) AddRef() int32 {\n\treturn addRef(v)\n}\n\nfunc (v *IUnknown) Release() int32 {\n\treturn release(v)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc addRef(unk *IUnknown) int32 {\n\treturn 0\n}\n\nfunc release(unk *IUnknown) int32 {\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {\n\tselfValue := reflect.ValueOf(self).Elem()\n\tobjValue := reflect.ValueOf(obj).Elem()\n\n\thr, _, _ := syscall.Syscall(\n\t\tmethod,\n\t\t3,\n\t\tselfValue.UnsafeAddr(),\n\t\tuintptr(unsafe.Pointer(interfaceID)),\n\t\tobjValue.Addr().Pointer())\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tunk.VTable().QueryInterface,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&disp)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc addRef(unk *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(\n\t\tunk.VTable().AddRef,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n\nfunc release(unk *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(\n\t\tunk.VTable().Release,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ole.go",
    "content": "package ole\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// DISPPARAMS are the arguments that passed to methods or property.\ntype DISPPARAMS struct {\n\trgvarg            uintptr\n\trgdispidNamedArgs uintptr\n\tcArgs             uint32\n\tcNamedArgs        uint32\n}\n\n// EXCEPINFO defines exception info.\ntype EXCEPINFO struct {\n\twCode             uint16\n\twReserved         uint16\n\tbstrSource        *uint16\n\tbstrDescription   *uint16\n\tbstrHelpFile      *uint16\n\tdwHelpContext     uint32\n\tpvReserved        uintptr\n\tpfnDeferredFillIn uintptr\n\tscode             uint32\n}\n\n// String convert EXCEPINFO to string.\nfunc (e EXCEPINFO) String() string {\n\tvar src, desc, hlp string\n\tif e.bstrSource == nil {\n\t\tsrc = \"<nil>\"\n\t} else {\n\t\tsrc = BstrToString(e.bstrSource)\n\t}\n\n\tif e.bstrDescription == nil {\n\t\tdesc = \"<nil>\"\n\t} else {\n\t\tdesc = BstrToString(e.bstrDescription)\n\t}\n\n\tif e.bstrHelpFile == nil {\n\t\thlp = \"<nil>\"\n\t} else {\n\t\thlp = BstrToString(e.bstrHelpFile)\n\t}\n\n\treturn fmt.Sprintf(\n\t\t\"wCode: %#x, bstrSource: %v, bstrDescription: %v, bstrHelpFile: %v, dwHelpContext: %#x, scode: %#x\",\n\t\te.wCode, src, desc, hlp, e.dwHelpContext, e.scode,\n\t)\n}\n\n// Error implements error interface and returns error string.\nfunc (e EXCEPINFO) Error() string {\n\tif e.bstrDescription != nil {\n\t\treturn strings.TrimSpace(BstrToString(e.bstrDescription))\n\t}\n\n\tsrc := \"Unknown\"\n\tif e.bstrSource != nil {\n\t\tsrc = BstrToString(e.bstrSource)\n\t}\n\n\tcode := e.scode\n\tif e.wCode != 0 {\n\t\tcode = uint32(e.wCode)\n\t}\n\n\treturn fmt.Sprintf(\"%v: %#x\", src, code)\n}\n\n// PARAMDATA defines parameter data type.\ntype PARAMDATA struct {\n\tName *int16\n\tVt   uint16\n}\n\n// METHODDATA defines method info.\ntype METHODDATA struct {\n\tName     *uint16\n\tData     *PARAMDATA\n\tDispid   int32\n\tMeth     uint32\n\tCC       int32\n\tCArgs    uint32\n\tFlags    uint16\n\tVtReturn uint32\n}\n\n// INTERFACEDATA defines interface info.\ntype INTERFACEDATA struct {\n\tMethodData *METHODDATA\n\tCMembers   uint32\n}\n\n// Point is 2D vector type.\ntype Point struct {\n\tX int32\n\tY int32\n}\n\n// Msg is message between processes.\ntype Msg struct {\n\tHwnd    uint32\n\tMessage uint32\n\tWparam  int32\n\tLparam  int32\n\tTime    uint32\n\tPt      Point\n}\n\n// TYPEDESC defines data type.\ntype TYPEDESC struct {\n\tHreftype uint32\n\tVT       uint16\n}\n\n// IDLDESC defines IDL info.\ntype IDLDESC struct {\n\tDwReserved uint32\n\tWIDLFlags  uint16\n}\n\n// TYPEATTR defines type info.\ntype TYPEATTR struct {\n\tGuid             GUID\n\tLcid             uint32\n\tdwReserved       uint32\n\tMemidConstructor int32\n\tMemidDestructor  int32\n\tLpstrSchema      *uint16\n\tCbSizeInstance   uint32\n\tTypekind         int32\n\tCFuncs           uint16\n\tCVars            uint16\n\tCImplTypes       uint16\n\tCbSizeVft        uint16\n\tCbAlignment      uint16\n\tWTypeFlags       uint16\n\tWMajorVerNum     uint16\n\tWMinorVerNum     uint16\n\tTdescAlias       TYPEDESC\n\tIdldescType      IDLDESC\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection.go",
    "content": "// +build windows\n\npackage oleutil\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n\n\tole \"github.com/go-ole/go-ole\"\n)\n\ntype stdDispatch struct {\n\tlpVtbl  *stdDispatchVtbl\n\tref     int32\n\tiid     *ole.GUID\n\tiface   interface{}\n\tfuncMap map[string]int32\n}\n\ntype stdDispatchVtbl struct {\n\tpQueryInterface   uintptr\n\tpAddRef           uintptr\n\tpRelease          uintptr\n\tpGetTypeInfoCount uintptr\n\tpGetTypeInfo      uintptr\n\tpGetIDsOfNames    uintptr\n\tpInvoke           uintptr\n}\n\nfunc dispQueryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\t*punk = nil\n\tif ole.IsEqualGUID(iid, ole.IID_IUnknown) ||\n\t\tole.IsEqualGUID(iid, ole.IID_IDispatch) {\n\t\tdispAddRef(this)\n\t\t*punk = this\n\t\treturn ole.S_OK\n\t}\n\tif ole.IsEqualGUID(iid, pthis.iid) {\n\t\tdispAddRef(this)\n\t\t*punk = this\n\t\treturn ole.S_OK\n\t}\n\treturn ole.E_NOINTERFACE\n}\n\nfunc dispAddRef(this *ole.IUnknown) int32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tpthis.ref++\n\treturn pthis.ref\n}\n\nfunc dispRelease(this *ole.IUnknown) int32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tpthis.ref--\n\treturn pthis.ref\n}\n\nfunc dispGetIDsOfNames(this *ole.IUnknown, iid *ole.GUID, wnames []*uint16, namelen int, lcid int, pdisp []int32) uintptr {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tnames := make([]string, len(wnames))\n\tfor i := 0; i < len(names); i++ {\n\t\tnames[i] = ole.LpOleStrToString(wnames[i])\n\t}\n\tfor n := 0; n < namelen; n++ {\n\t\tif id, ok := pthis.funcMap[names[n]]; ok {\n\t\t\tpdisp[n] = id\n\t\t}\n\t}\n\treturn ole.S_OK\n}\n\nfunc dispGetTypeInfoCount(pcount *int) uintptr {\n\tif pcount != nil {\n\t\t*pcount = 0\n\t}\n\treturn ole.S_OK\n}\n\nfunc dispGetTypeInfo(ptypeif *uintptr) uintptr {\n\treturn ole.E_NOTIMPL\n}\n\nfunc dispInvoke(this *ole.IDispatch, dispid int32, riid *ole.GUID, lcid int, flags int16, dispparams *ole.DISPPARAMS, result *ole.VARIANT, pexcepinfo *ole.EXCEPINFO, nerr *uint) uintptr {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tfound := \"\"\n\tfor name, id := range pthis.funcMap {\n\t\tif id == dispid {\n\t\t\tfound = name\n\t\t}\n\t}\n\tif found != \"\" {\n\t\trv := reflect.ValueOf(pthis.iface).Elem()\n\t\trm := rv.MethodByName(found)\n\t\trr := rm.Call([]reflect.Value{})\n\t\tprintln(len(rr))\n\t\treturn ole.S_OK\n\t}\n\treturn ole.E_NOTIMPL\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection_func.go",
    "content": "// +build !windows\n\npackage oleutil\n\nimport ole \"github.com/go-ole/go-ole\"\n\n// ConnectObject creates a connection point between two services for communication.\nfunc ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (uint32, error) {\n\treturn 0, ole.NewError(ole.E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection_windows.go",
    "content": "// +build windows\n\npackage oleutil\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tole \"github.com/go-ole/go-ole\"\n)\n\n// ConnectObject creates a connection point between two services for communication.\nfunc ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (cookie uint32, err error) {\n\tunknown, err := disp.QueryInterface(ole.IID_IConnectionPointContainer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tcontainer := (*ole.IConnectionPointContainer)(unsafe.Pointer(unknown))\n\tvar point *ole.IConnectionPoint\n\terr = container.FindConnectionPoint(iid, &point)\n\tif err != nil {\n\t\treturn\n\t}\n\tif edisp, ok := idisp.(*ole.IUnknown); ok {\n\t\tcookie, err = point.Advise(edisp)\n\t\tcontainer.Release()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\trv := reflect.ValueOf(disp).Elem()\n\tif rv.Type().Kind() == reflect.Struct {\n\t\tdest := &stdDispatch{}\n\t\tdest.lpVtbl = &stdDispatchVtbl{}\n\t\tdest.lpVtbl.pQueryInterface = syscall.NewCallback(dispQueryInterface)\n\t\tdest.lpVtbl.pAddRef = syscall.NewCallback(dispAddRef)\n\t\tdest.lpVtbl.pRelease = syscall.NewCallback(dispRelease)\n\t\tdest.lpVtbl.pGetTypeInfoCount = syscall.NewCallback(dispGetTypeInfoCount)\n\t\tdest.lpVtbl.pGetTypeInfo = syscall.NewCallback(dispGetTypeInfo)\n\t\tdest.lpVtbl.pGetIDsOfNames = syscall.NewCallback(dispGetIDsOfNames)\n\t\tdest.lpVtbl.pInvoke = syscall.NewCallback(dispInvoke)\n\t\tdest.iface = disp\n\t\tdest.iid = iid\n\t\tcookie, err = point.Advise((*ole.IUnknown)(unsafe.Pointer(dest)))\n\t\tcontainer.Release()\n\t\tif err != nil {\n\t\t\tpoint.Release()\n\t\t\treturn\n\t\t}\n\t}\n\n\tcontainer.Release()\n\n\treturn 0, ole.NewError(ole.E_INVALIDARG)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/go-get.go",
    "content": "// This file is here so go get succeeds as without it errors with:\n// no buildable Go source files in ...\n//\n// +build !windows\n\npackage oleutil\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/oleutil.go",
    "content": "package oleutil\n\nimport ole \"github.com/go-ole/go-ole\"\n\n// ClassIDFrom retrieves class ID whether given is program ID or application string.\nfunc ClassIDFrom(programID string) (classID *ole.GUID, err error) {\n\treturn ole.ClassIDFrom(programID)\n}\n\n// CreateObject creates object from programID based on interface type.\n//\n// Only supports IUnknown.\n//\n// Program ID can be either program ID or application string.\nfunc CreateObject(programID string) (unknown *ole.IUnknown, err error) {\n\tclassID, err := ole.ClassIDFrom(programID)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tunknown, err = ole.CreateInstance(classID, ole.IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn\n}\n\n// GetActiveObject retrieves active object for program ID and interface ID based\n// on interface type.\n//\n// Only supports IUnknown.\n//\n// Program ID can be either program ID or application string.\nfunc GetActiveObject(programID string) (unknown *ole.IUnknown, err error) {\n\tclassID, err := ole.ClassIDFrom(programID)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tunknown, err = ole.GetActiveObject(classID, ole.IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn\n}\n\n// CallMethod calls method on IDispatch with parameters.\nfunc CallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_METHOD, params)\n}\n\n// MustCallMethod calls method on IDispatch with parameters or panics.\nfunc MustCallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := CallMethod(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\n// GetProperty retrieves property from IDispatch.\nfunc GetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYGET, params)\n}\n\n// MustGetProperty retrieves property from IDispatch or panics.\nfunc MustGetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := GetProperty(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\n// PutProperty mutates property.\nfunc PutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUT, params)\n}\n\n// MustPutProperty mutates property or panics.\nfunc MustPutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := PutProperty(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray.go",
    "content": "// Package is meant to retrieve and process safe array data returned from COM.\n\npackage ole\n\n// SafeArrayBound defines the SafeArray boundaries.\ntype SafeArrayBound struct {\n\tElements   uint32\n\tLowerBound int32\n}\n\n// SafeArray is how COM handles arrays.\ntype SafeArray struct {\n\tDimensions   uint16\n\tFeaturesFlag uint16\n\tElementsSize uint32\n\tLocksAmount  uint32\n\tData         uint32\n\tBounds       [16]byte\n}\n\n// SAFEARRAY is obsolete, exists for backwards compatibility.\n// Use SafeArray\ntype SAFEARRAY SafeArray\n\n// SAFEARRAYBOUND is obsolete, exists for backwards compatibility.\n// Use SafeArrayBound\ntype SAFEARRAYBOUND SafeArrayBound\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\n// safeArrayAccessData returns raw array pointer.\n//\n// AKA: SafeArrayAccessData in Windows API.\nfunc safeArrayAccessData(safearray *SafeArray) (uintptr, error) {\n\treturn uintptr(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayUnaccessData releases raw array.\n//\n// AKA: SafeArrayUnaccessData in Windows API.\nfunc safeArrayUnaccessData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocData allocates SafeArray.\n//\n// AKA: SafeArrayAllocData in Windows API.\nfunc safeArrayAllocData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocDescriptor allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptor in Windows API.\nfunc safeArrayAllocDescriptor(dimensions uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocDescriptorEx allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptorEx in Windows API.\nfunc safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCopy returns copy of SafeArray.\n//\n// AKA: SafeArrayCopy in Windows API.\nfunc safeArrayCopy(original *SafeArray) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCopyData duplicates SafeArray into another SafeArray object.\n//\n// AKA: SafeArrayCopyData in Windows API.\nfunc safeArrayCopyData(original *SafeArray, duplicate *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayCreate creates SafeArray.\n//\n// AKA: SafeArrayCreate in Windows API.\nfunc safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateEx creates SafeArray.\n//\n// AKA: SafeArrayCreateEx in Windows API.\nfunc safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateVector creates SafeArray.\n//\n// AKA: SafeArrayCreateVector in Windows API.\nfunc safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateVectorEx creates SafeArray.\n//\n// AKA: SafeArrayCreateVectorEx in Windows API.\nfunc safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroy destroys SafeArray object.\n//\n// AKA: SafeArrayDestroy in Windows API.\nfunc safeArrayDestroy(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroyData destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyData in Windows API.\nfunc safeArrayDestroyData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroyDescriptor destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyDescriptor in Windows API.\nfunc safeArrayDestroyDescriptor(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetDim is the amount of dimensions in the SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetDim in Windows API.\nfunc safeArrayGetDim(safearray *SafeArray) (*uint32, error) {\n\tu := uint32(0)\n\treturn &u, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElementSize is the element size in bytes.\n//\n// AKA: SafeArrayGetElemsize in Windows API.\nfunc safeArrayGetElementSize(safearray *SafeArray) (*uint32, error) {\n\tu := uint32(0)\n\treturn &u, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElement retrieves element at given index.\nfunc safeArrayGetElement(safearray *SafeArray, index int64, pv unsafe.Pointer) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElement retrieves element at given index and converts to string.\nfunc safeArrayGetElementString(safearray *SafeArray, index int64) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.\n//\n// AKA: SafeArrayGetIID in Windows API.\nfunc safeArrayGetIID(safearray *SafeArray) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetLBound returns lower bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetLBound in Windows API.\nfunc safeArrayGetLBound(safearray *SafeArray, dimension uint32) (int64, error) {\n\treturn int64(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayGetUBound returns upper bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetUBound in Windows API.\nfunc safeArrayGetUBound(safearray *SafeArray, dimension uint32) (int64, error) {\n\treturn int64(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayGetVartype returns data type of SafeArray.\n//\n// AKA: SafeArrayGetVartype in Windows API.\nfunc safeArrayGetVartype(safearray *SafeArray) (uint16, error) {\n\treturn uint16(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayLock locks SafeArray for reading to modify SafeArray.\n//\n// This must be called during some calls to ensure that another process does not\n// read or write to the SafeArray during editing.\n//\n// AKA: SafeArrayLock in Windows API.\nfunc safeArrayLock(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayUnlock unlocks SafeArray for reading.\n//\n// AKA: SafeArrayUnlock in Windows API.\nfunc safeArrayUnlock(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayPutElement stores the data element at the specified location in the\n// array.\n//\n// AKA: SafeArrayPutElement in Windows API.\nfunc safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.\n//\n// AKA: SafeArrayGetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArrayGetRecordInfo(safearray *SafeArray) (interface{}, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArraySetRecordInfo mutates IRecordInfo info for custom types.\n//\n// AKA: SafeArraySetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\nvar (\n\tprocSafeArrayAccessData, _        = modoleaut32.FindProc(\"SafeArrayAccessData\")\n\tprocSafeArrayAllocData, _         = modoleaut32.FindProc(\"SafeArrayAllocData\")\n\tprocSafeArrayAllocDescriptor, _   = modoleaut32.FindProc(\"SafeArrayAllocDescriptor\")\n\tprocSafeArrayAllocDescriptorEx, _ = modoleaut32.FindProc(\"SafeArrayAllocDescriptorEx\")\n\tprocSafeArrayCopy, _              = modoleaut32.FindProc(\"SafeArrayCopy\")\n\tprocSafeArrayCopyData, _          = modoleaut32.FindProc(\"SafeArrayCopyData\")\n\tprocSafeArrayCreate, _            = modoleaut32.FindProc(\"SafeArrayCreate\")\n\tprocSafeArrayCreateEx, _          = modoleaut32.FindProc(\"SafeArrayCreateEx\")\n\tprocSafeArrayCreateVector, _      = modoleaut32.FindProc(\"SafeArrayCreateVector\")\n\tprocSafeArrayCreateVectorEx, _    = modoleaut32.FindProc(\"SafeArrayCreateVectorEx\")\n\tprocSafeArrayDestroy, _           = modoleaut32.FindProc(\"SafeArrayDestroy\")\n\tprocSafeArrayDestroyData, _       = modoleaut32.FindProc(\"SafeArrayDestroyData\")\n\tprocSafeArrayDestroyDescriptor, _ = modoleaut32.FindProc(\"SafeArrayDestroyDescriptor\")\n\tprocSafeArrayGetDim, _            = modoleaut32.FindProc(\"SafeArrayGetDim\")\n\tprocSafeArrayGetElement, _        = modoleaut32.FindProc(\"SafeArrayGetElement\")\n\tprocSafeArrayGetElemsize, _       = modoleaut32.FindProc(\"SafeArrayGetElemsize\")\n\tprocSafeArrayGetIID, _            = modoleaut32.FindProc(\"SafeArrayGetIID\")\n\tprocSafeArrayGetLBound, _         = modoleaut32.FindProc(\"SafeArrayGetLBound\")\n\tprocSafeArrayGetUBound, _         = modoleaut32.FindProc(\"SafeArrayGetUBound\")\n\tprocSafeArrayGetVartype, _        = modoleaut32.FindProc(\"SafeArrayGetVartype\")\n\tprocSafeArrayLock, _              = modoleaut32.FindProc(\"SafeArrayLock\")\n\tprocSafeArrayPtrOfIndex, _        = modoleaut32.FindProc(\"SafeArrayPtrOfIndex\")\n\tprocSafeArrayUnaccessData, _      = modoleaut32.FindProc(\"SafeArrayUnaccessData\")\n\tprocSafeArrayUnlock, _            = modoleaut32.FindProc(\"SafeArrayUnlock\")\n\tprocSafeArrayPutElement, _        = modoleaut32.FindProc(\"SafeArrayPutElement\")\n\t//procSafeArrayRedim, _             = modoleaut32.FindProc(\"SafeArrayRedim\") // TODO\n\t//procSafeArraySetIID, _            = modoleaut32.FindProc(\"SafeArraySetIID\") // TODO\n\tprocSafeArrayGetRecordInfo, _ = modoleaut32.FindProc(\"SafeArrayGetRecordInfo\")\n\tprocSafeArraySetRecordInfo, _ = modoleaut32.FindProc(\"SafeArraySetRecordInfo\")\n)\n\n// safeArrayAccessData returns raw array pointer.\n//\n// AKA: SafeArrayAccessData in Windows API.\n// Todo: Test\nfunc safeArrayAccessData(safearray *SafeArray) (element uintptr, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAccessData.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&element))))\n\treturn\n}\n\n// safeArrayUnaccessData releases raw array.\n//\n// AKA: SafeArrayUnaccessData in Windows API.\nfunc safeArrayUnaccessData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayUnaccessData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayAllocData allocates SafeArray.\n//\n// AKA: SafeArrayAllocData in Windows API.\nfunc safeArrayAllocData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayAllocData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayAllocDescriptor allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptor in Windows API.\nfunc safeArrayAllocDescriptor(dimensions uint32) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAllocDescriptor.Call(uintptr(dimensions), uintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayAllocDescriptorEx allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptorEx in Windows API.\nfunc safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAllocDescriptorEx.Call(\n\t\t\tuintptr(variantType),\n\t\t\tuintptr(dimensions),\n\t\t\tuintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayCopy returns copy of SafeArray.\n//\n// AKA: SafeArrayCopy in Windows API.\nfunc safeArrayCopy(original *SafeArray) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayCopy.Call(\n\t\t\tuintptr(unsafe.Pointer(original)),\n\t\t\tuintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayCopyData duplicates SafeArray into another SafeArray object.\n//\n// AKA: SafeArrayCopyData in Windows API.\nfunc safeArrayCopyData(original *SafeArray, duplicate *SafeArray) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayCopyData.Call(\n\t\t\tuintptr(unsafe.Pointer(original)),\n\t\t\tuintptr(unsafe.Pointer(duplicate))))\n\treturn\n}\n\n// safeArrayCreate creates SafeArray.\n//\n// AKA: SafeArrayCreate in Windows API.\nfunc safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreate.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(dimensions),\n\t\tuintptr(unsafe.Pointer(bounds)))\n\tsafearray = (*SafeArray)(unsafe.Pointer(&sa))\n\treturn\n}\n\n// safeArrayCreateEx creates SafeArray.\n//\n// AKA: SafeArrayCreateEx in Windows API.\nfunc safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateEx.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(dimensions),\n\t\tuintptr(unsafe.Pointer(bounds)),\n\t\textra)\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayCreateVector creates SafeArray.\n//\n// AKA: SafeArrayCreateVector in Windows API.\nfunc safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateVector.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(lowerBound),\n\t\tuintptr(length))\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayCreateVectorEx creates SafeArray.\n//\n// AKA: SafeArrayCreateVectorEx in Windows API.\nfunc safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateVectorEx.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(lowerBound),\n\t\tuintptr(length),\n\t\textra)\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayDestroy destroys SafeArray object.\n//\n// AKA: SafeArrayDestroy in Windows API.\nfunc safeArrayDestroy(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroy.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayDestroyData destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyData in Windows API.\nfunc safeArrayDestroyData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroyData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayDestroyDescriptor destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyDescriptor in Windows API.\nfunc safeArrayDestroyDescriptor(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroyDescriptor.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayGetDim is the amount of dimensions in the SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetDim in Windows API.\nfunc safeArrayGetDim(safearray *SafeArray) (dimensions *uint32, err error) {\n\tl, _, err := procSafeArrayGetDim.Call(uintptr(unsafe.Pointer(safearray)))\n\tdimensions = (*uint32)(unsafe.Pointer(l))\n\treturn\n}\n\n// safeArrayGetElementSize is the element size in bytes.\n//\n// AKA: SafeArrayGetElemsize in Windows API.\nfunc safeArrayGetElementSize(safearray *SafeArray) (length *uint32, err error) {\n\tl, _, err := procSafeArrayGetElemsize.Call(uintptr(unsafe.Pointer(safearray)))\n\tlength = (*uint32)(unsafe.Pointer(l))\n\treturn\n}\n\n// safeArrayGetElement retrieves element at given index.\nfunc safeArrayGetElement(safearray *SafeArray, index int64, pv unsafe.Pointer) error {\n\treturn convertHresultToError(\n\t\tprocSafeArrayGetElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(pv)))\n}\n\n// safeArrayGetElementString retrieves element at given index and converts to string.\nfunc safeArrayGetElementString(safearray *SafeArray, index int64) (str string, err error) {\n\tvar element *int16\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(unsafe.Pointer(&element))))\n\tstr = BstrToString(*(**uint16)(unsafe.Pointer(&element)))\n\tSysFreeString(element)\n\treturn\n}\n\n// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.\n//\n// AKA: SafeArrayGetIID in Windows API.\nfunc safeArrayGetIID(safearray *SafeArray) (guid *GUID, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetIID.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&guid))))\n\treturn\n}\n\n// safeArrayGetLBound returns lower bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetLBound in Windows API.\nfunc safeArrayGetLBound(safearray *SafeArray, dimension uint32) (lowerBound int64, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetLBound.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(dimension),\n\t\t\tuintptr(unsafe.Pointer(&lowerBound))))\n\treturn\n}\n\n// safeArrayGetUBound returns upper bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetUBound in Windows API.\nfunc safeArrayGetUBound(safearray *SafeArray, dimension uint32) (upperBound int64, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetUBound.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(dimension),\n\t\t\tuintptr(unsafe.Pointer(&upperBound))))\n\treturn\n}\n\n// safeArrayGetVartype returns data type of SafeArray.\n//\n// AKA: SafeArrayGetVartype in Windows API.\nfunc safeArrayGetVartype(safearray *SafeArray) (varType uint16, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetVartype.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&varType))))\n\treturn\n}\n\n// safeArrayLock locks SafeArray for reading to modify SafeArray.\n//\n// This must be called during some calls to ensure that another process does not\n// read or write to the SafeArray during editing.\n//\n// AKA: SafeArrayLock in Windows API.\nfunc safeArrayLock(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayLock.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayUnlock unlocks SafeArray for reading.\n//\n// AKA: SafeArrayUnlock in Windows API.\nfunc safeArrayUnlock(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayUnlock.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayPutElement stores the data element at the specified location in the\n// array.\n//\n// AKA: SafeArrayPutElement in Windows API.\nfunc safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayPutElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(unsafe.Pointer(element))))\n\treturn\n}\n\n// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.\n//\n// AKA: SafeArrayGetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArrayGetRecordInfo(safearray *SafeArray) (recordInfo interface{}, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetRecordInfo.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&recordInfo))))\n\treturn\n}\n\n// safeArraySetRecordInfo mutates IRecordInfo info for custom types.\n//\n// AKA: SafeArraySetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArraySetRecordInfo.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&recordInfo))))\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearrayconversion.go",
    "content": "// Helper for converting SafeArray to array of objects.\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\ntype SafeArrayConversion struct {\n\tArray *SafeArray\n}\n\nfunc (sac *SafeArrayConversion) ToStringArray() (strings []string) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tstrings = make([]string, totalElements)\n\n\tfor i := int64(0); i < totalElements; i++ {\n\t\tstrings[int32(i)], _ = safeArrayGetElementString(sac.Array, i)\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) ToByteArray() (bytes []byte) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tbytes = make([]byte, totalElements)\n\n\tfor i := int64(0); i < totalElements; i++ {\n\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&bytes[int32(i)]))\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) ToValueArray() (values []interface{}) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tvalues = make([]interface{}, totalElements)\n\tvt, _ := safeArrayGetVartype(sac.Array)\n\n\tfor i := 0; i < int(totalElements); i++ {\n\t\tswitch VT(vt) {\n\t\tcase VT_BOOL:\n\t\t\tvar v bool\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I1:\n\t\t\tvar v int8\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I2:\n\t\t\tvar v int16\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I4:\n\t\t\tvar v int32\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I8:\n\t\t\tvar v int64\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI1:\n\t\t\tvar v uint8\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI2:\n\t\t\tvar v uint16\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI4:\n\t\t\tvar v uint32\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI8:\n\t\t\tvar v uint64\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_R4:\n\t\t\tvar v float32\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_R8:\n\t\t\tvar v float64\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_BSTR:\n\t\t\tvar v string\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_VARIANT:\n\t\t\tvar v VARIANT\n\t\t\tsafeArrayGetElement(sac.Array, int64(i), unsafe.Pointer(&v))\n\t\t\tvalues[i] = v.Value()\n\t\tdefault:\n\t\t\t// TODO\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) GetType() (varType uint16, err error) {\n\treturn safeArrayGetVartype(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) GetDimensions() (dimensions *uint32, err error) {\n\treturn safeArrayGetDim(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) GetSize() (length *uint32, err error) {\n\treturn safeArrayGetElementSize(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) TotalElements(index uint32) (totalElements int64, err error) {\n\tif index < 1 {\n\t\tindex = 1\n\t}\n\n\t// Get array bounds\n\tvar LowerBounds int64\n\tvar UpperBounds int64\n\n\tLowerBounds, err = safeArrayGetLBound(sac.Array, index)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tUpperBounds, err = safeArrayGetUBound(sac.Array, index)\n\tif err != nil {\n\t\treturn\n\t}\n\n\ttotalElements = UpperBounds - LowerBounds + 1\n\treturn\n}\n\n// Release Safe Array memory\nfunc (sac *SafeArrayConversion) Release() {\n\tsafeArrayDestroy(sac.Array)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearrayslices.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\nfunc safeArrayFromByteSlice(slice []byte) *SafeArray {\n\tarray, _ := safeArrayCreateVector(VT_UI1, 0, uint32(len(slice)))\n\n\tif array == nil {\n\t\tpanic(\"Could not convert []byte to SAFEARRAY\")\n\t}\n\n\tfor i, v := range slice {\n\t\tsafeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(&v)))\n\t}\n\treturn array\n}\n\nfunc safeArrayFromStringSlice(slice []string) *SafeArray {\n\tarray, _ := safeArrayCreateVector(VT_BSTR, 0, uint32(len(slice)))\n\n\tif array == nil {\n\t\tpanic(\"Could not convert []string to SAFEARRAY\")\n\t}\n\t// SysAllocStringLen(s)\n\tfor i, v := range slice {\n\t\tsafeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(SysAllocStringLen(v))))\n\t}\n\treturn array\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/utility.go",
    "content": "package ole\n\nimport (\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\n// ClassIDFrom retrieves class ID whether given is program ID or application string.\n//\n// Helper that provides check against both Class ID from Program ID and Class ID from string. It is\n// faster, if you know which you are using, to use the individual functions, but this will check\n// against available functions for you.\nfunc ClassIDFrom(programID string) (classID *GUID, err error) {\n\tclassID, err = CLSIDFromProgID(programID)\n\tif err != nil {\n\t\tclassID, err = CLSIDFromString(programID)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// BytePtrToString converts byte pointer to a Go string.\nfunc BytePtrToString(p *byte) string {\n\ta := (*[10000]uint8)(unsafe.Pointer(p))\n\ti := 0\n\tfor a[i] != 0 {\n\t\ti++\n\t}\n\treturn string(a[:i])\n}\n\n// UTF16PtrToString is alias for LpOleStrToString.\n//\n// Kept for compatibility reasons.\nfunc UTF16PtrToString(p *uint16) string {\n\treturn LpOleStrToString(p)\n}\n\n// LpOleStrToString converts COM Unicode to Go string.\nfunc LpOleStrToString(p *uint16) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\n\tlength := lpOleStrLen(p)\n\ta := make([]uint16, length)\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; i < int(length); i++ {\n\t\ta[i] = *(*uint16)(ptr)\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\n\treturn string(utf16.Decode(a))\n}\n\n// BstrToString converts COM binary string to Go string.\nfunc BstrToString(p *uint16) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\tlength := SysStringLen((*int16)(unsafe.Pointer(p)))\n\ta := make([]uint16, length)\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; i < int(length); i++ {\n\t\ta[i] = *(*uint16)(ptr)\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\treturn string(utf16.Decode(a))\n}\n\n// lpOleStrLen returns the length of Unicode string.\nfunc lpOleStrLen(p *uint16) (length int64) {\n\tif p == nil {\n\t\treturn 0\n\t}\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; ; i++ {\n\t\tif 0 == *(*uint16)(ptr) {\n\t\t\tlength = int64(i)\n\t\t\tbreak\n\t\t}\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\treturn\n}\n\n// convertHresultToError converts syscall to error, if call is unsuccessful.\nfunc convertHresultToError(hr uintptr, r2 uintptr, ignore error) (err error) {\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variables.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n)\n\nvar (\n\tmodcombase     = syscall.NewLazyDLL(\"combase.dll\")\n\tmodkernel32, _ = syscall.LoadDLL(\"kernel32.dll\")\n\tmodole32, _    = syscall.LoadDLL(\"ole32.dll\")\n\tmodoleaut32, _ = syscall.LoadDLL(\"oleaut32.dll\")\n\tmodmsvcrt, _   = syscall.LoadDLL(\"msvcrt.dll\")\n\tmoduser32, _   = syscall.LoadDLL(\"user32.dll\")\n)\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant.go",
    "content": "package ole\n\nimport \"unsafe\"\n\n// NewVariant returns new variant based on type and value.\nfunc NewVariant(vt VT, val int64) VARIANT {\n\treturn VARIANT{VT: vt, Val: val}\n}\n\n// ToIUnknown converts Variant to Unknown object.\nfunc (v *VARIANT) ToIUnknown() *IUnknown {\n\tif v.VT != VT_UNKNOWN {\n\t\treturn nil\n\t}\n\treturn (*IUnknown)(unsafe.Pointer(uintptr(v.Val)))\n}\n\n// ToIDispatch converts variant to dispatch object.\nfunc (v *VARIANT) ToIDispatch() *IDispatch {\n\tif v.VT != VT_DISPATCH {\n\t\treturn nil\n\t}\n\treturn (*IDispatch)(unsafe.Pointer(uintptr(v.Val)))\n}\n\n// ToArray converts variant to SafeArray helper.\nfunc (v *VARIANT) ToArray() *SafeArrayConversion {\n\tif v.VT != VT_SAFEARRAY {\n\t\tif v.VT&VT_ARRAY == 0 {\n\t\t\treturn nil\n\t\t}\n\t}\n\tvar safeArray *SafeArray = (*SafeArray)(unsafe.Pointer(uintptr(v.Val)))\n\treturn &SafeArrayConversion{safeArray}\n}\n\n// ToString converts variant to Go string.\nfunc (v *VARIANT) ToString() string {\n\tif v.VT != VT_BSTR {\n\t\treturn \"\"\n\t}\n\treturn BstrToString(*(**uint16)(unsafe.Pointer(&v.Val)))\n}\n\n// Clear the memory of variant object.\nfunc (v *VARIANT) Clear() error {\n\treturn VariantClear(v)\n}\n\n// Value returns variant value based on its type.\n//\n// Currently supported types: 2- and 4-byte integers, strings, bools.\n// Note that 64-bit integers, datetimes, and other types are stored as strings\n// and will be returned as strings.\n//\n// Needs to be further converted, because this returns an interface{}.\nfunc (v *VARIANT) Value() interface{} {\n\tswitch v.VT {\n\tcase VT_I1:\n\t\treturn int8(v.Val)\n\tcase VT_UI1:\n\t\treturn uint8(v.Val)\n\tcase VT_I2:\n\t\treturn int16(v.Val)\n\tcase VT_UI2:\n\t\treturn uint16(v.Val)\n\tcase VT_I4:\n\t\treturn int32(v.Val)\n\tcase VT_UI4:\n\t\treturn uint32(v.Val)\n\tcase VT_I8:\n\t\treturn int64(v.Val)\n\tcase VT_UI8:\n\t\treturn uint64(v.Val)\n\tcase VT_INT:\n\t\treturn int(v.Val)\n\tcase VT_UINT:\n\t\treturn uint(v.Val)\n\tcase VT_INT_PTR:\n\t\treturn uintptr(v.Val) // TODO\n\tcase VT_UINT_PTR:\n\t\treturn uintptr(v.Val)\n\tcase VT_R4:\n\t\treturn *(*float32)(unsafe.Pointer(&v.Val))\n\tcase VT_R8:\n\t\treturn *(*float64)(unsafe.Pointer(&v.Val))\n\tcase VT_BSTR:\n\t\treturn v.ToString()\n\tcase VT_DATE:\n\t\t// VT_DATE type will either return float64 or time.Time.\n\t\td := float64(v.Val)\n\t\tdate, err := GetVariantDate(d)\n\t\tif err != nil {\n\t\t\treturn d\n\t\t}\n\t\treturn date\n\tcase VT_UNKNOWN:\n\t\treturn v.ToIUnknown()\n\tcase VT_DISPATCH:\n\t\treturn v.ToIDispatch()\n\tcase VT_BOOL:\n\t\treturn v.Val != 0\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_386.go",
    "content": "// +build 386\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT     //  2\n\twReserved1 uint16 //  4\n\twReserved2 uint16 //  6\n\twReserved3 uint16 //  8\n\tVal        int64  // 16\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_amd64.go",
    "content": "// +build amd64\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT      //  2\n\twReserved1 uint16  //  4\n\twReserved2 uint16  //  6\n\twReserved3 uint16  //  8\n\tVal        int64   // 16\n\t_          [8]byte // 24\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/vt_string.go",
    "content": "// generated by stringer -output vt_string.go -type VT; DO NOT EDIT\n\npackage ole\n\nimport \"fmt\"\n\nconst (\n\t_VT_name_0 = \"VT_EMPTYVT_NULLVT_I2VT_I4VT_R4VT_R8VT_CYVT_DATEVT_BSTRVT_DISPATCHVT_ERRORVT_BOOLVT_VARIANTVT_UNKNOWNVT_DECIMAL\"\n\t_VT_name_1 = \"VT_I1VT_UI1VT_UI2VT_UI4VT_I8VT_UI8VT_INTVT_UINTVT_VOIDVT_HRESULTVT_PTRVT_SAFEARRAYVT_CARRAYVT_USERDEFINEDVT_LPSTRVT_LPWSTR\"\n\t_VT_name_2 = \"VT_RECORDVT_INT_PTRVT_UINT_PTR\"\n\t_VT_name_3 = \"VT_FILETIMEVT_BLOBVT_STREAMVT_STORAGEVT_STREAMED_OBJECTVT_STORED_OBJECTVT_BLOB_OBJECTVT_CFVT_CLSID\"\n\t_VT_name_4 = \"VT_BSTR_BLOBVT_VECTOR\"\n\t_VT_name_5 = \"VT_ARRAY\"\n\t_VT_name_6 = \"VT_BYREF\"\n\t_VT_name_7 = \"VT_RESERVED\"\n\t_VT_name_8 = \"VT_ILLEGAL\"\n)\n\nvar (\n\t_VT_index_0 = [...]uint8{0, 8, 15, 20, 25, 30, 35, 40, 47, 54, 65, 73, 80, 90, 100, 110}\n\t_VT_index_1 = [...]uint8{0, 5, 11, 17, 23, 28, 34, 40, 47, 54, 64, 70, 82, 91, 105, 113, 122}\n\t_VT_index_2 = [...]uint8{0, 9, 19, 30}\n\t_VT_index_3 = [...]uint8{0, 11, 18, 27, 37, 55, 71, 85, 90, 98}\n\t_VT_index_4 = [...]uint8{0, 12, 21}\n\t_VT_index_5 = [...]uint8{0, 8}\n\t_VT_index_6 = [...]uint8{0, 8}\n\t_VT_index_7 = [...]uint8{0, 11}\n\t_VT_index_8 = [...]uint8{0, 10}\n)\n\nfunc (i VT) String() string {\n\tswitch {\n\tcase 0 <= i && i <= 14:\n\t\treturn _VT_name_0[_VT_index_0[i]:_VT_index_0[i+1]]\n\tcase 16 <= i && i <= 31:\n\t\ti -= 16\n\t\treturn _VT_name_1[_VT_index_1[i]:_VT_index_1[i+1]]\n\tcase 36 <= i && i <= 38:\n\t\ti -= 36\n\t\treturn _VT_name_2[_VT_index_2[i]:_VT_index_2[i+1]]\n\tcase 64 <= i && i <= 72:\n\t\ti -= 64\n\t\treturn _VT_name_3[_VT_index_3[i]:_VT_index_3[i+1]]\n\tcase 4095 <= i && i <= 4096:\n\t\ti -= 4095\n\t\treturn _VT_name_4[_VT_index_4[i]:_VT_index_4[i+1]]\n\tcase i == 8192:\n\t\treturn _VT_name_5\n\tcase i == 16384:\n\t\treturn _VT_name_6\n\tcase i == 32768:\n\t\treturn _VT_name_7\n\tcase i == 65535:\n\t\treturn _VT_name_8\n\tdefault:\n\t\treturn fmt.Sprintf(\"VT(%d)\", i)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/winrt.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n)\n\nvar (\n\tprocRoInitialize              = modcombase.NewProc(\"RoInitialize\")\n\tprocRoActivateInstance        = modcombase.NewProc(\"RoActivateInstance\")\n\tprocRoGetActivationFactory    = modcombase.NewProc(\"RoGetActivationFactory\")\n\tprocWindowsCreateString       = modcombase.NewProc(\"WindowsCreateString\")\n\tprocWindowsDeleteString       = modcombase.NewProc(\"WindowsDeleteString\")\n\tprocWindowsGetStringRawBuffer = modcombase.NewProc(\"WindowsGetStringRawBuffer\")\n)\n\nfunc RoInitialize(thread_type uint32) (err error) {\n\thr, _, _ := procRoInitialize.Call(uintptr(thread_type))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc RoActivateInstance(clsid string) (ins *IInspectable, err error) {\n\thClsid, err := NewHString(clsid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer DeleteHString(hClsid)\n\n\thr, _, _ := procRoActivateInstance.Call(\n\t\tuintptr(unsafe.Pointer(hClsid)),\n\t\tuintptr(unsafe.Pointer(&ins)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {\n\thClsid, err := NewHString(clsid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer DeleteHString(hClsid)\n\n\thr, _, _ := procRoGetActivationFactory.Call(\n\t\tuintptr(unsafe.Pointer(hClsid)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&ins)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// HString is handle string for pointers.\ntype HString uintptr\n\n// NewHString returns a new HString for Go string.\nfunc NewHString(s string) (hstring HString, err error) {\n\tu16 := syscall.StringToUTF16Ptr(s)\n\tlen := uint32(utf8.RuneCountInString(s))\n\thr, _, _ := procWindowsCreateString.Call(\n\t\tuintptr(unsafe.Pointer(u16)),\n\t\tuintptr(len),\n\t\tuintptr(unsafe.Pointer(&hstring)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// DeleteHString deletes HString.\nfunc DeleteHString(hstring HString) (err error) {\n\thr, _, _ := procWindowsDeleteString.Call(uintptr(hstring))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// String returns Go string value of HString.\nfunc (h HString) String() string {\n\tvar u16buf uintptr\n\tvar u16len uint32\n\tu16buf, _, _ = procWindowsGetStringRawBuffer.Call(\n\t\tuintptr(h),\n\t\tuintptr(unsafe.Pointer(&u16len)))\n\n\tu16hdr := reflect.SliceHeader{Data: u16buf, Len: int(u16len), Cap: int(u16len)}\n\tu16 := *(*[]uint16)(unsafe.Pointer(&u16hdr))\n\treturn syscall.UTF16ToString(u16)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/winrt_doc.go",
    "content": "// +build !windows\n\npackage ole\n\n// RoInitialize\nfunc RoInitialize(thread_type uint32) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\n// RoActivateInstance\nfunc RoActivateInstance(clsid string) (ins *IInspectable, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// RoGetActivationFactory\nfunc RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// HString is handle string for pointers.\ntype HString uintptr\n\n// NewHString returns a new HString for Go string.\nfunc NewHString(s string) (hstring HString, err error) {\n\treturn HString(uintptr(0)), NewError(E_NOTIMPL)\n}\n\n// DeleteHString deletes HString.\nfunc DeleteHString(hstring HString) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\n// String returns Go string value of HString.\nfunc (h HString) String() string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/LICENSE",
    "content": "gopsutil is distributed under BSD license reproduced below.\n\nCopyright (c) 2014, WAKAYAMA Shirou\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n * Neither the name of the gopsutil authors nor the names of its contributors\n   may be used to endorse or promote products derived from this software without\n   specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/README.rst",
    "content": "gopsutil: psutil for golang\n==============================\n\n.. image:: https://circleci.com/gh/shirou/gopsutil.svg?&style=shield\n        :target: https://circleci.com/gh/shirou/gopsutil\n\n.. image:: https://coveralls.io/repos/shirou/gopsutil/badge.svg?branch=master\n        :target: https://coveralls.io/r/shirou/gopsutil?branch=master\n\n.. image:: https://godoc.org/github.com/shirou/gopsutil?status.svg\n        :target: http://godoc.org/github.com/shirou/gopsutil\n\nThis is a port of psutil (http://pythonhosted.org/psutil/). The challenge is porting all\npsutil functions on some architectures...\n\n.. highlights:: Package Structure Changed!\n\n   Package (a.k.a. directory) structure has been changed!! see `issue 24 <https://github.com/shirou/gopsutil/issues/24>`_\n\n.. highlights:: golang 1.4 will become REQUIRED!\n\n   Since syscall package becomes frozen, we should use golang/x/sys of golang 1.4 as soon as possible.\n\n\nAvailable Architectures\n------------------------------------\n\n- FreeBSD i386/amd64\n- Linux i386/amd64/arm(raspberry pi)\n- Windows/amd64\n- Darwin/amd64\n\nAll works are implemented without cgo by porting c struct to golang struct.\n\n\nUsage\n---------\n\n.. code:: go\n\n   import (\n   \t\"fmt\"\n\n   \t\"github.com/shirou/gopsutil/mem\"\n   )\n\n   func main() {\n   \tv, _ := mem.VirtualMemory()\n\n   \t// almost every return value is a struct\n   \tfmt.Printf(\"Total: %v, Free:%v, UsedPercent:%f%%\\n\", v.Total, v.Free, v.UsedPercent)\n\n   \t// convert to JSON. String() is also implemented\n   \tfmt.Println(v)\n   }\n\nThe output is below.\n\n::\n\n  Total: 3179569152, Free:284233728, UsedPercent:84.508194%\n  {\"total\":3179569152,\"available\":492572672,\"used\":2895335424,\"usedPercent\":84.50819439828305, (snip)}\n\nYou can set an alternative location to /proc by setting the HOST_PROC environment variable.\nYou can set an alternative location to /sys by setting the HOST_SYS environment variable.\n\nDocumentation\n------------------------\n\nsee http://godoc.org/github.com/shirou/gopsutil\n\n\nMore Info\n--------------------\n\nSeveral methods have been added which are not present in psutil, but will provide useful information.\n\n- host/HostInfo()  (linux)\n\n  - Hostname\n  - Uptime\n  - Procs\n  - OS                    (ex: \"linux\")\n  - Platform              (ex: \"ubuntu\", \"arch\")\n  - PlatformFamily        (ex: \"debian\")\n  - PlatformVersion       (ex: \"Ubuntu 13.10\")\n  - VirtualizationSystem  (ex: \"LXC\")\n  - VirtualizationRole    (ex: \"guest\"/\"host\")\n\n- cpu/CPUInfo()  (linux, freebsd)\n\n  - CPU          (ex: 0, 1, ...)\n  - VendorID     (ex: \"GenuineIntel\")\n  - Family\n  - Model\n  - Stepping\n  - PhysicalID\n  - CoreID\n  - Cores        (ex: 2)\n  - ModelName    (ex: \"Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz\")\n  - Mhz\n  - CacheSize\n  - Flags        (ex: \"fpu vme de pse tsc msr pae mce cx8 ...\")\n\n- load/LoadAvg()  (linux, freebsd)\n\n  - Load1\n  - Load5\n  - Load15\n\n- docker/GetDockerIDList() (linux only)\n\n  - container id list ([]string)\n\n- docker/CgroupCPU() (linux only)\n\n  - user\n  - system\n\n- docker/CgroupMem() (linux only)\n\n  - various status\n\n- net_protocols (linux only)\n\n  - system wide stats on network protocols (i.e IP, TCP, UDP, etc.)\n  - sourced from /proc/net/snmp\n\n- iptables nf_conntrack (linux only)\n\n  - system wide stats on netfilter conntrack module\n  - sourced from /proc/sys/net/netfilter/nf_conntrack_count\n\nSome codes are ported from Ohai. many thanks.\n\n\nCurrent Status\n------------------\n\n- x: work\n- b: almost work but something broken\n\n================= ====== ======= ====== =======\nname              Linux  FreeBSD MacOSX Windows\ncpu_times            x      x      x       x\ncpu_count            x      x      x       x\ncpu_percent          x      x      x       x\ncpu_times_percent    x      x      x       x\nvirtual_memory       x      x      x       x\nswap_memory          x      x      x\ndisk_partitions      x      x      x       x\ndisk_io_counters     x      x\ndisk_usage           x      x      x       x\nnet_io_counters      x      x      b       x\nboot_time            x      x      x       x\nusers                x      x      x       x\npids                 x      x      x       x\npid_exists           x      x      x       x\nnet_connections      x             x\nnet_protocols        x\nnet_if_addrs\nnet_if_stats\nnetfilter_conntrack  x\n================= ====== ======= ====== =======\n\nProcess class\n^^^^^^^^^^^^^^^\n\n================ ===== ======= ====== =======\nname             Linux FreeBSD MacOSX Windows\npid                 x     x      x       x\nppid                x     x      x       x\nname                x     x      x       x\ncmdline             x            x       x\ncreate_time         x\nstatus              x     x      x\ncwd                 x\nexe                 x     x              x\nuids                x     x      x\ngids                x     x      x\nterminal            x     x      x\nio_counters         x\nnice                x            x       x\nnum_fds             x\nnum_ctx_switches    x\nnum_threads         x     x      x       x\ncpu_times           x\nmemory_info         x     x      x\nmemory_info_ex      x\nmemory_maps         x\nopen_files          x\nsend_signal         x     x      x\nsuspend             x     x      x\nresume              x     x      x\nterminate           x     x      x\nkill                x     x      x\nusername            x\nionice\nrlimit\nnum_handlres\nthreads\ncpu_percent         x            x\ncpu_affinity\nmemory_percent\nparent              x            x\nchildren            x     x      x\nconnections         x            x\nis_running\n================ ===== ======= ====== =======\n\nOriginal Metrics\n^^^^^^^^^^^^^^^^^^^\n================== ===== ======= ====== =======\nitem               Linux FreeBSD MacOSX Windows\n**HostInfo**\nhostname              x     x      x       x\n  uptime              x     x      x\n  proces              x     x\n  os                  x     x      x       x\n  platform            x     x      x\n  platformfamiliy     x     x      x\n  virtualization      x\n**CPU**\n  VendorID            x     x      x       x\n  Family              x     x      x       x\n  Model               x     x      x       x\n  Stepping            x     x      x       x\n  PhysicalID          x\n  CoreID              x\n  Cores               x                    x\n  ModelName           x     x      x       x\n**LoadAvg**\n  Load1               x     x      x\n  Load5               x     x      x\n  Load15              x     x      x\n**GetDockerID**\n  container id        x     no    no      no\n**CgroupsCPU**\n  user                x     no    no      no\n  system              x     no    no      no\n**CgroupsMem**\n  various             x     no    no      no\n================== ===== ======= ====== =======\n\n- future work\n\n  - process_iter\n  - wait_procs\n  - Process class\n\n    - as_dict\n    - wait\n\n\nLicense\n------------\n\nNew BSD License (same as psutil)\n\n\nRelated Works\n-----------------------\n\nI have been influenced by the following great works:\n\n- psutil: http://pythonhosted.org/psutil/\n- dstat: https://github.com/dagwieers/dstat\n- gosigar: https://github.com/cloudfoundry/gosigar/\n- goprocinfo: https://github.com/c9s/goprocinfo\n- go-ps: https://github.com/mitchellh/go-ps\n- ohai: https://github.com/opscode/ohai/\n- bosun: https://github.com/bosun-monitor/bosun/tree/master/cmd/scollector/collectors\n- mackerel: https://github.com/mackerelio/mackerel-agent/tree/master/metrics\n\nHow to Contribute\n---------------------------\n\n1. Fork it\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create new Pull Request\n\nMy English is terrible, so documentation or correcting comments are also\nwelcome.\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/circle.yml",
    "content": "machine:\n  timezone:\n    Asia/Tokyo\ntest:\n  override:\n    - GOOS=linux GOARCH=amd64 go test -v ./...\n    - GOOS=linux GOARCH=386 go get -v ./...\n    - GOOS=linux GOARCH=arm GOARM=7 go get -v ./...\n    - GOOS=freebsd GOARCH=amd64 go get -v ./...\n    - GOOS=windows GOARCH=amd64 go get -v ./...\n    - GOOS=darwin GOARCH=amd64 go get -v ./...\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/coverall.sh",
    "content": "#/bin/sh\n\n# see http://www.songmu.jp/riji/entry/2015-01-15-goveralls-multi-package.html\n\nset -e\n# cleanup\ncleanup() {\n  if [ $tmpprof != \"\" ] && [ -f $tmpprof ]; then\n    rm -f $tmpprof\n  fi\n  exit\n}\ntrap cleanup INT QUIT TERM EXIT\n\n# メインの処理\nprof=${1:-\".profile.cov\"}\necho \"mode: count\" > $prof\ngopath1=$(echo $GOPATH | cut -d: -f1)\nfor pkg in $(go list ./...); do\n  tmpprof=$gopath1/src/$pkg/profile.tmp\n  go test -covermode=count -coverprofile=$tmpprof $pkg\n  if [ -f $tmpprof ]; then\n    cat $tmpprof | tail -n +2 >> $prof\n    rm $tmpprof\n  fi\ndone\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu.go",
    "content": "package cpu\n\nimport (\n\t\"encoding/json\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype CPUTimesStat struct {\n\tCPU       string  `json:\"cpu\"`\n\tUser      float64 `json:\"user\"`\n\tSystem    float64 `json:\"system\"`\n\tIdle      float64 `json:\"idle\"`\n\tNice      float64 `json:\"nice\"`\n\tIowait    float64 `json:\"iowait\"`\n\tIrq       float64 `json:\"irq\"`\n\tSoftirq   float64 `json:\"softirq\"`\n\tSteal     float64 `json:\"steal\"`\n\tGuest     float64 `json:\"guest\"`\n\tGuestNice float64 `json:\"guest_nice\"`\n\tStolen    float64 `json:\"stolen\"`\n}\n\ntype CPUInfoStat struct {\n\tCPU        int32    `json:\"cpu\"`\n\tVendorID   string   `json:\"vendor_id\"`\n\tFamily     string   `json:\"family\"`\n\tModel      string   `json:\"model\"`\n\tStepping   int32    `json:\"stepping\"`\n\tPhysicalID string   `json:\"physical_id\"`\n\tCoreID     string   `json:\"core_id\"`\n\tCores      int32    `json:\"cores\"`\n\tModelName  string   `json:\"model_name\"`\n\tMhz        float64  `json:\"mhz\"`\n\tCacheSize  int32    `json:\"cache_size\"`\n\tFlags      []string `json:\"flags\"`\n}\n\nvar lastCPUTimes []CPUTimesStat\nvar lastPerCPUTimes []CPUTimesStat\n\nfunc CPUCounts(logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n\nfunc (c CPUTimesStat) String() string {\n\tv := []string{\n\t\t`\"cpu\":\"` + c.CPU + `\"`,\n\t\t`\"user\":` + strconv.FormatFloat(c.User, 'f', 1, 64),\n\t\t`\"system\":` + strconv.FormatFloat(c.System, 'f', 1, 64),\n\t\t`\"idle\":` + strconv.FormatFloat(c.Idle, 'f', 1, 64),\n\t\t`\"nice\":` + strconv.FormatFloat(c.Nice, 'f', 1, 64),\n\t\t`\"iowait\":` + strconv.FormatFloat(c.Iowait, 'f', 1, 64),\n\t\t`\"irq\":` + strconv.FormatFloat(c.Irq, 'f', 1, 64),\n\t\t`\"softirq\":` + strconv.FormatFloat(c.Softirq, 'f', 1, 64),\n\t\t`\"steal\":` + strconv.FormatFloat(c.Steal, 'f', 1, 64),\n\t\t`\"guest\":` + strconv.FormatFloat(c.Guest, 'f', 1, 64),\n\t\t`\"guest_nice\":` + strconv.FormatFloat(c.GuestNice, 'f', 1, 64),\n\t\t`\"stolen\":` + strconv.FormatFloat(c.Stolen, 'f', 1, 64),\n\t}\n\n\treturn `{` + strings.Join(v, \",\") + `}`\n}\n\n// Total returns the total number of seconds in a CPUTimesStat\nfunc (c CPUTimesStat) Total() float64 {\n\ttotal := c.User + c.System + c.Nice + c.Iowait + c.Irq + c.Softirq + c.Steal +\n\t\tc.Guest + c.GuestNice + c.Idle + c.Stolen\n\treturn total\n}\n\nfunc (c CPUInfoStat) String() string {\n\ts, _ := json.Marshal(c)\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_darwin.go",
    "content": "// +build darwin\n\npackage cpu\n\nimport (\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// sys/resource.h\nconst (\n\tCPUser    = 0\n\tCPNice    = 1\n\tCPSys     = 2\n\tCPIntr    = 3\n\tCPIdle    = 4\n\tCPUStates = 5\n)\n\n// default value. from time.h\nvar ClocksPerSec = float64(128)\n\nfunc CPUTimes(percpu bool) ([]CPUTimesStat, error) {\n\tif percpu {\n\t\treturn perCPUTimes()\n\t}\n\n\treturn allCPUTimes()\n}\n\n// Returns only one CPUInfoStat on FreeBSD\nfunc CPUInfo() ([]CPUInfoStat, error) {\n\tvar ret []CPUInfoStat\n\n\tout, err := exec.Command(\"/usr/sbin/sysctl\", \"machdep.cpu\").Output()\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tc := CPUInfoStat{}\n\tfor _, line := range strings.Split(string(out), \"\\n\") {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 {\n\t\t\tcontinue\n\t\t}\n\n\t\tt, err := strconv.ParseInt(values[1], 10, 64)\n\t\t// err is not checked here because some value is string.\n\t\tif strings.HasPrefix(line, \"machdep.cpu.brand_string\") {\n\t\t\tc.ModelName = strings.Join(values[1:], \" \")\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.family\") {\n\t\t\tc.Family = values[1]\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.model\") {\n\t\t\tc.Model = values[1]\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.stepping\") {\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.features\") {\n\t\t\tfor _, v := range values[1:] {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.leaf7_features\") {\n\t\t\tfor _, v := range values[1:] {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.extfeatures\") {\n\t\t\tfor _, v := range values[1:] {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.core_count\") {\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.Cores = int32(t)\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.cache.size\") {\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.CacheSize = int32(t)\n\t\t} else if strings.HasPrefix(line, \"machdep.cpu.vendor\") {\n\t\t\tc.VendorID = values[1]\n\t\t}\n\t}\n\n\t// Use the rated frequency of the CPU. This is a static value and does not\n\t// account for low power or Turbo Boost modes.\n\tout, err = exec.Command(\"/usr/sbin/sysctl\", \"hw.cpufrequency\").Output()\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tvalues := strings.Fields(string(out))\n\tmhz, err := strconv.ParseFloat(values[1], 64)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tc.Mhz = mhz / 1000000.0\n\n\treturn append(ret, c), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_darwin_cgo.go",
    "content": "// +build darwin\n// +build cgo\n\npackage cpu\n\n/*\n#include <stdlib.h>\n#include <sys/sysctl.h>\n#include <sys/mount.h>\n#include <mach/mach_init.h>\n#include <mach/mach_host.h>\n#include <mach/host_info.h>\n#include <libproc.h>\n#include <mach/processor_info.h>\n#include <mach/vm_map.h>\n*/\nimport \"C\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"unsafe\"\n)\n\n// these CPU times for darwin is borrowed from influxdb/telegraf.\n\nfunc perCPUTimes() ([]CPUTimesStat, error) {\n\tvar (\n\t\tcount   C.mach_msg_type_number_t\n\t\tcpuload *C.processor_cpu_load_info_data_t\n\t\tncpu    C.natural_t\n\t)\n\n\tstatus := C.host_processor_info(C.host_t(C.mach_host_self()),\n\t\tC.PROCESSOR_CPU_LOAD_INFO,\n\t\t&ncpu,\n\t\t(*C.processor_info_array_t)(unsafe.Pointer(&cpuload)),\n\t\t&count)\n\n\tif status != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"host_processor_info error=%d\", status)\n\t}\n\n\t// jump through some cgo casting hoops and ensure we properly free\n\t// the memory that cpuload points to\n\ttarget := C.vm_map_t(C.mach_task_self_)\n\taddress := C.vm_address_t(uintptr(unsafe.Pointer(cpuload)))\n\tdefer C.vm_deallocate(target, address, C.vm_size_t(ncpu))\n\n\t// the body of struct processor_cpu_load_info\n\t// aka processor_cpu_load_info_data_t\n\tvar cpu_ticks [C.CPU_STATE_MAX]uint32\n\n\t// copy the cpuload array to a []byte buffer\n\t// where we can binary.Read the data\n\tsize := int(ncpu) * binary.Size(cpu_ticks)\n\tbuf := C.GoBytes(unsafe.Pointer(cpuload), C.int(size))\n\n\tbbuf := bytes.NewBuffer(buf)\n\n\tvar ret []CPUTimesStat\n\n\tfor i := 0; i < int(ncpu); i++ {\n\t\terr := binary.Read(bbuf, binary.LittleEndian, &cpu_ticks)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tc := CPUTimesStat{\n\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", i),\n\t\t\tUser:   float64(cpu_ticks[C.CPU_STATE_USER]) / ClocksPerSec,\n\t\t\tSystem: float64(cpu_ticks[C.CPU_STATE_SYSTEM]) / ClocksPerSec,\n\t\t\tNice:   float64(cpu_ticks[C.CPU_STATE_NICE]) / ClocksPerSec,\n\t\t\tIdle:   float64(cpu_ticks[C.CPU_STATE_IDLE]) / ClocksPerSec,\n\t\t}\n\n\t\tret = append(ret, c)\n\t}\n\n\treturn ret, nil\n}\n\nfunc allCPUTimes() ([]CPUTimesStat, error) {\n\tvar count C.mach_msg_type_number_t = C.HOST_CPU_LOAD_INFO_COUNT\n\tvar cpuload C.host_cpu_load_info_data_t\n\n\tstatus := C.host_statistics(C.host_t(C.mach_host_self()),\n\t\tC.HOST_CPU_LOAD_INFO,\n\t\tC.host_info_t(unsafe.Pointer(&cpuload)),\n\t\t&count)\n\n\tif status != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"host_statistics error=%d\", status)\n\t}\n\n\tc := CPUTimesStat{\n\t\tCPU:    \"cpu-total\",\n\t\tUser:   float64(cpuload.cpu_ticks[C.CPU_STATE_USER]) / ClocksPerSec,\n\t\tSystem: float64(cpuload.cpu_ticks[C.CPU_STATE_SYSTEM]) / ClocksPerSec,\n\t\tNice:   float64(cpuload.cpu_ticks[C.CPU_STATE_NICE]) / ClocksPerSec,\n\t\tIdle:   float64(cpuload.cpu_ticks[C.CPU_STATE_IDLE]) / ClocksPerSec,\n\t}\n\n\treturn []CPUTimesStat{c}, nil\n\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_darwin_nocgo.go",
    "content": "// +build darwin\n// +build !cgo\n\npackage cpu\n\nimport \"github.com/shirou/gopsutil/internal/common\"\n\nfunc perCPUTimes() ([]CPUTimesStat, error) {\n\treturn []CPUTimesStat{}, common.NotImplementedError\n}\n\nfunc allCPUTimes() ([]CPUTimesStat, error) {\n\treturn []CPUTimesStat{}, common.NotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_freebsd.go",
    "content": "// +build freebsd\n\npackage cpu\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\n// sys/resource.h\nconst (\n\tCPUser    = 0\n\tCPNice    = 1\n\tCPSys     = 2\n\tCPIntr    = 3\n\tCPIdle    = 4\n\tCPUStates = 5\n)\n\nvar ClocksPerSec = float64(128)\n\nfunc init() {\n\tout, err := exec.Command(\"/usr/bin/getconf\", \"CLK_TCK\").Output()\n\t// ignore errors\n\tif err == nil {\n\t\ti, err := strconv.ParseFloat(strings.TrimSpace(string(out)), 64)\n\t\tif err == nil {\n\t\t\tClocksPerSec = float64(i)\n\t\t}\n\t}\n}\n\nfunc CPUTimes(percpu bool) ([]CPUTimesStat, error) {\n\tvar ret []CPUTimesStat\n\n\tvar sysctlCall string\n\tvar ncpu int\n\tif percpu {\n\t\tsysctlCall = \"kern.cp_times\"\n\t\tncpu, _ = CPUCounts(true)\n\t} else {\n\t\tsysctlCall = \"kern.cp_time\"\n\t\tncpu = 1\n\t}\n\n\tcpuTimes, err := common.DoSysctrl(sysctlCall)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tfor i := 0; i < ncpu; i++ {\n\t\toffset := CPUStates * i\n\t\tuser, err := strconv.ParseFloat(cpuTimes[CPUser+offset], 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tnice, err := strconv.ParseFloat(cpuTimes[CPNice+offset], 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tsys, err := strconv.ParseFloat(cpuTimes[CPSys+offset], 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tidle, err := strconv.ParseFloat(cpuTimes[CPIdle+offset], 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tintr, err := strconv.ParseFloat(cpuTimes[CPIntr+offset], 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\n\t\tc := CPUTimesStat{\n\t\t\tUser:   float64(user / ClocksPerSec),\n\t\t\tNice:   float64(nice / ClocksPerSec),\n\t\t\tSystem: float64(sys / ClocksPerSec),\n\t\t\tIdle:   float64(idle / ClocksPerSec),\n\t\t\tIrq:    float64(intr / ClocksPerSec),\n\t\t}\n\t\tif !percpu {\n\t\t\tc.CPU = \"cpu-total\"\n\t\t} else {\n\t\t\tc.CPU = fmt.Sprintf(\"cpu%d\", i)\n\t\t}\n\n\t\tret = append(ret, c)\n\t}\n\n\treturn ret, nil\n}\n\n// Returns only one CPUInfoStat on FreeBSD\nfunc CPUInfo() ([]CPUInfoStat, error) {\n\tfilename := \"/var/run/dmesg.boot\"\n\tlines, _ := common.ReadLines(filename)\n\n\tvar ret []CPUInfoStat\n\n\tc := CPUInfoStat{}\n\tfor _, line := range lines {\n\t\tif matches := regexp.MustCompile(`CPU:\\s+(.+) \\(([\\d.]+).+\\)`).FindStringSubmatch(line); matches != nil {\n\t\t\tc.ModelName = matches[1]\n\t\t\tt, err := strconv.ParseFloat(matches[2], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, nil\n\t\t\t}\n\t\t\tc.Mhz = t\n\t\t} else if matches := regexp.MustCompile(`Origin = \"(.+)\"  Id = (.+)  Family = (.+)  Model = (.+)  Stepping = (.+)`).FindStringSubmatch(line); matches != nil {\n\t\t\tc.VendorID = matches[1]\n\t\t\tc.Family = matches[3]\n\t\t\tc.Model = matches[4]\n\t\t\tt, err := strconv.ParseInt(matches[5], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, nil\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\t} else if matches := regexp.MustCompile(`Features=.+<(.+)>`).FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if matches := regexp.MustCompile(`Features2=[a-f\\dx]+<(.+)>`).FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if matches := regexp.MustCompile(`Logical CPUs per core: (\\d+)`).FindStringSubmatch(line); matches != nil {\n\t\t\t// FIXME: no this line?\n\t\t\tt, err := strconv.ParseInt(matches[1], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, nil\n\t\t\t}\n\t\t\tc.Cores = int32(t)\n\t\t}\n\n\t}\n\n\treturn append(ret, c), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_linux.go",
    "content": "// +build linux\n\npackage cpu\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nvar cpu_tick = float64(100)\n\nfunc init() {\n\tout, err := exec.Command(\"/usr/bin/getconf\", \"CLK_TCK\").Output()\n\t// ignore errors\n\tif err == nil {\n\t\ti, err := strconv.ParseFloat(strings.TrimSpace(string(out)), 64)\n\t\tif err == nil {\n\t\t\tcpu_tick = float64(i)\n\t\t}\n\t}\n}\n\nfunc CPUTimes(percpu bool) ([]CPUTimesStat, error) {\n\tfilename := common.HostProc(\"stat\")\n\tvar lines = []string{}\n\tif percpu {\n\t\tvar startIdx uint = 1\n\t\tfor {\n\t\t\tlinen, _ := common.ReadLinesOffsetN(filename, startIdx, 1)\n\t\t\tline := linen[0]\n\t\t\tif !strings.HasPrefix(line, \"cpu\") {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tlines = append(lines, line)\n\t\t\tstartIdx += 1\n\t\t}\n\t} else {\n\t\tlines, _ = common.ReadLinesOffsetN(filename, 0, 1)\n\t}\n\n\tret := make([]CPUTimesStat, 0, len(lines))\n\n\tfor _, line := range lines {\n\t\tct, err := parseStatLine(line)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, *ct)\n\n\t}\n\treturn ret, nil\n}\n\nfunc sysCpuPath(cpu int32, relPath string) string {\n\treturn common.HostSys(fmt.Sprintf(\"devices/system/cpu/cpu%d\", cpu), relPath)\n}\n\nfunc finishCPUInfo(c *CPUInfoStat) error {\n\tif c.Mhz == 0 {\n\t\tlines, err := common.ReadLines(sysCpuPath(c.CPU, \"cpufreq/cpuinfo_max_freq\"))\n\t\tif err == nil {\n\t\t\tvalue, err := strconv.ParseFloat(lines[0], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tc.Mhz = value\n\t\t}\n\t}\n\tif len(c.CoreID) == 0 {\n\t\tlines, err := common.ReadLines(sysCpuPath(c.CPU, \"topology/core_id\"))\n\t\tif err == nil {\n\t\t\tc.CoreID = lines[0]\n\t\t}\n\t}\n\treturn nil\n}\n\n// CPUInfo on linux will return 1 item per physical thread.\n//\n// CPUs have three levels of counting: sockets, cores, threads.\n// Cores with HyperThreading count as having 2 threads per core.\n// Sockets often come with many physical CPU cores.\n// For example a single socket board with two cores each with HT will\n// return 4 CPUInfoStat structs on Linux and the \"Cores\" field set to 1.\nfunc CPUInfo() ([]CPUInfoStat, error) {\n\tfilename := common.HostProc(\"cpuinfo\")\n\tlines, _ := common.ReadLines(filename)\n\n\tvar ret []CPUInfoStat\n\n\tc := CPUInfoStat{CPU: -1, Cores: 1}\n\tfor _, line := range lines {\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey := strings.TrimSpace(fields[0])\n\t\tvalue := strings.TrimSpace(fields[1])\n\n\t\tswitch key {\n\t\tcase \"processor\":\n\t\t\tif c.CPU >= 0 {\n\t\t\t\terr := finishCPUInfo(&c)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn ret, err\n\t\t\t\t}\n\t\t\t\tret = append(ret, c)\n\t\t\t}\n\t\t\tc = CPUInfoStat{Cores: 1}\n\t\t\tt, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.CPU = int32(t)\n\t\tcase \"vendor_id\":\n\t\t\tc.VendorID = value\n\t\tcase \"cpu family\":\n\t\t\tc.Family = value\n\t\tcase \"model\":\n\t\t\tc.Model = value\n\t\tcase \"model name\":\n\t\t\tc.ModelName = value\n\t\tcase \"stepping\":\n\t\t\tt, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\tcase \"cpu MHz\":\n\t\t\tt, err := strconv.ParseFloat(value, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.Mhz = t\n\t\tcase \"cache size\":\n\t\t\tt, err := strconv.ParseInt(strings.Replace(value, \" KB\", \"\", 1), 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.CacheSize = int32(t)\n\t\tcase \"physical id\":\n\t\t\tc.PhysicalID = value\n\t\tcase \"core id\":\n\t\t\tc.CoreID = value\n\t\tcase \"flags\", \"Features\":\n\t\t\tc.Flags = strings.FieldsFunc(value, func(r rune) bool {\n\t\t\t\treturn r == ',' || r == ' '\n\t\t\t})\n\t\t}\n\t}\n\tif c.CPU >= 0 {\n\t\terr := finishCPUInfo(&c)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tret = append(ret, c)\n\t}\n\treturn ret, nil\n}\n\nfunc parseStatLine(line string) (*CPUTimesStat, error) {\n\tfields := strings.Fields(line)\n\n\tif strings.HasPrefix(fields[0], \"cpu\") == false {\n\t\t//\t\treturn CPUTimesStat{}, e\n\t\treturn nil, errors.New(\"not contain cpu\")\n\t}\n\n\tcpu := fields[0]\n\tif cpu == \"cpu\" {\n\t\tcpu = \"cpu-total\"\n\t}\n\tuser, err := strconv.ParseFloat(fields[1], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnice, err := strconv.ParseFloat(fields[2], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsystem, err := strconv.ParseFloat(fields[3], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tidle, err := strconv.ParseFloat(fields[4], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tiowait, err := strconv.ParseFloat(fields[5], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tirq, err := strconv.ParseFloat(fields[6], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsoftirq, err := strconv.ParseFloat(fields[7], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tct := &CPUTimesStat{\n\t\tCPU:     cpu,\n\t\tUser:    float64(user) / cpu_tick,\n\t\tNice:    float64(nice) / cpu_tick,\n\t\tSystem:  float64(system) / cpu_tick,\n\t\tIdle:    float64(idle) / cpu_tick,\n\t\tIowait:  float64(iowait) / cpu_tick,\n\t\tIrq:     float64(irq) / cpu_tick,\n\t\tSoftirq: float64(softirq) / cpu_tick,\n\t}\n\tif len(fields) > 8 { // Linux >= 2.6.11\n\t\tsteal, err := strconv.ParseFloat(fields[8], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.Steal = float64(steal) / cpu_tick\n\t}\n\tif len(fields) > 9 { // Linux >= 2.6.24\n\t\tguest, err := strconv.ParseFloat(fields[9], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.Guest = float64(guest) / cpu_tick\n\t}\n\tif len(fields) > 10 { // Linux >= 3.2.0\n\t\tguestNice, err := strconv.ParseFloat(fields[10], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.GuestNice = float64(guestNice) / cpu_tick\n\t}\n\n\treturn ct, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_unix.go",
    "content": "// +build linux freebsd darwin\n\npackage cpu\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc CPUPercent(interval time.Duration, percpu bool) ([]float64, error) {\n\tgetAllBusy := func(t CPUTimesStat) (float64, float64) {\n\t\tbusy := t.User + t.System + t.Nice + t.Iowait + t.Irq +\n\t\t\tt.Softirq + t.Steal + t.Guest + t.GuestNice + t.Stolen\n\t\treturn busy + t.Idle, busy\n\t}\n\n\tcalculate := func(t1, t2 CPUTimesStat) float64 {\n\t\tt1All, t1Busy := getAllBusy(t1)\n\t\tt2All, t2Busy := getAllBusy(t2)\n\n\t\tif t2Busy <= t1Busy {\n\t\t\treturn 0\n\t\t}\n\t\tif t2All <= t1All {\n\t\t\treturn 1\n\t\t}\n\t\treturn (t2Busy - t1Busy) / (t2All - t1All) * 100\n\t}\n\n\t// Get CPU usage at the start of the interval.\n\tcpuTimes1, err := CPUTimes(percpu)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif interval > 0 {\n\t\ttime.Sleep(interval)\n\t}\n\n\t// And at the end of the interval.\n\tcpuTimes2, err := CPUTimes(percpu)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Make sure the CPU measurements have the same length.\n\tif len(cpuTimes1) != len(cpuTimes2) {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"received two CPU counts: %d != %d\",\n\t\t\tlen(cpuTimes1), len(cpuTimes2),\n\t\t)\n\t}\n\n\tret := make([]float64, len(cpuTimes1))\n\tfor i, t := range cpuTimes2 {\n\t\tret[i] = calculate(cpuTimes1[i], t)\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/cpu/cpu_windows.go",
    "content": "// +build windows\n\npackage cpu\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/StackExchange/wmi\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\ntype Win32_Processor struct {\n\tLoadPercentage            *uint16\n\tFamily                    uint16\n\tManufacturer              string\n\tName                      string\n\tNumberOfLogicalProcessors uint32\n\tProcessorId               *string\n\tStepping                  *string\n\tMaxClockSpeed             uint32\n}\n\n// TODO: Get percpu\nfunc CPUTimes(percpu bool) ([]CPUTimesStat, error) {\n\tvar ret []CPUTimesStat\n\n\tvar lpIdleTime common.FILETIME\n\tvar lpKernelTime common.FILETIME\n\tvar lpUserTime common.FILETIME\n\tr, _, _ := common.ProcGetSystemTimes.Call(\n\t\tuintptr(unsafe.Pointer(&lpIdleTime)),\n\t\tuintptr(unsafe.Pointer(&lpKernelTime)),\n\t\tuintptr(unsafe.Pointer(&lpUserTime)))\n\tif r == 0 {\n\t\treturn ret, syscall.GetLastError()\n\t}\n\n\tLOT := float64(0.0000001)\n\tHIT := (LOT * 4294967296.0)\n\tidle := ((HIT * float64(lpIdleTime.DwHighDateTime)) + (LOT * float64(lpIdleTime.DwLowDateTime)))\n\tuser := ((HIT * float64(lpUserTime.DwHighDateTime)) + (LOT * float64(lpUserTime.DwLowDateTime)))\n\tkernel := ((HIT * float64(lpKernelTime.DwHighDateTime)) + (LOT * float64(lpKernelTime.DwLowDateTime)))\n\tsystem := (kernel - idle)\n\n\tret = append(ret, CPUTimesStat{\n\t\tIdle:   float64(idle),\n\t\tUser:   float64(user),\n\t\tSystem: float64(system),\n\t})\n\treturn ret, nil\n}\n\nfunc CPUInfo() ([]CPUInfoStat, error) {\n\tvar ret []CPUInfoStat\n\tvar dst []Win32_Processor\n\tq := wmi.CreateQuery(&dst, \"\")\n\terr := wmi.Query(q, &dst)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tvar procID string\n\tfor i, l := range dst {\n\t\tprocID = \"\"\n\t\tif l.ProcessorId != nil {\n\t\t\tprocID = *l.ProcessorId\n\t\t}\n\n\t\tcpu := CPUInfoStat{\n\t\t\tCPU:        int32(i),\n\t\t\tFamily:     fmt.Sprintf(\"%d\", l.Family),\n\t\t\tVendorID:   l.Manufacturer,\n\t\t\tModelName:  l.Name,\n\t\t\tCores:      int32(l.NumberOfLogicalProcessors),\n\t\t\tPhysicalID: procID,\n\t\t\tMhz:        float64(l.MaxClockSpeed),\n\t\t\tFlags:      []string{},\n\t\t}\n\t\tret = append(ret, cpu)\n\t}\n\n\treturn ret, nil\n}\n\nfunc CPUPercent(interval time.Duration, percpu bool) ([]float64, error) {\n\tvar ret []float64\n\tvar dst []Win32_Processor\n\tq := wmi.CreateQuery(&dst, \"\")\n\terr := wmi.Query(q, &dst)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tfor _, l := range dst {\n\t\t// use range but windows can only get one percent.\n\t\tif l.LoadPercentage == nil {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, float64(*l.LoadPercentage))\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/doc.go",
    "content": "package gopsutil\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host.go",
    "content": "package host\n\nimport (\n\t\"encoding/json\"\n)\n\n// A HostInfoStat describes the host status.\n// This is not in the psutil but it useful.\ntype HostInfoStat struct {\n\tHostname             string `json:\"hostname\"`\n\tUptime               uint64 `json:\"uptime\"`\n\tBootTime             uint64 `json:\"boot_time\"`\n\tProcs                uint64 `json:\"procs\"`           // number of processes\n\tOS                   string `json:\"os\"`              // ex: freebsd, linux\n\tPlatform             string `json:\"platform\"`        // ex: ubuntu, linuxmint\n\tPlatformFamily       string `json:\"platform_family\"` // ex: debian, rhel\n\tPlatformVersion      string `json:\"platform_version\"`\n\tVirtualizationSystem string `json:\"virtualization_system\"`\n\tVirtualizationRole   string `json:\"virtualization_role\"` // guest or host\n\n}\n\ntype UserStat struct {\n\tUser     string `json:\"user\"`\n\tTerminal string `json:\"terminal\"`\n\tHost     string `json:\"host\"`\n\tStarted  int    `json:\"started\"`\n}\n\nfunc (h HostInfoStat) String() string {\n\ts, _ := json.Marshal(h)\n\treturn string(s)\n}\n\nfunc (u UserStat) String() string {\n\ts, _ := json.Marshal(u)\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_darwin.go",
    "content": "// +build darwin\n\npackage host\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\n// from utmpx.h\nconst USER_PROCESS = 7\n\nfunc HostInfo() (*HostInfoStat, error) {\n\tret := &HostInfoStat{\n\t\tOS:             runtime.GOOS,\n\t\tPlatformFamily: \"darwin\",\n\t}\n\n\thostname, err := os.Hostname()\n\tif err == nil {\n\t\tret.Hostname = hostname\n\t}\n\n\tplatform, family, version, err := GetPlatformInformation()\n\tif err == nil {\n\t\tret.Platform = platform\n\t\tret.PlatformFamily = family\n\t\tret.PlatformVersion = version\n\t}\n\tsystem, role, err := GetVirtualization()\n\tif err == nil {\n\t\tret.VirtualizationSystem = system\n\t\tret.VirtualizationRole = role\n\t}\n\n\tboot, err := BootTime()\n\tif err == nil {\n\t\tret.BootTime = boot\n\t\tret.Uptime = uptime(boot)\n\t}\n\n\treturn ret, nil\n}\n\nfunc BootTime() (uint64, error) {\n\tvalues, err := common.DoSysctrl(\"kern.boottime\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\t// ex: { sec = 1392261637, usec = 627534 } Thu Feb 13 12:20:37 2014\n\tv := strings.Replace(values[2], \",\", \"\", 1)\n\tboottime, err := strconv.ParseInt(v, 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn uint64(boottime), nil\n}\n\nfunc uptime(boot uint64) uint64 {\n\treturn uint64(time.Now().Unix()) - boot\n}\n\nfunc Uptime() (uint64, error) {\n\tboot, err := BootTime()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uptime(boot), nil\n}\n\nfunc Users() ([]UserStat, error) {\n\tutmpfile := \"/var/run/utmpx\"\n\tvar ret []UserStat\n\n\tfile, err := os.Open(utmpfile)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tbuf, err := ioutil.ReadAll(file)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tu := Utmpx{}\n\tentrySize := int(unsafe.Sizeof(u))\n\tcount := len(buf) / entrySize\n\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*entrySize : i*entrySize+entrySize]\n\n\t\tvar u Utmpx\n\t\tbr := bytes.NewReader(b)\n\t\terr := binary.Read(br, binary.LittleEndian, &u)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif u.Type != USER_PROCESS {\n\t\t\tcontinue\n\t\t}\n\t\tuser := UserStat{\n\t\t\tUser:     common.IntToString(u.User[:]),\n\t\t\tTerminal: common.IntToString(u.Line[:]),\n\t\t\tHost:     common.IntToString(u.Host[:]),\n\t\t\tStarted:  int(u.Tv.Sec),\n\t\t}\n\t\tret = append(ret, user)\n\t}\n\n\treturn ret, nil\n\n}\n\nfunc GetPlatformInformation() (string, string, string, error) {\n\tplatform := \"\"\n\tfamily := \"\"\n\tversion := \"\"\n\n\tout, err := exec.Command(\"uname\", \"-s\").Output()\n\tif err == nil {\n\t\tplatform = strings.ToLower(strings.TrimSpace(string(out)))\n\t}\n\n\tout, err = exec.Command(\"uname\", \"-r\").Output()\n\tif err == nil {\n\t\tversion = strings.ToLower(strings.TrimSpace(string(out)))\n\t}\n\n\treturn platform, family, version, nil\n}\n\nfunc GetVirtualization() (string, string, error) {\n\tsystem := \"\"\n\trole := \"\"\n\n\treturn system, role, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_darwin_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\n\npackage host\n\ntype Utmpx struct {\n\tUser      [256]int8\n\tId        [4]int8\n\tLine      [32]int8\n\tPid       int32\n\tType      int16\n\tPad_cgo_0 [6]byte\n\tTv        Timeval\n\tHost      [256]int8\n\tPad       [16]uint32\n}\ntype Timeval struct {\n\tSec int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_freebsd.go",
    "content": "// +build freebsd\n\npackage host\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nconst (\n\tUTNameSize = 16 /* see MAXLOGNAME in <sys/param.h> */\n\tUTLineSize = 8\n\tUTHostSize = 16\n)\n\nfunc HostInfo() (*HostInfoStat, error) {\n\tret := &HostInfoStat{\n\t\tOS:             runtime.GOOS,\n\t\tPlatformFamily: \"freebsd\",\n\t}\n\n\thostname, err := os.Hostname()\n\tif err == nil {\n\t\tret.Hostname = hostname\n\t}\n\n\tplatform, family, version, err := GetPlatformInformation()\n\tif err == nil {\n\t\tret.Platform = platform\n\t\tret.PlatformFamily = family\n\t\tret.PlatformVersion = version\n\t}\n\tsystem, role, err := GetVirtualization()\n\tif err == nil {\n\t\tret.VirtualizationSystem = system\n\t\tret.VirtualizationRole = role\n\t}\n\n\tboot, err := BootTime()\n\tif err == nil {\n\t\tret.BootTime = boot\n\t\tret.Uptime = uptime(boot)\n\t}\n\n\treturn ret, nil\n}\n\nfunc BootTime() (uint64, error) {\n\tvalues, err := common.DoSysctrl(\"kern.boottime\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\t// ex: { sec = 1392261637, usec = 627534 } Thu Feb 13 12:20:37 2014\n\tv := strings.Replace(values[2], \",\", \"\", 1)\n\n\tboottime, err := strconv.ParseUint(v, 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn boottime, nil\n}\n\nfunc uptime(boot uint64) uint64 {\n\treturn uint64(time.Now().Unix()) - boot\n}\n\nfunc Uptime() (uint64, error) {\n\tboot, err := BootTime()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uptime(boot), nil\n}\n\nfunc Users() ([]UserStat, error) {\n\tutmpfile := \"/var/run/utx.active\"\n\tif !common.PathExists(utmpfile) {\n\t\tutmpfile = \"/var/run/utmp\" // before 9.0\n\t\treturn getUsersFromUtmp(utmpfile)\n\t}\n\n\tvar ret []UserStat\n\tfile, err := os.Open(utmpfile)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tbuf, err := ioutil.ReadAll(file)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tu := Utmpx{}\n\tentrySize := int(unsafe.Sizeof(u)) - 3\n\tentrySize = 197 // TODO: why should 197\n\tcount := len(buf) / entrySize\n\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*entrySize : i*entrySize+entrySize]\n\t\tvar u Utmpx\n\t\tbr := bytes.NewReader(b)\n\t\terr := binary.Read(br, binary.LittleEndian, &u)\n\t\tif err != nil || u.Type != 4 {\n\t\t\tcontinue\n\t\t}\n\t\tsec := (binary.LittleEndian.Uint32(u.Tv.Sec[:])) / 2 // TODO:\n\t\tuser := UserStat{\n\t\t\tUser:     common.IntToString(u.User[:]),\n\t\t\tTerminal: common.IntToString(u.Line[:]),\n\t\t\tHost:     common.IntToString(u.Host[:]),\n\t\t\tStarted:  int(sec),\n\t\t}\n\n\t\tret = append(ret, user)\n\t}\n\n\treturn ret, nil\n\n}\n\nfunc GetPlatformInformation() (string, string, string, error) {\n\tplatform := \"\"\n\tfamily := \"\"\n\tversion := \"\"\n\n\tout, err := exec.Command(\"uname\", \"-s\").Output()\n\tif err == nil {\n\t\tplatform = strings.ToLower(strings.TrimSpace(string(out)))\n\t}\n\n\tout, err = exec.Command(\"uname\", \"-r\").Output()\n\tif err == nil {\n\t\tversion = strings.ToLower(strings.TrimSpace(string(out)))\n\t}\n\n\treturn platform, family, version, nil\n}\n\nfunc GetVirtualization() (string, string, error) {\n\tsystem := \"\"\n\trole := \"\"\n\n\treturn system, role, nil\n}\n\n// before 9.0\nfunc getUsersFromUtmp(utmpfile string) ([]UserStat, error) {\n\tvar ret []UserStat\n\tfile, err := os.Open(utmpfile)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tbuf, err := ioutil.ReadAll(file)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tu := Utmp{}\n\tentrySize := int(unsafe.Sizeof(u))\n\tcount := len(buf) / entrySize\n\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*entrySize : i*entrySize+entrySize]\n\t\tvar u Utmp\n\t\tbr := bytes.NewReader(b)\n\t\terr := binary.Read(br, binary.LittleEndian, &u)\n\t\tif err != nil || u.Time == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tuser := UserStat{\n\t\t\tUser:     common.IntToString(u.Name[:]),\n\t\t\tTerminal: common.IntToString(u.Line[:]),\n\t\t\tHost:     common.IntToString(u.Host[:]),\n\t\t\tStarted:  int(u.Time),\n\t\t}\n\n\t\tret = append(ret, user)\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_freebsd_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage host\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Utmp struct {\n\tLine [8]int8\n\tName [16]int8\n\tHost [16]int8\n\tTime int32\n}\ntype Utmpx struct {\n\tType int16\n\tTv   Timeval\n\tId   [8]int8\n\tPid  int32\n\tUser [32]int8\n\tLine [16]int8\n\tHost [125]int8\n\t//\tHost [128]int8\n\t//\tX__ut_spare [64]int8\n}\ntype Timeval struct {\n\tSec  [4]byte\n\tUsec [3]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_linux.go",
    "content": "// +build linux\n\npackage host\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\ntype LSB struct {\n\tID          string\n\tRelease     string\n\tCodename    string\n\tDescription string\n}\n\n// from utmp.h\nconst USER_PROCESS = 7\n\nfunc HostInfo() (*HostInfoStat, error) {\n\tret := &HostInfoStat{\n\t\tOS: runtime.GOOS,\n\t}\n\n\thostname, err := os.Hostname()\n\tif err == nil {\n\t\tret.Hostname = hostname\n\t}\n\n\tplatform, family, version, err := GetPlatformInformation()\n\tif err == nil {\n\t\tret.Platform = platform\n\t\tret.PlatformFamily = family\n\t\tret.PlatformVersion = version\n\t}\n\tsystem, role, err := GetVirtualization()\n\tif err == nil {\n\t\tret.VirtualizationSystem = system\n\t\tret.VirtualizationRole = role\n\t}\n\tboot, err := BootTime()\n\tif err == nil {\n\t\tret.BootTime = boot\n\t\tret.Uptime = uptime(boot)\n\t}\n\n\treturn ret, nil\n}\n\n// BootTime returns the system boot time expressed in seconds since the epoch.\nfunc BootTime() (uint64, error) {\n\tfilename := common.HostProc(\"stat\")\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tfor _, line := range lines {\n\t\tif strings.HasPrefix(line, \"btime\") {\n\t\t\tf := strings.Fields(line)\n\t\t\tif len(f) != 2 {\n\t\t\t\treturn 0, fmt.Errorf(\"wrong btime format\")\n\t\t\t}\n\t\t\tb, err := strconv.ParseInt(f[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn uint64(b), nil\n\t\t}\n\t}\n\n\treturn 0, fmt.Errorf(\"could not find btime\")\n}\n\nfunc uptime(boot uint64) uint64 {\n\treturn uint64(time.Now().Unix()) - boot\n}\n\nfunc Uptime() (uint64, error) {\n\tboot, err := BootTime()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uptime(boot), nil\n}\n\nfunc Users() ([]UserStat, error) {\n\tutmpfile := \"/var/run/utmp\"\n\n\tfile, err := os.Open(utmpfile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf, err := ioutil.ReadAll(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tu := utmp{}\n\tentrySize := int(unsafe.Sizeof(u))\n\tcount := len(buf) / entrySize\n\n\tret := make([]UserStat, 0, count)\n\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*entrySize : i*entrySize+entrySize]\n\n\t\tvar u utmp\n\t\tbr := bytes.NewReader(b)\n\t\terr := binary.Read(br, binary.LittleEndian, &u)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif u.Type != USER_PROCESS {\n\t\t\tcontinue\n\t\t}\n\t\tuser := UserStat{\n\t\t\tUser:     common.IntToString(u.User[:]),\n\t\t\tTerminal: common.IntToString(u.Line[:]),\n\t\t\tHost:     common.IntToString(u.Host[:]),\n\t\t\tStarted:  int(u.Tv.TvSec),\n\t\t}\n\t\tret = append(ret, user)\n\t}\n\n\treturn ret, nil\n\n}\n\nfunc getLSB() (*LSB, error) {\n\tret := &LSB{}\n\tif common.PathExists(\"/etc/lsb-release\") {\n\t\tcontents, err := common.ReadLines(\"/etc/lsb-release\")\n\t\tif err != nil {\n\t\t\treturn ret, err // return empty\n\t\t}\n\t\tfor _, line := range contents {\n\t\t\tfield := strings.Split(line, \"=\")\n\t\t\tif len(field) < 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch field[0] {\n\t\t\tcase \"DISTRIB_ID\":\n\t\t\t\tret.ID = field[1]\n\t\t\tcase \"DISTRIB_RELEASE\":\n\t\t\t\tret.Release = field[1]\n\t\t\tcase \"DISTRIB_CODENAME\":\n\t\t\t\tret.Codename = field[1]\n\t\t\tcase \"DISTRIB_DESCRIPTION\":\n\t\t\t\tret.Description = field[1]\n\t\t\t}\n\t\t}\n\t} else if common.PathExists(\"/usr/bin/lsb_release\") {\n\t\tout, err := exec.Command(\"/usr/bin/lsb_release\").Output()\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tfor _, line := range strings.Split(string(out), \"\\n\") {\n\t\t\tfield := strings.Split(line, \":\")\n\t\t\tif len(field) < 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch field[0] {\n\t\t\tcase \"Distributor ID\":\n\t\t\t\tret.ID = field[1]\n\t\t\tcase \"Release\":\n\t\t\t\tret.Release = field[1]\n\t\t\tcase \"Codename\":\n\t\t\t\tret.Codename = field[1]\n\t\t\tcase \"Description\":\n\t\t\t\tret.Description = field[1]\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn ret, nil\n}\n\nfunc GetPlatformInformation() (platform string, family string, version string, err error) {\n\n\tlsb, err := getLSB()\n\tif err != nil {\n\t\tlsb = &LSB{}\n\t}\n\n\tif common.PathExists(\"/etc/oracle-release\") {\n\t\tplatform = \"oracle\"\n\t\tcontents, err := common.ReadLines(\"/etc/oracle-release\")\n\t\tif err == nil {\n\t\t\tversion = getRedhatishVersion(contents)\n\t\t}\n\t} else if common.PathExists(\"/etc/enterprise-release\") {\n\t\tplatform = \"oracle\"\n\t\tcontents, err := common.ReadLines(\"/etc/enterprise-release\")\n\t\tif err == nil {\n\t\t\tversion = getRedhatishVersion(contents)\n\t\t}\n\t} else if common.PathExists(\"/etc/debian_version\") {\n\t\tif lsb.ID == \"Ubuntu\" {\n\t\t\tplatform = \"ubuntu\"\n\t\t\tversion = lsb.Release\n\t\t} else if lsb.ID == \"LinuxMint\" {\n\t\t\tplatform = \"linuxmint\"\n\t\t\tversion = lsb.Release\n\t\t} else {\n\t\t\tif common.PathExists(\"/usr/bin/raspi-config\") {\n\t\t\t\tplatform = \"raspbian\"\n\t\t\t} else {\n\t\t\t\tplatform = \"debian\"\n\t\t\t}\n\t\t\tcontents, err := common.ReadLines(\"/etc/debian_version\")\n\t\t\tif err == nil {\n\t\t\t\tversion = contents[0]\n\t\t\t}\n\t\t}\n\t} else if common.PathExists(\"/etc/redhat-release\") {\n\t\tcontents, err := common.ReadLines(\"/etc/redhat-release\")\n\t\tif err == nil {\n\t\t\tversion = getRedhatishVersion(contents)\n\t\t\tplatform = getRedhatishPlatform(contents)\n\t\t}\n\t} else if common.PathExists(\"/etc/system-release\") {\n\t\tcontents, err := common.ReadLines(\"/etc/system-release\")\n\t\tif err == nil {\n\t\t\tversion = getRedhatishVersion(contents)\n\t\t\tplatform = getRedhatishPlatform(contents)\n\t\t}\n\t} else if common.PathExists(\"/etc/gentoo-release\") {\n\t\tplatform = \"gentoo\"\n\t\tcontents, err := common.ReadLines(\"/etc/gentoo-release\")\n\t\tif err == nil {\n\t\t\tversion = getRedhatishVersion(contents)\n\t\t}\n\t} else if common.PathExists(\"/etc/SuSE-release\") {\n\t\tcontents, err := common.ReadLines(\"/etc/SuSE-release\")\n\t\tif err == nil {\n\t\t\tversion = getSuseVersion(contents)\n\t\t\tplatform = getSusePlatform(contents)\n\t\t}\n\t\t// TODO: slackware detecion\n\t} else if common.PathExists(\"/etc/arch-release\") {\n\t\tplatform = \"arch\"\n\t\tversion = lsb.Release\n\t} else if lsb.ID == \"RedHat\" {\n\t\tplatform = \"redhat\"\n\t\tversion = lsb.Release\n\t} else if lsb.ID == \"Amazon\" {\n\t\tplatform = \"amazon\"\n\t\tversion = lsb.Release\n\t} else if lsb.ID == \"ScientificSL\" {\n\t\tplatform = \"scientific\"\n\t\tversion = lsb.Release\n\t} else if lsb.ID == \"XenServer\" {\n\t\tplatform = \"xenserver\"\n\t\tversion = lsb.Release\n\t} else if lsb.ID != \"\" {\n\t\tplatform = strings.ToLower(lsb.ID)\n\t\tversion = lsb.Release\n\t}\n\n\tswitch platform {\n\tcase \"debian\", \"ubuntu\", \"linuxmint\", \"raspbian\":\n\t\tfamily = \"debian\"\n\tcase \"fedora\":\n\t\tfamily = \"fedora\"\n\tcase \"oracle\", \"centos\", \"redhat\", \"scientific\", \"enterpriseenterprise\", \"amazon\", \"xenserver\", \"cloudlinux\", \"ibm_powerkvm\":\n\t\tfamily = \"rhel\"\n\tcase \"suse\", \"opensuse\":\n\t\tfamily = \"suse\"\n\tcase \"gentoo\":\n\t\tfamily = \"gentoo\"\n\tcase \"slackware\":\n\t\tfamily = \"slackware\"\n\tcase \"arch\":\n\t\tfamily = \"arch\"\n\tcase \"exherbo\":\n\t\tfamily = \"exherbo\"\n\t}\n\n\treturn platform, family, version, nil\n\n}\n\nfunc getRedhatishVersion(contents []string) string {\n\tc := strings.ToLower(strings.Join(contents, \"\"))\n\n\tif strings.Contains(c, \"rawhide\") {\n\t\treturn \"rawhide\"\n\t}\n\tif matches := regexp.MustCompile(`release (\\d[\\d.]*)`).FindStringSubmatch(c); matches != nil {\n\t\treturn matches[1]\n\t}\n\treturn \"\"\n}\n\nfunc getRedhatishPlatform(contents []string) string {\n\tc := strings.ToLower(strings.Join(contents, \"\"))\n\n\tif strings.Contains(c, \"red hat\") {\n\t\treturn \"redhat\"\n\t}\n\tf := strings.Split(c, \" \")\n\n\treturn f[0]\n}\n\nfunc getSuseVersion(contents []string) string {\n\tversion := \"\"\n\tfor _, line := range contents {\n\t\tif matches := regexp.MustCompile(`VERSION = ([\\d.]+)`).FindStringSubmatch(line); matches != nil {\n\t\t\tversion = matches[1]\n\t\t} else if matches := regexp.MustCompile(`PATCHLEVEL = ([\\d]+)`).FindStringSubmatch(line); matches != nil {\n\t\t\tversion = version + \".\" + matches[1]\n\t\t}\n\t}\n\treturn version\n}\n\nfunc getSusePlatform(contents []string) string {\n\tc := strings.ToLower(strings.Join(contents, \"\"))\n\tif strings.Contains(c, \"opensuse\") {\n\t\treturn \"opensuse\"\n\t}\n\treturn \"suse\"\n}\n\nfunc GetVirtualization() (string, string, error) {\n\tvar system string\n\tvar role string\n\n\tfilename := common.HostProc(\"xen\")\n\tif common.PathExists(filename) {\n\t\tsystem = \"xen\"\n\t\trole = \"guest\" // assume guest\n\n\t\tif common.PathExists(filename + \"/capabilities\") {\n\t\t\tcontents, err := common.ReadLines(filename + \"/capabilities\")\n\t\t\tif err == nil {\n\t\t\t\tif common.StringsHas(contents, \"control_d\") {\n\t\t\t\t\trole = \"host\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = common.HostProc(\"modules\")\n\tif common.PathExists(filename) {\n\t\tcontents, err := common.ReadLines(filename)\n\t\tif err == nil {\n\t\t\tif common.StringsContains(contents, \"kvm\") {\n\t\t\t\tsystem = \"kvm\"\n\t\t\t\trole = \"host\"\n\t\t\t} else if common.StringsContains(contents, \"vboxdrv\") {\n\t\t\t\tsystem = \"vbox\"\n\t\t\t\trole = \"host\"\n\t\t\t} else if common.StringsContains(contents, \"vboxguest\") {\n\t\t\t\tsystem = \"vbox\"\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = common.HostProc(\"cpuinfo\")\n\tif common.PathExists(filename) {\n\t\tcontents, err := common.ReadLines(filename)\n\t\tif err == nil {\n\t\t\tif common.StringsHas(contents, \"QEMU Virtual CPU\") ||\n\t\t\t\tcommon.StringsHas(contents, \"Common KVM processor\") ||\n\t\t\t\tcommon.StringsHas(contents, \"Common 32-bit KVM processor\") {\n\t\t\t\tsystem = \"kvm\"\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = common.HostProc()\n\tif common.PathExists(filename + \"/bc/0\") {\n\t\tsystem = \"openvz\"\n\t\trole = \"host\"\n\t} else if common.PathExists(filename + \"/vz\") {\n\t\tsystem = \"openvz\"\n\t\trole = \"guest\"\n\t}\n\n\t// not use dmidecode because it requires root\n\tif common.PathExists(filename + \"/self/status\") {\n\t\tcontents, err := common.ReadLines(filename + \"/self/status\")\n\t\tif err == nil {\n\n\t\t\tif common.StringsHas(contents, \"s_context:\") ||\n\t\t\t\tcommon.StringsHas(contents, \"VxID:\") {\n\t\t\t\tsystem = \"linux-vserver\"\n\t\t\t}\n\t\t\t// TODO: guest or host\n\t\t}\n\t}\n\n\tif common.PathExists(filename + \"/self/cgroup\") {\n\t\tcontents, err := common.ReadLines(filename + \"/self/cgroup\")\n\t\tif err == nil {\n\t\t\tif common.StringsHas(contents, \"lxc\") ||\n\t\t\t\tcommon.StringsHas(contents, \"docker\") {\n\t\t\t\tsystem = \"lxc\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if common.PathExists(\"/usr/bin/lxc-version\") { // TODO: which\n\t\t\t\tsystem = \"lxc\"\n\t\t\t\trole = \"host\"\n\t\t\t}\n\t\t}\n\t}\n\n\treturn system, role, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_linux_386.go",
    "content": "// ATTENTION - FILE MANUAL FIXED AFTER CGO.\n// Fixed line: Tv\t\t_Ctype_struct_timeval -> Tv\t\tUtTv\n// Created by cgo -godefs, MANUAL FIXED\n// cgo -godefs types_linux.go\n\npackage host\n\nconst (\n\tsizeofPtr      = 0x4\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x4\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype utmp struct {\n\tType      int16\n\tPad_cgo_0 [2]byte\n\tPid       int32\n\tLine      [32]int8\n\tId        [4]int8\n\tUser      [32]int8\n\tHost      [256]int8\n\tExit      exit_status\n\tSession   int32\n\tTv        UtTv\n\tAddr_v6   [4]int32\n\tX__unused [20]int8\n}\ntype exit_status struct {\n\tTermination int16\n\tExit        int16\n}\ntype UtTv struct {\n\tTvSec  int32\n\tTvUsec int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_linux_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\n\npackage host\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype utmp struct {\n\tType              int16\n\tPad_cgo_0         [2]byte\n\tPid               int32\n\tLine              [32]int8\n\tId                [4]int8\n\tUser              [32]int8\n\tHost              [256]int8\n\tExit              exit_status\n\tSession           int32\n\tTv                UtTv\n\tAddr_v6           [4]int32\n\tX__glibc_reserved [20]int8\n}\ntype exit_status struct {\n\tTermination int16\n\tExit        int16\n}\ntype UtTv struct {\n\tTvSec  int32\n\tTvUsec int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_linux_arm.go",
    "content": "// +build linux\n// +build arm\n\npackage host\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype utmp struct {\n\tType              int16\n\tPad_cgo_0         [2]byte\n\tPid               int32\n\tLine              [32]int8\n\tId                [4]int8\n\tUser              [32]int8\n\tHost              [256]int8\n\tExit              exit_status\n\tSession           int32\n\tTv                UtTv\n\tAddr_v6           [4]int32\n\tX__glibc_reserved [20]int8\n}\ntype exit_status struct {\n\tTermination int16\n\tExit        int16\n}\ntype UtTv struct {\n\tTvSec  int32\n\tTvUsec int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/host_windows.go",
    "content": "// +build windows\n\npackage host\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/StackExchange/wmi\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n\tprocess \"github.com/shirou/gopsutil/process\"\n)\n\nvar (\n\tprocGetSystemTimeAsFileTime = common.Modkernel32.NewProc(\"GetSystemTimeAsFileTime\")\n\tosInfo                      *Win32_OperatingSystem\n)\n\ntype Win32_OperatingSystem struct {\n\tVersion        string\n\tCaption        string\n\tProductType    uint32\n\tBuildNumber    string\n\tLastBootUpTime time.Time\n}\n\nfunc HostInfo() (*HostInfoStat, error) {\n\tret := &HostInfoStat{\n\t\tOS: runtime.GOOS,\n\t}\n\n\thostname, err := os.Hostname()\n\tif err == nil {\n\t\tret.Hostname = hostname\n\t}\n\n\tplatform, family, version, err := GetPlatformInformation()\n\tif err == nil {\n\t\tret.Platform = platform\n\t\tret.PlatformFamily = family\n\t\tret.PlatformVersion = version\n\t} else {\n\t\treturn ret, err\n\t}\n\n\tboot, err := BootTime()\n\tif err == nil {\n\t\tret.BootTime = boot\n\t\tret.Uptime = uptime(boot)\n\t}\n\n\tprocs, err := process.Pids()\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tret.Procs = uint64(len(procs))\n\n\treturn ret, nil\n}\n\nfunc GetOSInfo() (Win32_OperatingSystem, error) {\n\tvar dst []Win32_OperatingSystem\n\tq := wmi.CreateQuery(&dst, \"\")\n\terr := wmi.Query(q, &dst)\n\tif err != nil {\n\t\treturn Win32_OperatingSystem{}, err\n\t}\n\n\tosInfo = &dst[0]\n\n\treturn dst[0], nil\n}\n\nfunc BootTime() (uint64, error) {\n\tif osInfo == nil {\n\t\t_, err := GetOSInfo()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tnow := time.Now()\n\tt := osInfo.LastBootUpTime.Local()\n\treturn uint64(now.Sub(t).Seconds()), nil\n}\n\nfunc uptime(boot uint64) uint64 {\n\treturn uint64(time.Now().Unix()) - boot\n}\n\nfunc Uptime() (uint64, error) {\n\tboot, err := BootTime()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uptime(boot), nil\n}\n\nfunc GetPlatformInformation() (platform string, family string, version string, err error) {\n\tif osInfo == nil {\n\t\t_, err = GetOSInfo()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Platform\n\tplatform = strings.Trim(osInfo.Caption, \" \")\n\n\t// PlatformFamily\n\tswitch osInfo.ProductType {\n\tcase 1:\n\t\tfamily = \"Standalone Workstation\"\n\tcase 2:\n\t\tfamily = \"Server (Domain Controller)\"\n\tcase 3:\n\t\tfamily = \"Server\"\n\t}\n\n\t// Platform Version\n\tversion = fmt.Sprintf(\"%s Build %s\", osInfo.Version, osInfo.BuildNumber)\n\n\treturn\n}\n\nfunc Users() ([]UserStat, error) {\n\n\tvar ret []UserStat\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/types_darwin.go",
    "content": "// +build ignore\n// plus hand editing about timeval\n\n/*\nInput to cgo -godefs.\n*/\n\npackage host\n\n/*\n#include <sys/time.h>\n#include <utmpx.h>\n*/\nimport \"C\"\n\ntype Utmpx C.struct_utmpx\ntype Timeval C.struct_timeval\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/types_freebsd.go",
    "content": "// +build ignore\n\n/*\nInput to cgo -godefs.\n*/\n\npackage host\n\n/*\n#define KERNEL\n#include <sys/types.h>\n#include <sys/time.h>\n#include <utmpx.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics; for internal use.\n\nconst (\n\tsizeofPtr      = C.sizeofPtr\n\tsizeofShort    = C.sizeof_short\n\tsizeofInt      = C.sizeof_int\n\tsizeofLong     = C.sizeof_long\n\tsizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\ntype Utmp C.struct_utmp\ntype Utmpx C.struct_utmpx\ntype Timeval C.struct_timeval\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/host/types_linux.go",
    "content": "// +build ignore\n\n/*\nInput to cgo -godefs.\n*/\n\npackage host\n\n/*\n#define KERNEL\n#include <sys/types.h>\n#include <utmp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics; for internal use.\n\nconst (\n\tsizeofPtr      = C.sizeofPtr\n\tsizeofShort    = C.sizeof_short\n\tsizeofInt      = C.sizeof_int\n\tsizeofLong     = C.sizeof_long\n\tsizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\ntype utmp C.struct_utmp\ntype exit_status C.struct_exit_status\ntype UtTv struct {\n\tTvSec  int32\n\tTvUsec int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/binary.go",
    "content": "// Copyright 2009 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package binary implements simple translation between numbers and byte\n// sequences and encoding and decoding of varints.\n//\n// Numbers are translated by reading and writing fixed-size values.\n// A fixed-size value is either a fixed-size arithmetic\n// type (int8, uint8, int16, float32, complex64, ...)\n// or an array or struct containing only fixed-size values.\n//\n// The varint functions encode and decode single integer values using\n// a variable-length encoding; smaller values require fewer bytes.\n// For a specification, see\n// http://code.google.com/apis/protocolbuffers/docs/encoding.html.\n//\n// This package favors simplicity over efficiency. Clients that require\n// high-performance serialization, especially for large data structures,\n// should look at more advanced solutions such as the encoding/gob\n// package or protocol buffers.\npackage common\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n)\n\n// A ByteOrder specifies how to convert byte sequences into\n// 16-, 32-, or 64-bit unsigned integers.\ntype ByteOrder interface {\n\tUint16([]byte) uint16\n\tUint32([]byte) uint32\n\tUint64([]byte) uint64\n\tPutUint16([]byte, uint16)\n\tPutUint32([]byte, uint32)\n\tPutUint64([]byte, uint64)\n\tString() string\n}\n\n// LittleEndian is the little-endian implementation of ByteOrder.\nvar LittleEndian littleEndian\n\n// BigEndian is the big-endian implementation of ByteOrder.\nvar BigEndian bigEndian\n\ntype littleEndian struct{}\n\nfunc (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8 }\n\nfunc (littleEndian) PutUint16(b []byte, v uint16) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n}\n\nfunc (littleEndian) Uint32(b []byte) uint32 {\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n}\n\nfunc (littleEndian) PutUint32(b []byte, v uint32) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n}\n\nfunc (littleEndian) Uint64(b []byte) uint64 {\n\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n}\n\nfunc (littleEndian) PutUint64(b []byte, v uint64) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n\tb[4] = byte(v >> 32)\n\tb[5] = byte(v >> 40)\n\tb[6] = byte(v >> 48)\n\tb[7] = byte(v >> 56)\n}\n\nfunc (littleEndian) String() string { return \"LittleEndian\" }\n\nfunc (littleEndian) GoString() string { return \"binary.LittleEndian\" }\n\ntype bigEndian struct{}\n\nfunc (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 }\n\nfunc (bigEndian) PutUint16(b []byte, v uint16) {\n\tb[0] = byte(v >> 8)\n\tb[1] = byte(v)\n}\n\nfunc (bigEndian) Uint32(b []byte) uint32 {\n\treturn uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24\n}\n\nfunc (bigEndian) PutUint32(b []byte, v uint32) {\n\tb[0] = byte(v >> 24)\n\tb[1] = byte(v >> 16)\n\tb[2] = byte(v >> 8)\n\tb[3] = byte(v)\n}\n\nfunc (bigEndian) Uint64(b []byte) uint64 {\n\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n}\n\nfunc (bigEndian) PutUint64(b []byte, v uint64) {\n\tb[0] = byte(v >> 56)\n\tb[1] = byte(v >> 48)\n\tb[2] = byte(v >> 40)\n\tb[3] = byte(v >> 32)\n\tb[4] = byte(v >> 24)\n\tb[5] = byte(v >> 16)\n\tb[6] = byte(v >> 8)\n\tb[7] = byte(v)\n}\n\nfunc (bigEndian) String() string { return \"BigEndian\" }\n\nfunc (bigEndian) GoString() string { return \"binary.BigEndian\" }\n\n// Read reads structured binary data from r into data.\n// Data must be a pointer to a fixed-size value or a slice\n// of fixed-size values.\n// Bytes read from r are decoded using the specified byte order\n// and written to successive fields of the data.\n// When reading into structs, the field data for fields with\n// blank (_) field names is skipped; i.e., blank field names\n// may be used for padding.\n// When reading into a struct, all non-blank fields must be exported.\nfunc Read(r io.Reader, order ByteOrder, data interface{}) error {\n\t// Fast path for basic types and slices.\n\tif n := intDataSize(data); n != 0 {\n\t\tvar b [8]byte\n\t\tvar bs []byte\n\t\tif n > len(b) {\n\t\t\tbs = make([]byte, n)\n\t\t} else {\n\t\t\tbs = b[:n]\n\t\t}\n\t\tif _, err := io.ReadFull(r, bs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch data := data.(type) {\n\t\tcase *int8:\n\t\t\t*data = int8(b[0])\n\t\tcase *uint8:\n\t\t\t*data = b[0]\n\t\tcase *int16:\n\t\t\t*data = int16(order.Uint16(bs))\n\t\tcase *uint16:\n\t\t\t*data = order.Uint16(bs)\n\t\tcase *int32:\n\t\t\t*data = int32(order.Uint32(bs))\n\t\tcase *uint32:\n\t\t\t*data = order.Uint32(bs)\n\t\tcase *int64:\n\t\t\t*data = int64(order.Uint64(bs))\n\t\tcase *uint64:\n\t\t\t*data = order.Uint64(bs)\n\t\tcase []int8:\n\t\t\tfor i, x := range bs { // Easier to loop over the input for 8-bit values.\n\t\t\t\tdata[i] = int8(x)\n\t\t\t}\n\t\tcase []uint8:\n\t\t\tcopy(data, bs)\n\t\tcase []int16:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int16(order.Uint16(bs[2*i:]))\n\t\t\t}\n\t\tcase []uint16:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint16(bs[2*i:])\n\t\t\t}\n\t\tcase []int32:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int32(order.Uint32(bs[4*i:]))\n\t\t\t}\n\t\tcase []uint32:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint32(bs[4*i:])\n\t\t\t}\n\t\tcase []int64:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int64(order.Uint64(bs[8*i:]))\n\t\t\t}\n\t\tcase []uint64:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint64(bs[8*i:])\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Fallback to reflect-based decoding.\n\tv := reflect.ValueOf(data)\n\tsize := -1\n\tswitch v.Kind() {\n\tcase reflect.Ptr:\n\t\tv = v.Elem()\n\t\tsize = dataSize(v)\n\tcase reflect.Slice:\n\t\tsize = dataSize(v)\n\t}\n\tif size < 0 {\n\t\treturn errors.New(\"binary.Read: invalid type \" + reflect.TypeOf(data).String())\n\t}\n\td := &decoder{order: order, buf: make([]byte, size)}\n\tif _, err := io.ReadFull(r, d.buf); err != nil {\n\t\treturn err\n\t}\n\td.value(v)\n\treturn nil\n}\n\n// Write writes the binary representation of data into w.\n// Data must be a fixed-size value or a slice of fixed-size\n// values, or a pointer to such data.\n// Bytes written to w are encoded using the specified byte order\n// and read from successive fields of the data.\n// When writing structs, zero values are written for fields\n// with blank (_) field names.\nfunc Write(w io.Writer, order ByteOrder, data interface{}) error {\n\t// Fast path for basic types and slices.\n\tif n := intDataSize(data); n != 0 {\n\t\tvar b [8]byte\n\t\tvar bs []byte\n\t\tif n > len(b) {\n\t\t\tbs = make([]byte, n)\n\t\t} else {\n\t\t\tbs = b[:n]\n\t\t}\n\t\tswitch v := data.(type) {\n\t\tcase *int8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(*v)\n\t\tcase int8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(v)\n\t\tcase []int8:\n\t\t\tfor i, x := range v {\n\t\t\t\tbs[i] = byte(x)\n\t\t\t}\n\t\tcase *uint8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = *v\n\t\tcase uint8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(v)\n\t\tcase []uint8:\n\t\t\tbs = v\n\t\tcase *int16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, uint16(*v))\n\t\tcase int16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, uint16(v))\n\t\tcase []int16:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint16(bs[2*i:], uint16(x))\n\t\t\t}\n\t\tcase *uint16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, *v)\n\t\tcase uint16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, v)\n\t\tcase []uint16:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint16(bs[2*i:], x)\n\t\t\t}\n\t\tcase *int32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, uint32(*v))\n\t\tcase int32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, uint32(v))\n\t\tcase []int32:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint32(bs[4*i:], uint32(x))\n\t\t\t}\n\t\tcase *uint32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, *v)\n\t\tcase uint32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, v)\n\t\tcase []uint32:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint32(bs[4*i:], x)\n\t\t\t}\n\t\tcase *int64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, uint64(*v))\n\t\tcase int64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, uint64(v))\n\t\tcase []int64:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint64(bs[8*i:], uint64(x))\n\t\t\t}\n\t\tcase *uint64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, *v)\n\t\tcase uint64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, v)\n\t\tcase []uint64:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint64(bs[8*i:], x)\n\t\t\t}\n\t\t}\n\t\t_, err := w.Write(bs)\n\t\treturn err\n\t}\n\n\t// Fallback to reflect-based encoding.\n\tv := reflect.Indirect(reflect.ValueOf(data))\n\tsize := dataSize(v)\n\tif size < 0 {\n\t\treturn errors.New(\"binary.Write: invalid type \" + reflect.TypeOf(data).String())\n\t}\n\tbuf := make([]byte, size)\n\te := &encoder{order: order, buf: buf}\n\te.value(v)\n\t_, err := w.Write(buf)\n\treturn err\n}\n\n// Size returns how many bytes Write would generate to encode the value v, which\n// must be a fixed-size value or a slice of fixed-size values, or a pointer to such data.\n// If v is neither of these, Size returns -1.\nfunc Size(v interface{}) int {\n\treturn dataSize(reflect.Indirect(reflect.ValueOf(v)))\n}\n\n// dataSize returns the number of bytes the actual data represented by v occupies in memory.\n// For compound structures, it sums the sizes of the elements. Thus, for instance, for a slice\n// it returns the length of the slice times the element size and does not count the memory\n// occupied by the header. If the type of v is not acceptable, dataSize returns -1.\nfunc dataSize(v reflect.Value) int {\n\tif v.Kind() == reflect.Slice {\n\t\tif s := sizeof(v.Type().Elem()); s >= 0 {\n\t\t\treturn s * v.Len()\n\t\t}\n\t\treturn -1\n\t}\n\treturn sizeof(v.Type())\n}\n\n// sizeof returns the size >= 0 of variables for the given type or -1 if the type is not acceptable.\nfunc sizeof(t reflect.Type) int {\n\tswitch t.Kind() {\n\tcase reflect.Array:\n\t\tif s := sizeof(t.Elem()); s >= 0 {\n\t\t\treturn s * t.Len()\n\t\t}\n\n\tcase reflect.Struct:\n\t\tsum := 0\n\t\tfor i, n := 0, t.NumField(); i < n; i++ {\n\t\t\ts := sizeof(t.Field(i).Type)\n\t\t\tif s < 0 {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\tsum += s\n\t\t}\n\t\treturn sum\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,\n\t\treflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\treflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.Ptr:\n\t\treturn int(t.Size())\n\t}\n\n\treturn -1\n}\n\ntype coder struct {\n\torder ByteOrder\n\tbuf   []byte\n}\n\ntype decoder coder\ntype encoder coder\n\nfunc (d *decoder) uint8() uint8 {\n\tx := d.buf[0]\n\td.buf = d.buf[1:]\n\treturn x\n}\n\nfunc (e *encoder) uint8(x uint8) {\n\te.buf[0] = x\n\te.buf = e.buf[1:]\n}\n\nfunc (d *decoder) uint16() uint16 {\n\tx := d.order.Uint16(d.buf[0:2])\n\td.buf = d.buf[2:]\n\treturn x\n}\n\nfunc (e *encoder) uint16(x uint16) {\n\te.order.PutUint16(e.buf[0:2], x)\n\te.buf = e.buf[2:]\n}\n\nfunc (d *decoder) uint32() uint32 {\n\tx := d.order.Uint32(d.buf[0:4])\n\td.buf = d.buf[4:]\n\treturn x\n}\n\nfunc (e *encoder) uint32(x uint32) {\n\te.order.PutUint32(e.buf[0:4], x)\n\te.buf = e.buf[4:]\n}\n\nfunc (d *decoder) uint64() uint64 {\n\tx := d.order.Uint64(d.buf[0:8])\n\td.buf = d.buf[8:]\n\treturn x\n}\n\nfunc (e *encoder) uint64(x uint64) {\n\te.order.PutUint64(e.buf[0:8], x)\n\te.buf = e.buf[8:]\n}\n\nfunc (d *decoder) int8() int8 { return int8(d.uint8()) }\n\nfunc (e *encoder) int8(x int8) { e.uint8(uint8(x)) }\n\nfunc (d *decoder) int16() int16 { return int16(d.uint16()) }\n\nfunc (e *encoder) int16(x int16) { e.uint16(uint16(x)) }\n\nfunc (d *decoder) int32() int32 { return int32(d.uint32()) }\n\nfunc (e *encoder) int32(x int32) { e.uint32(uint32(x)) }\n\nfunc (d *decoder) int64() int64 { return int64(d.uint64()) }\n\nfunc (e *encoder) int64(x int64) { e.uint64(uint64(x)) }\n\nfunc (d *decoder) value(v reflect.Value) {\n\tswitch v.Kind() {\n\tcase reflect.Array:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\td.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Struct:\n\t\tt := v.Type()\n\t\tl := v.NumField()\n\t\tfor i := 0; i < l; i++ {\n\t\t\t// Note: Calling v.CanSet() below is an optimization.\n\t\t\t// It would be sufficient to check the field name,\n\t\t\t// but creating the StructField info for each field is\n\t\t\t// costly (run \"go test -bench=ReadStruct\" and compare\n\t\t\t// results when making changes to this code).\n\t\t\tif v := v.Field(i); v.CanSet() || t.Field(i).Name != \"_\" {\n\t\t\t\td.value(v)\n\t\t\t} else {\n\t\t\t\td.skip(v)\n\t\t\t}\n\t\t}\n\n\tcase reflect.Slice:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\td.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Int8:\n\t\tv.SetInt(int64(d.int8()))\n\tcase reflect.Int16:\n\t\tv.SetInt(int64(d.int16()))\n\tcase reflect.Int32:\n\t\tv.SetInt(int64(d.int32()))\n\tcase reflect.Int64:\n\t\tv.SetInt(d.int64())\n\n\tcase reflect.Uint8:\n\t\tv.SetUint(uint64(d.uint8()))\n\tcase reflect.Uint16:\n\t\tv.SetUint(uint64(d.uint16()))\n\tcase reflect.Uint32:\n\t\tv.SetUint(uint64(d.uint32()))\n\tcase reflect.Uint64:\n\t\tv.SetUint(d.uint64())\n\n\tcase reflect.Float32:\n\t\tv.SetFloat(float64(math.Float32frombits(d.uint32())))\n\tcase reflect.Float64:\n\t\tv.SetFloat(math.Float64frombits(d.uint64()))\n\n\tcase reflect.Complex64:\n\t\tv.SetComplex(complex(\n\t\t\tfloat64(math.Float32frombits(d.uint32())),\n\t\t\tfloat64(math.Float32frombits(d.uint32())),\n\t\t))\n\tcase reflect.Complex128:\n\t\tv.SetComplex(complex(\n\t\t\tmath.Float64frombits(d.uint64()),\n\t\t\tmath.Float64frombits(d.uint64()),\n\t\t))\n\t}\n}\n\nfunc (e *encoder) value(v reflect.Value) {\n\tswitch v.Kind() {\n\tcase reflect.Array:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\te.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Struct:\n\t\tt := v.Type()\n\t\tl := v.NumField()\n\t\tfor i := 0; i < l; i++ {\n\t\t\t// see comment for corresponding code in decoder.value()\n\t\t\tif v := v.Field(i); v.CanSet() || t.Field(i).Name != \"_\" {\n\t\t\t\te.value(v)\n\t\t\t} else {\n\t\t\t\te.skip(v)\n\t\t\t}\n\t\t}\n\n\tcase reflect.Slice:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\te.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Int8:\n\t\t\te.int8(int8(v.Int()))\n\t\tcase reflect.Int16:\n\t\t\te.int16(int16(v.Int()))\n\t\tcase reflect.Int32:\n\t\t\te.int32(int32(v.Int()))\n\t\tcase reflect.Int64:\n\t\t\te.int64(v.Int())\n\t\t}\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Uint8:\n\t\t\te.uint8(uint8(v.Uint()))\n\t\tcase reflect.Uint16:\n\t\t\te.uint16(uint16(v.Uint()))\n\t\tcase reflect.Uint32:\n\t\t\te.uint32(uint32(v.Uint()))\n\t\tcase reflect.Uint64:\n\t\t\te.uint64(v.Uint())\n\t\t}\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Float32:\n\t\t\te.uint32(math.Float32bits(float32(v.Float())))\n\t\tcase reflect.Float64:\n\t\t\te.uint64(math.Float64bits(v.Float()))\n\t\t}\n\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Complex64:\n\t\t\tx := v.Complex()\n\t\t\te.uint32(math.Float32bits(float32(real(x))))\n\t\t\te.uint32(math.Float32bits(float32(imag(x))))\n\t\tcase reflect.Complex128:\n\t\t\tx := v.Complex()\n\t\t\te.uint64(math.Float64bits(real(x)))\n\t\t\te.uint64(math.Float64bits(imag(x)))\n\t\t}\n\t}\n}\n\nfunc (d *decoder) skip(v reflect.Value) {\n\td.buf = d.buf[dataSize(v):]\n}\n\nfunc (e *encoder) skip(v reflect.Value) {\n\tn := dataSize(v)\n\tfor i := range e.buf[0:n] {\n\t\te.buf[i] = 0\n\t}\n\te.buf = e.buf[n:]\n}\n\n// intDataSize returns the size of the data required to represent the data when encoded.\n// It returns zero if the type cannot be implemented by the fast path in Read or Write.\nfunc intDataSize(data interface{}) int {\n\tswitch data := data.(type) {\n\tcase int8, *int8, *uint8:\n\t\treturn 1\n\tcase []int8:\n\t\treturn len(data)\n\tcase []uint8:\n\t\treturn len(data)\n\tcase int16, *int16, *uint16:\n\t\treturn 2\n\tcase []int16:\n\t\treturn 2 * len(data)\n\tcase []uint16:\n\t\treturn 2 * len(data)\n\tcase int32, *int32, *uint32:\n\t\treturn 4\n\tcase []int32:\n\t\treturn 4 * len(data)\n\tcase []uint32:\n\t\treturn 4 * len(data)\n\tcase int64, *int64, *uint64:\n\t\treturn 8\n\tcase []int64:\n\t\treturn 8 * len(data)\n\tcase []uint64:\n\t\treturn 8 * len(data)\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common.go",
    "content": "//\n// gopsutil is a port of psutil(http://pythonhosted.org/psutil/).\n// This covers these architectures.\n//  - linux (amd64, arm)\n//  - freebsd (amd64)\n//  - windows (amd64)\npackage common\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"io/ioutil\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype Invoker interface {\n\tCommand(string, ...string) ([]byte, error)\n}\n\ntype Invoke struct{}\n\nfunc (i Invoke) Command(name string, arg ...string) ([]byte, error) {\n\treturn exec.Command(name, arg...).Output()\n}\n\ntype FakeInvoke struct {\n\tCommandExpectedDir string // CommandExpectedDir specifies dir which includes expected outputs.\n\tSuffix             string // Suffix species expected file name suffix such as \"fail\"\n\tError              error  // If Error specfied, return the error.\n}\n\n// Command in FakeInvoke returns from expected file if exists.\nfunc (i FakeInvoke) Command(name string, arg ...string) ([]byte, error) {\n\tif i.Error != nil {\n\t\treturn []byte{}, i.Error\n\t}\n\n\tarch := runtime.GOOS\n\n\tfname := strings.Join(append([]string{name}, arg...), \"\")\n\tfname = url.QueryEscape(fname)\n\tvar dir string\n\tif i.CommandExpectedDir == \"\" {\n\t\tdir = \"expected\"\n\t} else {\n\t\tdir = i.CommandExpectedDir\n\t}\n\tfpath := path.Join(dir, arch, fname)\n\tif i.Suffix != \"\" {\n\t\tfpath += \"_\" + i.Suffix\n\t}\n\tif PathExists(fpath) {\n\t\treturn ioutil.ReadFile(fpath)\n\t} else {\n\t\treturn exec.Command(name, arg...).Output()\n\t}\n}\n\nvar NotImplementedError = errors.New(\"not implemented yet\")\n\n// ReadLines reads contents from a file and splits them by new lines.\n// A convenience wrapper to ReadLinesOffsetN(filename, 0, -1).\nfunc ReadLines(filename string) ([]string, error) {\n\treturn ReadLinesOffsetN(filename, 0, -1)\n}\n\n// ReadLines reads contents from file and splits them by new line.\n// The offset tells at which line number to start.\n// The count determines the number of lines to read (starting from offset):\n//   n >= 0: at most n lines\n//   n < 0: whole file\nfunc ReadLinesOffsetN(filename string, offset uint, n int) ([]string, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\tdefer f.Close()\n\n\tvar ret []string\n\n\tr := bufio.NewReader(f)\n\tfor i := 0; i < n+int(offset) || n < 0; i++ {\n\t\tline, err := r.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif i < int(offset) {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, strings.Trim(line, \"\\n\"))\n\t}\n\n\treturn ret, nil\n}\n\nfunc IntToString(orig []int8) string {\n\tret := make([]byte, len(orig))\n\tsize := -1\n\tfor i, o := range orig {\n\t\tif o == 0 {\n\t\t\tsize = i\n\t\t\tbreak\n\t\t}\n\t\tret[i] = byte(o)\n\t}\n\tif size == -1 {\n\t\tsize = len(orig)\n\t}\n\n\treturn string(ret[0:size])\n}\n\nfunc ByteToString(orig []byte) string {\n\tn := -1\n\tl := -1\n\tfor i, b := range orig {\n\t\t// skip left side null\n\t\tif l == -1 && b == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif l == -1 {\n\t\t\tl = i\n\t\t}\n\n\t\tif b == 0 {\n\t\t\tbreak\n\t\t}\n\t\tn = i + 1\n\t}\n\tif n == -1 {\n\t\treturn string(orig)\n\t}\n\treturn string(orig[l:n])\n}\n\n// ReadInts reads contents from single line file and returns them as []int32.\nfunc ReadInts(filename string) ([]int64, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\tdefer f.Close()\n\n\tvar ret []int64\n\n\tr := bufio.NewReader(f)\n\n\t// The int files that this is concerned with should only be one liners.\n\tline, err := r.ReadString('\\n')\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\n\ti, err := strconv.ParseInt(strings.Trim(line, \"\\n\"), 10, 32)\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\tret = append(ret, i)\n\n\treturn ret, nil\n}\n\n// Parse to int32 without error\nfunc mustParseInt32(val string) int32 {\n\tvv, _ := strconv.ParseInt(val, 10, 32)\n\treturn int32(vv)\n}\n\n// Parse to uint64 without error\nfunc mustParseUint64(val string) uint64 {\n\tvv, _ := strconv.ParseInt(val, 10, 64)\n\treturn uint64(vv)\n}\n\n// Parse to Float64 without error\nfunc mustParseFloat64(val string) float64 {\n\tvv, _ := strconv.ParseFloat(val, 64)\n\treturn vv\n}\n\n// StringsHas checks the target string slice contains src or not\nfunc StringsHas(target []string, src string) bool {\n\tfor _, t := range target {\n\t\tif strings.TrimSpace(t) == src {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// StringsContains checks the src in any string of the target string slice\nfunc StringsContains(target []string, src string) bool {\n\tfor _, t := range target {\n\t\tif strings.Contains(t, src) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// get struct attributes.\n// This method is used only for debugging platform dependent code.\nfunc attributes(m interface{}) map[string]reflect.Type {\n\ttyp := reflect.TypeOf(m)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t}\n\n\tattrs := make(map[string]reflect.Type)\n\tif typ.Kind() != reflect.Struct {\n\t\treturn nil\n\t}\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tp := typ.Field(i)\n\t\tif !p.Anonymous {\n\t\t\tattrs[p.Name] = p.Type\n\t\t}\n\t}\n\n\treturn attrs\n}\n\nfunc PathExists(filename string) bool {\n\tif _, err := os.Stat(filename); err == nil {\n\t\treturn true\n\t}\n\treturn false\n}\n\n//GetEnv retrieves the environment variable key. If it does not exist it returns the default.\nfunc GetEnv(key string, dfault string, combineWith ...string) string {\n\tvalue := os.Getenv(key)\n\tif value == \"\" {\n\t\tvalue = dfault\n\t}\n\n\tswitch len(combineWith) {\n\tcase 0:\n\t\treturn value\n\tcase 1:\n\t\treturn filepath.Join(value, combineWith[0])\n\tdefault:\n\t\tall := make([]string, len(combineWith)+1)\n\t\tall[0] = value\n\t\tcopy(all[1:], combineWith)\n\t\treturn filepath.Join(all...)\n\t}\n\tpanic(\"invalid switch case\")\n}\n\nfunc HostProc(combineWith ...string) string {\n\treturn GetEnv(\"HOST_PROC\", \"/proc\", combineWith...)\n}\n\nfunc HostSys(combineWith ...string) string {\n\treturn GetEnv(\"HOST_SYS\", \"/sys\", combineWith...)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common_darwin.go",
    "content": "// +build darwin\n\npackage common\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tos.Setenv(\"LC_ALL\", \"C\")\n\tout, err := exec.Command(\"/usr/sbin/sysctl\", \"-n\", mib).Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common_freebsd.go",
    "content": "// +build freebsd\n\npackage common\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tos.Setenv(\"LC_ALL\", \"C\")\n\tout, err := exec.Command(\"/sbin/sysctl\", \"-n\", mib).Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmibptr := unsafe.Pointer(&mib[0])\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common_linux.go",
    "content": "// +build linux\n\npackage common\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common_unix.go",
    "content": "// +build linux freebsd darwin\n\npackage common\n\nimport (\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nfunc CallLsof(invoke Invoker, pid int32, args ...string) ([]string, error) {\n\tvar cmd []string\n\tif pid == 0 { // will get from all processes.\n\t\tcmd = []string{\"-a\", \"-n\", \"-P\"}\n\t} else {\n\t\tcmd = []string{\"-a\", \"-n\", \"-P\", \"-p\", strconv.Itoa(int(pid))}\n\t}\n\tcmd = append(cmd, args...)\n\tlsof, err := exec.LookPath(\"lsof\")\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tout, err := invoke.Command(lsof, cmd...)\n\tif err != nil {\n\t\t// if no pid found, lsof returnes code 1.\n\t\tif err.Error() == \"exit status 1\" && len(out) == 0 {\n\t\t\treturn []string{}, nil\n\t\t}\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\n\tvar ret []string\n\tfor _, l := range lines[1:] {\n\t\tif len(l) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, l)\n\t}\n\treturn ret, nil\n}\n\nfunc CallPgrep(invoke Invoker, pid int32) ([]int32, error) {\n\tvar cmd []string\n\tcmd = []string{\"-P\", strconv.Itoa(int(pid))}\n\tpgrep, err := exec.LookPath(\"pgrep\")\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\tout, err := invoke.Command(pgrep, cmd...)\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\tret := make([]int32, 0, len(lines))\n\tfor _, l := range lines {\n\t\tif len(l) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\ti, err := strconv.Atoi(l)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, int32(i))\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/internal/common/common_windows.go",
    "content": "// +build windows\n\npackage common\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// for double values\ntype PDH_FMT_COUNTERVALUE_DOUBLE struct {\n\tCStatus     uint32\n\tDoubleValue float64\n}\n\n// for 64 bit integer values\ntype PDH_FMT_COUNTERVALUE_LARGE struct {\n\tCStatus    uint32\n\tLargeValue int64\n}\n\n// for long values\ntype PDH_FMT_COUNTERVALUE_LONG struct {\n\tCStatus   uint32\n\tLongValue int32\n\tpadding   [4]byte\n}\n\n// windows system const\nconst (\n\tERROR_SUCCESS        = 0\n\tERROR_FILE_NOT_FOUND = 2\n\tDRIVE_REMOVABLE      = 2\n\tDRIVE_FIXED          = 3\n\tHKEY_LOCAL_MACHINE   = 0x80000002\n\tRRF_RT_REG_SZ        = 0x00000002\n\tRRF_RT_REG_DWORD     = 0x00000010\n\tPDH_FMT_LONG         = 0x00000100\n\tPDH_FMT_DOUBLE       = 0x00000200\n\tPDH_FMT_LARGE        = 0x00000400\n\tPDH_INVALID_DATA     = 0xc0000bc6\n\tPDH_INVALID_HANDLE   = 0xC0000bbc\n\tPDH_NO_DATA          = 0x800007d5\n)\n\nvar (\n\tModkernel32 = syscall.NewLazyDLL(\"kernel32.dll\")\n\tModNt       = syscall.NewLazyDLL(\"ntdll.dll\")\n\tModPdh      = syscall.NewLazyDLL(\"pdh.dll\")\n\n\tProcGetSystemTimes           = Modkernel32.NewProc(\"GetSystemTimes\")\n\tProcNtQuerySystemInformation = ModNt.NewProc(\"NtQuerySystemInformation\")\n\tPdhOpenQuery                 = ModPdh.NewProc(\"PdhOpenQuery\")\n\tPdhAddCounter                = ModPdh.NewProc(\"PdhAddCounterW\")\n\tPdhCollectQueryData          = ModPdh.NewProc(\"PdhCollectQueryData\")\n\tPdhGetFormattedCounterValue  = ModPdh.NewProc(\"PdhGetFormattedCounterValue\")\n\tPdhCloseQuery                = ModPdh.NewProc(\"PdhCloseQuery\")\n)\n\ntype FILETIME struct {\n\tDwLowDateTime  uint32\n\tDwHighDateTime uint32\n}\n\n// borrowed from net/interface_windows.go\nfunc BytePtrToString(p *uint8) string {\n\ta := (*[10000]uint8)(unsafe.Pointer(p))\n\ti := 0\n\tfor a[i] != 0 {\n\t\ti++\n\t}\n\treturn string(a[:i])\n}\n\n// CounterInfo\n// copied from https://github.com/mackerelio/mackerel-agent/\ntype CounterInfo struct {\n\tPostName    string\n\tCounterName string\n\tCounter     syscall.Handle\n}\n\n// CreateQuery XXX\n// copied from https://github.com/mackerelio/mackerel-agent/\nfunc CreateQuery() (syscall.Handle, error) {\n\tvar query syscall.Handle\n\tr, _, err := PdhOpenQuery.Call(0, 0, uintptr(unsafe.Pointer(&query)))\n\tif r != 0 {\n\t\treturn 0, err\n\t}\n\treturn query, nil\n}\n\n// CreateCounter XXX\nfunc CreateCounter(query syscall.Handle, pname, cname string) (*CounterInfo, error) {\n\tvar counter syscall.Handle\n\tr, _, err := PdhAddCounter.Call(\n\t\tuintptr(query),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(cname))),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&counter)))\n\tif r != 0 {\n\t\treturn nil, err\n\t}\n\treturn &CounterInfo{\n\t\tPostName:    pname,\n\t\tCounterName: cname,\n\t\tCounter:     counter,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mem/mem.go",
    "content": "package mem\n\nimport (\n\t\"encoding/json\"\n)\n\ntype VirtualMemoryStat struct {\n\tTotal       uint64  `json:\"total\"`\n\tAvailable   uint64  `json:\"available\"`\n\tUsed        uint64  `json:\"used\"`\n\tUsedPercent float64 `json:\"used_percent\"`\n\tFree        uint64  `json:\"free\"`\n\tActive      uint64  `json:\"active\"`\n\tInactive    uint64  `json:\"inactive\"`\n\tBuffers     uint64  `json:\"buffers\"`\n\tCached      uint64  `json:\"cached\"`\n\tWired       uint64  `json:\"wired\"`\n\tShared      uint64  `json:\"shared\"`\n}\n\ntype SwapMemoryStat struct {\n\tTotal       uint64  `json:\"total\"`\n\tUsed        uint64  `json:\"used\"`\n\tFree        uint64  `json:\"free\"`\n\tUsedPercent float64 `json:\"used_percent\"`\n\tSin         uint64  `json:\"sin\"`\n\tSout        uint64  `json:\"sout\"`\n}\n\nfunc (m VirtualMemoryStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\nfunc (m SwapMemoryStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mem/mem_darwin.go",
    "content": "// +build darwin\n\npackage mem\n\nimport (\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nfunc getPageSize() (uint64, error) {\n\tout, err := exec.Command(\"pagesize\").Output()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\to := strings.TrimSpace(string(out))\n\tp, err := strconv.ParseUint(o, 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn p, nil\n}\n\n// Runs vm_stat and returns Free and inactive pages\nfunc getVmStat(pagesize uint64, vms *VirtualMemoryStat) error {\n\tout, err := exec.Command(\"vm_stat\").Output()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn parseVmStat(string(out), pagesize, vms)\n}\n\nfunc parseVmStat(out string, pagesize uint64, vms *VirtualMemoryStat) error {\n\tvar err error\n\n\tlines := strings.Split(out, \"\\n\")\n\tfor _, line := range lines {\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey := strings.TrimSpace(fields[0])\n\t\tvalue := strings.Trim(fields[1], \" .\")\n\t\tswitch key {\n\t\tcase \"Pages free\":\n\t\t\tfree, e := strconv.ParseUint(value, 10, 64)\n\t\t\tif e != nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tvms.Free = free * pagesize\n\t\tcase \"Pages inactive\":\n\t\t\tinactive, e := strconv.ParseUint(value, 10, 64)\n\t\t\tif e != nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tvms.Cached += inactive * pagesize\n\t\t\tvms.Inactive = inactive * pagesize\n\t\tcase \"Pages active\":\n\t\t\tactive, e := strconv.ParseUint(value, 10, 64)\n\t\t\tif e != nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tvms.Active = active * pagesize\n\t\tcase \"Pages wired down\":\n\t\t\twired, e := strconv.ParseUint(value, 10, 64)\n\t\t\tif e != nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tvms.Wired = wired * pagesize\n\t\tcase \"Pages purgeable\":\n\t\t\tpurgeable, e := strconv.ParseUint(value, 10, 64)\n\t\t\tif e != nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tvms.Cached += purgeable * pagesize\n\t\t}\n\t}\n\treturn err\n}\n\n// VirtualMemory returns VirtualmemoryStat.\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\tret := &VirtualMemoryStat{}\n\n\tp, err := getPageSize()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tt, err := common.DoSysctrl(\"hw.memsize\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttotal, err := strconv.ParseUint(t[0], 10, 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = getVmStat(p, ret)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret.Available = ret.Free + ret.Cached\n\tret.Total = total\n\n\tret.Used = ret.Total - ret.Free\n\tret.UsedPercent = float64(ret.Total-ret.Available) / float64(ret.Total) * 100.0\n\n\treturn ret, nil\n}\n\n// SwapMemory returns swapinfo.\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\tvar ret *SwapMemoryStat\n\n\tswapUsage, err := common.DoSysctrl(\"vm.swapusage\")\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\ttotal := strings.Replace(swapUsage[2], \"M\", \"\", 1)\n\tused := strings.Replace(swapUsage[5], \"M\", \"\", 1)\n\tfree := strings.Replace(swapUsage[8], \"M\", \"\", 1)\n\n\ttotal_v, err := strconv.ParseFloat(total, 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tused_v, err := strconv.ParseFloat(used, 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfree_v, err := strconv.ParseFloat(free, 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tu := float64(0)\n\tif total_v != 0 {\n\t\tu = ((total_v - free_v) / total_v) * 100.0\n\t}\n\n\t// vm.swapusage shows \"M\", multiply 1000\n\tret = &SwapMemoryStat{\n\t\tTotal:       uint64(total_v * 1000),\n\t\tUsed:        uint64(used_v * 1000),\n\t\tFree:        uint64(free_v * 1000),\n\t\tUsedPercent: u,\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mem/mem_freebsd.go",
    "content": "// +build freebsd\n\npackage mem\n\nimport (\n\t\"errors\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\tpageSize, err := common.DoSysctrl(\"vm.stats.vm.v_page_size\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp, err := strconv.ParseUint(pageSize[0], 10, 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpageCount, err := common.DoSysctrl(\"vm.stats.vm.v_page_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfree, err := common.DoSysctrl(\"vm.stats.vm.v_free_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tactive, err := common.DoSysctrl(\"vm.stats.vm.v_active_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinactive, err := common.DoSysctrl(\"vm.stats.vm.v_inactive_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcache, err := common.DoSysctrl(\"vm.stats.vm.v_cache_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuffer, err := common.DoSysctrl(\"vfs.bufspace\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\twired, err := common.DoSysctrl(\"vm.stats.vm.v_wire_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tparsed := make([]uint64, 0, 7)\n\tvv := []string{\n\t\tpageCount[0],\n\t\tfree[0],\n\t\tactive[0],\n\t\tinactive[0],\n\t\tcache[0],\n\t\tbuffer[0],\n\t\twired[0],\n\t}\n\tfor _, target := range vv {\n\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparsed = append(parsed, t)\n\t}\n\n\tret := &VirtualMemoryStat{\n\t\tTotal:    parsed[0] * p,\n\t\tFree:     parsed[1] * p,\n\t\tActive:   parsed[2] * p,\n\t\tInactive: parsed[3] * p,\n\t\tCached:   parsed[4] * p,\n\t\tBuffers:  parsed[5],\n\t\tWired:    parsed[6] * p,\n\t}\n\n\tret.Available = ret.Inactive + ret.Cached + ret.Free\n\tret.Used = ret.Active + ret.Wired + ret.Cached\n\tret.UsedPercent = float64(ret.Total-ret.Available) / float64(ret.Total) * 100.0\n\n\treturn ret, nil\n}\n\n// Return swapinfo\n// FreeBSD can have multiple swap devices. but use only first device\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\tout, err := exec.Command(\"swapinfo\").Output()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, line := range strings.Split(string(out), \"\\n\") {\n\t\tvalues := strings.Fields(line)\n\t\t// skip title line\n\t\tif len(values) == 0 || values[0] == \"Device\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tu := strings.Replace(values[4], \"%\", \"\", 1)\n\t\ttotal_v, err := strconv.ParseUint(values[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tused_v, err := strconv.ParseUint(values[2], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfree_v, err := strconv.ParseUint(values[3], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tup_v, err := strconv.ParseFloat(u, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn &SwapMemoryStat{\n\t\t\tTotal:       total_v,\n\t\t\tUsed:        used_v,\n\t\t\tFree:        free_v,\n\t\t\tUsedPercent: up_v,\n\t\t}, nil\n\t}\n\n\treturn nil, errors.New(\"no swap devices found\")\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mem/mem_linux.go",
    "content": "// +build linux\n\npackage mem\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\tfilename := common.HostProc(\"meminfo\")\n\tlines, _ := common.ReadLines(filename)\n\t// flag if MemAvailable is in /proc/meminfo (kernel 3.14+)\n\tmemavail := false\n\n\tret := &VirtualMemoryStat{}\n\tfor _, line := range lines {\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey := strings.TrimSpace(fields[0])\n\t\tvalue := strings.TrimSpace(fields[1])\n\t\tvalue = strings.Replace(value, \" kB\", \"\", -1)\n\n\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tswitch key {\n\t\tcase \"MemTotal\":\n\t\t\tret.Total = t * 1024\n\t\tcase \"MemFree\":\n\t\t\tret.Free = t * 1024\n\t\tcase \"MemAvailable\":\n\t\t\tmemavail = true\n\t\t\tret.Available = t * 1024\n\t\tcase \"Buffers\":\n\t\t\tret.Buffers = t * 1024\n\t\tcase \"Cached\":\n\t\t\tret.Cached = t * 1024\n\t\tcase \"Active\":\n\t\t\tret.Active = t * 1024\n\t\tcase \"Inactive\":\n\t\t\tret.Inactive = t * 1024\n\t\t}\n\t}\n\tif !memavail {\n\t\tret.Available = ret.Free + ret.Buffers + ret.Cached\n\t}\n\tret.Used = ret.Total - ret.Free\n\tret.UsedPercent = float64(ret.Total-ret.Available) / float64(ret.Total) * 100.0\n\n\treturn ret, nil\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\tsysinfo := &syscall.Sysinfo_t{}\n\n\tif err := syscall.Sysinfo(sysinfo); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &SwapMemoryStat{\n\t\tTotal: uint64(sysinfo.Totalswap),\n\t\tFree:  uint64(sysinfo.Freeswap),\n\t}\n\tret.Used = ret.Total - ret.Free\n\t//check Infinity\n\tif ret.Total != 0 {\n\t\tret.UsedPercent = float64(ret.Total-ret.Free) / float64(ret.Total) * 100.0\n\t} else {\n\t\tret.UsedPercent = 0\n\t}\n\tfilename := common.HostProc(\"vmstat\")\n\tlines, _ := common.ReadLines(filename)\n\tfor _, l := range lines {\n\t\tfields := strings.Fields(l)\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch fields[0] {\n\t\tcase \"pswpin\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.Sin = value * 4 * 1024\n\t\tcase \"pswpout\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.Sout = value * 4 * 1024\n\t\t}\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mem/mem_windows.go",
    "content": "// +build windows\n\npackage mem\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nvar (\n\tprocGlobalMemoryStatusEx = common.Modkernel32.NewProc(\"GlobalMemoryStatusEx\")\n)\n\ntype MEMORYSTATUSEX struct {\n\tcbSize                  uint32\n\tdwMemoryLoad            uint32\n\tullTotalPhys            uint64 // in bytes\n\tullAvailPhys            uint64\n\tullTotalPageFile        uint64\n\tullAvailPageFile        uint64\n\tullTotalVirtual         uint64\n\tullAvailVirtual         uint64\n\tullAvailExtendedVirtual uint64\n}\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\tvar memInfo MEMORYSTATUSEX\n\tmemInfo.cbSize = uint32(unsafe.Sizeof(memInfo))\n\tmem, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memInfo)))\n\tif mem == 0 {\n\t\treturn nil, syscall.GetLastError()\n\t}\n\n\tret := &VirtualMemoryStat{\n\t\tTotal:       memInfo.ullTotalPhys,\n\t\tAvailable:   memInfo.ullAvailPhys,\n\t\tUsedPercent: float64(memInfo.dwMemoryLoad),\n\t}\n\n\tret.Used = ret.Total - ret.Available\n\treturn ret, nil\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\tret := &SwapMemoryStat{}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/mktypes.sh",
    "content": "\nDIRS=\"cpu disk docker host load mem net process\"\n\nGOOS=`uname | tr '[:upper:]' '[:lower:]'`\nARCH=`uname -m`\n\ncase $ARCH in\n\tamd64)\n\t\tGOARCH=\"amd64\"\n\t\t;;\n\tx86_64)\n\t\tGOARCH=\"amd64\"\n\t\t;;\n\ti386)\n\t\tGOARCH=\"386\"\n\t\t;;\n\ti686)\n\t\tGOARCH=\"386\"\n\t\t;;\n\tarm)\n\t\tGOARCH=\"arm\"\n\t\t;;\n\t*)\n\t\techo \"unknown arch: $ARCH\"\n\t\texit 1\nesac\n\nfor DIR in $DIRS\ndo\n\tif [ -e ${DIR}/types_${GOOS}.go ]; then\n\t\techo \"// +build $GOOS\" > ${DIR}/${DIR}_${GOOS}_${GOARCH}.go\n\t\techo \"// +build $GOARCH\" >> ${DIR}/${DIR}_${GOOS}_${GOARCH}.go\n\t\tgo tool cgo -godefs ${DIR}/types_${GOOS}.go >> ${DIR}/${DIR}_${GOOS}_${GOARCH}.go\n\tfi\ndone\n\n\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net.go",
    "content": "package net\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nvar invoke common.Invoker\n\nfunc init() {\n\tinvoke = common.Invoke{}\n}\n\ntype NetIOCountersStat struct {\n\tName        string `json:\"name\"`         // interface name\n\tBytesSent   uint64 `json:\"bytes_sent\"`   // number of bytes sent\n\tBytesRecv   uint64 `json:\"bytes_recv\"`   // number of bytes received\n\tPacketsSent uint64 `json:\"packets_sent\"` // number of packets sent\n\tPacketsRecv uint64 `json:\"packets_recv\"` // number of packets received\n\tErrin       uint64 `json:\"errin\"`        // total number of errors while receiving\n\tErrout      uint64 `json:\"errout\"`       // total number of errors while sending\n\tDropin      uint64 `json:\"dropin\"`       // total number of incoming packets which were dropped\n\tDropout     uint64 `json:\"dropout\"`      // total number of outgoing packets which were dropped (always 0 on OSX and BSD)\n}\n\n// Addr is implemented compatibility to psutil\ntype Addr struct {\n\tIP   string `json:\"ip\"`\n\tPort uint32 `json:\"port\"`\n}\n\ntype NetConnectionStat struct {\n\tFd     uint32 `json:\"fd\"`\n\tFamily uint32 `json:\"family\"`\n\tType   uint32 `json:\"type\"`\n\tLaddr  Addr   `json:\"localaddr\"`\n\tRaddr  Addr   `json:\"remoteaddr\"`\n\tStatus string `json:\"status\"`\n\tPid    int32  `json:\"pid\"`\n}\n\n// System wide stats about different network protocols\ntype NetProtoCountersStat struct {\n\tProtocol string           `json:\"protocol\"`\n\tStats    map[string]int64 `json:\"stats\"`\n}\n\n// NetInterfaceAddr is designed for represent interface addresses\ntype NetInterfaceAddr struct {\n\tAddr string `json:\"addr\"`\n}\n\ntype NetInterfaceStat struct {\n\tMTU          int                `json:\"mtu\"`          // maximum transmission unit\n\tName         string             `json:\"name\"`         // e.g., \"en0\", \"lo0\", \"eth0.100\"\n\tHardwareAddr string             `json:\"hardwareaddr\"` // IEEE MAC-48, EUI-48 and EUI-64 form\n\tFlags        []string           `json:\"flags\"`        // e.g., FlagUp, FlagLoopback, FlagMulticast\n\tAddrs        []NetInterfaceAddr `json:\"addrs\"`\n}\n\ntype NetFilterStat struct {\n\tConnTrackCount int64 `json:\"conntrack_count\"`\n\tConnTrackMax   int64 `json:\"conntrack_max\"`\n}\n\nvar constMap = map[string]int{\n\t\"TCP\":  syscall.SOCK_STREAM,\n\t\"UDP\":  syscall.SOCK_DGRAM,\n\t\"IPv4\": syscall.AF_INET,\n\t\"IPv6\": syscall.AF_INET6,\n}\n\nfunc (n NetIOCountersStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n NetConnectionStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n NetProtoCountersStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (a Addr) String() string {\n\ts, _ := json.Marshal(a)\n\treturn string(s)\n}\n\nfunc (n NetInterfaceStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n NetInterfaceAddr) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc NetInterfaces() ([]NetInterfaceStat, error) {\n\tis, err := net.Interfaces()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]NetInterfaceStat, 0, len(is))\n\tfor _, ifi := range is {\n\n\t\tvar flags []string\n\t\tif ifi.Flags&net.FlagUp != 0 {\n\t\t\tflags = append(flags, \"up\")\n\t\t}\n\t\tif ifi.Flags&net.FlagBroadcast != 0 {\n\t\t\tflags = append(flags, \"broadcast\")\n\t\t}\n\t\tif ifi.Flags&net.FlagLoopback != 0 {\n\t\t\tflags = append(flags, \"loopback\")\n\t\t}\n\t\tif ifi.Flags&net.FlagPointToPoint != 0 {\n\t\t\tflags = append(flags, \"pointtopoint\")\n\t\t}\n\t\tif ifi.Flags&net.FlagMulticast != 0 {\n\t\t\tflags = append(flags, \"multicast\")\n\t\t}\n\n\t\tr := NetInterfaceStat{\n\t\t\tName:         ifi.Name,\n\t\t\tMTU:          ifi.MTU,\n\t\t\tHardwareAddr: ifi.HardwareAddr.String(),\n\t\t\tFlags:        flags,\n\t\t}\n\t\taddrs, err := ifi.Addrs()\n\t\tif err == nil {\n\t\t\tr.Addrs = make([]NetInterfaceAddr, 0, len(addrs))\n\t\t\tfor _, addr := range addrs {\n\t\t\t\tr.Addrs = append(r.Addrs, NetInterfaceAddr{\n\t\t\t\t\tAddr: addr.String(),\n\t\t\t\t})\n\t\t\t}\n\n\t\t}\n\t\tret = append(ret, r)\n\t}\n\n\treturn ret, nil\n}\n\nfunc getNetIOCountersAll(n []NetIOCountersStat) ([]NetIOCountersStat, error) {\n\tr := NetIOCountersStat{\n\t\tName: \"all\",\n\t}\n\tfor _, nic := range n {\n\t\tr.BytesRecv += nic.BytesRecv\n\t\tr.PacketsRecv += nic.PacketsRecv\n\t\tr.Errin += nic.Errin\n\t\tr.Dropin += nic.Dropin\n\t\tr.BytesSent += nic.BytesSent\n\t\tr.PacketsSent += nic.PacketsSent\n\t\tr.Errout += nic.Errout\n\t\tr.Dropout += nic.Dropout\n\t}\n\n\treturn []NetIOCountersStat{r}, nil\n}\n\nfunc parseNetLine(line string) (NetConnectionStat, error) {\n\tf := strings.Fields(line)\n\tif len(f) < 9 {\n\t\treturn NetConnectionStat{}, fmt.Errorf(\"wrong line,%s\", line)\n\t}\n\n\tpid, err := strconv.Atoi(f[1])\n\tif err != nil {\n\t\treturn NetConnectionStat{}, err\n\t}\n\tfd, err := strconv.Atoi(strings.Trim(f[3], \"u\"))\n\tif err != nil {\n\t\treturn NetConnectionStat{}, fmt.Errorf(\"unknown fd, %s\", f[3])\n\t}\n\tnetFamily, ok := constMap[f[4]]\n\tif !ok {\n\t\treturn NetConnectionStat{}, fmt.Errorf(\"unknown family, %s\", f[4])\n\t}\n\tnetType, ok := constMap[f[7]]\n\tif !ok {\n\t\treturn NetConnectionStat{}, fmt.Errorf(\"unknown type, %s\", f[7])\n\t}\n\n\tladdr, raddr, err := parseNetAddr(f[8])\n\tif err != nil {\n\t\treturn NetConnectionStat{}, fmt.Errorf(\"failed to parse netaddr, %s\", f[8])\n\t}\n\n\tn := NetConnectionStat{\n\t\tFd:     uint32(fd),\n\t\tFamily: uint32(netFamily),\n\t\tType:   uint32(netType),\n\t\tLaddr:  laddr,\n\t\tRaddr:  raddr,\n\t\tPid:    int32(pid),\n\t}\n\tif len(f) == 10 {\n\t\tn.Status = strings.Trim(f[9], \"()\")\n\t}\n\n\treturn n, nil\n}\n\nfunc parseNetAddr(line string) (laddr Addr, raddr Addr, err error) {\n\tparse := func(l string) (Addr, error) {\n\t\thost, port, err := net.SplitHostPort(l)\n\t\tif err != nil {\n\t\t\treturn Addr{}, fmt.Errorf(\"wrong addr, %s\", l)\n\t\t}\n\t\tlport, err := strconv.Atoi(port)\n\t\tif err != nil {\n\t\t\treturn Addr{}, err\n\t\t}\n\t\treturn Addr{IP: host, Port: uint32(lport)}, nil\n\t}\n\n\taddrs := strings.Split(line, \"->\")\n\tif len(addrs) == 0 {\n\t\treturn laddr, raddr, fmt.Errorf(\"wrong netaddr, %s\", line)\n\t}\n\tladdr, err = parse(addrs[0])\n\tif len(addrs) == 2 { // remote addr exists\n\t\traddr, err = parse(addrs[1])\n\t\tif err != nil {\n\t\t\treturn laddr, raddr, err\n\t\t}\n\t}\n\n\treturn laddr, raddr, err\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net_darwin.go",
    "content": "// +build darwin\n\npackage net\n\nimport (\n\t\"errors\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\n// example of netstat -idbn output on yosemite\n// Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop\n// lo0   16384 <Link#1>                        869107     0  169411755   869107     0  169411755     0   0\n// lo0   16384 ::1/128     ::1                 869107     -  169411755   869107     -  169411755     -   -\n// lo0   16384 127           127.0.0.1         869107     -  169411755   869107     -  169411755     -   -\nfunc NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {\n\tout, err := exec.Command(\"/usr/sbin/netstat\", \"-ibdnW\").Output()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlines := strings.Split(string(out), \"\\n\")\n\tret := make([]NetIOCountersStat, 0, len(lines)-1)\n\texists := make([]string, 0, len(ret))\n\n\tfor _, line := range lines {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 || values[0] == \"Name\" {\n\t\t\t// skip first line\n\t\t\tcontinue\n\t\t}\n\t\tif common.StringsHas(exists, values[0]) {\n\t\t\t// skip if already get\n\t\t\tcontinue\n\t\t}\n\t\texists = append(exists, values[0])\n\n\t\tbase := 1\n\t\t// sometimes Address is ommitted\n\t\tif len(values) < 11 {\n\t\t\tbase = 0\n\t\t}\n\n\t\tparsed := make([]uint64, 0, 7)\n\t\tvv := []string{\n\t\t\tvalues[base+3], // Ipkts == PacketsRecv\n\t\t\tvalues[base+4], // Ierrs == Errin\n\t\t\tvalues[base+5], // Ibytes == BytesRecv\n\t\t\tvalues[base+6], // Opkts == PacketsSent\n\t\t\tvalues[base+7], // Oerrs == Errout\n\t\t\tvalues[base+8], // Obytes == BytesSent\n\t\t}\n\t\tif len(values) == 12 {\n\t\t\tvv = append(vv, values[base+10])\n\t\t}\n\n\t\tfor _, target := range vv {\n\t\t\tif target == \"-\" {\n\t\t\t\tparsed = append(parsed, 0)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tparsed = append(parsed, t)\n\t\t}\n\n\t\tn := NetIOCountersStat{\n\t\t\tName:        values[0],\n\t\t\tPacketsRecv: parsed[0],\n\t\t\tErrin:       parsed[1],\n\t\t\tBytesRecv:   parsed[2],\n\t\t\tPacketsSent: parsed[3],\n\t\t\tErrout:      parsed[4],\n\t\t\tBytesSent:   parsed[5],\n\t\t}\n\t\tif len(parsed) == 7 {\n\t\t\tn.Dropout = parsed[6]\n\t\t}\n\t\tret = append(ret, n)\n\t}\n\n\tif pernic == false {\n\t\treturn getNetIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\n// NetIOCountersByFile is an method which is added just a compatibility for linux.\nfunc NetIOCountersByFile(pernic bool, filename string) ([]NetIOCountersStat, error) {\n\treturn NetIOCounters(pernic)\n}\n\nfunc NetFilterCounters() ([]NetFilterStat, error) {\n\treturn nil, errors.New(\"NetFilterCounters not implemented for darwin\")\n}\n\n// NetProtoCounters returns network statistics for the entire system\n// If protocols is empty then all protocols are returned, otherwise\n// just the protocols in the list are returned.\n// Not Implemented for Darwin\nfunc NetProtoCounters(protocols []string) ([]NetProtoCountersStat, error) {\n\treturn nil, errors.New(\"NetProtoCounters not implemented for darwin\")\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net_freebsd.go",
    "content": "// +build freebsd\n\npackage net\n\nimport (\n\t\"errors\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nfunc NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {\n\tout, err := exec.Command(\"/usr/bin/netstat\", \"-ibdnW\").Output()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlines := strings.Split(string(out), \"\\n\")\n\tret := make([]NetIOCountersStat, 0, len(lines)-1)\n\texists := make([]string, 0, len(ret))\n\n\tfor _, line := range lines {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 || values[0] == \"Name\" {\n\t\t\tcontinue\n\t\t}\n\t\tif common.StringsHas(exists, values[0]) {\n\t\t\t// skip if already get\n\t\t\tcontinue\n\t\t}\n\t\texists = append(exists, values[0])\n\n\t\tif len(values) < 12 {\n\t\t\tcontinue\n\t\t}\n\t\tbase := 1\n\t\t// sometimes Address is ommitted\n\t\tif len(values) < 13 {\n\t\t\tbase = 0\n\t\t}\n\n\t\tparsed := make([]uint64, 0, 8)\n\t\tvv := []string{\n\t\t\tvalues[base+3],  // PacketsRecv\n\t\t\tvalues[base+4],  // Errin\n\t\t\tvalues[base+5],  // Dropin\n\t\t\tvalues[base+6],  // BytesRecvn\n\t\t\tvalues[base+7],  // PacketSent\n\t\t\tvalues[base+8],  // Errout\n\t\t\tvalues[base+9],  // BytesSent\n\t\t\tvalues[base+11], // Dropout\n\t\t}\n\t\tfor _, target := range vv {\n\t\t\tif target == \"-\" {\n\t\t\t\tparsed = append(parsed, 0)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tparsed = append(parsed, t)\n\t\t}\n\n\t\tn := NetIOCountersStat{\n\t\t\tName:        values[0],\n\t\t\tPacketsRecv: parsed[0],\n\t\t\tErrin:       parsed[1],\n\t\t\tDropin:      parsed[2],\n\t\t\tBytesRecv:   parsed[3],\n\t\t\tPacketsSent: parsed[4],\n\t\t\tErrout:      parsed[5],\n\t\t\tBytesSent:   parsed[6],\n\t\t\tDropout:     parsed[7],\n\t\t}\n\t\tret = append(ret, n)\n\t}\n\n\tif pernic == false {\n\t\treturn getNetIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\n// NetIOCountersByFile is an method which is added just a compatibility for linux.\nfunc NetIOCountersByFile(pernic bool, filename string) ([]NetIOCountersStat, error) {\n\treturn NetIOCounters(pernic)\n}\n\nfunc NetFilterCounters() ([]NetFilterStat, error) {\n\treturn nil, errors.New(\"NetFilterCounters not implemented for freebsd\")\n}\n\n// NetProtoCounters returns network statistics for the entire system\n// If protocols is empty then all protocols are returned, otherwise\n// just the protocols in the list are returned.\n// Not Implemented for FreeBSD\nfunc NetProtoCounters(protocols []string) ([]NetProtoCountersStat, error) {\n\treturn nil, errors.New(\"NetProtoCounters not implemented for freebsd\")\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net_linux.go",
    "content": "// +build linux\n\npackage net\n\nimport (\n\t\"errors\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\n// NetIOCounters returnes network I/O statistics for every network\n// interface installed on the system.  If pernic argument is false,\n// return only sum of all information (which name is 'all'). If true,\n// every network interface installed on the system is returned\n// separately.\nfunc NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {\n\tfilename := common.HostProc(\"net/dev\")\n\treturn NetIOCountersByFile(pernic, filename)\n}\n\nfunc NetIOCountersByFile(pernic bool, filename string) ([]NetIOCountersStat, error) {\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tstatlen := len(lines) - 1\n\n\tret := make([]NetIOCountersStat, 0, statlen)\n\n\tfor _, line := range lines[2:] {\n\t\tparts := strings.SplitN(line, \":\", 2)\n\t\tif len(parts) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tinterfaceName := strings.TrimSpace(parts[0])\n\t\tif interfaceName == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tfields := strings.Fields(strings.TrimSpace(parts[1]))\n\t\tbytesRecv, err := strconv.ParseUint(fields[0], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tpacketsRecv, err := strconv.ParseUint(fields[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\terrIn, err := strconv.ParseUint(fields[2], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tdropIn, err := strconv.ParseUint(fields[3], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tbytesSent, err := strconv.ParseUint(fields[8], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tpacketsSent, err := strconv.ParseUint(fields[9], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\terrOut, err := strconv.ParseUint(fields[10], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tdropOut, err := strconv.ParseUint(fields[13], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\n\t\tnic := NetIOCountersStat{\n\t\t\tName:        interfaceName,\n\t\t\tBytesRecv:   bytesRecv,\n\t\t\tPacketsRecv: packetsRecv,\n\t\t\tErrin:       errIn,\n\t\t\tDropin:      dropIn,\n\t\t\tBytesSent:   bytesSent,\n\t\t\tPacketsSent: packetsSent,\n\t\t\tErrout:      errOut,\n\t\t\tDropout:     dropOut,\n\t\t}\n\t\tret = append(ret, nic)\n\t}\n\n\tif pernic == false {\n\t\treturn getNetIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\nvar netProtocols = []string{\n\t\"ip\",\n\t\"icmp\",\n\t\"icmpmsg\",\n\t\"tcp\",\n\t\"udp\",\n\t\"udplite\",\n}\n\n// NetProtoCounters returns network statistics for the entire system\n// If protocols is empty then all protocols are returned, otherwise\n// just the protocols in the list are returned.\n// Available protocols:\n//   ip,icmp,icmpmsg,tcp,udp,udplite\nfunc NetProtoCounters(protocols []string) ([]NetProtoCountersStat, error) {\n\tif len(protocols) == 0 {\n\t\tprotocols = netProtocols\n\t}\n\n\tstats := make([]NetProtoCountersStat, 0, len(protocols))\n\tprotos := make(map[string]bool, len(protocols))\n\tfor _, p := range protocols {\n\t\tprotos[p] = true\n\t}\n\n\tfilename := common.HostProc(\"net/snmp\")\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlinecount := len(lines)\n\tfor i := 0; i < linecount; i++ {\n\t\tline := lines[i]\n\t\tr := strings.IndexRune(line, ':')\n\t\tif r == -1 {\n\t\t\treturn nil, errors.New(filename + \" is not fomatted correctly, expected ':'.\")\n\t\t}\n\t\tproto := strings.ToLower(line[:r])\n\t\tif !protos[proto] {\n\t\t\t// skip protocol and data line\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\t// Read header line\n\t\tstatNames := strings.Split(line[r+2:], \" \")\n\n\t\t// Read data line\n\t\ti++\n\t\tstatValues := strings.Split(lines[i][r+2:], \" \")\n\t\tif len(statNames) != len(statValues) {\n\t\t\treturn nil, errors.New(filename + \" is not fomatted correctly, expected same number of columns.\")\n\t\t}\n\t\tstat := NetProtoCountersStat{\n\t\t\tProtocol: proto,\n\t\t\tStats:    make(map[string]int64, len(statNames)),\n\t\t}\n\t\tfor j := range statNames {\n\t\t\tvalue, err := strconv.ParseInt(statValues[j], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tstat.Stats[statNames[j]] = value\n\t\t}\n\t\tstats = append(stats, stat)\n\t}\n\treturn stats, nil\n}\n\n// NetFilterCounters returns iptables conntrack statistics\n// the currently in use conntrack count and the max.\n// If the file does not exist or is invalid it will return nil.\nfunc NetFilterCounters() ([]NetFilterStat, error) {\n\tcountfile := common.HostProc(\"sys/net/netfilter/nf_conntrack_count\")\n\tmaxfile := common.HostProc(\"sys/net/netfilter/nf_conntrack_max\")\n\n\tcount, err := common.ReadInts(countfile)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstats := make([]NetFilterStat, 0, 1)\n\n\tmax, err := common.ReadInts(maxfile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpayload := NetFilterStat{\n\t\tConnTrackCount: count[0],\n\t\tConnTrackMax:   max[0],\n\t}\n\n\tstats = append(stats, payload)\n\treturn stats, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net_unix.go",
    "content": "// +build linux freebsd darwin\n\npackage net\n\nimport (\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\n// Return a list of network connections opened.\nfunc NetConnections(kind string) ([]NetConnectionStat, error) {\n\treturn NetConnectionsPid(kind, 0)\n}\n\n// Return a list of network connections opened by a process.\nfunc NetConnectionsPid(kind string, pid int32) ([]NetConnectionStat, error) {\n\tvar ret []NetConnectionStat\n\n\targs := []string{\"-i\"}\n\tswitch strings.ToLower(kind) {\n\tdefault:\n\t\tfallthrough\n\tcase \"\":\n\t\tfallthrough\n\tcase \"all\":\n\t\tfallthrough\n\tcase \"inet\":\n\t\targs = append(args, \"tcp\", \"-i\", \"udp\")\n\tcase \"inet4\":\n\t\targs = append(args, \"4\")\n\tcase \"inet6\":\n\t\targs = append(args, \"6\")\n\tcase \"tcp\":\n\t\targs = append(args, \"tcp\")\n\tcase \"tcp4\":\n\t\targs = append(args, \"4tcp\")\n\tcase \"tcp6\":\n\t\targs = append(args, \"6tcp\")\n\tcase \"udp\":\n\t\targs = append(args, \"udp\")\n\tcase \"udp4\":\n\t\targs = append(args, \"6udp\")\n\tcase \"udp6\":\n\t\targs = append(args, \"6udp\")\n\tcase \"unix\":\n\t\treturn ret, common.NotImplementedError\n\t}\n\n\tr, err := common.CallLsof(invoke, pid, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, rr := range r {\n\t\tif strings.HasPrefix(rr, \"COMMAND\") {\n\t\t\tcontinue\n\t\t}\n\t\tn, err := parseNetLine(rr)\n\t\tif err != nil {\n\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, n)\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/net/net_windows.go",
    "content": "// +build windows\n\npackage net\n\nimport (\n\t\"errors\"\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/internal/common\"\n)\n\nvar (\n\tmodiphlpapi             = syscall.NewLazyDLL(\"iphlpapi.dll\")\n\tprocGetExtendedTcpTable = modiphlpapi.NewProc(\"GetExtendedTcpTable\")\n\tprocGetExtendedUdpTable = modiphlpapi.NewProc(\"GetExtendedUdpTable\")\n)\n\nconst (\n\tTCPTableBasicListener = iota\n\tTCPTableBasicConnections\n\tTCPTableBasicAll\n\tTCPTableOwnerPIDListener\n\tTCPTableOwnerPIDConnections\n\tTCPTableOwnerPIDAll\n\tTCPTableOwnerModuleListener\n\tTCPTableOwnerModuleConnections\n\tTCPTableOwnerModuleAll\n)\n\nfunc NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {\n\tifs, err := net.Interfaces()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tai, err := getAdapterList()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar ret []NetIOCountersStat\n\n\tfor _, ifi := range ifs {\n\t\tname := ifi.Name\n\t\tfor ; ai != nil; ai = ai.Next {\n\t\t\tname = common.BytePtrToString(&ai.Description[0])\n\t\t\tc := NetIOCountersStat{\n\t\t\t\tName: name,\n\t\t\t}\n\n\t\t\trow := syscall.MibIfRow{Index: ai.Index}\n\t\t\te := syscall.GetIfEntry(&row)\n\t\t\tif e != nil {\n\t\t\t\treturn nil, os.NewSyscallError(\"GetIfEntry\", e)\n\t\t\t}\n\t\t\tc.BytesSent = uint64(row.OutOctets)\n\t\t\tc.BytesRecv = uint64(row.InOctets)\n\t\t\tc.PacketsSent = uint64(row.OutUcastPkts)\n\t\t\tc.PacketsRecv = uint64(row.InUcastPkts)\n\t\t\tc.Errin = uint64(row.InErrors)\n\t\t\tc.Errout = uint64(row.OutErrors)\n\t\t\tc.Dropin = uint64(row.InDiscards)\n\t\t\tc.Dropout = uint64(row.OutDiscards)\n\n\t\t\tret = append(ret, c)\n\t\t}\n\t}\n\n\tif pernic == false {\n\t\treturn getNetIOCountersAll(ret)\n\t}\n\treturn ret, nil\n}\n\n// NetIOCountersByFile is an method which is added just a compatibility for linux.\nfunc NetIOCountersByFile(pernic bool, filename string) ([]NetIOCountersStat, error) {\n\treturn NetIOCounters(pernic)\n}\n\n// Return a list of network connections opened by a process\nfunc NetConnections(kind string) ([]NetConnectionStat, error) {\n\tvar ret []NetConnectionStat\n\n\treturn ret, common.NotImplementedError\n}\n\n// borrowed from src/pkg/net/interface_windows.go\nfunc getAdapterList() (*syscall.IpAdapterInfo, error) {\n\tb := make([]byte, 1000)\n\tl := uint32(len(b))\n\ta := (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0]))\n\terr := syscall.GetAdaptersInfo(a, &l)\n\tif err == syscall.ERROR_BUFFER_OVERFLOW {\n\t\tb = make([]byte, l)\n\t\ta = (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0]))\n\t\terr = syscall.GetAdaptersInfo(a, &l)\n\t}\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"GetAdaptersInfo\", err)\n\t}\n\treturn a, nil\n}\n\nfunc NetFilterCounters() ([]NetFilterStat, error) {\n\treturn nil, errors.New(\"NetFilterCounters not implemented for windows\")\n}\n\n// NetProtoCounters returns network statistics for the entire system\n// If protocols is empty then all protocols are returned, otherwise\n// just the protocols in the list are returned.\n// Not Implemented for Windows\nfunc NetProtoCounters(protocols []string) ([]NetProtoCountersStat, error) {\n\treturn nil, errors.New(\"NetProtoCounters not implemented for windows\")\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process.go",
    "content": "package process\n\nimport (\n\t\"encoding/json\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/internal/common\"\n\t\"github.com/shirou/gopsutil/mem\"\n)\n\nvar invoke common.Invoker\n\nfunc init() {\n\tinvoke = common.Invoke{}\n}\n\ntype Process struct {\n\tPid            int32 `json:\"pid\"`\n\tname           string\n\tstatus         string\n\tnumCtxSwitches *NumCtxSwitchesStat\n\tuids           []int32\n\tgids           []int32\n\tnumThreads     int32\n\tmemInfo        *MemoryInfoStat\n\n\tlastCPUTimes *cpu.CPUTimesStat\n\tlastCPUTime  time.Time\n}\n\ntype OpenFilesStat struct {\n\tPath string `json:\"path\"`\n\tFd   uint64 `json:\"fd\"`\n}\n\ntype MemoryInfoStat struct {\n\tRSS  uint64 `json:\"rss\"`  // bytes\n\tVMS  uint64 `json:\"vms\"`  // bytes\n\tSwap uint64 `json:\"swap\"` // bytes\n}\n\ntype RlimitStat struct {\n\tResource int32 `json:\"resource\"`\n\tSoft     int32 `json:\"soft\"`\n\tHard     int32 `json:\"hard\"`\n}\n\ntype IOCountersStat struct {\n\tReadCount  uint64 `json:\"read_count\"`\n\tWriteCount uint64 `json:\"write_count\"`\n\tReadBytes  uint64 `json:\"read_bytes\"`\n\tWriteBytes uint64 `json:\"write_bytes\"`\n}\n\ntype NumCtxSwitchesStat struct {\n\tVoluntary   int64 `json:\"voluntary\"`\n\tInvoluntary int64 `json:\"involuntary\"`\n}\n\nfunc (p Process) String() string {\n\ts, _ := json.Marshal(p)\n\treturn string(s)\n}\n\nfunc (o OpenFilesStat) String() string {\n\ts, _ := json.Marshal(o)\n\treturn string(s)\n}\n\nfunc (m MemoryInfoStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\nfunc (r RlimitStat) String() string {\n\ts, _ := json.Marshal(r)\n\treturn string(s)\n}\n\nfunc (i IOCountersStat) String() string {\n\ts, _ := json.Marshal(i)\n\treturn string(s)\n}\n\nfunc (p NumCtxSwitchesStat) String() string {\n\ts, _ := json.Marshal(p)\n\treturn string(s)\n}\n\nfunc PidExists(pid int32) (bool, error) {\n\tpids, err := Pids()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tfor _, i := range pids {\n\t\tif i == pid {\n\t\t\treturn true, err\n\t\t}\n\t}\n\n\treturn false, err\n}\n\n// If interval is 0, return difference from last call(non-blocking).\n// If interval > 0, wait interval sec and return diffrence between start and end.\nfunc (p *Process) CPUPercent(interval time.Duration) (float64, error) {\n\tcpuTimes, err := p.CPUTimes()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tnow := time.Now()\n\n\tif interval > 0 {\n\t\tp.lastCPUTimes = cpuTimes\n\t\tp.lastCPUTime = now\n\t\ttime.Sleep(interval)\n\t\tcpuTimes, err = p.CPUTimes()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t} else {\n\t\tif p.lastCPUTimes == nil {\n\t\t\t// invoked first time\n\t\t\tp.lastCPUTimes = cpuTimes\n\t\t\tp.lastCPUTime = now\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\n\tnumcpu := runtime.NumCPU()\n\tdelta := (now.Sub(p.lastCPUTime).Seconds()) * float64(numcpu)\n\tret := calculatePercent(p.lastCPUTimes, cpuTimes, delta, numcpu)\n\tp.lastCPUTimes = cpuTimes\n\tp.lastCPUTime = now\n\treturn ret, nil\n}\n\nfunc calculatePercent(t1, t2 *cpu.CPUTimesStat, delta float64, numcpu int) float64 {\n\tif delta == 0 {\n\t\treturn 0\n\t}\n\tdelta_proc := t2.Total() - t1.Total()\n\toverall_percent := ((delta_proc / delta) * 100) * float64(numcpu)\n\treturn overall_percent\n}\n\n// MemoryPercent returns how many percent of the total RAM this process uses\nfunc (p *Process) MemoryPercent() (float32, error) {\n\tmachineMemory, err := mem.VirtualMemory()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\ttotal := machineMemory.Total\n\n\tprocessMemory, err := p.MemoryInfo()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tused := processMemory.RSS\n\n\treturn (100 * float32(used) / float32(total)), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_darwin.go",
    "content": "// +build darwin\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/internal/common\"\n\t\"github.com/shirou/gopsutil/net\"\n)\n\n// copied from sys/sysctl.h\nconst (\n\tCTLKern          = 1  // \"high kernel\": proc, limits\n\tKernProc         = 14 // struct: process entries\n\tKernProcPID      = 1  // by process id\n\tKernProcProc     = 8  // only return procs\n\tKernProcAll      = 0  // everything\n\tKernProcPathname = 12 // path to executable\n)\n\nconst (\n\tClockTicks = 100 // C.sysconf(C._SC_CLK_TCK)\n)\n\ntype _Ctype_struct___0 struct {\n\tPad uint64\n}\n\n// MemoryInfoExStat is different between OSes\ntype MemoryInfoExStat struct {\n}\n\ntype MemoryMapsStat struct {\n}\n\nfunc Pids() ([]int32, error) {\n\tvar ret []int32\n\n\tpids, err := callPs(\"pid\", 0, false)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tfor _, pid := range pids {\n\t\tv, err := strconv.Atoi(pid[0])\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tret = append(ret, int32(v))\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) Ppid() (int32, error) {\n\tr, err := callPs(\"ppid\", p.Pid, false)\n\tv, err := strconv.Atoi(r[0][0])\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int32(v), err\n}\nfunc (p *Process) Name() (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn common.IntToString(k.Proc.P_comm[:]), nil\n}\nfunc (p *Process) Exe() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Cmdline() (string, error) {\n\tr, err := callPs(\"command\", p.Pid, false)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.Join(r[0], \" \"), err\n}\nfunc (p *Process) CreateTime() (int64, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Cwd() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Parent() (*Process, error) {\n\trr, err := common.CallLsof(invoke, p.Pid, \"-FR\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, r := range rr {\n\t\tif strings.HasPrefix(r, \"p\") { // skip if process\n\t\t\tcontinue\n\t\t}\n\t\tl := string(r)\n\t\tv, err := strconv.Atoi(strings.Replace(l, \"R\", \"\", 1))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn NewProcess(int32(v))\n\t}\n\treturn nil, fmt.Errorf(\"could not find parent line\")\n}\nfunc (p *Process) Status() (string, error) {\n\tr, err := callPs(\"state\", p.Pid, false)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn r[0][0], err\n}\nfunc (p *Process) Uids() ([]int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// See: http://unix.superglobalmegacorp.com/Net2/newsrc/sys/ucred.h.html\n\tuserEffectiveUID := int32(k.Eproc.Ucred.Uid)\n\n\treturn []int32{userEffectiveUID}, nil\n}\nfunc (p *Process) Gids() ([]int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgids := make([]int32, 0, 3)\n\tgids = append(gids, int32(k.Eproc.Pcred.P_rgid), int32(k.Eproc.Ucred.Ngroups), int32(k.Eproc.Pcred.P_svgid))\n\n\treturn gids, nil\n}\nfunc (p *Process) Terminal() (string, error) {\n\treturn \"\", common.NotImplementedError\n\t/*\n\t\tk, err := p.getKProc()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tttyNr := uint64(k.Eproc.Tdev)\n\t\ttermmap, err := getTerminalMap()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\treturn termmap[ttyNr], nil\n\t*/\n}\nfunc (p *Process) Nice() (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(k.Proc.P_nice), nil\n}\nfunc (p *Process) IOnice() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Rlimit() ([]RlimitStat, error) {\n\tvar rlimit []RlimitStat\n\treturn rlimit, common.NotImplementedError\n}\nfunc (p *Process) IOCounters() (*IOCountersStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) NumCtxSwitches() (*NumCtxSwitchesStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) NumFDs() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) NumThreads() (int32, error) {\n\tr, err := callPs(\"utime,stime\", p.Pid, true)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(len(r)), nil\n}\nfunc (p *Process) Threads() (map[string]string, error) {\n\tret := make(map[string]string, 0)\n\treturn ret, common.NotImplementedError\n}\n\nfunc convertCpuTimes(s string) (ret float64, err error) {\n\tvar t int\n\tvar _tmp string\n\tif strings.Contains(s, \":\") {\n\t\t_t := strings.Split(s, \":\")\n\t\thour, err := strconv.Atoi(_t[0])\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tt += hour * 60 * 100\n\t\t_tmp = _t[1]\n\t} else {\n\t\t_tmp = s\n\t}\n\n\t_t := strings.Split(_tmp, \".\")\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\th, err := strconv.Atoi(_t[0])\n\tt += h * 100\n\th, err = strconv.Atoi(_t[1])\n\tt += h\n\treturn float64(t) / ClockTicks, nil\n}\nfunc (p *Process) CPUTimes() (*cpu.CPUTimesStat, error) {\n\tr, err := callPs(\"utime,stime\", p.Pid, false)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tutime, err := convertCpuTimes(r[0][0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstime, err := convertCpuTimes(r[0][1])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := &cpu.CPUTimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   utime,\n\t\tSystem: stime,\n\t}\n\treturn ret, nil\n}\nfunc (p *Process) CPUAffinity() ([]int32, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) MemoryInfo() (*MemoryInfoStat, error) {\n\tr, err := callPs(\"rss,vsize,pagein\", p.Pid, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trss, err := strconv.Atoi(r[0][0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvms, err := strconv.Atoi(r[0][1])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpagein, err := strconv.Atoi(r[0][2])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := &MemoryInfoStat{\n\t\tRSS:  uint64(rss) * 1024,\n\t\tVMS:  uint64(vms) * 1024,\n\t\tSwap: uint64(pagein),\n\t}\n\n\treturn ret, nil\n}\nfunc (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Children() ([]*Process, error) {\n\tpids, err := common.CallPgrep(invoke, p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]*Process, 0, len(pids))\n\tfor _, pid := range pids {\n\t\tnp, err := NewProcess(pid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tret = append(ret, np)\n\t}\n\treturn ret, nil\n}\n\nfunc (p *Process) OpenFiles() ([]OpenFilesStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Connections() ([]net.NetConnectionStat, error) {\n\treturn net.NetConnectionsPid(\"all\", p.Pid)\n}\n\nfunc (p *Process) NetIOCounters(pernic bool) ([]net.NetIOCountersStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) IsRunning() (bool, error) {\n\treturn true, common.NotImplementedError\n}\nfunc (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {\n\tvar ret []MemoryMapsStat\n\treturn &ret, common.NotImplementedError\n}\n\nfunc copyParams(k *KinfoProc, p *Process) error {\n\n\treturn nil\n}\n\nfunc processes() ([]Process, error) {\n\tresults := make([]Process, 0, 50)\n\n\tmib := []int32{CTLKern, KernProc, KernProcAll, 0}\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn results, err\n\t}\n\n\t// get kinfo_proc size\n\tk := KinfoProc{}\n\tprocinfoLen := int(unsafe.Sizeof(k))\n\tcount := int(length / uint64(procinfoLen))\n\t/*\n\t\tfmt.Println(length, procinfoLen, count)\n\t\tb := buf[0*procinfoLen : 0*procinfoLen+procinfoLen]\n\t\tfmt.Println(b)\n\t\tkk, err := parseKinfoProc(b)\n\t\tfmt.Printf(\"%#v\", kk)\n\t*/\n\n\t// parse buf to procs\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*procinfoLen : i*procinfoLen+procinfoLen]\n\t\tk, err := parseKinfoProc(b)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tp, err := NewProcess(int32(k.Proc.P_pid))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tcopyParams(&k, p)\n\n\t\tresults = append(results, *p)\n\t}\n\n\treturn results, nil\n}\n\nfunc parseKinfoProc(buf []byte) (KinfoProc, error) {\n\tvar k KinfoProc\n\tbr := bytes.NewReader(buf)\n\n\terr := common.Read(br, binary.LittleEndian, &k)\n\tif err != nil {\n\t\treturn k, err\n\t}\n\n\treturn k, nil\n}\n\n// Returns a proc as defined here:\n// http://unix.superglobalmegacorp.com/Net2/newsrc/sys/kinfo_proc.h.html\nfunc (p *Process) getKProc() (*KinfoProc, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcPID, p.Pid}\n\tprocK := KinfoProc{}\n\tlength := uint64(unsafe.Sizeof(procK))\n\tbuf := make([]byte, length)\n\t_, _, syserr := syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(len(mib)),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif syserr != 0 {\n\t\treturn nil, syserr\n\t}\n\tk, err := parseKinfoProc(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &k, nil\n}\n\nfunc NewProcess(pid int32) (*Process, error) {\n\tp := &Process{Pid: pid}\n\n\treturn p, nil\n}\n\n// call ps command.\n// Return value deletes Header line(you must not input wrong arg).\n// And splited by Space. Caller have responsibility to manage.\n// If passed arg pid is 0, get information from all process.\nfunc callPs(arg string, pid int32, threadOption bool) ([][]string, error) {\n\tbin, err := exec.LookPath(\"ps\")\n\tif err != nil {\n\t\treturn [][]string{}, err\n\t}\n\n\tvar cmd []string\n\tif pid == 0 { // will get from all processes.\n\t\tcmd = []string{\"-ax\", \"-o\", arg}\n\t} else if threadOption {\n\t\tcmd = []string{\"-x\", \"-o\", arg, \"-M\", \"-p\", strconv.Itoa(int(pid))}\n\t} else {\n\t\tcmd = []string{\"-x\", \"-o\", arg, \"-p\", strconv.Itoa(int(pid))}\n\t}\n\tout, err := invoke.Command(bin, cmd...)\n\tif err != nil {\n\t\treturn [][]string{}, err\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\n\tvar ret [][]string\n\tfor _, l := range lines[1:] {\n\t\tvar lr []string\n\t\tfor _, r := range strings.Split(l, \" \") {\n\t\t\tif r == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlr = append(lr, strings.TrimSpace(r))\n\t\t}\n\t\tif len(lr) != 0 {\n\t\t\tret = append(ret, lr)\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_darwin_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\n\npackage process\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype UGid_t uint32\n\ntype KinfoProc struct {\n\tProc  ExternProc\n\tEproc Eproc\n}\n\ntype Eproc struct {\n\tPaddr     *uint64\n\tSess      *Session\n\tPcred     Upcred\n\tUcred     Uucred\n\tPad_cgo_0 [4]byte\n\tVm        Vmspace\n\tPpid      int32\n\tPgid      int32\n\tJobc      int16\n\tPad_cgo_1 [2]byte\n\tTdev      int32\n\tTpgid     int32\n\tPad_cgo_2 [4]byte\n\tTsess     *Session\n\tWmesg     [8]int8\n\tXsize     int32\n\tXrssize   int16\n\tXccount   int16\n\tXswrss    int16\n\tPad_cgo_3 [2]byte\n\tFlag      int32\n\tLogin     [12]int8\n\tSpare     [4]int32\n\tPad_cgo_4 [4]byte\n}\n\ntype Proc struct{}\n\ntype Session struct{}\n\ntype ucred struct {\n\tLink  _Ctype_struct___0\n\tRef   uint64\n\tPosix Posix_cred\n\tLabel *Label\n\tAudit Au_session\n}\n\ntype Uucred struct {\n\tRef       int32\n\tUid       uint32\n\tNgroups   int16\n\tPad_cgo_0 [2]byte\n\tGroups    [16]uint32\n}\n\ntype Upcred struct {\n\tPc_lock   [72]int8\n\tPc_ucred  *ucred\n\tP_ruid    uint32\n\tP_svuid   uint32\n\tP_rgid    uint32\n\tP_svgid   uint32\n\tP_refcnt  int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Vmspace struct {\n\tDummy     int32\n\tPad_cgo_0 [4]byte\n\tDummy2    *int8\n\tDummy3    [5]int32\n\tPad_cgo_1 [4]byte\n\tDummy4    [3]*int8\n}\n\ntype Sigacts struct{}\n\ntype ExternProc struct {\n\tP_un        [16]byte\n\tP_vmspace   uint64\n\tP_sigacts   uint64\n\tPad_cgo_0   [3]byte\n\tP_flag      int32\n\tP_stat      int8\n\tP_pid       int32\n\tP_oppid     int32\n\tP_dupfd     int32\n\tPad_cgo_1   [4]byte\n\tUser_stack  uint64\n\tExit_thread uint64\n\tP_debugger  int32\n\tSigwait     int32\n\tP_estcpu    uint32\n\tP_cpticks   int32\n\tP_pctcpu    uint32\n\tPad_cgo_2   [4]byte\n\tP_wchan     uint64\n\tP_wmesg     uint64\n\tP_swtime    uint32\n\tP_slptime   uint32\n\tP_realtimer Itimerval\n\tP_rtime     Timeval\n\tP_uticks    uint64\n\tP_sticks    uint64\n\tP_iticks    uint64\n\tP_traceflag int32\n\tPad_cgo_3   [4]byte\n\tP_tracep    uint64\n\tP_siglist   int32\n\tPad_cgo_4   [4]byte\n\tP_textvp    uint64\n\tP_holdcnt   int32\n\tP_sigmask   uint32\n\tP_sigignore uint32\n\tP_sigcatch  uint32\n\tP_priority  uint8\n\tP_usrpri    uint8\n\tP_nice      int8\n\tP_comm      [17]int8\n\tPad_cgo_5   [4]byte\n\tP_pgrp      uint64\n\tP_addr      uint64\n\tP_xstat     uint16\n\tP_acflag    uint16\n\tPad_cgo_6   [4]byte\n\tP_ru        uint64\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\ntype Vnode struct{}\n\ntype Pgrp struct{}\n\ntype UserStruct struct{}\n\ntype Au_session struct {\n\tAia_p *AuditinfoAddr\n\tMask  AuMask\n}\n\ntype Posix_cred struct {\n\tUid       uint32\n\tRuid      uint32\n\tSvuid     uint32\n\tNgroups   int16\n\tPad_cgo_0 [2]byte\n\tGroups    [16]uint32\n\tRgid      uint32\n\tSvgid     uint32\n\tGmuid     uint32\n\tFlags     int32\n}\n\ntype Label struct{}\n\ntype AuditinfoAddr struct {\n\tAuid   uint32\n\tMask   AuMask\n\tTermid AuTidAddr\n\tAsid   int32\n\tFlags  uint64\n}\ntype AuMask struct {\n\tSuccess uint32\n\tFailure uint32\n}\ntype AuTidAddr struct {\n\tPort int32\n\tType uint32\n\tAddr [4]uint32\n}\n\ntype UcredQueue struct {\n\tNext *ucred\n\tPrev **ucred\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_freebsd.go",
    "content": "// +build freebsd\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tcpu \"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/internal/common\"\n\tnet \"github.com/shirou/gopsutil/net\"\n)\n\n// MemoryInfoExStat is different between OSes\ntype MemoryInfoExStat struct {\n}\n\ntype MemoryMapsStat struct {\n}\n\nfunc Pids() ([]int32, error) {\n\tvar ret []int32\n\tprocs, err := processes()\n\tif err != nil {\n\t\treturn ret, nil\n\t}\n\n\tfor _, p := range procs {\n\t\tret = append(ret, p.Pid)\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) Ppid() (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.KiPpid, nil\n}\nfunc (p *Process) Name() (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(k.KiComm[:]), nil\n}\nfunc (p *Process) Exe() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Cmdline() (string, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcArgs, p.Pid}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tret := strings.FieldsFunc(string(buf), func(r rune) bool {\n\t\tif r == '\\u0000' {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\n\treturn strings.Join(ret, \" \"), nil\n}\nfunc (p *Process) CreateTime() (int64, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Cwd() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Parent() (*Process, error) {\n\treturn p, common.NotImplementedError\n}\nfunc (p *Process) Status() (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(k.KiStat[:]), nil\n}\nfunc (p *Process) Uids() ([]int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tuids := make([]int32, 0, 3)\n\n\tuids = append(uids, int32(k.KiRuid), int32(k.KiUID), int32(k.KiSvuid))\n\n\treturn uids, nil\n}\nfunc (p *Process) Gids() ([]int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgids := make([]int32, 0, 3)\n\tgids = append(gids, int32(k.KiRgid), int32(k.KiNgroups[0]), int32(k.KiSvuid))\n\n\treturn gids, nil\n}\nfunc (p *Process) Terminal() (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tttyNr := uint64(k.KiTdev)\n\n\ttermmap, err := getTerminalMap()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn termmap[ttyNr], nil\n}\nfunc (p *Process) Nice() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) IOnice() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Rlimit() ([]RlimitStat, error) {\n\tvar rlimit []RlimitStat\n\treturn rlimit, common.NotImplementedError\n}\nfunc (p *Process) IOCounters() (*IOCountersStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &IOCountersStat{\n\t\tReadCount:  uint64(k.KiRusage.Inblock),\n\t\tWriteCount: uint64(k.KiRusage.Oublock),\n\t}, nil\n}\nfunc (p *Process) NumCtxSwitches() (*NumCtxSwitchesStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) NumFDs() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) NumThreads() (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.KiNumthreads, nil\n}\nfunc (p *Process) Threads() (map[string]string, error) {\n\tret := make(map[string]string, 0)\n\treturn ret, common.NotImplementedError\n}\nfunc (p *Process) CPUTimes() (*cpu.CPUTimesStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &cpu.CPUTimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   float64(k.KiRusage.Utime.Sec) + float64(k.KiRusage.Utime.Usec)/1000000,\n\t\tSystem: float64(k.KiRusage.Stime.Sec) + float64(k.KiRusage.Stime.Usec)/1000000,\n\t}, nil\n}\nfunc (p *Process) CPUAffinity() ([]int32, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) MemoryInfo() (*MemoryInfoStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv, err := syscall.Sysctl(\"vm.stats.vm.v_page_size\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpageSize := common.LittleEndian.Uint16([]byte(v))\n\n\treturn &MemoryInfoStat{\n\t\tRSS: uint64(k.KiRssize) * uint64(pageSize),\n\t\tVMS: uint64(k.KiSize),\n\t}, nil\n}\nfunc (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Children() ([]*Process, error) {\n\tpids, err := common.CallPgrep(invoke, p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]*Process, 0, len(pids))\n\tfor _, pid := range pids {\n\t\tnp, err := NewProcess(pid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tret = append(ret, np)\n\t}\n\treturn ret, nil\n}\n\nfunc (p *Process) OpenFiles() ([]OpenFilesStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Connections() ([]net.NetConnectionStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) NetIOCounters(pernic bool) ([]net.NetIOCountersStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) IsRunning() (bool, error) {\n\treturn true, common.NotImplementedError\n}\nfunc (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {\n\tvar ret []MemoryMapsStat\n\treturn &ret, common.NotImplementedError\n}\n\nfunc copyParams(k *KinfoProc, p *Process) error {\n\n\treturn nil\n}\n\nfunc processes() ([]Process, error) {\n\tresults := make([]Process, 0, 50)\n\n\tmib := []int32{CTLKern, KernProc, KernProcProc, 0}\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn results, err\n\t}\n\n\t// get kinfo_proc size\n\tk := KinfoProc{}\n\tprocinfoLen := int(unsafe.Sizeof(k))\n\tcount := int(length / uint64(procinfoLen))\n\n\t// parse buf to procs\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*procinfoLen : i*procinfoLen+procinfoLen]\n\t\tk, err := parseKinfoProc(b)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tp, err := NewProcess(int32(k.KiPid))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tcopyParams(&k, p)\n\n\t\tresults = append(results, *p)\n\t}\n\n\treturn results, nil\n}\n\nfunc parseKinfoProc(buf []byte) (KinfoProc, error) {\n\tvar k KinfoProc\n\tbr := bytes.NewReader(buf)\n\terr := binary.Read(br, binary.LittleEndian, &k)\n\treturn k, err\n}\n\nfunc (p *Process) getKProc() (*KinfoProc, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcPID, p.Pid}\n\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tprocK := KinfoProc{}\n\tif length != uint64(unsafe.Sizeof(procK)) {\n\t\treturn nil, err\n\t}\n\n\tk, err := parseKinfoProc(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &k, nil\n}\n\nfunc NewProcess(pid int32) (*Process, error) {\n\tp := &Process{Pid: pid}\n\n\treturn p, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_freebsd_386.go",
    "content": "// +build freebsd\n// +build 386\n\npackage process\n\n// copied from sys/sysctl.h\nconst (\n\tCTLKern          = 1  // \"high kernel\": proc, limits\n\tKernProc         = 14 // struct: process entries\n\tKernProcPID      = 1  // by process id\n\tKernProcProc     = 8  // only return procs\n\tKernProcPathname = 12 // path to executable\n\tKernProcArgs     = 7  // get/set arguments/proctitle\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\n// copied from sys/user.h\ntype KinfoProc struct {\n\tKiStructsize   int32\n\tKiLayout       int32\n\tKiArgs         int32\n\tKiPaddr        int32\n\tKiAddr         int32\n\tKiTracep       int32\n\tKiTextvp       int32\n\tKiFd           int32\n\tKiVmspace      int32\n\tKiWchan        int32\n\tKiPid          int32\n\tKiPpid         int32\n\tKiPgid         int32\n\tKiTpgid        int32\n\tKiSid          int32\n\tKiTsid         int32\n\tKiJobc         [2]byte\n\tKiSpareShort1  [2]byte\n\tKiTdev         int32\n\tKiSiglist      [16]byte\n\tKiSigmask      [16]byte\n\tKiSigignore    [16]byte\n\tKiSigcatch     [16]byte\n\tKiUID          int32\n\tKiRuid         int32\n\tKiSvuid        int32\n\tKiRgid         int32\n\tKiSvgid        int32\n\tKiNgroups      [2]byte\n\tKiSpareShort2  [2]byte\n\tKiGroups       [64]byte\n\tKiSize         int32\n\tKiRssize       int32\n\tKiSwrss        int32\n\tKiTsize        int32\n\tKiDsize        int32\n\tKiSsize        int32\n\tKiXstat        [2]byte\n\tKiAcflag       [2]byte\n\tKiPctcpu       int32\n\tKiEstcpu       int32\n\tKiSlptime      int32\n\tKiSwtime       int32\n\tKiCow          int32\n\tKiRuntime      int64\n\tKiStart        [8]byte\n\tKiChildtime    [8]byte\n\tKiFlag         int32\n\tKiKflag        int32\n\tKiTraceflag    int32\n\tKiStat         [1]byte\n\tKiNice         [1]byte\n\tKiLock         [1]byte\n\tKiRqindex      [1]byte\n\tKiOncpu        [1]byte\n\tKiLastcpu      [1]byte\n\tKiOcomm        [17]byte\n\tKiWmesg        [9]byte\n\tKiLogin        [18]byte\n\tKiLockname     [9]byte\n\tKiComm         [20]byte\n\tKiEmul         [17]byte\n\tKiSparestrings [68]byte\n\tKiSpareints    [36]byte\n\tKiCrFlags      int32\n\tKiJid          int32\n\tKiNumthreads   int32\n\tKiTid          int32\n\tKiPri          int32\n\tKiRusage       Rusage\n\tKiRusageCh     [72]byte\n\tKiPcb          int32\n\tKiKstack       int32\n\tKiUdata        int32\n\tKiTdaddr       int32\n\tKiSpareptrs    [24]byte\n\tKiSpareint64s  [48]byte\n\tKiSflag        int32\n\tKiTdflags      int32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_freebsd_amd64.go",
    "content": "// +build freebsd\n// +build amd64\npackage process\n\n// copied from sys/sysctl.h\nconst (\n\tCTLKern          = 1  // \"high kernel\": proc, limits\n\tKernProc         = 14 // struct: process entries\n\tKernProcPID      = 1  // by process id\n\tKernProcProc     = 8  // only return procs\n\tKernProcPathname = 12 // path to executable\n\tKernProcArgs     = 7  // get/set arguments/proctitle\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\n// copied from sys/user.h\ntype KinfoProc struct {\n\tKiStructsize   int32\n\tKiLayout       int32\n\tKiArgs         int64\n\tKiPaddr        int64\n\tKiAddr         int64\n\tKiTracep       int64\n\tKiTextvp       int64\n\tKiFd           int64\n\tKiVmspace      int64\n\tKiWchan        int64\n\tKiPid          int32\n\tKiPpid         int32\n\tKiPgid         int32\n\tKiTpgid        int32\n\tKiSid          int32\n\tKiTsid         int32\n\tKiJobc         [2]byte\n\tKiSpareShort1  [2]byte\n\tKiTdev         int32\n\tKiSiglist      [16]byte\n\tKiSigmask      [16]byte\n\tKiSigignore    [16]byte\n\tKiSigcatch     [16]byte\n\tKiUID          int32\n\tKiRuid         int32\n\tKiSvuid        int32\n\tKiRgid         int32\n\tKiSvgid        int32\n\tKiNgroups      [2]byte\n\tKiSpareShort2  [2]byte\n\tKiGroups       [64]byte\n\tKiSize         int64\n\tKiRssize       int64\n\tKiSwrss        int64\n\tKiTsize        int64\n\tKiDsize        int64\n\tKiSsize        int64\n\tKiXstat        [2]byte\n\tKiAcflag       [2]byte\n\tKiPctcpu       int32\n\tKiEstcpu       int32\n\tKiSlptime      int32\n\tKiSwtime       int32\n\tKiCow          int32\n\tKiRuntime      int64\n\tKiStart        [16]byte\n\tKiChildtime    [16]byte\n\tKiFlag         int64\n\tKiKflag        int64\n\tKiTraceflag    int32\n\tKiStat         [1]byte\n\tKiNice         [1]byte\n\tKiLock         [1]byte\n\tKiRqindex      [1]byte\n\tKiOncpu        [1]byte\n\tKiLastcpu      [1]byte\n\tKiOcomm        [17]byte\n\tKiWmesg        [9]byte\n\tKiLogin        [18]byte\n\tKiLockname     [9]byte\n\tKiComm         [20]byte\n\tKiEmul         [17]byte\n\tKiSparestrings [68]byte\n\tKiSpareints    [36]byte\n\tKiCrFlags      int32\n\tKiJid          int32\n\tKiNumthreads   int32\n\tKiTid          int32\n\tKiPri          int32\n\tKiRusage       Rusage\n\tKiRusageCh     [144]byte\n\tKiPcb          int64\n\tKiKstack       int64\n\tKiUdata        int64\n\tKiTdaddr       int64\n\tKiSpareptrs    [48]byte\n\tKiSpareint64s  [96]byte\n\tKiSflag        int64\n\tKiTdflags      int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_linux.go",
    "content": "// +build linux\n\npackage process\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/host\"\n\t\"github.com/shirou/gopsutil/internal/common\"\n\t\"github.com/shirou/gopsutil/net\"\n)\n\nvar ErrorNoChildren = errors.New(\"process does not have children\")\n\nconst (\n\tPrioProcess = 0 // linux/resource.h\n)\n\n// MemoryInfoExStat is different between OSes\ntype MemoryInfoExStat struct {\n\tRSS    uint64 `json:\"rss\"`    // bytes\n\tVMS    uint64 `json:\"vms\"`    // bytes\n\tShared uint64 `json:\"shared\"` // bytes\n\tText   uint64 `json:\"text\"`   // bytes\n\tLib    uint64 `json:\"lib\"`    // bytes\n\tData   uint64 `json:\"data\"`   // bytes\n\tDirty  uint64 `json:\"dirty\"`  // bytes\n}\n\nfunc (m MemoryInfoExStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\ntype MemoryMapsStat struct {\n\tPath         string `json:\"path\"`\n\tRss          uint64 `json:\"rss\"`\n\tSize         uint64 `json:\"size\"`\n\tPss          uint64 `json:\"pss\"`\n\tSharedClean  uint64 `json:\"shared_clean\"`\n\tSharedDirty  uint64 `json:\"shared_dirty\"`\n\tPrivateClean uint64 `json:\"private_clean\"`\n\tPrivateDirty uint64 `json:\"private_dirty\"`\n\tReferenced   uint64 `json:\"referenced\"`\n\tAnonymous    uint64 `json:\"anonymous\"`\n\tSwap         uint64 `json:\"swap\"`\n}\n\nfunc (m MemoryMapsStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\n// Create new Process instance\n// This only stores Pid\nfunc NewProcess(pid int32) (*Process, error) {\n\tp := &Process{\n\t\tPid: int32(pid),\n\t}\n\terr := p.fillFromStatus()\n\treturn p, err\n}\n\nfunc (p *Process) Ppid() (int32, error) {\n\t_, ppid, _, _, _, err := p.fillFromStat()\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treturn ppid, nil\n}\nfunc (p *Process) Name() (string, error) {\n\treturn p.name, nil\n}\nfunc (p *Process) Exe() (string, error) {\n\treturn p.fillFromExe()\n}\nfunc (p *Process) Cmdline() (string, error) {\n\treturn p.fillFromCmdline()\n}\nfunc (p *Process) CreateTime() (int64, error) {\n\t_, _, _, createTime, _, err := p.fillFromStat()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn createTime, nil\n}\n\nfunc (p *Process) Cwd() (string, error) {\n\treturn p.fillFromCwd()\n}\nfunc (p *Process) Parent() (*Process, error) {\n\tr, err := callLsof(\"R\", p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(r) != 1 { // TODO: pid 1\n\t\treturn nil, fmt.Errorf(\"wrong number of parents\")\n\t}\n\tv, err := strconv.Atoi(r[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewProcess(int32(v))\n}\nfunc (p *Process) Status() (string, error) {\n\terr := p.fillFromStatus()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn p.status, nil\n}\nfunc (p *Process) Uids() ([]int32, error) {\n\terr := p.fillFromStatus()\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\treturn p.uids, nil\n}\nfunc (p *Process) Gids() ([]int32, error) {\n\terr := p.fillFromStatus()\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\treturn p.gids, nil\n}\nfunc (p *Process) Terminal() (string, error) {\n\tterminal, _, _, _, _, err := p.fillFromStat()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn terminal, nil\n}\nfunc (p *Process) Nice() (int32, error) {\n\t_, _, _, _, nice, err := p.fillFromStat()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn nice, nil\n}\nfunc (p *Process) IOnice() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Rlimit() ([]RlimitStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) IOCounters() (*IOCountersStat, error) {\n\treturn p.fillFromIO()\n}\nfunc (p *Process) NumCtxSwitches() (*NumCtxSwitchesStat, error) {\n\terr := p.fillFromStatus()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p.numCtxSwitches, nil\n}\nfunc (p *Process) NumFDs() (int32, error) {\n\tnumFds, _, err := p.fillFromfd()\n\treturn numFds, err\n}\nfunc (p *Process) NumThreads() (int32, error) {\n\terr := p.fillFromStatus()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn p.numThreads, nil\n}\nfunc (p *Process) Threads() (map[string]string, error) {\n\tret := make(map[string]string, 0)\n\treturn ret, nil\n}\nfunc (p *Process) CPUTimes() (*cpu.CPUTimesStat, error) {\n\t_, _, cpuTimes, _, _, err := p.fillFromStat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cpuTimes, nil\n}\nfunc (p *Process) CPUAffinity() ([]int32, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) MemoryInfo() (*MemoryInfoStat, error) {\n\tmeminfo, _, err := p.fillFromStatm()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn meminfo, nil\n}\nfunc (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {\n\t_, memInfoEx, err := p.fillFromStatm()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn memInfoEx, nil\n}\n\nfunc (p *Process) Children() ([]*Process, error) {\n\tpids, err := common.CallPgrep(invoke, p.Pid)\n\tif err != nil {\n\t\tif pids == nil || len(pids) == 0 {\n\t\t\treturn nil, ErrorNoChildren\n\t\t}\n\t\treturn nil, err\n\t}\n\tret := make([]*Process, 0, len(pids))\n\tfor _, pid := range pids {\n\t\tnp, err := NewProcess(pid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tret = append(ret, np)\n\t}\n\treturn ret, nil\n}\n\nfunc (p *Process) OpenFiles() ([]OpenFilesStat, error) {\n\t_, ofs, err := p.fillFromfd()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]OpenFilesStat, 0, len(ofs))\n\tfor i, o := range ofs {\n\t\tret[i] = *o\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) Connections() ([]net.NetConnectionStat, error) {\n\treturn net.NetConnectionsPid(\"all\", p.Pid)\n}\n\nfunc (p *Process) NetIOCounters(pernic bool) ([]net.NetIOCountersStat, error) {\n\tfilename := common.HostProc(strconv.Itoa(int(p.Pid)), \"net/dev\")\n\treturn net.NetIOCountersByFile(pernic, filename)\n}\n\nfunc (p *Process) IsRunning() (bool, error) {\n\treturn true, common.NotImplementedError\n}\n\n// MemoryMaps get memory maps from /proc/(pid)/smaps\nfunc (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {\n\tpid := p.Pid\n\tvar ret []MemoryMapsStat\n\tsmapsPath := common.HostProc(strconv.Itoa(int(pid)), \"smaps\")\n\tcontents, err := ioutil.ReadFile(smapsPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(string(contents), \"\\n\")\n\n\t// function of parsing a block\n\tgetBlock := func(first_line []string, block []string) (MemoryMapsStat, error) {\n\t\tm := MemoryMapsStat{}\n\t\tm.Path = first_line[len(first_line)-1]\n\n\t\tfor _, line := range block {\n\t\t\tif strings.Contains(line, \"VmFlags\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfield := strings.Split(line, \":\")\n\t\t\tif len(field) < 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tv := strings.Trim(field[1], \" kB\") // remove last \"kB\"\n\t\t\tt, err := strconv.ParseUint(v, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn m, err\n\t\t\t}\n\n\t\t\tswitch field[0] {\n\t\t\tcase \"Size\":\n\t\t\t\tm.Size = t\n\t\t\tcase \"Rss\":\n\t\t\t\tm.Rss = t\n\t\t\tcase \"Pss\":\n\t\t\t\tm.Pss = t\n\t\t\tcase \"Shared_Clean\":\n\t\t\t\tm.SharedClean = t\n\t\t\tcase \"Shared_Dirty\":\n\t\t\t\tm.SharedDirty = t\n\t\t\tcase \"Private_Clean\":\n\t\t\t\tm.PrivateClean = t\n\t\t\tcase \"Private_Dirty\":\n\t\t\t\tm.PrivateDirty = t\n\t\t\tcase \"Referenced\":\n\t\t\t\tm.Referenced = t\n\t\t\tcase \"Anonymous\":\n\t\t\t\tm.Anonymous = t\n\t\t\tcase \"Swap\":\n\t\t\t\tm.Swap = t\n\t\t\t}\n\t\t}\n\t\treturn m, nil\n\t}\n\n\tblocks := make([]string, 16)\n\tfor _, line := range lines {\n\t\tfield := strings.Split(line, \" \")\n\t\tif strings.HasSuffix(field[0], \":\") == false {\n\t\t\t// new block section\n\t\t\tif len(blocks) > 0 {\n\t\t\t\tg, err := getBlock(field, blocks)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn &ret, err\n\t\t\t\t}\n\t\t\t\tret = append(ret, g)\n\t\t\t}\n\t\t\t// starts new block\n\t\t\tblocks = make([]string, 16)\n\t\t} else {\n\t\t\tblocks = append(blocks, line)\n\t\t}\n\t}\n\n\treturn &ret, nil\n}\n\n/**\n** Internal functions\n**/\n\n// Get num_fds from /proc/(pid)/fd\nfunc (p *Process) fillFromfd() (int32, []*OpenFilesStat, error) {\n\tpid := p.Pid\n\tstatPath := common.HostProc(strconv.Itoa(int(pid)), \"fd\")\n\td, err := os.Open(statPath)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\tdefer d.Close()\n\tfnames, err := d.Readdirnames(-1)\n\tnumFDs := int32(len(fnames))\n\n\topenfiles := make([]*OpenFilesStat, numFDs)\n\tfor _, fd := range fnames {\n\t\tfpath := filepath.Join(statPath, fd)\n\t\tfilepath, err := os.Readlink(fpath)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tt, err := strconv.ParseUint(fd, 10, 64)\n\t\tif err != nil {\n\t\t\treturn numFDs, openfiles, err\n\t\t}\n\t\to := &OpenFilesStat{\n\t\t\tPath: filepath,\n\t\t\tFd:   t,\n\t\t}\n\t\topenfiles = append(openfiles, o)\n\t}\n\n\treturn numFDs, openfiles, nil\n}\n\n// Get cwd from /proc/(pid)/cwd\nfunc (p *Process) fillFromCwd() (string, error) {\n\tpid := p.Pid\n\tcwdPath := common.HostProc(strconv.Itoa(int(pid)), \"cwd\")\n\tcwd, err := os.Readlink(cwdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(cwd), nil\n}\n\n// Get exe from /proc/(pid)/exe\nfunc (p *Process) fillFromExe() (string, error) {\n\tpid := p.Pid\n\texePath := common.HostProc(strconv.Itoa(int(pid)), \"exe\")\n\texe, err := os.Readlink(exePath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(exe), nil\n}\n\n// Get cmdline from /proc/(pid)/cmdline\nfunc (p *Process) fillFromCmdline() (string, error) {\n\tpid := p.Pid\n\tcmdPath := common.HostProc(strconv.Itoa(int(pid)), \"cmdline\")\n\tcmdline, err := ioutil.ReadFile(cmdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tret := strings.FieldsFunc(string(cmdline), func(r rune) bool {\n\t\tif r == '\\u0000' {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\n\treturn strings.Join(ret, \" \"), nil\n}\n\n// Get IO status from /proc/(pid)/io\nfunc (p *Process) fillFromIO() (*IOCountersStat, error) {\n\tpid := p.Pid\n\tioPath := common.HostProc(strconv.Itoa(int(pid)), \"io\")\n\tioline, err := ioutil.ReadFile(ioPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(string(ioline), \"\\n\")\n\tret := &IOCountersStat{}\n\n\tfor _, line := range lines {\n\t\tfield := strings.Fields(line)\n\t\tif len(field) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tt, err := strconv.ParseUint(field[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparam := field[0]\n\t\tif strings.HasSuffix(param, \":\") {\n\t\t\tparam = param[:len(param)-1]\n\t\t}\n\t\tswitch param {\n\t\tcase \"syscr\":\n\t\t\tret.ReadCount = t\n\t\tcase \"syscw\":\n\t\t\tret.WriteCount = t\n\t\tcase \"read_bytes\":\n\t\t\tret.ReadBytes = t\n\t\tcase \"write_bytes\":\n\t\t\tret.WriteBytes = t\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n\n// Get memory info from /proc/(pid)/statm\nfunc (p *Process) fillFromStatm() (*MemoryInfoStat, *MemoryInfoExStat, error) {\n\tpid := p.Pid\n\tmemPath := common.HostProc(strconv.Itoa(int(pid)), \"statm\")\n\tcontents, err := ioutil.ReadFile(memPath)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfields := strings.Split(string(contents), \" \")\n\n\tvms, err := strconv.ParseUint(fields[0], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\trss, err := strconv.ParseUint(fields[1], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tmemInfo := &MemoryInfoStat{\n\t\tRSS: rss * PageSize,\n\t\tVMS: vms * PageSize,\n\t}\n\n\tshared, err := strconv.ParseUint(fields[2], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\ttext, err := strconv.ParseUint(fields[3], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tlib, err := strconv.ParseUint(fields[4], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdirty, err := strconv.ParseUint(fields[5], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tmemInfoEx := &MemoryInfoExStat{\n\t\tRSS:    rss * PageSize,\n\t\tVMS:    vms * PageSize,\n\t\tShared: shared * PageSize,\n\t\tText:   text * PageSize,\n\t\tLib:    lib * PageSize,\n\t\tDirty:  dirty * PageSize,\n\t}\n\n\treturn memInfo, memInfoEx, nil\n}\n\n// Get various status from /proc/(pid)/status\nfunc (p *Process) fillFromStatus() error {\n\tpid := p.Pid\n\tstatPath := common.HostProc(strconv.Itoa(int(pid)), \"status\")\n\tcontents, err := ioutil.ReadFile(statPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tlines := strings.Split(string(contents), \"\\n\")\n\tp.numCtxSwitches = &NumCtxSwitchesStat{}\n\tp.memInfo = &MemoryInfoStat{}\n\tfor _, line := range lines {\n\t\ttabParts := strings.SplitN(line, \"\\t\", 2)\n\t\tif len(tabParts) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tvalue := tabParts[1]\n\t\tswitch strings.TrimRight(tabParts[0], \":\") {\n\t\tcase \"Name\":\n\t\t\tp.name = strings.Trim(value, \" \\t\")\n\t\tcase \"State\":\n\t\t\t// get between \"(\" and \")\"\n\t\t\ts := strings.Index(value, \"(\") + 1\n\t\t\te := strings.Index(value, \")\")\n\t\t\tp.status = value[s:e]\n\t\tcase \"Uid\":\n\t\t\tp.uids = make([]int32, 0, 4)\n\t\t\tfor _, i := range strings.Split(value, \"\\t\") {\n\t\t\t\tv, err := strconv.ParseInt(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.uids = append(p.uids, int32(v))\n\t\t\t}\n\t\tcase \"Gid\":\n\t\t\tp.gids = make([]int32, 0, 4)\n\t\t\tfor _, i := range strings.Split(value, \"\\t\") {\n\t\t\t\tv, err := strconv.ParseInt(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.gids = append(p.gids, int32(v))\n\t\t\t}\n\t\tcase \"Threads\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numThreads = int32(v)\n\t\tcase \"voluntary_ctxt_switches\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numCtxSwitches.Voluntary = v\n\t\tcase \"nonvoluntary_ctxt_switches\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numCtxSwitches.Involuntary = v\n\t\tcase \"VmRSS\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.RSS = v * 1024\n\t\tcase \"VmSize\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.VMS = v * 1024\n\t\tcase \"VmSwap\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.Swap = v * 1024\n\t\t}\n\n\t}\n\treturn nil\n}\n\nfunc (p *Process) fillFromStat() (string, int32, *cpu.CPUTimesStat, int64, int32, error) {\n\tpid := p.Pid\n\tstatPath := common.HostProc(strconv.Itoa(int(pid)), \"stat\")\n\tcontents, err := ioutil.ReadFile(statPath)\n\tif err != nil {\n\t\treturn \"\", 0, nil, 0, 0, err\n\t}\n\tfields := strings.Fields(string(contents))\n\n\ti := 1\n\tfor !strings.HasSuffix(fields[i], \")\") {\n\t\ti++\n\t}\n\n\ttermmap, err := getTerminalMap()\n\tterminal := \"\"\n\tif err == nil {\n\t\tt, err := strconv.ParseUint(fields[i+5], 10, 64)\n\t\tif err != nil {\n\t\t\treturn \"\", 0, nil, 0, 0, err\n\t\t}\n\t\tterminal = termmap[t]\n\t}\n\n\tppid, err := strconv.ParseInt(fields[i+2], 10, 32)\n\tif err != nil {\n\t\treturn \"\", 0, nil, 0, 0, err\n\t}\n\tutime, err := strconv.ParseFloat(fields[i+12], 64)\n\tif err != nil {\n\t\treturn \"\", 0, nil, 0, 0, err\n\t}\n\n\tstime, err := strconv.ParseFloat(fields[i+13], 64)\n\tif err != nil {\n\t\treturn \"\", 0, nil, 0, 0, err\n\t}\n\n\tcpuTimes := &cpu.CPUTimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   float64(utime / ClockTicks),\n\t\tSystem: float64(stime / ClockTicks),\n\t}\n\n\tbootTime, _ := host.BootTime()\n\tt, err := strconv.ParseUint(fields[i+20], 10, 64)\n\tif err != nil {\n\t\treturn \"\", 0, nil, 0, 0, err\n\t}\n\tctime := (t / uint64(ClockTicks)) + uint64(bootTime)\n\tcreateTime := int64(ctime * 1000)\n\n\t//\tp.Nice = mustParseInt32(fields[18])\n\t// use syscall instead of parse Stat file\n\tsnice, _ := syscall.Getpriority(PrioProcess, int(pid))\n\tnice := int32(snice) // FIXME: is this true?\n\n\treturn terminal, int32(ppid), cpuTimes, createTime, nice, nil\n}\n\nfunc Pids() ([]int32, error) {\n\tvar ret []int32\n\n\td, err := os.Open(common.HostProc())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tfnames, err := d.Readdirnames(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, fname := range fnames {\n\t\tpid, err := strconv.ParseInt(fname, 10, 32)\n\t\tif err != nil {\n\t\t\t// if not numeric name, just skip\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, int32(pid))\n\t}\n\n\treturn ret, nil\n}\n\nfunc callLsof(arg string, pid int32) ([]string, error) {\n\tvar cmd []string\n\tif pid == 0 { // will get from all processes.\n\t\tcmd = []string{\"-F\" + arg}\n\t} else {\n\t\tcmd = []string{\"-a\", \"-F\" + arg, \"-p\", strconv.Itoa(int(pid))}\n\t}\n\tout, err := invoke.Command(\"/usr/bin/lsof\", cmd...)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\n\tvar ret []string\n\tfor _, l := range lines[1:] {\n\t\tif strings.HasPrefix(l, arg) {\n\t\t\tret = append(ret, l[1:]) // delete first char\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_linux_386.go",
    "content": "// +build linux\n// +build 386\n\npackage process\n\nconst (\n\tClockTicks = 100  // C.sysconf(C._SC_CLK_TCK)\n\tPageSize   = 4096 // C.sysconf(C._SC_PAGE_SIZE)\n)\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_linux_amd64.go",
    "content": "// +build linux\n// +build amd64\n\npackage process\n\nconst (\n\tClockTicks = 100  // C.sysconf(C._SC_CLK_TCK)\n\tPageSize   = 4096 // C.sysconf(C._SC_PAGE_SIZE)\n)\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_linux_arm.go",
    "content": "// +build linux\n// +build arm\n\npackage process\n\nconst (\n\tClockTicks = 100  // C.sysconf(C._SC_CLK_TCK)\n\tPageSize   = 4096 // C.sysconf(C._SC_PAGE_SIZE)\n)\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_posix.go",
    "content": "// +build linux freebsd darwin\n\npackage process\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"os/user\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n)\n\n// POSIX\nfunc getTerminalMap() (map[uint64]string, error) {\n\tret := make(map[uint64]string)\n\tvar termfiles []string\n\n\td, err := os.Open(\"/dev\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tdevnames, err := d.Readdirnames(-1)\n\tfor _, devname := range devnames {\n\t\tif strings.HasPrefix(devname, \"/dev/tty\") {\n\t\t\ttermfiles = append(termfiles, \"/dev/tty/\"+devname)\n\t\t}\n\t}\n\n\tptsd, err := os.Open(\"/dev/pts\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer ptsd.Close()\n\n\tptsnames, err := ptsd.Readdirnames(-1)\n\tfor _, ptsname := range ptsnames {\n\t\ttermfiles = append(termfiles, \"/dev/pts/\"+ptsname)\n\t}\n\n\tfor _, name := range termfiles {\n\t\tstat := syscall.Stat_t{}\n\t\tif err = syscall.Stat(name, &stat); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trdev := uint64(stat.Rdev)\n\t\tret[rdev] = strings.Replace(name, \"/dev\", \"\", -1)\n\t}\n\treturn ret, nil\n}\n\nfunc (p *Process) SendSignal(sig syscall.Signal) error {\n\tsigAsStr := \"INT\"\n\tswitch sig {\n\tcase syscall.SIGSTOP:\n\t\tsigAsStr = \"STOP\"\n\tcase syscall.SIGCONT:\n\t\tsigAsStr = \"CONT\"\n\tcase syscall.SIGTERM:\n\t\tsigAsStr = \"TERM\"\n\tcase syscall.SIGKILL:\n\t\tsigAsStr = \"KILL\"\n\t}\n\n\tcmd := exec.Command(\"kill\", \"-s\", sigAsStr, strconv.Itoa(int(p.Pid)))\n\tcmd.Stderr = os.Stderr\n\terr := cmd.Run()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (p *Process) Suspend() error {\n\treturn p.SendSignal(syscall.SIGSTOP)\n}\nfunc (p *Process) Resume() error {\n\treturn p.SendSignal(syscall.SIGCONT)\n}\nfunc (p *Process) Terminate() error {\n\treturn p.SendSignal(syscall.SIGTERM)\n}\nfunc (p *Process) Kill() error {\n\treturn p.SendSignal(syscall.SIGKILL)\n}\nfunc (p *Process) Username() (string, error) {\n\tuids, err := p.Uids()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(uids) > 0 {\n\t\tu, err := user.LookupId(strconv.Itoa(int(uids[0])))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn u.Username, nil\n\t}\n\treturn \"\", nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/process_windows.go",
    "content": "// +build windows\n\npackage process\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/StackExchange/wmi\"\n\t\"github.com/shirou/w32\"\n\n\tcpu \"github.com/shirou/gopsutil/cpu\"\n\t\"github.com/shirou/gopsutil/internal/common\"\n\tnet \"github.com/shirou/gopsutil/net\"\n)\n\nconst (\n\tNoMoreFiles   = 0x12\n\tMaxPathLength = 260\n)\n\ntype SystemProcessInformation struct {\n\tNextEntryOffset   uint64\n\tNumberOfThreads   uint64\n\tReserved1         [48]byte\n\tReserved2         [3]byte\n\tUniqueProcessID   uintptr\n\tReserved3         uintptr\n\tHandleCount       uint64\n\tReserved4         [4]byte\n\tReserved5         [11]byte\n\tPeakPagefileUsage uint64\n\tPrivatePageCount  uint64\n\tReserved6         [6]uint64\n}\n\n// Memory_info_ex is different between OSes\ntype MemoryInfoExStat struct {\n}\n\ntype MemoryMapsStat struct {\n}\n\ntype Win32_Process struct {\n\tName           string\n\tExecutablePath *string\n\tCommandLine    *string\n\tPriority       uint32\n\tCreationDate   *time.Time\n\tProcessId      uint32\n\tThreadCount    uint32\n\n\t/*\n\t\tCSCreationClassName   string\n\t\tCSName                string\n\t\tCaption               *string\n\t\tCreationClassName     string\n\t\tDescription           *string\n\t\tExecutionState        *uint16\n\t\tHandleCount           uint32\n\t\tKernelModeTime        uint64\n\t\tMaximumWorkingSetSize *uint32\n\t\tMinimumWorkingSetSize *uint32\n\t\tOSCreationClassName   string\n\t\tOSName                string\n\t\tOtherOperationCount   uint64\n\t\tOtherTransferCount    uint64\n\t\tPageFaults            uint32\n\t\tPageFileUsage         uint32\n\t\tParentProcessId       uint32\n\t\tPeakPageFileUsage     uint32\n\t\tPeakVirtualSize       uint64\n\t\tPeakWorkingSetSize    uint32\n\t\tPrivatePageCount      uint64\n\t\tReadOperationCount    uint64\n\t\tReadTransferCount     uint64\n\t\tStatus                *string\n\t\tTerminationDate       *time.Time\n\t\tUserModeTime          uint64\n\t\tWorkingSetSize        uint64\n\t\tWriteOperationCount   uint64\n\t\tWriteTransferCount    uint64\n\t*/\n}\n\nfunc Pids() ([]int32, error) {\n\tvar ret []int32\n\n\tprocs, err := processes()\n\tif err != nil {\n\t\treturn ret, nil\n\t}\n\n\tfor _, proc := range procs {\n\t\tret = append(ret, proc.Pid)\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) Ppid() (int32, error) {\n\tret, _, _, err := p.getFromSnapProcess(p.Pid)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn ret, nil\n}\n\nfunc GetWin32Proc(pid int32) ([]Win32_Process, error) {\n\tvar dst []Win32_Process\n\tquery := fmt.Sprintf(\"WHERE ProcessId = %d\", pid)\n\tq := wmi.CreateQuery(&dst, query)\n\terr := wmi.Query(q, &dst)\n\tif err != nil {\n\t\treturn []Win32_Process{}, fmt.Errorf(\"could not get win32Proc: %s\", err)\n\t}\n\tif len(dst) != 1 {\n\t\treturn []Win32_Process{}, fmt.Errorf(\"could not get win32Proc: empty\")\n\t}\n\treturn dst, nil\n}\n\nfunc (p *Process) Name() (string, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not get Name: %s\", err)\n\t}\n\treturn dst[0].Name, nil\n}\nfunc (p *Process) Exe() (string, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not get ExecutablePath: %s\", err)\n\t}\n\treturn *dst[0].ExecutablePath, nil\n}\nfunc (p *Process) Cmdline() (string, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not get CommandLine: %s\", err)\n\t}\n\treturn *dst[0].CommandLine, nil\n}\n\nfunc (p *Process) CreateTime() (int64, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get CreationDate: %s\", err)\n\t}\n\tdate := *dst[0].CreationDate\n\treturn date.Unix(), nil\n}\n\nfunc (p *Process) Cwd() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Parent() (*Process, error) {\n\treturn p, common.NotImplementedError\n}\nfunc (p *Process) Status() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Username() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\nfunc (p *Process) Uids() ([]int32, error) {\n\tvar uids []int32\n\n\treturn uids, common.NotImplementedError\n}\nfunc (p *Process) Gids() ([]int32, error) {\n\tvar gids []int32\n\treturn gids, common.NotImplementedError\n}\nfunc (p *Process) Terminal() (string, error) {\n\treturn \"\", common.NotImplementedError\n}\n\n// Nice returnes priority in Windows\nfunc (p *Process) Nice() (int32, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get Priority: %s\", err)\n\t}\n\treturn int32(dst[0].Priority), nil\n}\nfunc (p *Process) IOnice() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) Rlimit() ([]RlimitStat, error) {\n\tvar rlimit []RlimitStat\n\n\treturn rlimit, common.NotImplementedError\n}\nfunc (p *Process) IOCounters() (*IOCountersStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) NumCtxSwitches() (*NumCtxSwitchesStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) NumFDs() (int32, error) {\n\treturn 0, common.NotImplementedError\n}\nfunc (p *Process) NumThreads() (int32, error) {\n\tdst, err := GetWin32Proc(p.Pid)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get ThreadCount: %s\", err)\n\t}\n\treturn int32(dst[0].ThreadCount), nil\n}\nfunc (p *Process) Threads() (map[string]string, error) {\n\tret := make(map[string]string, 0)\n\treturn ret, common.NotImplementedError\n}\nfunc (p *Process) CPUTimes() (*cpu.CPUTimesStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) CPUAffinity() ([]int32, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) MemoryInfo() (*MemoryInfoStat, error) {\n\treturn nil, common.NotImplementedError\n}\nfunc (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Children() ([]*Process, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) OpenFiles() ([]OpenFilesStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) Connections() ([]net.NetConnectionStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) NetIOCounters(pernic bool) ([]net.NetIOCountersStat, error) {\n\treturn nil, common.NotImplementedError\n}\n\nfunc (p *Process) IsRunning() (bool, error) {\n\treturn true, common.NotImplementedError\n}\n\nfunc (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {\n\tret := make([]MemoryMapsStat, 0)\n\treturn &ret, common.NotImplementedError\n}\n\nfunc NewProcess(pid int32) (*Process, error) {\n\tp := &Process{Pid: pid}\n\n\treturn p, nil\n}\n\nfunc (p *Process) SendSignal(sig syscall.Signal) error {\n\treturn common.NotImplementedError\n}\n\nfunc (p *Process) Suspend() error {\n\treturn common.NotImplementedError\n}\nfunc (p *Process) Resume() error {\n\treturn common.NotImplementedError\n}\nfunc (p *Process) Terminate() error {\n\treturn common.NotImplementedError\n}\nfunc (p *Process) Kill() error {\n\treturn common.NotImplementedError\n}\n\nfunc (p *Process) getFromSnapProcess(pid int32) (int32, int32, string, error) {\n\tsnap := w32.CreateToolhelp32Snapshot(w32.TH32CS_SNAPPROCESS, uint32(pid))\n\tif snap == 0 {\n\t\treturn 0, 0, \"\", syscall.GetLastError()\n\t}\n\tdefer w32.CloseHandle(snap)\n\tvar pe32 w32.PROCESSENTRY32\n\tpe32.DwSize = uint32(unsafe.Sizeof(pe32))\n\tif w32.Process32First(snap, &pe32) == false {\n\t\treturn 0, 0, \"\", syscall.GetLastError()\n\t}\n\n\tif pe32.Th32ProcessID == uint32(pid) {\n\t\tszexe := syscall.UTF16ToString(pe32.SzExeFile[:])\n\t\treturn int32(pe32.Th32ParentProcessID), int32(pe32.CntThreads), szexe, nil\n\t}\n\n\tfor w32.Process32Next(snap, &pe32) {\n\t\tif pe32.Th32ProcessID == uint32(pid) {\n\t\t\tszexe := syscall.UTF16ToString(pe32.SzExeFile[:])\n\t\t\treturn int32(pe32.Th32ParentProcessID), int32(pe32.CntThreads), szexe, nil\n\t\t}\n\t}\n\treturn 0, 0, \"\", errors.New(\"Couldn't find pid:\" + string(pid))\n}\n\n// Get processes\nfunc processes() ([]*Process, error) {\n\n\tvar dst []Win32_Process\n\tq := wmi.CreateQuery(&dst, \"\")\n\terr := wmi.Query(q, &dst)\n\tif err != nil {\n\t\treturn []*Process{}, err\n\t}\n\tif len(dst) == 0 {\n\t\treturn []*Process{}, fmt.Errorf(\"could not get Process\")\n\t}\n\tresults := make([]*Process, 0, len(dst))\n\tfor _, proc := range dst {\n\t\tp, err := NewProcess(int32(proc.ProcessId))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tresults = append(results, p)\n\t}\n\n\treturn results, nil\n}\n\nfunc getProcInfo(pid int32) (*SystemProcessInformation, error) {\n\tinitialBufferSize := uint64(0x4000)\n\tbufferSize := initialBufferSize\n\tbuffer := make([]byte, bufferSize)\n\n\tvar sysProcInfo SystemProcessInformation\n\tret, _, _ := common.ProcNtQuerySystemInformation.Call(\n\t\tuintptr(unsafe.Pointer(&sysProcInfo)),\n\t\tuintptr(unsafe.Pointer(&buffer[0])),\n\t\tuintptr(unsafe.Pointer(&bufferSize)),\n\t\tuintptr(unsafe.Pointer(&bufferSize)))\n\tif ret != 0 {\n\t\treturn nil, syscall.GetLastError()\n\t}\n\n\treturn &sysProcInfo, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/process/types_darwin.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Hand Writing\n// - all pointer in ExternProc to uint64\n\n// +build ignore\n\n/*\nInput to cgo -godefs.\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n// +godefs map struct_ [16]byte /* in6_addr */\n\npackage process\n\n/*\n#define __DARWIN_UNIX03 0\n#define KERNEL\n#define _DARWIN_USE_64_BIT_INODE\n#include <dirent.h>\n#include <fcntl.h>\n#include <signal.h>\n#include <termios.h>\n#include <unistd.h>\n#include <mach/mach.h>\n#include <mach/message.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/param.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/types.h>\n#include <sys/uio.h>\n#include <sys/un.h>\n#include <net/bpf.h>\n#include <net/if_dl.h>\n#include <net/if_var.h>\n#include <net/route.h>\n#include <netinet/in.h>\n\n#include <sys/sysctl.h>\n#include <sys/ucred.h>\n#include <sys/proc.h>\n#include <sys/time.h>\n#include <sys/_types/_timeval.h>\n#include <sys/appleapiopts.h>\n#include <sys/cdefs.h>\n#include <sys/param.h>\n#include <bsm/audit.h>\n#include <sys/queue.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\nstruct ucred_queue {\n        struct ucred *tqe_next;\n        struct ucred **tqe_prev;\n        TRACEBUF\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics; for internal use.\n\nconst (\n\tsizeofPtr      = C.sizeofPtr\n\tsizeofShort    = C.sizeof_short\n\tsizeofInt      = C.sizeof_int\n\tsizeofLong     = C.sizeof_long\n\tsizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype UGid_t C.gid_t\n\ntype KinfoProc C.struct_kinfo_proc\n\ntype Eproc C.struct_eproc\n\ntype Proc C.struct_proc\n\ntype Session C.struct_session\n\ntype ucred C.struct_ucred\n\ntype Uucred C.struct__ucred\n\ntype Upcred C.struct__pcred\n\ntype Vmspace C.struct_vmspace\n\ntype Sigacts C.struct_sigacts\n\ntype ExternProc C.struct_extern_proc\n\ntype Itimerval C.struct_itimerval\n\ntype Vnode C.struct_vnode\n\ntype Pgrp C.struct_pgrp\n\ntype UserStruct C.struct_user\n\ntype Au_session C.struct_au_session\n\ntype Posix_cred C.struct_posix_cred\n\ntype Label C.struct_label\n\ntype AuditinfoAddr C.struct_auditinfo_addr\ntype AuMask C.struct_au_mask\ntype AuTidAddr C.struct_au_tid_addr\n\n// TAILQ(ucred)\ntype UcredQueue C.struct_ucred_queue\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/windows_memo.rst",
    "content": "Windows memo\n=====================\n\nSize\n----------\n\nDWORD\n  32-bit unsigned integer\nDWORDLONG\n  64-bit unsigned integer\nDWORD_PTR\n  unsigned long type for pointer precision\nDWORD32\n  32-bit unsigned integer\nDWORD64\n  64-bit unsigned integer\nHALF_PTR\n  _WIN64 = int, else short\nINT\n  32-bit signed integer\nINT_PTR\n  _WIN64 = __int64 else int\nLONG\n  32-bit signed integer\nLONGLONG\n  64-bit signed integer\nLONG_PTR\n  _WIN64 = __int64 else long\nSHORT\n  16-bit integer\nSIZE_T\n  maximum number of bytes to which a pointer can point. typedef ULONG_PTR SIZE_T;\nSSIZE_T\n  signed version of SIZE_T. typedef LONG_PTR SSIZE_T;\nWORD\n  16-bit unsigned integer"
  },
  {
    "path": "vendor/github.com/shirou/w32/AUTHORS",
    "content": "# This is the official list of 'w32' authors for copyright purposes.\n\n# Names should be added to this file as\n#   Name or Organization <email address>\n# The email address is not required for organizations.\n\n# Please keep the list sorted.\n\n# Contributors\n# ============\n\nAllen Dang <allengnr@gmail.com>\nBenny Siegert <bsiegert@gmail.com>\nBruno Bigras <bigras.bruno@gmail.com>\nGerald Rosenberg <gerald.rosenberg@gmail.com>\nMichael Henke"
  },
  {
    "path": "vendor/github.com/shirou/w32/LICENSE",
    "content": "Copyright (c) 2010-2012 The w32 Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n3. The names of the authors may not be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/README.md",
    "content": "About w32\n==========\n\nw32 is a wrapper of windows apis for the Go Programming Language.\n\nIt wraps win32 apis to \"Go style\" to make them easier to use.\n\nSetup\n=====\n\n1. Make sure you have a working Go installation and build environment, \n   see this go-nuts post for details:\n   http://groups.google.com/group/golang-nuts/msg/5c87630a84f4fd0c\n   \n   Updated versions of the Windows Go build are available here:\n   http://code.google.com/p/gomingw/downloads/list\n   \n2. Create a \"gopath\" directory if you do not have one yet and set the\n   GOPATH variable accordingly. For example:\n   mkdir -p go-externals/src\n   export GOPATH=${PWD}/go-externals\n\n3. go get github.com/AllenDang/w32\n\n4. go install github.com/AllenDang/w32...\n\nContribute\n==========\n\nContributions in form of design, code, documentation, bug reporting or other\nways you see fit are very welcome.\n\nThank You!\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/advapi32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodadvapi32 = syscall.NewLazyDLL(\"advapi32.dll\")\n\n\tprocRegCreateKeyEx = modadvapi32.NewProc(\"RegCreateKeyExW\")\n\tprocRegOpenKeyEx   = modadvapi32.NewProc(\"RegOpenKeyExW\")\n\tprocRegCloseKey    = modadvapi32.NewProc(\"RegCloseKey\")\n\tprocRegGetValue    = modadvapi32.NewProc(\"RegGetValueW\")\n\tprocRegEnumKeyEx   = modadvapi32.NewProc(\"RegEnumKeyExW\")\n\t//\tprocRegSetKeyValue     = modadvapi32.NewProc(\"RegSetKeyValueW\")\n\tprocRegSetValueEx      = modadvapi32.NewProc(\"RegSetValueExW\")\n\tprocOpenEventLog       = modadvapi32.NewProc(\"OpenEventLogW\")\n\tprocReadEventLog       = modadvapi32.NewProc(\"ReadEventLogW\")\n\tprocCloseEventLog      = modadvapi32.NewProc(\"CloseEventLog\")\n\tprocOpenSCManager      = modadvapi32.NewProc(\"OpenSCManagerW\")\n\tprocCloseServiceHandle = modadvapi32.NewProc(\"CloseServiceHandle\")\n\tprocOpenService        = modadvapi32.NewProc(\"OpenServiceW\")\n\tprocStartService       = modadvapi32.NewProc(\"StartServiceW\")\n\tprocControlService     = modadvapi32.NewProc(\"ControlService\")\n)\n\nfunc RegCreateKey(hKey HKEY, subKey string) HKEY {\n\tvar result HKEY\n\tret, _, _ := procRegCreateKeyEx.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(0),\n\t\tuintptr(0),\n\t\tuintptr(0),\n\t\tuintptr(KEY_ALL_ACCESS),\n\t\tuintptr(0),\n\t\tuintptr(unsafe.Pointer(&result)),\n\t\tuintptr(0))\n\t_ = ret\n\treturn result\n}\n\nfunc RegOpenKeyEx(hKey HKEY, subKey string, samDesired uint32) HKEY {\n\tvar result HKEY\n\tret, _, _ := procRegOpenKeyEx.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(0),\n\t\tuintptr(samDesired),\n\t\tuintptr(unsafe.Pointer(&result)))\n\n\tif ret != ERROR_SUCCESS {\n\t\tpanic(fmt.Sprintf(\"RegOpenKeyEx(%d, %s, %d) failed\", hKey, subKey, samDesired))\n\t}\n\treturn result\n}\n\nfunc RegCloseKey(hKey HKEY) error {\n\tvar err error\n\tret, _, _ := procRegCloseKey.Call(\n\t\tuintptr(hKey))\n\n\tif ret != ERROR_SUCCESS {\n\t\terr = errors.New(\"RegCloseKey failed\")\n\t}\n\treturn err\n}\n\nfunc RegGetRaw(hKey HKEY, subKey string, value string) []byte {\n\tvar bufLen uint32\n\tvar valptr unsafe.Pointer\n\tif len(value) > 0 {\n\t\tvalptr = unsafe.Pointer(syscall.StringToUTF16Ptr(value))\n\t}\n\tprocRegGetValue.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(valptr),\n\t\tuintptr(RRF_RT_ANY),\n\t\t0,\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&bufLen)))\n\n\tif bufLen == 0 {\n\t\treturn nil\n\t}\n\n\tbuf := make([]byte, bufLen)\n\tret, _, _ := procRegGetValue.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(valptr),\n\t\tuintptr(RRF_RT_ANY),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&bufLen)))\n\n\tif ret != ERROR_SUCCESS {\n\t\treturn nil\n\t}\n\n\treturn buf\n}\n\nfunc RegSetBinary(hKey HKEY, subKey string, value []byte) (errno int) {\n\tvar lptr, vptr unsafe.Pointer\n\tif len(subKey) > 0 {\n\t\tlptr = unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))\n\t}\n\tif len(value) > 0 {\n\t\tvptr = unsafe.Pointer(&value[0])\n\t}\n\tret, _, _ := procRegSetValueEx.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(lptr),\n\t\tuintptr(0),\n\t\tuintptr(REG_BINARY),\n\t\tuintptr(vptr),\n\t\tuintptr(len(value)))\n\n\treturn int(ret)\n}\n\nfunc RegGetString(hKey HKEY, subKey string, value string) string {\n\tvar bufLen uint32\n\tprocRegGetValue.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(value))),\n\t\tuintptr(RRF_RT_REG_SZ),\n\t\t0,\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&bufLen)))\n\n\tif bufLen == 0 {\n\t\treturn \"\"\n\t}\n\n\tbuf := make([]uint16, bufLen)\n\tret, _, _ := procRegGetValue.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(value))),\n\t\tuintptr(RRF_RT_REG_SZ),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&bufLen)))\n\n\tif ret != ERROR_SUCCESS {\n\t\treturn \"\"\n\t}\n\n\treturn syscall.UTF16ToString(buf)\n}\n\n/*\nfunc RegSetKeyValue(hKey HKEY, subKey string, valueName string, dwType uint32, data uintptr, cbData uint16) (errno int) {\n\tret, _, _ := procRegSetKeyValue.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(subKey))),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(valueName))),\n\t\tuintptr(dwType),\n\t\tdata,\n\t\tuintptr(cbData))\n\n\treturn int(ret)\n}\n*/\n\nfunc RegEnumKeyEx(hKey HKEY, index uint32) string {\n\tvar bufLen uint32 = 255\n\tbuf := make([]uint16, bufLen)\n\tprocRegEnumKeyEx.Call(\n\t\tuintptr(hKey),\n\t\tuintptr(index),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&bufLen)),\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0)\n\treturn syscall.UTF16ToString(buf)\n}\n\nfunc OpenEventLog(servername string, sourcename string) HANDLE {\n\tret, _, _ := procOpenEventLog.Call(\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(servername))),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(sourcename))))\n\n\treturn HANDLE(ret)\n}\n\nfunc ReadEventLog(eventlog HANDLE, readflags, recordoffset uint32, buffer []byte, numberofbytestoread uint32, bytesread, minnumberofbytesneeded *uint32) bool {\n\tret, _, _ := procReadEventLog.Call(\n\t\tuintptr(eventlog),\n\t\tuintptr(readflags),\n\t\tuintptr(recordoffset),\n\t\tuintptr(unsafe.Pointer(&buffer[0])),\n\t\tuintptr(numberofbytestoread),\n\t\tuintptr(unsafe.Pointer(bytesread)),\n\t\tuintptr(unsafe.Pointer(minnumberofbytesneeded)))\n\n\treturn ret != 0\n}\n\nfunc CloseEventLog(eventlog HANDLE) bool {\n\tret, _, _ := procCloseEventLog.Call(\n\t\tuintptr(eventlog))\n\n\treturn ret != 0\n}\n\nfunc OpenSCManager(lpMachineName, lpDatabaseName string, dwDesiredAccess uint32) (HANDLE, error) {\n\tvar p1, p2 uintptr\n\tif len(lpMachineName) > 0 {\n\t\tp1 = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpMachineName)))\n\t}\n\tif len(lpDatabaseName) > 0 {\n\t\tp2 = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpDatabaseName)))\n\t}\n\tret, _, _ := procOpenSCManager.Call(\n\t\tp1,\n\t\tp2,\n\t\tuintptr(dwDesiredAccess))\n\n\tif ret == 0 {\n\t\treturn 0, syscall.GetLastError()\n\t}\n\n\treturn HANDLE(ret), nil\n}\n\nfunc CloseServiceHandle(hSCObject HANDLE) error {\n\tret, _, _ := procCloseServiceHandle.Call(uintptr(hSCObject))\n\tif ret == 0 {\n\t\treturn syscall.GetLastError()\n\t}\n\treturn nil\n}\n\nfunc OpenService(hSCManager HANDLE, lpServiceName string, dwDesiredAccess uint32) (HANDLE, error) {\n\tret, _, _ := procOpenService.Call(\n\t\tuintptr(hSCManager),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpServiceName))),\n\t\tuintptr(dwDesiredAccess))\n\n\tif ret == 0 {\n\t\treturn 0, syscall.GetLastError()\n\t}\n\n\treturn HANDLE(ret), nil\n}\n\nfunc StartService(hService HANDLE, lpServiceArgVectors []string) error {\n\tl := len(lpServiceArgVectors)\n\tvar ret uintptr\n\tif l == 0 {\n\t\tret, _, _ = procStartService.Call(\n\t\t\tuintptr(hService),\n\t\t\t0,\n\t\t\t0)\n\t} else {\n\t\tlpArgs := make([]uintptr, l)\n\t\tfor i := 0; i < l; i++ {\n\t\t\tlpArgs[i] = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpServiceArgVectors[i])))\n\t\t}\n\n\t\tret, _, _ = procStartService.Call(\n\t\t\tuintptr(hService),\n\t\t\tuintptr(l),\n\t\t\tuintptr(unsafe.Pointer(&lpArgs[0])))\n\t}\n\n\tif ret == 0 {\n\t\treturn syscall.GetLastError()\n\t}\n\n\treturn nil\n}\n\nfunc ControlService(hService HANDLE, dwControl uint32, lpServiceStatus *SERVICE_STATUS) bool {\n\tif lpServiceStatus == nil {\n\t\tpanic(\"ControlService:lpServiceStatus cannot be nil\")\n\t}\n\n\tret, _, _ := procControlService.Call(\n\t\tuintptr(hService),\n\t\tuintptr(dwControl),\n\t\tuintptr(unsafe.Pointer(lpServiceStatus)))\n\n\treturn ret != 0\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/comctl32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodcomctl32 = syscall.NewLazyDLL(\"comctl32.dll\")\n\n\tprocInitCommonControlsEx    = modcomctl32.NewProc(\"InitCommonControlsEx\")\n\tprocImageList_Create        = modcomctl32.NewProc(\"ImageList_Create\")\n\tprocImageList_Destroy       = modcomctl32.NewProc(\"ImageList_Destroy\")\n\tprocImageList_GetImageCount = modcomctl32.NewProc(\"ImageList_GetImageCount\")\n\tprocImageList_SetImageCount = modcomctl32.NewProc(\"ImageList_SetImageCount\")\n\tprocImageList_Add           = modcomctl32.NewProc(\"ImageList_Add\")\n\tprocImageList_ReplaceIcon   = modcomctl32.NewProc(\"ImageList_ReplaceIcon\")\n\tprocImageList_Remove        = modcomctl32.NewProc(\"ImageList_Remove\")\n\tprocTrackMouseEvent         = modcomctl32.NewProc(\"_TrackMouseEvent\")\n)\n\nfunc InitCommonControlsEx(lpInitCtrls *INITCOMMONCONTROLSEX) bool {\n\tret, _, _ := procInitCommonControlsEx.Call(\n\t\tuintptr(unsafe.Pointer(lpInitCtrls)))\n\n\treturn ret != 0\n}\n\nfunc ImageList_Create(cx, cy int, flags uint, cInitial, cGrow int) HIMAGELIST {\n\tret, _, _ := procImageList_Create.Call(\n\t\tuintptr(cx),\n\t\tuintptr(cy),\n\t\tuintptr(flags),\n\t\tuintptr(cInitial),\n\t\tuintptr(cGrow))\n\n\tif ret == 0 {\n\t\tpanic(\"Create image list failed\")\n\t}\n\n\treturn HIMAGELIST(ret)\n}\n\nfunc ImageList_Destroy(himl HIMAGELIST) bool {\n\tret, _, _ := procImageList_Destroy.Call(\n\t\tuintptr(himl))\n\n\treturn ret != 0\n}\n\nfunc ImageList_GetImageCount(himl HIMAGELIST) int {\n\tret, _, _ := procImageList_GetImageCount.Call(\n\t\tuintptr(himl))\n\n\treturn int(ret)\n}\n\nfunc ImageList_SetImageCount(himl HIMAGELIST, uNewCount uint) bool {\n\tret, _, _ := procImageList_SetImageCount.Call(\n\t\tuintptr(himl),\n\t\tuintptr(uNewCount))\n\n\treturn ret != 0\n}\n\nfunc ImageList_Add(himl HIMAGELIST, hbmImage, hbmMask HBITMAP) int {\n\tret, _, _ := procImageList_Add.Call(\n\t\tuintptr(himl),\n\t\tuintptr(hbmImage),\n\t\tuintptr(hbmMask))\n\n\treturn int(ret)\n}\n\nfunc ImageList_ReplaceIcon(himl HIMAGELIST, i int, hicon HICON) int {\n\tret, _, _ := procImageList_ReplaceIcon.Call(\n\t\tuintptr(himl),\n\t\tuintptr(i),\n\t\tuintptr(hicon))\n\n\treturn int(ret)\n}\n\nfunc ImageList_AddIcon(himl HIMAGELIST, hicon HICON) int {\n\treturn ImageList_ReplaceIcon(himl, -1, hicon)\n}\n\nfunc ImageList_Remove(himl HIMAGELIST, i int) bool {\n\tret, _, _ := procImageList_Remove.Call(\n\t\tuintptr(himl),\n\t\tuintptr(i))\n\n\treturn ret != 0\n}\n\nfunc ImageList_RemoveAll(himl HIMAGELIST) bool {\n\treturn ImageList_Remove(himl, -1)\n}\n\nfunc TrackMouseEvent(tme *TRACKMOUSEEVENT) bool {\n\tret, _, _ := procTrackMouseEvent.Call(\n\t\tuintptr(unsafe.Pointer(tme)))\n\n\treturn ret != 0\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/comdlg32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodcomdlg32 = syscall.NewLazyDLL(\"comdlg32.dll\")\n\n\tprocGetSaveFileName      = modcomdlg32.NewProc(\"GetSaveFileNameW\")\n\tprocGetOpenFileName      = modcomdlg32.NewProc(\"GetOpenFileNameW\")\n\tprocCommDlgExtendedError = modcomdlg32.NewProc(\"CommDlgExtendedError\")\n)\n\nfunc GetOpenFileName(ofn *OPENFILENAME) bool {\n\tret, _, _ := procGetOpenFileName.Call(\n\t\tuintptr(unsafe.Pointer(ofn)))\n\n\treturn ret != 0\n}\n\nfunc GetSaveFileName(ofn *OPENFILENAME) bool {\n\tret, _, _ := procGetSaveFileName.Call(\n\t\tuintptr(unsafe.Pointer(ofn)))\n\n\treturn ret != 0\n}\n\nfunc CommDlgExtendedError() uint {\n\tret, _, _ := procCommDlgExtendedError.Call()\n\n\treturn uint(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/constants.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nconst (\n\tFALSE = 0\n\tTRUE  = 1\n)\n\nconst (\n\tNO_ERROR                         = 0\n\tERROR_SUCCESS                    = 0\n\tERROR_FILE_NOT_FOUND             = 2\n\tERROR_PATH_NOT_FOUND             = 3\n\tERROR_ACCESS_DENIED              = 5\n\tERROR_INVALID_HANDLE             = 6\n\tERROR_BAD_FORMAT                 = 11\n\tERROR_INVALID_NAME               = 123\n\tERROR_MORE_DATA                  = 234\n\tERROR_NO_MORE_ITEMS              = 259\n\tERROR_INVALID_SERVICE_CONTROL    = 1052\n\tERROR_SERVICE_REQUEST_TIMEOUT    = 1053\n\tERROR_SERVICE_NO_THREAD          = 1054\n\tERROR_SERVICE_DATABASE_LOCKED    = 1055\n\tERROR_SERVICE_ALREADY_RUNNING    = 1056\n\tERROR_SERVICE_DISABLED           = 1058\n\tERROR_SERVICE_DOES_NOT_EXIST     = 1060\n\tERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061\n\tERROR_SERVICE_NOT_ACTIVE         = 1062\n\tERROR_DATABASE_DOES_NOT_EXIST    = 1065\n\tERROR_SERVICE_DEPENDENCY_FAIL    = 1068\n\tERROR_SERVICE_LOGON_FAILED       = 1069\n\tERROR_SERVICE_MARKED_FOR_DELETE  = 1072\n\tERROR_SERVICE_DEPENDENCY_DELETED = 1075\n)\n\nconst (\n\tSE_ERR_FNF             = 2\n\tSE_ERR_PNF             = 3\n\tSE_ERR_ACCESSDENIED    = 5\n\tSE_ERR_OOM             = 8\n\tSE_ERR_DLLNOTFOUND     = 32\n\tSE_ERR_SHARE           = 26\n\tSE_ERR_ASSOCINCOMPLETE = 27\n\tSE_ERR_DDETIMEOUT      = 28\n\tSE_ERR_DDEFAIL         = 29\n\tSE_ERR_DDEBUSY         = 30\n\tSE_ERR_NOASSOC         = 31\n)\n\nconst (\n\tCW_USEDEFAULT = ^0x7fffffff\n)\n\n// ShowWindow constants\nconst (\n\tSW_HIDE            = 0\n\tSW_NORMAL          = 1\n\tSW_SHOWNORMAL      = 1\n\tSW_SHOWMINIMIZED   = 2\n\tSW_MAXIMIZE        = 3\n\tSW_SHOWMAXIMIZED   = 3\n\tSW_SHOWNOACTIVATE  = 4\n\tSW_SHOW            = 5\n\tSW_MINIMIZE        = 6\n\tSW_SHOWMINNOACTIVE = 7\n\tSW_SHOWNA          = 8\n\tSW_RESTORE         = 9\n\tSW_SHOWDEFAULT     = 10\n\tSW_FORCEMINIMIZE   = 11\n)\n\n// Window class styles\nconst (\n\tCS_VREDRAW         = 0x00000001\n\tCS_HREDRAW         = 0x00000002\n\tCS_KEYCVTWINDOW    = 0x00000004\n\tCS_DBLCLKS         = 0x00000008\n\tCS_OWNDC           = 0x00000020\n\tCS_CLASSDC         = 0x00000040\n\tCS_PARENTDC        = 0x00000080\n\tCS_NOKEYCVT        = 0x00000100\n\tCS_NOCLOSE         = 0x00000200\n\tCS_SAVEBITS        = 0x00000800\n\tCS_BYTEALIGNCLIENT = 0x00001000\n\tCS_BYTEALIGNWINDOW = 0x00002000\n\tCS_GLOBALCLASS     = 0x00004000\n\tCS_IME             = 0x00010000\n\tCS_DROPSHADOW      = 0x00020000\n)\n\n// Predefined cursor constants\nconst (\n\tIDC_ARROW       = 32512\n\tIDC_IBEAM       = 32513\n\tIDC_WAIT        = 32514\n\tIDC_CROSS       = 32515\n\tIDC_UPARROW     = 32516\n\tIDC_SIZENWSE    = 32642\n\tIDC_SIZENESW    = 32643\n\tIDC_SIZEWE      = 32644\n\tIDC_SIZENS      = 32645\n\tIDC_SIZEALL     = 32646\n\tIDC_NO          = 32648\n\tIDC_HAND        = 32649\n\tIDC_APPSTARTING = 32650\n\tIDC_HELP        = 32651\n\tIDC_ICON        = 32641\n\tIDC_SIZE        = 32640\n)\n\n// Predefined icon constants\nconst (\n\tIDI_APPLICATION = 32512\n\tIDI_HAND        = 32513\n\tIDI_QUESTION    = 32514\n\tIDI_EXCLAMATION = 32515\n\tIDI_ASTERISK    = 32516\n\tIDI_WINLOGO     = 32517\n\tIDI_WARNING     = IDI_EXCLAMATION\n\tIDI_ERROR       = IDI_HAND\n\tIDI_INFORMATION = IDI_ASTERISK\n)\n\n// Button style constants\nconst (\n\tBS_3STATE          = 5\n\tBS_AUTO3STATE      = 6\n\tBS_AUTOCHECKBOX    = 3\n\tBS_AUTORADIOBUTTON = 9\n\tBS_BITMAP          = 128\n\tBS_BOTTOM          = 0X800\n\tBS_CENTER          = 0X300\n\tBS_CHECKBOX        = 2\n\tBS_DEFPUSHBUTTON   = 1\n\tBS_GROUPBOX        = 7\n\tBS_ICON            = 64\n\tBS_LEFT            = 256\n\tBS_LEFTTEXT        = 32\n\tBS_MULTILINE       = 0X2000\n\tBS_NOTIFY          = 0X4000\n\tBS_OWNERDRAW       = 0XB\n\tBS_PUSHBUTTON      = 0\n\tBS_PUSHLIKE        = 4096\n\tBS_RADIOBUTTON     = 4\n\tBS_RIGHT           = 512\n\tBS_RIGHTBUTTON     = 32\n\tBS_TEXT            = 0\n\tBS_TOP             = 0X400\n\tBS_USERBUTTON      = 8\n\tBS_VCENTER         = 0XC00\n\tBS_FLAT            = 0X8000\n)\n\n// Button state constants\nconst (\n\tBST_CHECKED       = 1\n\tBST_INDETERMINATE = 2\n\tBST_UNCHECKED     = 0\n\tBST_FOCUS         = 8\n\tBST_PUSHED        = 4\n)\n\n// Predefined brushes constants\nconst (\n\tCOLOR_3DDKSHADOW              = 21\n\tCOLOR_3DFACE                  = 15\n\tCOLOR_3DHILIGHT               = 20\n\tCOLOR_3DHIGHLIGHT             = 20\n\tCOLOR_3DLIGHT                 = 22\n\tCOLOR_BTNHILIGHT              = 20\n\tCOLOR_3DSHADOW                = 16\n\tCOLOR_ACTIVEBORDER            = 10\n\tCOLOR_ACTIVECAPTION           = 2\n\tCOLOR_APPWORKSPACE            = 12\n\tCOLOR_BACKGROUND              = 1\n\tCOLOR_DESKTOP                 = 1\n\tCOLOR_BTNFACE                 = 15\n\tCOLOR_BTNHIGHLIGHT            = 20\n\tCOLOR_BTNSHADOW               = 16\n\tCOLOR_BTNTEXT                 = 18\n\tCOLOR_CAPTIONTEXT             = 9\n\tCOLOR_GRAYTEXT                = 17\n\tCOLOR_HIGHLIGHT               = 13\n\tCOLOR_HIGHLIGHTTEXT           = 14\n\tCOLOR_INACTIVEBORDER          = 11\n\tCOLOR_INACTIVECAPTION         = 3\n\tCOLOR_INACTIVECAPTIONTEXT     = 19\n\tCOLOR_INFOBK                  = 24\n\tCOLOR_INFOTEXT                = 23\n\tCOLOR_MENU                    = 4\n\tCOLOR_MENUTEXT                = 7\n\tCOLOR_SCROLLBAR               = 0\n\tCOLOR_WINDOW                  = 5\n\tCOLOR_WINDOWFRAME             = 6\n\tCOLOR_WINDOWTEXT              = 8\n\tCOLOR_HOTLIGHT                = 26\n\tCOLOR_GRADIENTACTIVECAPTION   = 27\n\tCOLOR_GRADIENTINACTIVECAPTION = 28\n)\n\n// Button message constants\nconst (\n\tBM_CLICK    = 245\n\tBM_GETCHECK = 240\n\tBM_GETIMAGE = 246\n\tBM_GETSTATE = 242\n\tBM_SETCHECK = 241\n\tBM_SETIMAGE = 247\n\tBM_SETSTATE = 243\n\tBM_SETSTYLE = 244\n)\n\n// Button notifications\nconst (\n\tBN_CLICKED       = 0\n\tBN_PAINT         = 1\n\tBN_HILITE        = 2\n\tBN_PUSHED        = BN_HILITE\n\tBN_UNHILITE      = 3\n\tBN_UNPUSHED      = BN_UNHILITE\n\tBN_DISABLE       = 4\n\tBN_DOUBLECLICKED = 5\n\tBN_DBLCLK        = BN_DOUBLECLICKED\n\tBN_SETFOCUS      = 6\n\tBN_KILLFOCUS     = 7\n)\n\n// GetWindowLong and GetWindowLongPtr constants\nconst (\n\tGWL_EXSTYLE     = -20\n\tGWL_STYLE       = -16\n\tGWL_WNDPROC     = -4\n\tGWLP_WNDPROC    = -4\n\tGWL_HINSTANCE   = -6\n\tGWLP_HINSTANCE  = -6\n\tGWL_HWNDPARENT  = -8\n\tGWLP_HWNDPARENT = -8\n\tGWL_ID          = -12\n\tGWLP_ID         = -12\n\tGWL_USERDATA    = -21\n\tGWLP_USERDATA   = -21\n)\n\n// Window style constants\nconst (\n\tWS_OVERLAPPED       = 0X00000000\n\tWS_POPUP            = 0X80000000\n\tWS_CHILD            = 0X40000000\n\tWS_MINIMIZE         = 0X20000000\n\tWS_VISIBLE          = 0X10000000\n\tWS_DISABLED         = 0X08000000\n\tWS_CLIPSIBLINGS     = 0X04000000\n\tWS_CLIPCHILDREN     = 0X02000000\n\tWS_MAXIMIZE         = 0X01000000\n\tWS_CAPTION          = 0X00C00000\n\tWS_BORDER           = 0X00800000\n\tWS_DLGFRAME         = 0X00400000\n\tWS_VSCROLL          = 0X00200000\n\tWS_HSCROLL          = 0X00100000\n\tWS_SYSMENU          = 0X00080000\n\tWS_THICKFRAME       = 0X00040000\n\tWS_GROUP            = 0X00020000\n\tWS_TABSTOP          = 0X00010000\n\tWS_MINIMIZEBOX      = 0X00020000\n\tWS_MAXIMIZEBOX      = 0X00010000\n\tWS_TILED            = 0X00000000\n\tWS_ICONIC           = 0X20000000\n\tWS_SIZEBOX          = 0X00040000\n\tWS_OVERLAPPEDWINDOW = 0X00000000 | 0X00C00000 | 0X00080000 | 0X00040000 | 0X00020000 | 0X00010000\n\tWS_POPUPWINDOW      = 0X80000000 | 0X00800000 | 0X00080000\n\tWS_CHILDWINDOW      = 0X40000000\n)\n\n// Extended window style constants\nconst (\n\tWS_EX_DLGMODALFRAME    = 0X00000001\n\tWS_EX_NOPARENTNOTIFY   = 0X00000004\n\tWS_EX_TOPMOST          = 0X00000008\n\tWS_EX_ACCEPTFILES      = 0X00000010\n\tWS_EX_TRANSPARENT      = 0X00000020\n\tWS_EX_MDICHILD         = 0X00000040\n\tWS_EX_TOOLWINDOW       = 0X00000080\n\tWS_EX_WINDOWEDGE       = 0X00000100\n\tWS_EX_CLIENTEDGE       = 0X00000200\n\tWS_EX_CONTEXTHELP      = 0X00000400\n\tWS_EX_RIGHT            = 0X00001000\n\tWS_EX_LEFT             = 0X00000000\n\tWS_EX_RTLREADING       = 0X00002000\n\tWS_EX_LTRREADING       = 0X00000000\n\tWS_EX_LEFTSCROLLBAR    = 0X00004000\n\tWS_EX_RIGHTSCROLLBAR   = 0X00000000\n\tWS_EX_CONTROLPARENT    = 0X00010000\n\tWS_EX_STATICEDGE       = 0X00020000\n\tWS_EX_APPWINDOW        = 0X00040000\n\tWS_EX_OVERLAPPEDWINDOW = 0X00000100 | 0X00000200\n\tWS_EX_PALETTEWINDOW    = 0X00000100 | 0X00000080 | 0X00000008\n\tWS_EX_LAYERED          = 0X00080000\n\tWS_EX_NOINHERITLAYOUT  = 0X00100000\n\tWS_EX_LAYOUTRTL        = 0X00400000\n\tWS_EX_NOACTIVATE       = 0X08000000\n)\n\n// Window message constants\nconst (\n\tWM_APP                    = 32768\n\tWM_ACTIVATE               = 6\n\tWM_ACTIVATEAPP            = 28\n\tWM_AFXFIRST               = 864\n\tWM_AFXLAST                = 895\n\tWM_ASKCBFORMATNAME        = 780\n\tWM_CANCELJOURNAL          = 75\n\tWM_CANCELMODE             = 31\n\tWM_CAPTURECHANGED         = 533\n\tWM_CHANGECBCHAIN          = 781\n\tWM_CHAR                   = 258\n\tWM_CHARTOITEM             = 47\n\tWM_CHILDACTIVATE          = 34\n\tWM_CLEAR                  = 771\n\tWM_CLOSE                  = 16\n\tWM_COMMAND                = 273\n\tWM_COMMNOTIFY             = 68 /* OBSOLETE */\n\tWM_COMPACTING             = 65\n\tWM_COMPAREITEM            = 57\n\tWM_CONTEXTMENU            = 123\n\tWM_COPY                   = 769\n\tWM_COPYDATA               = 74\n\tWM_CREATE                 = 1\n\tWM_CTLCOLORBTN            = 309\n\tWM_CTLCOLORDLG            = 310\n\tWM_CTLCOLOREDIT           = 307\n\tWM_CTLCOLORLISTBOX        = 308\n\tWM_CTLCOLORMSGBOX         = 306\n\tWM_CTLCOLORSCROLLBAR      = 311\n\tWM_CTLCOLORSTATIC         = 312\n\tWM_CUT                    = 768\n\tWM_DEADCHAR               = 259\n\tWM_DELETEITEM             = 45\n\tWM_DESTROY                = 2\n\tWM_DESTROYCLIPBOARD       = 775\n\tWM_DEVICECHANGE           = 537\n\tWM_DEVMODECHANGE          = 27\n\tWM_DISPLAYCHANGE          = 126\n\tWM_DRAWCLIPBOARD          = 776\n\tWM_DRAWITEM               = 43\n\tWM_DROPFILES              = 563\n\tWM_ENABLE                 = 10\n\tWM_ENDSESSION             = 22\n\tWM_ENTERIDLE              = 289\n\tWM_ENTERMENULOOP          = 529\n\tWM_ENTERSIZEMOVE          = 561\n\tWM_ERASEBKGND             = 20\n\tWM_EXITMENULOOP           = 530\n\tWM_EXITSIZEMOVE           = 562\n\tWM_FONTCHANGE             = 29\n\tWM_GETDLGCODE             = 135\n\tWM_GETFONT                = 49\n\tWM_GETHOTKEY              = 51\n\tWM_GETICON                = 127\n\tWM_GETMINMAXINFO          = 36\n\tWM_GETTEXT                = 13\n\tWM_GETTEXTLENGTH          = 14\n\tWM_HANDHELDFIRST          = 856\n\tWM_HANDHELDLAST           = 863\n\tWM_HELP                   = 83\n\tWM_HOTKEY                 = 786\n\tWM_HSCROLL                = 276\n\tWM_HSCROLLCLIPBOARD       = 782\n\tWM_ICONERASEBKGND         = 39\n\tWM_INITDIALOG             = 272\n\tWM_INITMENU               = 278\n\tWM_INITMENUPOPUP          = 279\n\tWM_INPUT                  = 0X00FF\n\tWM_INPUTLANGCHANGE        = 81\n\tWM_INPUTLANGCHANGEREQUEST = 80\n\tWM_KEYDOWN                = 256\n\tWM_KEYUP                  = 257\n\tWM_KILLFOCUS              = 8\n\tWM_MDIACTIVATE            = 546\n\tWM_MDICASCADE             = 551\n\tWM_MDICREATE              = 544\n\tWM_MDIDESTROY             = 545\n\tWM_MDIGETACTIVE           = 553\n\tWM_MDIICONARRANGE         = 552\n\tWM_MDIMAXIMIZE            = 549\n\tWM_MDINEXT                = 548\n\tWM_MDIREFRESHMENU         = 564\n\tWM_MDIRESTORE             = 547\n\tWM_MDISETMENU             = 560\n\tWM_MDITILE                = 550\n\tWM_MEASUREITEM            = 44\n\tWM_GETOBJECT              = 0X003D\n\tWM_CHANGEUISTATE          = 0X0127\n\tWM_UPDATEUISTATE          = 0X0128\n\tWM_QUERYUISTATE           = 0X0129\n\tWM_UNINITMENUPOPUP        = 0X0125\n\tWM_MENURBUTTONUP          = 290\n\tWM_MENUCOMMAND            = 0X0126\n\tWM_MENUGETOBJECT          = 0X0124\n\tWM_MENUDRAG               = 0X0123\n\tWM_APPCOMMAND             = 0X0319\n\tWM_MENUCHAR               = 288\n\tWM_MENUSELECT             = 287\n\tWM_MOVE                   = 3\n\tWM_MOVING                 = 534\n\tWM_NCACTIVATE             = 134\n\tWM_NCCALCSIZE             = 131\n\tWM_NCCREATE               = 129\n\tWM_NCDESTROY              = 130\n\tWM_NCHITTEST              = 132\n\tWM_NCLBUTTONDBLCLK        = 163\n\tWM_NCLBUTTONDOWN          = 161\n\tWM_NCLBUTTONUP            = 162\n\tWM_NCMBUTTONDBLCLK        = 169\n\tWM_NCMBUTTONDOWN          = 167\n\tWM_NCMBUTTONUP            = 168\n\tWM_NCXBUTTONDOWN          = 171\n\tWM_NCXBUTTONUP            = 172\n\tWM_NCXBUTTONDBLCLK        = 173\n\tWM_NCMOUSEHOVER           = 0X02A0\n\tWM_NCMOUSELEAVE           = 0X02A2\n\tWM_NCMOUSEMOVE            = 160\n\tWM_NCPAINT                = 133\n\tWM_NCRBUTTONDBLCLK        = 166\n\tWM_NCRBUTTONDOWN          = 164\n\tWM_NCRBUTTONUP            = 165\n\tWM_NEXTDLGCTL             = 40\n\tWM_NEXTMENU               = 531\n\tWM_NOTIFY                 = 78\n\tWM_NOTIFYFORMAT           = 85\n\tWM_NULL                   = 0\n\tWM_PAINT                  = 15\n\tWM_PAINTCLIPBOARD         = 777\n\tWM_PAINTICON              = 38\n\tWM_PALETTECHANGED         = 785\n\tWM_PALETTEISCHANGING      = 784\n\tWM_PARENTNOTIFY           = 528\n\tWM_PASTE                  = 770\n\tWM_PENWINFIRST            = 896\n\tWM_PENWINLAST             = 911\n\tWM_POWER                  = 72\n\tWM_POWERBROADCAST         = 536\n\tWM_PRINT                  = 791\n\tWM_PRINTCLIENT            = 792\n\tWM_QUERYDRAGICON          = 55\n\tWM_QUERYENDSESSION        = 17\n\tWM_QUERYNEWPALETTE        = 783\n\tWM_QUERYOPEN              = 19\n\tWM_QUEUESYNC              = 35\n\tWM_QUIT                   = 18\n\tWM_RENDERALLFORMATS       = 774\n\tWM_RENDERFORMAT           = 773\n\tWM_SETCURSOR              = 32\n\tWM_SETFOCUS               = 7\n\tWM_SETFONT                = 48\n\tWM_SETHOTKEY              = 50\n\tWM_SETICON                = 128\n\tWM_SETREDRAW              = 11\n\tWM_SETTEXT                = 12\n\tWM_SETTINGCHANGE          = 26\n\tWM_SHOWWINDOW             = 24\n\tWM_SIZE                   = 5\n\tWM_SIZECLIPBOARD          = 779\n\tWM_SIZING                 = 532\n\tWM_SPOOLERSTATUS          = 42\n\tWM_STYLECHANGED           = 125\n\tWM_STYLECHANGING          = 124\n\tWM_SYSCHAR                = 262\n\tWM_SYSCOLORCHANGE         = 21\n\tWM_SYSCOMMAND             = 274\n\tWM_SYSDEADCHAR            = 263\n\tWM_SYSKEYDOWN             = 260\n\tWM_SYSKEYUP               = 261\n\tWM_TCARD                  = 82\n\tWM_THEMECHANGED           = 794\n\tWM_TIMECHANGE             = 30\n\tWM_TIMER                  = 275\n\tWM_UNDO                   = 772\n\tWM_USER                   = 1024\n\tWM_USERCHANGED            = 84\n\tWM_VKEYTOITEM             = 46\n\tWM_VSCROLL                = 277\n\tWM_VSCROLLCLIPBOARD       = 778\n\tWM_WINDOWPOSCHANGED       = 71\n\tWM_WINDOWPOSCHANGING      = 70\n\tWM_WININICHANGE           = 26\n\tWM_KEYFIRST               = 256\n\tWM_KEYLAST                = 264\n\tWM_SYNCPAINT              = 136\n\tWM_MOUSEACTIVATE          = 33\n\tWM_MOUSEMOVE              = 512\n\tWM_LBUTTONDOWN            = 513\n\tWM_LBUTTONUP              = 514\n\tWM_LBUTTONDBLCLK          = 515\n\tWM_RBUTTONDOWN            = 516\n\tWM_RBUTTONUP              = 517\n\tWM_RBUTTONDBLCLK          = 518\n\tWM_MBUTTONDOWN            = 519\n\tWM_MBUTTONUP              = 520\n\tWM_MBUTTONDBLCLK          = 521\n\tWM_MOUSEWHEEL             = 522\n\tWM_MOUSEFIRST             = 512\n\tWM_XBUTTONDOWN            = 523\n\tWM_XBUTTONUP              = 524\n\tWM_XBUTTONDBLCLK          = 525\n\tWM_MOUSELAST              = 525\n\tWM_MOUSEHOVER             = 0X2A1\n\tWM_MOUSELEAVE             = 0X2A3\n\tWM_CLIPBOARDUPDATE        = 0x031D\n)\n\n// WM_ACTIVATE\nconst (\n\tWA_INACTIVE    = 0\n\tWA_ACTIVE      = 1\n\tWA_CLICKACTIVE = 2\n)\n\nconst LF_FACESIZE = 32\n\n// Font weight constants\nconst (\n\tFW_DONTCARE   = 0\n\tFW_THIN       = 100\n\tFW_EXTRALIGHT = 200\n\tFW_ULTRALIGHT = FW_EXTRALIGHT\n\tFW_LIGHT      = 300\n\tFW_NORMAL     = 400\n\tFW_REGULAR    = 400\n\tFW_MEDIUM     = 500\n\tFW_SEMIBOLD   = 600\n\tFW_DEMIBOLD   = FW_SEMIBOLD\n\tFW_BOLD       = 700\n\tFW_EXTRABOLD  = 800\n\tFW_ULTRABOLD  = FW_EXTRABOLD\n\tFW_HEAVY      = 900\n\tFW_BLACK      = FW_HEAVY\n)\n\n// Charset constants\nconst (\n\tANSI_CHARSET        = 0\n\tDEFAULT_CHARSET     = 1\n\tSYMBOL_CHARSET      = 2\n\tSHIFTJIS_CHARSET    = 128\n\tHANGEUL_CHARSET     = 129\n\tHANGUL_CHARSET      = 129\n\tGB2312_CHARSET      = 134\n\tCHINESEBIG5_CHARSET = 136\n\tGREEK_CHARSET       = 161\n\tTURKISH_CHARSET     = 162\n\tHEBREW_CHARSET      = 177\n\tARABIC_CHARSET      = 178\n\tBALTIC_CHARSET      = 186\n\tRUSSIAN_CHARSET     = 204\n\tTHAI_CHARSET        = 222\n\tEASTEUROPE_CHARSET  = 238\n\tOEM_CHARSET         = 255\n\tJOHAB_CHARSET       = 130\n\tVIETNAMESE_CHARSET  = 163\n\tMAC_CHARSET         = 77\n)\n\n// Font output precision constants\nconst (\n\tOUT_DEFAULT_PRECIS   = 0\n\tOUT_STRING_PRECIS    = 1\n\tOUT_CHARACTER_PRECIS = 2\n\tOUT_STROKE_PRECIS    = 3\n\tOUT_TT_PRECIS        = 4\n\tOUT_DEVICE_PRECIS    = 5\n\tOUT_RASTER_PRECIS    = 6\n\tOUT_TT_ONLY_PRECIS   = 7\n\tOUT_OUTLINE_PRECIS   = 8\n\tOUT_PS_ONLY_PRECIS   = 10\n)\n\n// Font clipping precision constants\nconst (\n\tCLIP_DEFAULT_PRECIS   = 0\n\tCLIP_CHARACTER_PRECIS = 1\n\tCLIP_STROKE_PRECIS    = 2\n\tCLIP_MASK             = 15\n\tCLIP_LH_ANGLES        = 16\n\tCLIP_TT_ALWAYS        = 32\n\tCLIP_EMBEDDED         = 128\n)\n\n// Font output quality constants\nconst (\n\tDEFAULT_QUALITY        = 0\n\tDRAFT_QUALITY          = 1\n\tPROOF_QUALITY          = 2\n\tNONANTIALIASED_QUALITY = 3\n\tANTIALIASED_QUALITY    = 4\n\tCLEARTYPE_QUALITY      = 5\n)\n\n// Font pitch constants\nconst (\n\tDEFAULT_PITCH  = 0\n\tFIXED_PITCH    = 1\n\tVARIABLE_PITCH = 2\n)\n\n// Font family constants\nconst (\n\tFF_DECORATIVE = 80\n\tFF_DONTCARE   = 0\n\tFF_MODERN     = 48\n\tFF_ROMAN      = 16\n\tFF_SCRIPT     = 64\n\tFF_SWISS      = 32\n)\n\n// DeviceCapabilities capabilities\nconst (\n\tDC_FIELDS            = 1\n\tDC_PAPERS            = 2\n\tDC_PAPERSIZE         = 3\n\tDC_MINEXTENT         = 4\n\tDC_MAXEXTENT         = 5\n\tDC_BINS              = 6\n\tDC_DUPLEX            = 7\n\tDC_SIZE              = 8\n\tDC_EXTRA             = 9\n\tDC_VERSION           = 10\n\tDC_DRIVER            = 11\n\tDC_BINNAMES          = 12\n\tDC_ENUMRESOLUTIONS   = 13\n\tDC_FILEDEPENDENCIES  = 14\n\tDC_TRUETYPE          = 15\n\tDC_PAPERNAMES        = 16\n\tDC_ORIENTATION       = 17\n\tDC_COPIES            = 18\n\tDC_BINADJUST         = 19\n\tDC_EMF_COMPLIANT     = 20\n\tDC_DATATYPE_PRODUCED = 21\n\tDC_COLLATE           = 22\n\tDC_MANUFACTURER      = 23\n\tDC_MODEL             = 24\n\tDC_PERSONALITY       = 25\n\tDC_PRINTRATE         = 26\n\tDC_PRINTRATEUNIT     = 27\n\tDC_PRINTERMEM        = 28\n\tDC_MEDIAREADY        = 29\n\tDC_STAPLE            = 30\n\tDC_PRINTRATEPPM      = 31\n\tDC_COLORDEVICE       = 32\n\tDC_NUP               = 33\n\tDC_MEDIATYPENAMES    = 34\n\tDC_MEDIATYPES        = 35\n)\n\n// GetDeviceCaps index constants\nconst (\n\tDRIVERVERSION   = 0\n\tTECHNOLOGY      = 2\n\tHORZSIZE        = 4\n\tVERTSIZE        = 6\n\tHORZRES         = 8\n\tVERTRES         = 10\n\tLOGPIXELSX      = 88\n\tLOGPIXELSY      = 90\n\tBITSPIXEL       = 12\n\tPLANES          = 14\n\tNUMBRUSHES      = 16\n\tNUMPENS         = 18\n\tNUMFONTS        = 22\n\tNUMCOLORS       = 24\n\tNUMMARKERS      = 20\n\tASPECTX         = 40\n\tASPECTY         = 42\n\tASPECTXY        = 44\n\tPDEVICESIZE     = 26\n\tCLIPCAPS        = 36\n\tSIZEPALETTE     = 104\n\tNUMRESERVED     = 106\n\tCOLORRES        = 108\n\tPHYSICALWIDTH   = 110\n\tPHYSICALHEIGHT  = 111\n\tPHYSICALOFFSETX = 112\n\tPHYSICALOFFSETY = 113\n\tSCALINGFACTORX  = 114\n\tSCALINGFACTORY  = 115\n\tVREFRESH        = 116\n\tDESKTOPHORZRES  = 118\n\tDESKTOPVERTRES  = 117\n\tBLTALIGNMENT    = 119\n\tSHADEBLENDCAPS  = 120\n\tCOLORMGMTCAPS   = 121\n\tRASTERCAPS      = 38\n\tCURVECAPS       = 28\n\tLINECAPS        = 30\n\tPOLYGONALCAPS   = 32\n\tTEXTCAPS        = 34\n)\n\n// GetDeviceCaps TECHNOLOGY constants\nconst (\n\tDT_PLOTTER    = 0\n\tDT_RASDISPLAY = 1\n\tDT_RASPRINTER = 2\n\tDT_RASCAMERA  = 3\n\tDT_CHARSTREAM = 4\n\tDT_METAFILE   = 5\n\tDT_DISPFILE   = 6\n)\n\n// GetDeviceCaps SHADEBLENDCAPS constants\nconst (\n\tSB_NONE          = 0x00\n\tSB_CONST_ALPHA   = 0x01\n\tSB_PIXEL_ALPHA   = 0x02\n\tSB_PREMULT_ALPHA = 0x04\n\tSB_GRAD_RECT     = 0x10\n\tSB_GRAD_TRI      = 0x20\n)\n\n// GetDeviceCaps COLORMGMTCAPS constants\nconst (\n\tCM_NONE       = 0x00\n\tCM_DEVICE_ICM = 0x01\n\tCM_GAMMA_RAMP = 0x02\n\tCM_CMYK_COLOR = 0x04\n)\n\n// GetDeviceCaps RASTERCAPS constants\nconst (\n\tRC_BANDING      = 2\n\tRC_BITBLT       = 1\n\tRC_BITMAP64     = 8\n\tRC_DI_BITMAP    = 128\n\tRC_DIBTODEV     = 512\n\tRC_FLOODFILL    = 4096\n\tRC_GDI20_OUTPUT = 16\n\tRC_PALETTE      = 256\n\tRC_SCALING      = 4\n\tRC_STRETCHBLT   = 2048\n\tRC_STRETCHDIB   = 8192\n\tRC_DEVBITS      = 0x8000\n\tRC_OP_DX_OUTPUT = 0x4000\n)\n\n// GetDeviceCaps CURVECAPS constants\nconst (\n\tCC_NONE       = 0\n\tCC_CIRCLES    = 1\n\tCC_PIE        = 2\n\tCC_CHORD      = 4\n\tCC_ELLIPSES   = 8\n\tCC_WIDE       = 16\n\tCC_STYLED     = 32\n\tCC_WIDESTYLED = 64\n\tCC_INTERIORS  = 128\n\tCC_ROUNDRECT  = 256\n)\n\n// GetDeviceCaps LINECAPS constants\nconst (\n\tLC_NONE       = 0\n\tLC_POLYLINE   = 2\n\tLC_MARKER     = 4\n\tLC_POLYMARKER = 8\n\tLC_WIDE       = 16\n\tLC_STYLED     = 32\n\tLC_WIDESTYLED = 64\n\tLC_INTERIORS  = 128\n)\n\n// GetDeviceCaps POLYGONALCAPS constants\nconst (\n\tPC_NONE        = 0\n\tPC_POLYGON     = 1\n\tPC_POLYPOLYGON = 256\n\tPC_PATHS       = 512\n\tPC_RECTANGLE   = 2\n\tPC_WINDPOLYGON = 4\n\tPC_SCANLINE    = 8\n\tPC_TRAPEZOID   = 4\n\tPC_WIDE        = 16\n\tPC_STYLED      = 32\n\tPC_WIDESTYLED  = 64\n\tPC_INTERIORS   = 128\n)\n\n// GetDeviceCaps TEXTCAPS constants\nconst (\n\tTC_OP_CHARACTER = 1\n\tTC_OP_STROKE    = 2\n\tTC_CP_STROKE    = 4\n\tTC_CR_90        = 8\n\tTC_CR_ANY       = 16\n\tTC_SF_X_YINDEP  = 32\n\tTC_SA_DOUBLE    = 64\n\tTC_SA_INTEGER   = 128\n\tTC_SA_CONTIN    = 256\n\tTC_EA_DOUBLE    = 512\n\tTC_IA_ABLE      = 1024\n\tTC_UA_ABLE      = 2048\n\tTC_SO_ABLE      = 4096\n\tTC_RA_ABLE      = 8192\n\tTC_VA_ABLE      = 16384\n\tTC_RESERVED     = 32768\n\tTC_SCROLLBLT    = 65536\n)\n\n// Static control styles\nconst (\n\tSS_BITMAP          = 14\n\tSS_BLACKFRAME      = 7\n\tSS_BLACKRECT       = 4\n\tSS_CENTER          = 1\n\tSS_CENTERIMAGE     = 512\n\tSS_EDITCONTROL     = 0x2000\n\tSS_ENHMETAFILE     = 15\n\tSS_ETCHEDFRAME     = 18\n\tSS_ETCHEDHORZ      = 16\n\tSS_ETCHEDVERT      = 17\n\tSS_GRAYFRAME       = 8\n\tSS_GRAYRECT        = 5\n\tSS_ICON            = 3\n\tSS_LEFT            = 0\n\tSS_LEFTNOWORDWRAP  = 0xc\n\tSS_NOPREFIX        = 128\n\tSS_NOTIFY          = 256\n\tSS_OWNERDRAW       = 0xd\n\tSS_REALSIZECONTROL = 0x040\n\tSS_REALSIZEIMAGE   = 0x800\n\tSS_RIGHT           = 2\n\tSS_RIGHTJUST       = 0x400\n\tSS_SIMPLE          = 11\n\tSS_SUNKEN          = 4096\n\tSS_WHITEFRAME      = 9\n\tSS_WHITERECT       = 6\n\tSS_USERITEM        = 10\n\tSS_TYPEMASK        = 0x0000001F\n\tSS_ENDELLIPSIS     = 0x00004000\n\tSS_PATHELLIPSIS    = 0x00008000\n\tSS_WORDELLIPSIS    = 0x0000C000\n\tSS_ELLIPSISMASK    = 0x0000C000\n)\n\n// Edit styles\nconst (\n\tES_LEFT        = 0x0000\n\tES_CENTER      = 0x0001\n\tES_RIGHT       = 0x0002\n\tES_MULTILINE   = 0x0004\n\tES_UPPERCASE   = 0x0008\n\tES_LOWERCASE   = 0x0010\n\tES_PASSWORD    = 0x0020\n\tES_AUTOVSCROLL = 0x0040\n\tES_AUTOHSCROLL = 0x0080\n\tES_NOHIDESEL   = 0x0100\n\tES_OEMCONVERT  = 0x0400\n\tES_READONLY    = 0x0800\n\tES_WANTRETURN  = 0x1000\n\tES_NUMBER      = 0x2000\n)\n\n// Edit notifications\nconst (\n\tEN_SETFOCUS     = 0x0100\n\tEN_KILLFOCUS    = 0x0200\n\tEN_CHANGE       = 0x0300\n\tEN_UPDATE       = 0x0400\n\tEN_ERRSPACE     = 0x0500\n\tEN_MAXTEXT      = 0x0501\n\tEN_HSCROLL      = 0x0601\n\tEN_VSCROLL      = 0x0602\n\tEN_ALIGN_LTR_EC = 0x0700\n\tEN_ALIGN_RTL_EC = 0x0701\n)\n\n// Edit messages\nconst (\n\tEM_GETSEL              = 0x00B0\n\tEM_SETSEL              = 0x00B1\n\tEM_GETRECT             = 0x00B2\n\tEM_SETRECT             = 0x00B3\n\tEM_SETRECTNP           = 0x00B4\n\tEM_SCROLL              = 0x00B5\n\tEM_LINESCROLL          = 0x00B6\n\tEM_SCROLLCARET         = 0x00B7\n\tEM_GETMODIFY           = 0x00B8\n\tEM_SETMODIFY           = 0x00B9\n\tEM_GETLINECOUNT        = 0x00BA\n\tEM_LINEINDEX           = 0x00BB\n\tEM_SETHANDLE           = 0x00BC\n\tEM_GETHANDLE           = 0x00BD\n\tEM_GETTHUMB            = 0x00BE\n\tEM_LINELENGTH          = 0x00C1\n\tEM_REPLACESEL          = 0x00C2\n\tEM_GETLINE             = 0x00C4\n\tEM_LIMITTEXT           = 0x00C5\n\tEM_CANUNDO             = 0x00C6\n\tEM_UNDO                = 0x00C7\n\tEM_FMTLINES            = 0x00C8\n\tEM_LINEFROMCHAR        = 0x00C9\n\tEM_SETTABSTOPS         = 0x00CB\n\tEM_SETPASSWORDCHAR     = 0x00CC\n\tEM_EMPTYUNDOBUFFER     = 0x00CD\n\tEM_GETFIRSTVISIBLELINE = 0x00CE\n\tEM_SETREADONLY         = 0x00CF\n\tEM_SETWORDBREAKPROC    = 0x00D0\n\tEM_GETWORDBREAKPROC    = 0x00D1\n\tEM_GETPASSWORDCHAR     = 0x00D2\n\tEM_SETMARGINS          = 0x00D3\n\tEM_GETMARGINS          = 0x00D4\n\tEM_SETLIMITTEXT        = EM_LIMITTEXT\n\tEM_GETLIMITTEXT        = 0x00D5\n\tEM_POSFROMCHAR         = 0x00D6\n\tEM_CHARFROMPOS         = 0x00D7\n\tEM_SETIMESTATUS        = 0x00D8\n\tEM_GETIMESTATUS        = 0x00D9\n\tEM_SETCUEBANNER        = 0x1501\n\tEM_GETCUEBANNER        = 0x1502\n)\n\nconst (\n\tCCM_FIRST            = 0x2000\n\tCCM_LAST             = CCM_FIRST + 0x200\n\tCCM_SETBKCOLOR       = 8193\n\tCCM_SETCOLORSCHEME   = 8194\n\tCCM_GETCOLORSCHEME   = 8195\n\tCCM_GETDROPTARGET    = 8196\n\tCCM_SETUNICODEFORMAT = 8197\n\tCCM_GETUNICODEFORMAT = 8198\n\tCCM_SETVERSION       = 0x2007\n\tCCM_GETVERSION       = 0x2008\n\tCCM_SETNOTIFYWINDOW  = 0x2009\n\tCCM_SETWINDOWTHEME   = 0x200b\n\tCCM_DPISCALE         = 0x200c\n)\n\n// Common controls styles\nconst (\n\tCCS_TOP           = 1\n\tCCS_NOMOVEY       = 2\n\tCCS_BOTTOM        = 3\n\tCCS_NORESIZE      = 4\n\tCCS_NOPARENTALIGN = 8\n\tCCS_ADJUSTABLE    = 32\n\tCCS_NODIVIDER     = 64\n\tCCS_VERT          = 128\n\tCCS_LEFT          = 129\n\tCCS_NOMOVEX       = 130\n\tCCS_RIGHT         = 131\n)\n\n// ProgressBar messages\nconst (\n\tPROGRESS_CLASS  = \"msctls_progress32\"\n\tPBM_SETPOS      = WM_USER + 2\n\tPBM_DELTAPOS    = WM_USER + 3\n\tPBM_SETSTEP     = WM_USER + 4\n\tPBM_STEPIT      = WM_USER + 5\n\tPBM_SETRANGE32  = 1030\n\tPBM_GETRANGE    = 1031\n\tPBM_GETPOS      = 1032\n\tPBM_SETBARCOLOR = 1033\n\tPBM_SETBKCOLOR  = CCM_SETBKCOLOR\n\tPBS_SMOOTH      = 1\n\tPBS_VERTICAL    = 4\n)\n\n// GetOpenFileName and GetSaveFileName extended flags\nconst (\n\tOFN_EX_NOPLACESBAR = 0x00000001\n)\n\n// GetOpenFileName and GetSaveFileName flags\nconst (\n\tOFN_ALLOWMULTISELECT     = 0x00000200\n\tOFN_CREATEPROMPT         = 0x00002000\n\tOFN_DONTADDTORECENT      = 0x02000000\n\tOFN_ENABLEHOOK           = 0x00000020\n\tOFN_ENABLEINCLUDENOTIFY  = 0x00400000\n\tOFN_ENABLESIZING         = 0x00800000\n\tOFN_ENABLETEMPLATE       = 0x00000040\n\tOFN_ENABLETEMPLATEHANDLE = 0x00000080\n\tOFN_EXPLORER             = 0x00080000\n\tOFN_EXTENSIONDIFFERENT   = 0x00000400\n\tOFN_FILEMUSTEXIST        = 0x00001000\n\tOFN_FORCESHOWHIDDEN      = 0x10000000\n\tOFN_HIDEREADONLY         = 0x00000004\n\tOFN_LONGNAMES            = 0x00200000\n\tOFN_NOCHANGEDIR          = 0x00000008\n\tOFN_NODEREFERENCELINKS   = 0x00100000\n\tOFN_NOLONGNAMES          = 0x00040000\n\tOFN_NONETWORKBUTTON      = 0x00020000\n\tOFN_NOREADONLYRETURN     = 0x00008000\n\tOFN_NOTESTFILECREATE     = 0x00010000\n\tOFN_NOVALIDATE           = 0x00000100\n\tOFN_OVERWRITEPROMPT      = 0x00000002\n\tOFN_PATHMUSTEXIST        = 0x00000800\n\tOFN_READONLY             = 0x00000001\n\tOFN_SHAREAWARE           = 0x00004000\n\tOFN_SHOWHELP             = 0x00000010\n)\n\n//SHBrowseForFolder flags\nconst (\n\tBIF_RETURNONLYFSDIRS    = 0x00000001\n\tBIF_DONTGOBELOWDOMAIN   = 0x00000002\n\tBIF_STATUSTEXT          = 0x00000004\n\tBIF_RETURNFSANCESTORS   = 0x00000008\n\tBIF_EDITBOX             = 0x00000010\n\tBIF_VALIDATE            = 0x00000020\n\tBIF_NEWDIALOGSTYLE      = 0x00000040\n\tBIF_BROWSEINCLUDEURLS   = 0x00000080\n\tBIF_USENEWUI            = BIF_EDITBOX | BIF_NEWDIALOGSTYLE\n\tBIF_UAHINT              = 0x00000100\n\tBIF_NONEWFOLDERBUTTON   = 0x00000200\n\tBIF_NOTRANSLATETARGETS  = 0x00000400\n\tBIF_BROWSEFORCOMPUTER   = 0x00001000\n\tBIF_BROWSEFORPRINTER    = 0x00002000\n\tBIF_BROWSEINCLUDEFILES  = 0x00004000\n\tBIF_SHAREABLE           = 0x00008000\n\tBIF_BROWSEFILEJUNCTIONS = 0x00010000\n)\n\n//MessageBox flags\nconst (\n\tMB_OK                = 0x00000000\n\tMB_OKCANCEL          = 0x00000001\n\tMB_ABORTRETRYIGNORE  = 0x00000002\n\tMB_YESNOCANCEL       = 0x00000003\n\tMB_YESNO             = 0x00000004\n\tMB_RETRYCANCEL       = 0x00000005\n\tMB_CANCELTRYCONTINUE = 0x00000006\n\tMB_ICONHAND          = 0x00000010\n\tMB_ICONQUESTION      = 0x00000020\n\tMB_ICONEXCLAMATION   = 0x00000030\n\tMB_ICONASTERISK      = 0x00000040\n\tMB_USERICON          = 0x00000080\n\tMB_ICONWARNING       = MB_ICONEXCLAMATION\n\tMB_ICONERROR         = MB_ICONHAND\n\tMB_ICONINFORMATION   = MB_ICONASTERISK\n\tMB_ICONSTOP          = MB_ICONHAND\n\tMB_DEFBUTTON1        = 0x00000000\n\tMB_DEFBUTTON2        = 0x00000100\n\tMB_DEFBUTTON3        = 0x00000200\n\tMB_DEFBUTTON4        = 0x00000300\n)\n\n//COM\nconst (\n\tE_INVALIDARG  = 0x80070057\n\tE_OUTOFMEMORY = 0x8007000E\n\tE_UNEXPECTED  = 0x8000FFFF\n)\n\nconst (\n\tS_OK               = 0\n\tS_FALSE            = 0x0001\n\tRPC_E_CHANGED_MODE = 0x80010106\n)\n\n// GetSystemMetrics constants\nconst (\n\tSM_CXSCREEN             = 0\n\tSM_CYSCREEN             = 1\n\tSM_CXVSCROLL            = 2\n\tSM_CYHSCROLL            = 3\n\tSM_CYCAPTION            = 4\n\tSM_CXBORDER             = 5\n\tSM_CYBORDER             = 6\n\tSM_CXDLGFRAME           = 7\n\tSM_CYDLGFRAME           = 8\n\tSM_CYVTHUMB             = 9\n\tSM_CXHTHUMB             = 10\n\tSM_CXICON               = 11\n\tSM_CYICON               = 12\n\tSM_CXCURSOR             = 13\n\tSM_CYCURSOR             = 14\n\tSM_CYMENU               = 15\n\tSM_CXFULLSCREEN         = 16\n\tSM_CYFULLSCREEN         = 17\n\tSM_CYKANJIWINDOW        = 18\n\tSM_MOUSEPRESENT         = 19\n\tSM_CYVSCROLL            = 20\n\tSM_CXHSCROLL            = 21\n\tSM_DEBUG                = 22\n\tSM_SWAPBUTTON           = 23\n\tSM_RESERVED1            = 24\n\tSM_RESERVED2            = 25\n\tSM_RESERVED3            = 26\n\tSM_RESERVED4            = 27\n\tSM_CXMIN                = 28\n\tSM_CYMIN                = 29\n\tSM_CXSIZE               = 30\n\tSM_CYSIZE               = 31\n\tSM_CXFRAME              = 32\n\tSM_CYFRAME              = 33\n\tSM_CXMINTRACK           = 34\n\tSM_CYMINTRACK           = 35\n\tSM_CXDOUBLECLK          = 36\n\tSM_CYDOUBLECLK          = 37\n\tSM_CXICONSPACING        = 38\n\tSM_CYICONSPACING        = 39\n\tSM_MENUDROPALIGNMENT    = 40\n\tSM_PENWINDOWS           = 41\n\tSM_DBCSENABLED          = 42\n\tSM_CMOUSEBUTTONS        = 43\n\tSM_CXFIXEDFRAME         = SM_CXDLGFRAME\n\tSM_CYFIXEDFRAME         = SM_CYDLGFRAME\n\tSM_CXSIZEFRAME          = SM_CXFRAME\n\tSM_CYSIZEFRAME          = SM_CYFRAME\n\tSM_SECURE               = 44\n\tSM_CXEDGE               = 45\n\tSM_CYEDGE               = 46\n\tSM_CXMINSPACING         = 47\n\tSM_CYMINSPACING         = 48\n\tSM_CXSMICON             = 49\n\tSM_CYSMICON             = 50\n\tSM_CYSMCAPTION          = 51\n\tSM_CXSMSIZE             = 52\n\tSM_CYSMSIZE             = 53\n\tSM_CXMENUSIZE           = 54\n\tSM_CYMENUSIZE           = 55\n\tSM_ARRANGE              = 56\n\tSM_CXMINIMIZED          = 57\n\tSM_CYMINIMIZED          = 58\n\tSM_CXMAXTRACK           = 59\n\tSM_CYMAXTRACK           = 60\n\tSM_CXMAXIMIZED          = 61\n\tSM_CYMAXIMIZED          = 62\n\tSM_NETWORK              = 63\n\tSM_CLEANBOOT            = 67\n\tSM_CXDRAG               = 68\n\tSM_CYDRAG               = 69\n\tSM_SHOWSOUNDS           = 70\n\tSM_CXMENUCHECK          = 71\n\tSM_CYMENUCHECK          = 72\n\tSM_SLOWMACHINE          = 73\n\tSM_MIDEASTENABLED       = 74\n\tSM_MOUSEWHEELPRESENT    = 75\n\tSM_XVIRTUALSCREEN       = 76\n\tSM_YVIRTUALSCREEN       = 77\n\tSM_CXVIRTUALSCREEN      = 78\n\tSM_CYVIRTUALSCREEN      = 79\n\tSM_CMONITORS            = 80\n\tSM_SAMEDISPLAYFORMAT    = 81\n\tSM_IMMENABLED           = 82\n\tSM_CXFOCUSBORDER        = 83\n\tSM_CYFOCUSBORDER        = 84\n\tSM_TABLETPC             = 86\n\tSM_MEDIACENTER          = 87\n\tSM_STARTER              = 88\n\tSM_SERVERR2             = 89\n\tSM_CMETRICS             = 91\n\tSM_REMOTESESSION        = 0x1000\n\tSM_SHUTTINGDOWN         = 0x2000\n\tSM_REMOTECONTROL        = 0x2001\n\tSM_CARETBLINKINGENABLED = 0x2002\n)\n\nconst (\n\tCLSCTX_INPROC_SERVER   = 1\n\tCLSCTX_INPROC_HANDLER  = 2\n\tCLSCTX_LOCAL_SERVER    = 4\n\tCLSCTX_INPROC_SERVER16 = 8\n\tCLSCTX_REMOTE_SERVER   = 16\n\tCLSCTX_ALL             = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER\n\tCLSCTX_INPROC          = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER\n\tCLSCTX_SERVER          = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER\n)\n\nconst (\n\tCOINIT_APARTMENTTHREADED = 0x2\n\tCOINIT_MULTITHREADED     = 0x0\n\tCOINIT_DISABLE_OLE1DDE   = 0x4\n\tCOINIT_SPEED_OVER_MEMORY = 0x8\n)\n\nconst (\n\tDISPATCH_METHOD         = 1\n\tDISPATCH_PROPERTYGET    = 2\n\tDISPATCH_PROPERTYPUT    = 4\n\tDISPATCH_PROPERTYPUTREF = 8\n)\n\nconst (\n\tCC_FASTCALL = iota\n\tCC_CDECL\n\tCC_MSCPASCAL\n\tCC_PASCAL = CC_MSCPASCAL\n\tCC_MACPASCAL\n\tCC_STDCALL\n\tCC_FPFASTCALL\n\tCC_SYSCALL\n\tCC_MPWCDECL\n\tCC_MPWPASCAL\n\tCC_MAX = CC_MPWPASCAL\n)\n\nconst (\n\tVT_EMPTY           = 0x0\n\tVT_NULL            = 0x1\n\tVT_I2              = 0x2\n\tVT_I4              = 0x3\n\tVT_R4              = 0x4\n\tVT_R8              = 0x5\n\tVT_CY              = 0x6\n\tVT_DATE            = 0x7\n\tVT_BSTR            = 0x8\n\tVT_DISPATCH        = 0x9\n\tVT_ERROR           = 0xa\n\tVT_BOOL            = 0xb\n\tVT_VARIANT         = 0xc\n\tVT_UNKNOWN         = 0xd\n\tVT_DECIMAL         = 0xe\n\tVT_I1              = 0x10\n\tVT_UI1             = 0x11\n\tVT_UI2             = 0x12\n\tVT_UI4             = 0x13\n\tVT_I8              = 0x14\n\tVT_UI8             = 0x15\n\tVT_INT             = 0x16\n\tVT_UINT            = 0x17\n\tVT_VOID            = 0x18\n\tVT_HRESULT         = 0x19\n\tVT_PTR             = 0x1a\n\tVT_SAFEARRAY       = 0x1b\n\tVT_CARRAY          = 0x1c\n\tVT_USERDEFINED     = 0x1d\n\tVT_LPSTR           = 0x1e\n\tVT_LPWSTR          = 0x1f\n\tVT_RECORD          = 0x24\n\tVT_INT_PTR         = 0x25\n\tVT_UINT_PTR        = 0x26\n\tVT_FILETIME        = 0x40\n\tVT_BLOB            = 0x41\n\tVT_STREAM          = 0x42\n\tVT_STORAGE         = 0x43\n\tVT_STREAMED_OBJECT = 0x44\n\tVT_STORED_OBJECT   = 0x45\n\tVT_BLOB_OBJECT     = 0x46\n\tVT_CF              = 0x47\n\tVT_CLSID           = 0x48\n\tVT_BSTR_BLOB       = 0xfff\n\tVT_VECTOR          = 0x1000\n\tVT_ARRAY           = 0x2000\n\tVT_BYREF           = 0x4000\n\tVT_RESERVED        = 0x8000\n\tVT_ILLEGAL         = 0xffff\n\tVT_ILLEGALMASKED   = 0xfff\n\tVT_TYPEMASK        = 0xfff\n)\n\nconst (\n\tDISPID_UNKNOWN     = -1\n\tDISPID_VALUE       = 0\n\tDISPID_PROPERTYPUT = -3\n\tDISPID_NEWENUM     = -4\n\tDISPID_EVALUATE    = -5\n\tDISPID_CONSTRUCTOR = -6\n\tDISPID_DESTRUCTOR  = -7\n\tDISPID_COLLECT     = -8\n)\n\nconst (\n\tMONITOR_DEFAULTTONULL    = 0x00000000\n\tMONITOR_DEFAULTTOPRIMARY = 0x00000001\n\tMONITOR_DEFAULTTONEAREST = 0x00000002\n\n\tMONITORINFOF_PRIMARY = 0x00000001\n)\n\nconst (\n\tCCHDEVICENAME = 32\n\tCCHFORMNAME   = 32\n)\n\nconst (\n\tIDOK       = 1\n\tIDCANCEL   = 2\n\tIDABORT    = 3\n\tIDRETRY    = 4\n\tIDIGNORE   = 5\n\tIDYES      = 6\n\tIDNO       = 7\n\tIDCLOSE    = 8\n\tIDHELP     = 9\n\tIDTRYAGAIN = 10\n\tIDCONTINUE = 11\n\tIDTIMEOUT  = 32000\n)\n\n// Generic WM_NOTIFY notification codes\nconst (\n\tNM_FIRST           = 0\n\tNM_OUTOFMEMORY     = NM_FIRST - 1\n\tNM_CLICK           = NM_FIRST - 2\n\tNM_DBLCLK          = NM_FIRST - 3\n\tNM_RETURN          = NM_FIRST - 4\n\tNM_RCLICK          = NM_FIRST - 5\n\tNM_RDBLCLK         = NM_FIRST - 6\n\tNM_SETFOCUS        = NM_FIRST - 7\n\tNM_KILLFOCUS       = NM_FIRST - 8\n\tNM_CUSTOMDRAW      = NM_FIRST - 12\n\tNM_HOVER           = NM_FIRST - 13\n\tNM_NCHITTEST       = NM_FIRST - 14\n\tNM_KEYDOWN         = NM_FIRST - 15\n\tNM_RELEASEDCAPTURE = NM_FIRST - 16\n\tNM_SETCURSOR       = NM_FIRST - 17\n\tNM_CHAR            = NM_FIRST - 18\n\tNM_TOOLTIPSCREATED = NM_FIRST - 19\n\tNM_LAST            = NM_FIRST - 99\n)\n\n// ListView messages\nconst (\n\tLVM_FIRST                    = 0x1000\n\tLVM_GETITEMCOUNT             = LVM_FIRST + 4\n\tLVM_SETIMAGELIST             = LVM_FIRST + 3\n\tLVM_GETIMAGELIST             = LVM_FIRST + 2\n\tLVM_GETITEM                  = LVM_FIRST + 75\n\tLVM_SETITEM                  = LVM_FIRST + 76\n\tLVM_INSERTITEM               = LVM_FIRST + 77\n\tLVM_DELETEITEM               = LVM_FIRST + 8\n\tLVM_DELETEALLITEMS           = LVM_FIRST + 9\n\tLVM_GETCALLBACKMASK          = LVM_FIRST + 10\n\tLVM_SETCALLBACKMASK          = LVM_FIRST + 11\n\tLVM_SETUNICODEFORMAT         = CCM_SETUNICODEFORMAT\n\tLVM_GETNEXTITEM              = LVM_FIRST + 12\n\tLVM_FINDITEM                 = LVM_FIRST + 83\n\tLVM_GETITEMRECT              = LVM_FIRST + 14\n\tLVM_GETSTRINGWIDTH           = LVM_FIRST + 87\n\tLVM_HITTEST                  = LVM_FIRST + 18\n\tLVM_ENSUREVISIBLE            = LVM_FIRST + 19\n\tLVM_SCROLL                   = LVM_FIRST + 20\n\tLVM_REDRAWITEMS              = LVM_FIRST + 21\n\tLVM_ARRANGE                  = LVM_FIRST + 22\n\tLVM_EDITLABEL                = LVM_FIRST + 118\n\tLVM_GETEDITCONTROL           = LVM_FIRST + 24\n\tLVM_GETCOLUMN                = LVM_FIRST + 95\n\tLVM_SETCOLUMN                = LVM_FIRST + 96\n\tLVM_INSERTCOLUMN             = LVM_FIRST + 97\n\tLVM_DELETECOLUMN             = LVM_FIRST + 28\n\tLVM_GETCOLUMNWIDTH           = LVM_FIRST + 29\n\tLVM_SETCOLUMNWIDTH           = LVM_FIRST + 30\n\tLVM_GETHEADER                = LVM_FIRST + 31\n\tLVM_CREATEDRAGIMAGE          = LVM_FIRST + 33\n\tLVM_GETVIEWRECT              = LVM_FIRST + 34\n\tLVM_GETTEXTCOLOR             = LVM_FIRST + 35\n\tLVM_SETTEXTCOLOR             = LVM_FIRST + 36\n\tLVM_GETTEXTBKCOLOR           = LVM_FIRST + 37\n\tLVM_SETTEXTBKCOLOR           = LVM_FIRST + 38\n\tLVM_GETTOPINDEX              = LVM_FIRST + 39\n\tLVM_GETCOUNTPERPAGE          = LVM_FIRST + 40\n\tLVM_GETORIGIN                = LVM_FIRST + 41\n\tLVM_UPDATE                   = LVM_FIRST + 42\n\tLVM_SETITEMSTATE             = LVM_FIRST + 43\n\tLVM_GETITEMSTATE             = LVM_FIRST + 44\n\tLVM_GETITEMTEXT              = LVM_FIRST + 115\n\tLVM_SETITEMTEXT              = LVM_FIRST + 116\n\tLVM_SETITEMCOUNT             = LVM_FIRST + 47\n\tLVM_SORTITEMS                = LVM_FIRST + 48\n\tLVM_SETITEMPOSITION32        = LVM_FIRST + 49\n\tLVM_GETSELECTEDCOUNT         = LVM_FIRST + 50\n\tLVM_GETITEMSPACING           = LVM_FIRST + 51\n\tLVM_GETISEARCHSTRING         = LVM_FIRST + 117\n\tLVM_SETICONSPACING           = LVM_FIRST + 53\n\tLVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54\n\tLVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55\n\tLVM_GETSUBITEMRECT           = LVM_FIRST + 56\n\tLVM_SUBITEMHITTEST           = LVM_FIRST + 57\n\tLVM_SETCOLUMNORDERARRAY      = LVM_FIRST + 58\n\tLVM_GETCOLUMNORDERARRAY      = LVM_FIRST + 59\n\tLVM_SETHOTITEM               = LVM_FIRST + 60\n\tLVM_GETHOTITEM               = LVM_FIRST + 61\n\tLVM_SETHOTCURSOR             = LVM_FIRST + 62\n\tLVM_GETHOTCURSOR             = LVM_FIRST + 63\n\tLVM_APPROXIMATEVIEWRECT      = LVM_FIRST + 64\n\tLVM_SETWORKAREAS             = LVM_FIRST + 65\n\tLVM_GETWORKAREAS             = LVM_FIRST + 70\n\tLVM_GETNUMBEROFWORKAREAS     = LVM_FIRST + 73\n\tLVM_GETSELECTIONMARK         = LVM_FIRST + 66\n\tLVM_SETSELECTIONMARK         = LVM_FIRST + 67\n\tLVM_SETHOVERTIME             = LVM_FIRST + 71\n\tLVM_GETHOVERTIME             = LVM_FIRST + 72\n\tLVM_SETTOOLTIPS              = LVM_FIRST + 74\n\tLVM_GETTOOLTIPS              = LVM_FIRST + 78\n\tLVM_SORTITEMSEX              = LVM_FIRST + 81\n\tLVM_SETBKIMAGE               = LVM_FIRST + 138\n\tLVM_GETBKIMAGE               = LVM_FIRST + 139\n\tLVM_SETSELECTEDCOLUMN        = LVM_FIRST + 140\n\tLVM_SETVIEW                  = LVM_FIRST + 142\n\tLVM_GETVIEW                  = LVM_FIRST + 143\n\tLVM_INSERTGROUP              = LVM_FIRST + 145\n\tLVM_SETGROUPINFO             = LVM_FIRST + 147\n\tLVM_GETGROUPINFO             = LVM_FIRST + 149\n\tLVM_REMOVEGROUP              = LVM_FIRST + 150\n\tLVM_MOVEGROUP                = LVM_FIRST + 151\n\tLVM_GETGROUPCOUNT            = LVM_FIRST + 152\n\tLVM_GETGROUPINFOBYINDEX      = LVM_FIRST + 153\n\tLVM_MOVEITEMTOGROUP          = LVM_FIRST + 154\n\tLVM_GETGROUPRECT             = LVM_FIRST + 98\n\tLVM_SETGROUPMETRICS          = LVM_FIRST + 155\n\tLVM_GETGROUPMETRICS          = LVM_FIRST + 156\n\tLVM_ENABLEGROUPVIEW          = LVM_FIRST + 157\n\tLVM_SORTGROUPS               = LVM_FIRST + 158\n\tLVM_INSERTGROUPSORTED        = LVM_FIRST + 159\n\tLVM_REMOVEALLGROUPS          = LVM_FIRST + 160\n\tLVM_HASGROUP                 = LVM_FIRST + 161\n\tLVM_GETGROUPSTATE            = LVM_FIRST + 92\n\tLVM_GETFOCUSEDGROUP          = LVM_FIRST + 93\n\tLVM_SETTILEVIEWINFO          = LVM_FIRST + 162\n\tLVM_GETTILEVIEWINFO          = LVM_FIRST + 163\n\tLVM_SETTILEINFO              = LVM_FIRST + 164\n\tLVM_GETTILEINFO              = LVM_FIRST + 165\n\tLVM_SETINSERTMARK            = LVM_FIRST + 166\n\tLVM_GETINSERTMARK            = LVM_FIRST + 167\n\tLVM_INSERTMARKHITTEST        = LVM_FIRST + 168\n\tLVM_GETINSERTMARKRECT        = LVM_FIRST + 169\n\tLVM_SETINSERTMARKCOLOR       = LVM_FIRST + 170\n\tLVM_GETINSERTMARKCOLOR       = LVM_FIRST + 171\n\tLVM_SETINFOTIP               = LVM_FIRST + 173\n\tLVM_GETSELECTEDCOLUMN        = LVM_FIRST + 174\n\tLVM_ISGROUPVIEWENABLED       = LVM_FIRST + 175\n\tLVM_GETOUTLINECOLOR          = LVM_FIRST + 176\n\tLVM_SETOUTLINECOLOR          = LVM_FIRST + 177\n\tLVM_CANCELEDITLABEL          = LVM_FIRST + 179\n\tLVM_MAPINDEXTOID             = LVM_FIRST + 180\n\tLVM_MAPIDTOINDEX             = LVM_FIRST + 181\n\tLVM_ISITEMVISIBLE            = LVM_FIRST + 182\n\tLVM_GETNEXTITEMINDEX         = LVM_FIRST + 211\n)\n\n// ListView notifications\nconst (\n\tLVN_FIRST = -100\n\n\tLVN_ITEMCHANGING      = LVN_FIRST - 0\n\tLVN_ITEMCHANGED       = LVN_FIRST - 1\n\tLVN_INSERTITEM        = LVN_FIRST - 2\n\tLVN_DELETEITEM        = LVN_FIRST - 3\n\tLVN_DELETEALLITEMS    = LVN_FIRST - 4\n\tLVN_BEGINLABELEDITA   = LVN_FIRST - 5\n\tLVN_BEGINLABELEDITW   = LVN_FIRST - 75\n\tLVN_ENDLABELEDITA     = LVN_FIRST - 6\n\tLVN_ENDLABELEDITW     = LVN_FIRST - 76\n\tLVN_COLUMNCLICK       = LVN_FIRST - 8\n\tLVN_BEGINDRAG         = LVN_FIRST - 9\n\tLVN_BEGINRDRAG        = LVN_FIRST - 11\n\tLVN_ODCACHEHINT       = LVN_FIRST - 13\n\tLVN_ODFINDITEMA       = LVN_FIRST - 52\n\tLVN_ODFINDITEMW       = LVN_FIRST - 79\n\tLVN_ITEMACTIVATE      = LVN_FIRST - 14\n\tLVN_ODSTATECHANGED    = LVN_FIRST - 15\n\tLVN_HOTTRACK          = LVN_FIRST - 21\n\tLVN_GETDISPINFO       = LVN_FIRST - 77\n\tLVN_SETDISPINFO       = LVN_FIRST - 78\n\tLVN_KEYDOWN           = LVN_FIRST - 55\n\tLVN_MARQUEEBEGIN      = LVN_FIRST - 56\n\tLVN_GETINFOTIP        = LVN_FIRST - 58\n\tLVN_INCREMENTALSEARCH = LVN_FIRST - 63\n\tLVN_BEGINSCROLL       = LVN_FIRST - 80\n\tLVN_ENDSCROLL         = LVN_FIRST - 81\n)\n\n// ListView LVNI constants\nconst (\n\tLVNI_ALL         = 0\n\tLVNI_FOCUSED     = 1\n\tLVNI_SELECTED    = 2\n\tLVNI_CUT         = 4\n\tLVNI_DROPHILITED = 8\n\tLVNI_ABOVE       = 256\n\tLVNI_BELOW       = 512\n\tLVNI_TOLEFT      = 1024\n\tLVNI_TORIGHT     = 2048\n)\n\n// ListView styles\nconst (\n\tLVS_ICON            = 0x0000\n\tLVS_REPORT          = 0x0001\n\tLVS_SMALLICON       = 0x0002\n\tLVS_LIST            = 0x0003\n\tLVS_TYPEMASK        = 0x0003\n\tLVS_SINGLESEL       = 0x0004\n\tLVS_SHOWSELALWAYS   = 0x0008\n\tLVS_SORTASCENDING   = 0x0010\n\tLVS_SORTDESCENDING  = 0x0020\n\tLVS_SHAREIMAGELISTS = 0x0040\n\tLVS_NOLABELWRAP     = 0x0080\n\tLVS_AUTOARRANGE     = 0x0100\n\tLVS_EDITLABELS      = 0x0200\n\tLVS_OWNERDATA       = 0x1000\n\tLVS_NOSCROLL        = 0x2000\n\tLVS_TYPESTYLEMASK   = 0xfc00\n\tLVS_ALIGNTOP        = 0x0000\n\tLVS_ALIGNLEFT       = 0x0800\n\tLVS_ALIGNMASK       = 0x0c00\n\tLVS_OWNERDRAWFIXED  = 0x0400\n\tLVS_NOCOLUMNHEADER  = 0x4000\n\tLVS_NOSORTHEADER    = 0x8000\n)\n\n// ListView extended styles\nconst (\n\tLVS_EX_GRIDLINES        = 0x00000001\n\tLVS_EX_SUBITEMIMAGES    = 0x00000002\n\tLVS_EX_CHECKBOXES       = 0x00000004\n\tLVS_EX_TRACKSELECT      = 0x00000008\n\tLVS_EX_HEADERDRAGDROP   = 0x00000010\n\tLVS_EX_FULLROWSELECT    = 0x00000020\n\tLVS_EX_ONECLICKACTIVATE = 0x00000040\n\tLVS_EX_TWOCLICKACTIVATE = 0x00000080\n\tLVS_EX_FLATSB           = 0x00000100\n\tLVS_EX_REGIONAL         = 0x00000200\n\tLVS_EX_INFOTIP          = 0x00000400\n\tLVS_EX_UNDERLINEHOT     = 0x00000800\n\tLVS_EX_UNDERLINECOLD    = 0x00001000\n\tLVS_EX_MULTIWORKAREAS   = 0x00002000\n\tLVS_EX_LABELTIP         = 0x00004000\n\tLVS_EX_BORDERSELECT     = 0x00008000\n\tLVS_EX_DOUBLEBUFFER     = 0x00010000\n\tLVS_EX_HIDELABELS       = 0x00020000\n\tLVS_EX_SINGLEROW        = 0x00040000\n\tLVS_EX_SNAPTOGRID       = 0x00080000\n\tLVS_EX_SIMPLESELECT     = 0x00100000\n)\n\n// ListView column flags\nconst (\n\tLVCF_FMT     = 0x0001\n\tLVCF_WIDTH   = 0x0002\n\tLVCF_TEXT    = 0x0004\n\tLVCF_SUBITEM = 0x0008\n\tLVCF_IMAGE   = 0x0010\n\tLVCF_ORDER   = 0x0020\n)\n\n// ListView column format constants\nconst (\n\tLVCFMT_LEFT            = 0x0000\n\tLVCFMT_RIGHT           = 0x0001\n\tLVCFMT_CENTER          = 0x0002\n\tLVCFMT_JUSTIFYMASK     = 0x0003\n\tLVCFMT_IMAGE           = 0x0800\n\tLVCFMT_BITMAP_ON_RIGHT = 0x1000\n\tLVCFMT_COL_HAS_IMAGES  = 0x8000\n)\n\n// ListView item flags\nconst (\n\tLVIF_TEXT        = 0x00000001\n\tLVIF_IMAGE       = 0x00000002\n\tLVIF_PARAM       = 0x00000004\n\tLVIF_STATE       = 0x00000008\n\tLVIF_INDENT      = 0x00000010\n\tLVIF_NORECOMPUTE = 0x00000800\n\tLVIF_GROUPID     = 0x00000100\n\tLVIF_COLUMNS     = 0x00000200\n)\n\n// ListView item states\nconst (\n\tLVIS_FOCUSED        = 1\n\tLVIS_SELECTED       = 2\n\tLVIS_CUT            = 4\n\tLVIS_DROPHILITED    = 8\n\tLVIS_OVERLAYMASK    = 0xF00\n\tLVIS_STATEIMAGEMASK = 0xF000\n)\n\n// ListView hit test constants\nconst (\n\tLVHT_NOWHERE         = 0x00000001\n\tLVHT_ONITEMICON      = 0x00000002\n\tLVHT_ONITEMLABEL     = 0x00000004\n\tLVHT_ONITEMSTATEICON = 0x00000008\n\tLVHT_ONITEM          = LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON\n\n\tLVHT_ABOVE   = 0x00000008\n\tLVHT_BELOW   = 0x00000010\n\tLVHT_TORIGHT = 0x00000020\n\tLVHT_TOLEFT  = 0x00000040\n)\n\n// ListView image list types\nconst (\n\tLVSIL_NORMAL      = 0\n\tLVSIL_SMALL       = 1\n\tLVSIL_STATE       = 2\n\tLVSIL_GROUPHEADER = 3\n)\n\n// InitCommonControlsEx flags\nconst (\n\tICC_LISTVIEW_CLASSES   = 1\n\tICC_TREEVIEW_CLASSES   = 2\n\tICC_BAR_CLASSES        = 4\n\tICC_TAB_CLASSES        = 8\n\tICC_UPDOWN_CLASS       = 16\n\tICC_PROGRESS_CLASS     = 32\n\tICC_HOTKEY_CLASS       = 64\n\tICC_ANIMATE_CLASS      = 128\n\tICC_WIN95_CLASSES      = 255\n\tICC_DATE_CLASSES       = 256\n\tICC_USEREX_CLASSES     = 512\n\tICC_COOL_CLASSES       = 1024\n\tICC_INTERNET_CLASSES   = 2048\n\tICC_PAGESCROLLER_CLASS = 4096\n\tICC_NATIVEFNTCTL_CLASS = 8192\n\tINFOTIPSIZE            = 1024\n\tICC_STANDARD_CLASSES   = 0x00004000\n\tICC_LINK_CLASS         = 0x00008000\n)\n\n// Dialog Codes\nconst (\n\tDLGC_WANTARROWS      = 0x0001\n\tDLGC_WANTTAB         = 0x0002\n\tDLGC_WANTALLKEYS     = 0x0004\n\tDLGC_WANTMESSAGE     = 0x0004\n\tDLGC_HASSETSEL       = 0x0008\n\tDLGC_DEFPUSHBUTTON   = 0x0010\n\tDLGC_UNDEFPUSHBUTTON = 0x0020\n\tDLGC_RADIOBUTTON     = 0x0040\n\tDLGC_WANTCHARS       = 0x0080\n\tDLGC_STATIC          = 0x0100\n\tDLGC_BUTTON          = 0x2000\n)\n\n// Get/SetWindowWord/Long offsets for use with WC_DIALOG windows\nconst (\n\tDWL_MSGRESULT = 0\n\tDWL_DLGPROC   = 4\n\tDWL_USER      = 8\n)\n\n// Registry predefined keys\nconst (\n\tHKEY_CLASSES_ROOT     HKEY = 0x80000000\n\tHKEY_CURRENT_USER     HKEY = 0x80000001\n\tHKEY_LOCAL_MACHINE    HKEY = 0x80000002\n\tHKEY_USERS            HKEY = 0x80000003\n\tHKEY_PERFORMANCE_DATA HKEY = 0x80000004\n\tHKEY_CURRENT_CONFIG   HKEY = 0x80000005\n\tHKEY_DYN_DATA         HKEY = 0x80000006\n)\n\n// Registry Key Security and Access Rights\nconst (\n\tKEY_ALL_ACCESS         = 0xF003F\n\tKEY_CREATE_SUB_KEY     = 0x0004\n\tKEY_ENUMERATE_SUB_KEYS = 0x0008\n\tKEY_NOTIFY             = 0x0010\n\tKEY_QUERY_VALUE        = 0x0001\n\tKEY_SET_VALUE          = 0x0002\n\tKEY_READ               = 0x20019\n\tKEY_WRITE              = 0x20006\n)\n\nconst (\n\tNFR_ANSI    = 1\n\tNFR_UNICODE = 2\n\tNF_QUERY    = 3\n\tNF_REQUERY  = 4\n)\n\n// Registry value types\nconst (\n\tRRF_RT_REG_NONE         = 0x00000001\n\tRRF_RT_REG_SZ           = 0x00000002\n\tRRF_RT_REG_EXPAND_SZ    = 0x00000004\n\tRRF_RT_REG_BINARY       = 0x00000008\n\tRRF_RT_REG_DWORD        = 0x00000010\n\tRRF_RT_REG_MULTI_SZ     = 0x00000020\n\tRRF_RT_REG_QWORD        = 0x00000040\n\tRRF_RT_DWORD            = (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)\n\tRRF_RT_QWORD            = (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)\n\tRRF_RT_ANY              = 0x0000ffff\n\tRRF_NOEXPAND            = 0x10000000\n\tRRF_ZEROONFAILURE       = 0x20000000\n\tREG_PROCESS_APPKEY      = 0x00000001\n\tREG_MUI_STRING_TRUNCATE = 0x00000001\n)\n\n// PeekMessage wRemoveMsg value\nconst (\n\tPM_NOREMOVE = 0x000\n\tPM_REMOVE   = 0x001\n\tPM_NOYIELD  = 0x002\n)\n\n// ImageList flags\nconst (\n\tILC_MASK             = 0x00000001\n\tILC_COLOR            = 0x00000000\n\tILC_COLORDDB         = 0x000000FE\n\tILC_COLOR4           = 0x00000004\n\tILC_COLOR8           = 0x00000008\n\tILC_COLOR16          = 0x00000010\n\tILC_COLOR24          = 0x00000018\n\tILC_COLOR32          = 0x00000020\n\tILC_PALETTE          = 0x00000800\n\tILC_MIRROR           = 0x00002000\n\tILC_PERITEMMIRROR    = 0x00008000\n\tILC_ORIGINALSIZE     = 0x00010000\n\tILC_HIGHQUALITYSCALE = 0x00020000\n)\n\n// Keystroke Message Flags\nconst (\n\tKF_EXTENDED = 0x0100\n\tKF_DLGMODE  = 0x0800\n\tKF_MENUMODE = 0x1000\n\tKF_ALTDOWN  = 0x2000\n\tKF_REPEAT   = 0x4000\n\tKF_UP       = 0x8000\n)\n\n// Virtual-Key Codes\nconst (\n\tVK_LBUTTON             = 0x01\n\tVK_RBUTTON             = 0x02\n\tVK_CANCEL              = 0x03\n\tVK_MBUTTON             = 0x04\n\tVK_XBUTTON1            = 0x05\n\tVK_XBUTTON2            = 0x06\n\tVK_BACK                = 0x08\n\tVK_TAB                 = 0x09\n\tVK_CLEAR               = 0x0C\n\tVK_RETURN              = 0x0D\n\tVK_SHIFT               = 0x10\n\tVK_CONTROL             = 0x11\n\tVK_MENU                = 0x12\n\tVK_PAUSE               = 0x13\n\tVK_CAPITAL             = 0x14\n\tVK_KANA                = 0x15\n\tVK_HANGEUL             = 0x15\n\tVK_HANGUL              = 0x15\n\tVK_JUNJA               = 0x17\n\tVK_FINAL               = 0x18\n\tVK_HANJA               = 0x19\n\tVK_KANJI               = 0x19\n\tVK_ESCAPE              = 0x1B\n\tVK_CONVERT             = 0x1C\n\tVK_NONCONVERT          = 0x1D\n\tVK_ACCEPT              = 0x1E\n\tVK_MODECHANGE          = 0x1F\n\tVK_SPACE               = 0x20\n\tVK_PRIOR               = 0x21\n\tVK_NEXT                = 0x22\n\tVK_END                 = 0x23\n\tVK_HOME                = 0x24\n\tVK_LEFT                = 0x25\n\tVK_UP                  = 0x26\n\tVK_RIGHT               = 0x27\n\tVK_DOWN                = 0x28\n\tVK_SELECT              = 0x29\n\tVK_PRINT               = 0x2A\n\tVK_EXECUTE             = 0x2B\n\tVK_SNAPSHOT            = 0x2C\n\tVK_INSERT              = 0x2D\n\tVK_DELETE              = 0x2E\n\tVK_HELP                = 0x2F\n\tVK_LWIN                = 0x5B\n\tVK_RWIN                = 0x5C\n\tVK_APPS                = 0x5D\n\tVK_SLEEP               = 0x5F\n\tVK_NUMPAD0             = 0x60\n\tVK_NUMPAD1             = 0x61\n\tVK_NUMPAD2             = 0x62\n\tVK_NUMPAD3             = 0x63\n\tVK_NUMPAD4             = 0x64\n\tVK_NUMPAD5             = 0x65\n\tVK_NUMPAD6             = 0x66\n\tVK_NUMPAD7             = 0x67\n\tVK_NUMPAD8             = 0x68\n\tVK_NUMPAD9             = 0x69\n\tVK_MULTIPLY            = 0x6A\n\tVK_ADD                 = 0x6B\n\tVK_SEPARATOR           = 0x6C\n\tVK_SUBTRACT            = 0x6D\n\tVK_DECIMAL             = 0x6E\n\tVK_DIVIDE              = 0x6F\n\tVK_F1                  = 0x70\n\tVK_F2                  = 0x71\n\tVK_F3                  = 0x72\n\tVK_F4                  = 0x73\n\tVK_F5                  = 0x74\n\tVK_F6                  = 0x75\n\tVK_F7                  = 0x76\n\tVK_F8                  = 0x77\n\tVK_F9                  = 0x78\n\tVK_F10                 = 0x79\n\tVK_F11                 = 0x7A\n\tVK_F12                 = 0x7B\n\tVK_F13                 = 0x7C\n\tVK_F14                 = 0x7D\n\tVK_F15                 = 0x7E\n\tVK_F16                 = 0x7F\n\tVK_F17                 = 0x80\n\tVK_F18                 = 0x81\n\tVK_F19                 = 0x82\n\tVK_F20                 = 0x83\n\tVK_F21                 = 0x84\n\tVK_F22                 = 0x85\n\tVK_F23                 = 0x86\n\tVK_F24                 = 0x87\n\tVK_NUMLOCK             = 0x90\n\tVK_SCROLL              = 0x91\n\tVK_OEM_NEC_EQUAL       = 0x92\n\tVK_OEM_FJ_JISHO        = 0x92\n\tVK_OEM_FJ_MASSHOU      = 0x93\n\tVK_OEM_FJ_TOUROKU      = 0x94\n\tVK_OEM_FJ_LOYA         = 0x95\n\tVK_OEM_FJ_ROYA         = 0x96\n\tVK_LSHIFT              = 0xA0\n\tVK_RSHIFT              = 0xA1\n\tVK_LCONTROL            = 0xA2\n\tVK_RCONTROL            = 0xA3\n\tVK_LMENU               = 0xA4\n\tVK_RMENU               = 0xA5\n\tVK_BROWSER_BACK        = 0xA6\n\tVK_BROWSER_FORWARD     = 0xA7\n\tVK_BROWSER_REFRESH     = 0xA8\n\tVK_BROWSER_STOP        = 0xA9\n\tVK_BROWSER_SEARCH      = 0xAA\n\tVK_BROWSER_FAVORITES   = 0xAB\n\tVK_BROWSER_HOME        = 0xAC\n\tVK_VOLUME_MUTE         = 0xAD\n\tVK_VOLUME_DOWN         = 0xAE\n\tVK_VOLUME_UP           = 0xAF\n\tVK_MEDIA_NEXT_TRACK    = 0xB0\n\tVK_MEDIA_PREV_TRACK    = 0xB1\n\tVK_MEDIA_STOP          = 0xB2\n\tVK_MEDIA_PLAY_PAUSE    = 0xB3\n\tVK_LAUNCH_MAIL         = 0xB4\n\tVK_LAUNCH_MEDIA_SELECT = 0xB5\n\tVK_LAUNCH_APP1         = 0xB6\n\tVK_LAUNCH_APP2         = 0xB7\n\tVK_OEM_1               = 0xBA\n\tVK_OEM_PLUS            = 0xBB\n\tVK_OEM_COMMA           = 0xBC\n\tVK_OEM_MINUS           = 0xBD\n\tVK_OEM_PERIOD          = 0xBE\n\tVK_OEM_2               = 0xBF\n\tVK_OEM_3               = 0xC0\n\tVK_OEM_4               = 0xDB\n\tVK_OEM_5               = 0xDC\n\tVK_OEM_6               = 0xDD\n\tVK_OEM_7               = 0xDE\n\tVK_OEM_8               = 0xDF\n\tVK_OEM_AX              = 0xE1\n\tVK_OEM_102             = 0xE2\n\tVK_ICO_HELP            = 0xE3\n\tVK_ICO_00              = 0xE4\n\tVK_PROCESSKEY          = 0xE5\n\tVK_ICO_CLEAR           = 0xE6\n\tVK_OEM_RESET           = 0xE9\n\tVK_OEM_JUMP            = 0xEA\n\tVK_OEM_PA1             = 0xEB\n\tVK_OEM_PA2             = 0xEC\n\tVK_OEM_PA3             = 0xED\n\tVK_OEM_WSCTRL          = 0xEE\n\tVK_OEM_CUSEL           = 0xEF\n\tVK_OEM_ATTN            = 0xF0\n\tVK_OEM_FINISH          = 0xF1\n\tVK_OEM_COPY            = 0xF2\n\tVK_OEM_AUTO            = 0xF3\n\tVK_OEM_ENLW            = 0xF4\n\tVK_OEM_BACKTAB         = 0xF5\n\tVK_ATTN                = 0xF6\n\tVK_CRSEL               = 0xF7\n\tVK_EXSEL               = 0xF8\n\tVK_EREOF               = 0xF9\n\tVK_PLAY                = 0xFA\n\tVK_ZOOM                = 0xFB\n\tVK_NONAME              = 0xFC\n\tVK_PA1                 = 0xFD\n\tVK_OEM_CLEAR           = 0xFE\n)\n\n// Registry Value Types\nconst (\n\tREG_NONE                       = 0\n\tREG_SZ                         = 1\n\tREG_EXPAND_SZ                  = 2\n\tREG_BINARY                     = 3\n\tREG_DWORD                      = 4\n\tREG_DWORD_LITTLE_ENDIAN        = 4\n\tREG_DWORD_BIG_ENDIAN           = 5\n\tREG_LINK                       = 6\n\tREG_MULTI_SZ                   = 7\n\tREG_RESOURCE_LIST              = 8\n\tREG_FULL_RESOURCE_DESCRIPTOR   = 9\n\tREG_RESOURCE_REQUIREMENTS_LIST = 10\n\tREG_QWORD                      = 11\n\tREG_QWORD_LITTLE_ENDIAN        = 11\n)\n\n// Tooltip styles\nconst (\n\tTTS_ALWAYSTIP      = 0x01\n\tTTS_NOPREFIX       = 0x02\n\tTTS_NOANIMATE      = 0x10\n\tTTS_NOFADE         = 0x20\n\tTTS_BALLOON        = 0x40\n\tTTS_CLOSE          = 0x80\n\tTTS_USEVISUALSTYLE = 0x100\n)\n\n// Tooltip messages\nconst (\n\tTTM_ACTIVATE        = (WM_USER + 1)\n\tTTM_SETDELAYTIME    = (WM_USER + 3)\n\tTTM_ADDTOOL         = (WM_USER + 50)\n\tTTM_DELTOOL         = (WM_USER + 51)\n\tTTM_NEWTOOLRECT     = (WM_USER + 52)\n\tTTM_RELAYEVENT      = (WM_USER + 7)\n\tTTM_GETTOOLINFO     = (WM_USER + 53)\n\tTTM_SETTOOLINFO     = (WM_USER + 54)\n\tTTM_HITTEST         = (WM_USER + 55)\n\tTTM_GETTEXT         = (WM_USER + 56)\n\tTTM_UPDATETIPTEXT   = (WM_USER + 57)\n\tTTM_GETTOOLCOUNT    = (WM_USER + 13)\n\tTTM_ENUMTOOLS       = (WM_USER + 58)\n\tTTM_GETCURRENTTOOL  = (WM_USER + 59)\n\tTTM_WINDOWFROMPOINT = (WM_USER + 16)\n\tTTM_TRACKACTIVATE   = (WM_USER + 17)\n\tTTM_TRACKPOSITION   = (WM_USER + 18)\n\tTTM_SETTIPBKCOLOR   = (WM_USER + 19)\n\tTTM_SETTIPTEXTCOLOR = (WM_USER + 20)\n\tTTM_GETDELAYTIME    = (WM_USER + 21)\n\tTTM_GETTIPBKCOLOR   = (WM_USER + 22)\n\tTTM_GETTIPTEXTCOLOR = (WM_USER + 23)\n\tTTM_SETMAXTIPWIDTH  = (WM_USER + 24)\n\tTTM_GETMAXTIPWIDTH  = (WM_USER + 25)\n\tTTM_SETMARGIN       = (WM_USER + 26)\n\tTTM_GETMARGIN       = (WM_USER + 27)\n\tTTM_POP             = (WM_USER + 28)\n\tTTM_UPDATE          = (WM_USER + 29)\n\tTTM_GETBUBBLESIZE   = (WM_USER + 30)\n\tTTM_ADJUSTRECT      = (WM_USER + 31)\n\tTTM_SETTITLE        = (WM_USER + 33)\n\tTTM_POPUP           = (WM_USER + 34)\n\tTTM_GETTITLE        = (WM_USER + 35)\n)\n\n// Tooltip icons\nconst (\n\tTTI_NONE          = 0\n\tTTI_INFO          = 1\n\tTTI_WARNING       = 2\n\tTTI_ERROR         = 3\n\tTTI_INFO_LARGE    = 4\n\tTTI_WARNING_LARGE = 5\n\tTTI_ERROR_LARGE   = 6\n)\n\n// Tooltip notifications\nconst (\n\tTTN_FIRST       = -520\n\tTTN_LAST        = -549\n\tTTN_GETDISPINFO = (TTN_FIRST - 10)\n\tTTN_SHOW        = (TTN_FIRST - 1)\n\tTTN_POP         = (TTN_FIRST - 2)\n\tTTN_LINKCLICK   = (TTN_FIRST - 3)\n\tTTN_NEEDTEXT    = TTN_GETDISPINFO\n)\n\nconst (\n\tTTF_IDISHWND    = 0x0001\n\tTTF_CENTERTIP   = 0x0002\n\tTTF_RTLREADING  = 0x0004\n\tTTF_SUBCLASS    = 0x0010\n\tTTF_TRACK       = 0x0020\n\tTTF_ABSOLUTE    = 0x0080\n\tTTF_TRANSPARENT = 0x0100\n\tTTF_PARSELINKS  = 0x1000\n\tTTF_DI_SETITEM  = 0x8000\n)\n\nconst (\n\tSWP_NOSIZE         = 0x0001\n\tSWP_NOMOVE         = 0x0002\n\tSWP_NOZORDER       = 0x0004\n\tSWP_NOREDRAW       = 0x0008\n\tSWP_NOACTIVATE     = 0x0010\n\tSWP_FRAMECHANGED   = 0x0020\n\tSWP_SHOWWINDOW     = 0x0040\n\tSWP_HIDEWINDOW     = 0x0080\n\tSWP_NOCOPYBITS     = 0x0100\n\tSWP_NOOWNERZORDER  = 0x0200\n\tSWP_NOSENDCHANGING = 0x0400\n\tSWP_DRAWFRAME      = SWP_FRAMECHANGED\n\tSWP_NOREPOSITION   = SWP_NOOWNERZORDER\n\tSWP_DEFERERASE     = 0x2000\n\tSWP_ASYNCWINDOWPOS = 0x4000\n)\n\n// Predefined window handles\nconst (\n\tHWND_BROADCAST = HWND(0xFFFF)\n\tHWND_BOTTOM    = HWND(1)\n\tHWND_NOTOPMOST = ^HWND(1) // -2\n\tHWND_TOP       = HWND(0)\n\tHWND_TOPMOST   = ^HWND(0) // -1\n\tHWND_DESKTOP   = HWND(0)\n\tHWND_MESSAGE   = ^HWND(2) // -3\n)\n\n// Pen types\nconst (\n\tPS_COSMETIC  = 0x00000000\n\tPS_GEOMETRIC = 0x00010000\n\tPS_TYPE_MASK = 0x000F0000\n)\n\n// Pen styles\nconst (\n\tPS_SOLID       = 0\n\tPS_DASH        = 1\n\tPS_DOT         = 2\n\tPS_DASHDOT     = 3\n\tPS_DASHDOTDOT  = 4\n\tPS_NULL        = 5\n\tPS_INSIDEFRAME = 6\n\tPS_USERSTYLE   = 7\n\tPS_ALTERNATE   = 8\n\tPS_STYLE_MASK  = 0x0000000F\n)\n\n// Pen cap types\nconst (\n\tPS_ENDCAP_ROUND  = 0x00000000\n\tPS_ENDCAP_SQUARE = 0x00000100\n\tPS_ENDCAP_FLAT   = 0x00000200\n\tPS_ENDCAP_MASK   = 0x00000F00\n)\n\n// Pen join types\nconst (\n\tPS_JOIN_ROUND = 0x00000000\n\tPS_JOIN_BEVEL = 0x00001000\n\tPS_JOIN_MITER = 0x00002000\n\tPS_JOIN_MASK  = 0x0000F000\n)\n\n// Hatch styles\nconst (\n\tHS_HORIZONTAL = 0\n\tHS_VERTICAL   = 1\n\tHS_FDIAGONAL  = 2\n\tHS_BDIAGONAL  = 3\n\tHS_CROSS      = 4\n\tHS_DIAGCROSS  = 5\n)\n\n// Stock Logical Objects\nconst (\n\tWHITE_BRUSH         = 0\n\tLTGRAY_BRUSH        = 1\n\tGRAY_BRUSH          = 2\n\tDKGRAY_BRUSH        = 3\n\tBLACK_BRUSH         = 4\n\tNULL_BRUSH          = 5\n\tHOLLOW_BRUSH        = NULL_BRUSH\n\tWHITE_PEN           = 6\n\tBLACK_PEN           = 7\n\tNULL_PEN            = 8\n\tOEM_FIXED_FONT      = 10\n\tANSI_FIXED_FONT     = 11\n\tANSI_VAR_FONT       = 12\n\tSYSTEM_FONT         = 13\n\tDEVICE_DEFAULT_FONT = 14\n\tDEFAULT_PALETTE     = 15\n\tSYSTEM_FIXED_FONT   = 16\n\tDEFAULT_GUI_FONT    = 17\n\tDC_BRUSH            = 18\n\tDC_PEN              = 19\n)\n\n// Brush styles\nconst (\n\tBS_SOLID         = 0\n\tBS_NULL          = 1\n\tBS_HOLLOW        = BS_NULL\n\tBS_HATCHED       = 2\n\tBS_PATTERN       = 3\n\tBS_INDEXED       = 4\n\tBS_DIBPATTERN    = 5\n\tBS_DIBPATTERNPT  = 6\n\tBS_PATTERN8X8    = 7\n\tBS_DIBPATTERN8X8 = 8\n\tBS_MONOPATTERN   = 9\n)\n\n// TRACKMOUSEEVENT flags\nconst (\n\tTME_HOVER     = 0x00000001\n\tTME_LEAVE     = 0x00000002\n\tTME_NONCLIENT = 0x00000010\n\tTME_QUERY     = 0x40000000\n\tTME_CANCEL    = 0x80000000\n\n\tHOVER_DEFAULT = 0xFFFFFFFF\n)\n\n// WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes\nconst (\n\tHTERROR       = (-2)\n\tHTTRANSPARENT = (-1)\n\tHTNOWHERE     = 0\n\tHTCLIENT      = 1\n\tHTCAPTION     = 2\n\tHTSYSMENU     = 3\n\tHTGROWBOX     = 4\n\tHTSIZE        = HTGROWBOX\n\tHTMENU        = 5\n\tHTHSCROLL     = 6\n\tHTVSCROLL     = 7\n\tHTMINBUTTON   = 8\n\tHTMAXBUTTON   = 9\n\tHTLEFT        = 10\n\tHTRIGHT       = 11\n\tHTTOP         = 12\n\tHTTOPLEFT     = 13\n\tHTTOPRIGHT    = 14\n\tHTBOTTOM      = 15\n\tHTBOTTOMLEFT  = 16\n\tHTBOTTOMRIGHT = 17\n\tHTBORDER      = 18\n\tHTREDUCE      = HTMINBUTTON\n\tHTZOOM        = HTMAXBUTTON\n\tHTSIZEFIRST   = HTLEFT\n\tHTSIZELAST    = HTBOTTOMRIGHT\n\tHTOBJECT      = 19\n\tHTCLOSE       = 20\n\tHTHELP        = 21\n)\n\n// DrawText[Ex] format flags\nconst (\n\tDT_TOP                  = 0x00000000\n\tDT_LEFT                 = 0x00000000\n\tDT_CENTER               = 0x00000001\n\tDT_RIGHT                = 0x00000002\n\tDT_VCENTER              = 0x00000004\n\tDT_BOTTOM               = 0x00000008\n\tDT_WORDBREAK            = 0x00000010\n\tDT_SINGLELINE           = 0x00000020\n\tDT_EXPANDTABS           = 0x00000040\n\tDT_TABSTOP              = 0x00000080\n\tDT_NOCLIP               = 0x00000100\n\tDT_EXTERNALLEADING      = 0x00000200\n\tDT_CALCRECT             = 0x00000400\n\tDT_NOPREFIX             = 0x00000800\n\tDT_INTERNAL             = 0x00001000\n\tDT_EDITCONTROL          = 0x00002000\n\tDT_PATH_ELLIPSIS        = 0x00004000\n\tDT_END_ELLIPSIS         = 0x00008000\n\tDT_MODIFYSTRING         = 0x00010000\n\tDT_RTLREADING           = 0x00020000\n\tDT_WORD_ELLIPSIS        = 0x00040000\n\tDT_NOFULLWIDTHCHARBREAK = 0x00080000\n\tDT_HIDEPREFIX           = 0x00100000\n\tDT_PREFIXONLY           = 0x00200000\n)\n\nconst CLR_INVALID = 0xFFFFFFFF\n\n// Background Modes\nconst (\n\tTRANSPARENT = 1\n\tOPAQUE      = 2\n\tBKMODE_LAST = 2\n)\n\n// Global Memory Flags\nconst (\n\tGMEM_FIXED          = 0x0000\n\tGMEM_MOVEABLE       = 0x0002\n\tGMEM_NOCOMPACT      = 0x0010\n\tGMEM_NODISCARD      = 0x0020\n\tGMEM_ZEROINIT       = 0x0040\n\tGMEM_MODIFY         = 0x0080\n\tGMEM_DISCARDABLE    = 0x0100\n\tGMEM_NOT_BANKED     = 0x1000\n\tGMEM_SHARE          = 0x2000\n\tGMEM_DDESHARE       = 0x2000\n\tGMEM_NOTIFY         = 0x4000\n\tGMEM_LOWER          = GMEM_NOT_BANKED\n\tGMEM_VALID_FLAGS    = 0x7F72\n\tGMEM_INVALID_HANDLE = 0x8000\n\tGHND                = (GMEM_MOVEABLE | GMEM_ZEROINIT)\n\tGPTR                = (GMEM_FIXED | GMEM_ZEROINIT)\n)\n\n// Ternary raster operations\nconst (\n\tSRCCOPY        = 0x00CC0020\n\tSRCPAINT       = 0x00EE0086\n\tSRCAND         = 0x008800C6\n\tSRCINVERT      = 0x00660046\n\tSRCERASE       = 0x00440328\n\tNOTSRCCOPY     = 0x00330008\n\tNOTSRCERASE    = 0x001100A6\n\tMERGECOPY      = 0x00C000CA\n\tMERGEPAINT     = 0x00BB0226\n\tPATCOPY        = 0x00F00021\n\tPATPAINT       = 0x00FB0A09\n\tPATINVERT      = 0x005A0049\n\tDSTINVERT      = 0x00550009\n\tBLACKNESS      = 0x00000042\n\tWHITENESS      = 0x00FF0062\n\tNOMIRRORBITMAP = 0x80000000\n\tCAPTUREBLT     = 0x40000000\n)\n\n// Clipboard formats\nconst (\n\tCF_TEXT            = 1\n\tCF_BITMAP          = 2\n\tCF_METAFILEPICT    = 3\n\tCF_SYLK            = 4\n\tCF_DIF             = 5\n\tCF_TIFF            = 6\n\tCF_OEMTEXT         = 7\n\tCF_DIB             = 8\n\tCF_PALETTE         = 9\n\tCF_PENDATA         = 10\n\tCF_RIFF            = 11\n\tCF_WAVE            = 12\n\tCF_UNICODETEXT     = 13\n\tCF_ENHMETAFILE     = 14\n\tCF_HDROP           = 15\n\tCF_LOCALE          = 16\n\tCF_DIBV5           = 17\n\tCF_MAX             = 18\n\tCF_OWNERDISPLAY    = 0x0080\n\tCF_DSPTEXT         = 0x0081\n\tCF_DSPBITMAP       = 0x0082\n\tCF_DSPMETAFILEPICT = 0x0083\n\tCF_DSPENHMETAFILE  = 0x008E\n\tCF_PRIVATEFIRST    = 0x0200\n\tCF_PRIVATELAST     = 0x02FF\n\tCF_GDIOBJFIRST     = 0x0300\n\tCF_GDIOBJLAST      = 0x03FF\n)\n\n// Bitmap compression formats\nconst (\n\tBI_RGB       = 0\n\tBI_RLE8      = 1\n\tBI_RLE4      = 2\n\tBI_BITFIELDS = 3\n\tBI_JPEG      = 4\n\tBI_PNG       = 5\n)\n\n// SetDIBitsToDevice fuColorUse\nconst (\n\tDIB_PAL_COLORS = 1\n\tDIB_RGB_COLORS = 0\n)\n\nconst (\n\tSTANDARD_RIGHTS_REQUIRED = 0x000F\n)\n\n// Service Control Manager object specific access types\nconst (\n\tSC_MANAGER_CONNECT            = 0x0001\n\tSC_MANAGER_CREATE_SERVICE     = 0x0002\n\tSC_MANAGER_ENUMERATE_SERVICE  = 0x0004\n\tSC_MANAGER_LOCK               = 0x0008\n\tSC_MANAGER_QUERY_LOCK_STATUS  = 0x0010\n\tSC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020\n\tSC_MANAGER_ALL_ACCESS         = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG\n)\n\n// Service Types (Bit Mask)\nconst (\n\tSERVICE_KERNEL_DRIVER       = 0x00000001\n\tSERVICE_FILE_SYSTEM_DRIVER  = 0x00000002\n\tSERVICE_ADAPTER             = 0x00000004\n\tSERVICE_RECOGNIZER_DRIVER   = 0x00000008\n\tSERVICE_DRIVER              = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER\n\tSERVICE_WIN32_OWN_PROCESS   = 0x00000010\n\tSERVICE_WIN32_SHARE_PROCESS = 0x00000020\n\tSERVICE_WIN32               = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS\n\tSERVICE_INTERACTIVE_PROCESS = 0x00000100\n\tSERVICE_TYPE_ALL            = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS\n)\n\n// Service State -- for CurrentState\nconst (\n\tSERVICE_STOPPED          = 0x00000001\n\tSERVICE_START_PENDING    = 0x00000002\n\tSERVICE_STOP_PENDING     = 0x00000003\n\tSERVICE_RUNNING          = 0x00000004\n\tSERVICE_CONTINUE_PENDING = 0x00000005\n\tSERVICE_PAUSE_PENDING    = 0x00000006\n\tSERVICE_PAUSED           = 0x00000007\n)\n\n// Controls Accepted  (Bit Mask)\nconst (\n\tSERVICE_ACCEPT_STOP                  = 0x00000001\n\tSERVICE_ACCEPT_PAUSE_CONTINUE        = 0x00000002\n\tSERVICE_ACCEPT_SHUTDOWN              = 0x00000004\n\tSERVICE_ACCEPT_PARAMCHANGE           = 0x00000008\n\tSERVICE_ACCEPT_NETBINDCHANGE         = 0x00000010\n\tSERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020\n\tSERVICE_ACCEPT_POWEREVENT            = 0x00000040\n\tSERVICE_ACCEPT_SESSIONCHANGE         = 0x00000080\n\tSERVICE_ACCEPT_PRESHUTDOWN           = 0x00000100\n\tSERVICE_ACCEPT_TIMECHANGE            = 0x00000200\n\tSERVICE_ACCEPT_TRIGGEREVENT          = 0x00000400\n)\n\n// Service object specific access type\nconst (\n\tSERVICE_QUERY_CONFIG         = 0x0001\n\tSERVICE_CHANGE_CONFIG        = 0x0002\n\tSERVICE_QUERY_STATUS         = 0x0004\n\tSERVICE_ENUMERATE_DEPENDENTS = 0x0008\n\tSERVICE_START                = 0x0010\n\tSERVICE_STOP                 = 0x0020\n\tSERVICE_PAUSE_CONTINUE       = 0x0040\n\tSERVICE_INTERROGATE          = 0x0080\n\tSERVICE_USER_DEFINED_CONTROL = 0x0100\n\n\tSERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED |\n\t\tSERVICE_QUERY_CONFIG |\n\t\tSERVICE_CHANGE_CONFIG |\n\t\tSERVICE_QUERY_STATUS |\n\t\tSERVICE_ENUMERATE_DEPENDENTS |\n\t\tSERVICE_START |\n\t\tSERVICE_STOP |\n\t\tSERVICE_PAUSE_CONTINUE |\n\t\tSERVICE_INTERROGATE |\n\t\tSERVICE_USER_DEFINED_CONTROL\n)\n\n// MapVirtualKey maptypes\nconst (\n\tMAPVK_VK_TO_CHAR   = 2\n\tMAPVK_VK_TO_VSC    = 0\n\tMAPVK_VSC_TO_VK    = 1\n\tMAPVK_VSC_TO_VK_EX = 3\n)\n\n// ReadEventLog Flags\nconst (\n\tEVENTLOG_SEEK_READ       = 0x0002\n\tEVENTLOG_SEQUENTIAL_READ = 0x0001\n\tEVENTLOG_FORWARDS_READ   = 0x0004\n\tEVENTLOG_BACKWARDS_READ  = 0x0008\n)\n\n// CreateToolhelp32Snapshot flags\nconst (\n\tTH32CS_SNAPHEAPLIST = 0x00000001\n\tTH32CS_SNAPPROCESS  = 0x00000002\n\tTH32CS_SNAPTHREAD   = 0x00000004\n\tTH32CS_SNAPMODULE   = 0x00000008\n\tTH32CS_SNAPMODULE32 = 0x00000010\n\tTH32CS_INHERIT      = 0x80000000\n\tTH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD\n)\n\nconst (\n\tMAX_MODULE_NAME32 = 255\n\tMAX_PATH          = 260\n)\n\nconst (\n\tFOREGROUND_BLUE            = 0x0001\n\tFOREGROUND_GREEN           = 0x0002\n\tFOREGROUND_RED             = 0x0004\n\tFOREGROUND_INTENSITY       = 0x0008\n\tBACKGROUND_BLUE            = 0x0010\n\tBACKGROUND_GREEN           = 0x0020\n\tBACKGROUND_RED             = 0x0040\n\tBACKGROUND_INTENSITY       = 0x0080\n\tCOMMON_LVB_LEADING_BYTE    = 0x0100\n\tCOMMON_LVB_TRAILING_BYTE   = 0x0200\n\tCOMMON_LVB_GRID_HORIZONTAL = 0x0400\n\tCOMMON_LVB_GRID_LVERTICAL  = 0x0800\n\tCOMMON_LVB_GRID_RVERTICAL  = 0x1000\n\tCOMMON_LVB_REVERSE_VIDEO   = 0x4000\n\tCOMMON_LVB_UNDERSCORE      = 0x8000\n)\n\n// Flags used by the DWM_BLURBEHIND structure to indicate\n// which of its members contain valid information.\nconst (\n\tDWM_BB_ENABLE                = 0x00000001 //     A value for the fEnable member has been specified.\n\tDWM_BB_BLURREGION            = 0x00000002 //     A value for the hRgnBlur member has been specified.\n\tDWM_BB_TRANSITIONONMAXIMIZED = 0x00000004 //     A value for the fTransitionOnMaximized member has been specified.\n)\n\n// Flags used by the DwmEnableComposition  function\n// to change the state of Desktop Window Manager (DWM) composition.\nconst (\n\tDWM_EC_DISABLECOMPOSITION = 0 //     Disable composition\n\tDWM_EC_ENABLECOMPOSITION  = 1 //     Enable composition\n)\n\n// enum-lite implementation for the following constant structure\ntype DWM_SHOWCONTACT int32\n\nconst (\n\tDWMSC_DOWN      = 0x00000001\n\tDWMSC_UP        = 0x00000002\n\tDWMSC_DRAG      = 0x00000004\n\tDWMSC_HOLD      = 0x00000008\n\tDWMSC_PENBARREL = 0x00000010\n\tDWMSC_NONE      = 0x00000000\n\tDWMSC_ALL       = 0xFFFFFFFF\n)\n\n// enum-lite implementation for the following constant structure\ntype DWM_SOURCE_FRAME_SAMPLING int32\n\n// TODO: need to verify this construction\n// Flags used by the DwmSetPresentParameters function\n// to specify the frame sampling type\nconst (\n\tDWM_SOURCE_FRAME_SAMPLING_POINT = iota + 1\n\tDWM_SOURCE_FRAME_SAMPLING_COVERAGE\n\tDWM_SOURCE_FRAME_SAMPLING_LAST\n)\n\n// Flags used by the DWM_THUMBNAIL_PROPERTIES structure to\n// indicate which of its members contain valid information.\nconst (\n\tDWM_TNP_RECTDESTINATION      = 0x00000001 //    A value for the rcDestination member has been specified\n\tDWM_TNP_RECTSOURCE           = 0x00000002 //    A value for the rcSource member has been specified\n\tDWM_TNP_OPACITY              = 0x00000004 //    A value for the opacity member has been specified\n\tDWM_TNP_VISIBLE              = 0x00000008 //    A value for the fVisible member has been specified\n\tDWM_TNP_SOURCECLIENTAREAONLY = 0x00000010 //    A value for the fSourceClientAreaOnly member has been specified\n)\n\n// enum-lite implementation for the following constant structure\ntype DWMFLIP3DWINDOWPOLICY int32\n\n// TODO: need to verify this construction\n// Flags used by the DwmSetWindowAttribute function\n// to specify the Flip3D window policy\nconst (\n\tDWMFLIP3D_DEFAULT = iota + 1\n\tDWMFLIP3D_EXCLUDEBELOW\n\tDWMFLIP3D_EXCLUDEABOVE\n\tDWMFLIP3D_LAST\n)\n\n// enum-lite implementation for the following constant structure\ntype DWMNCRENDERINGPOLICY int32\n\n// TODO: need to verify this construction\n// Flags used by the DwmSetWindowAttribute function\n// to specify the non-client area rendering policy\nconst (\n\tDWMNCRP_USEWINDOWSTYLE = iota + 1\n\tDWMNCRP_DISABLED\n\tDWMNCRP_ENABLED\n\tDWMNCRP_LAST\n)\n\n// enum-lite implementation for the following constant structure\ntype DWMTRANSITION_OWNEDWINDOW_TARGET int32\n\nconst (\n\tDWMTRANSITION_OWNEDWINDOW_NULL       = -1\n\tDWMTRANSITION_OWNEDWINDOW_REPOSITION = 0\n)\n\n// enum-lite implementation for the following constant structure\ntype DWMWINDOWATTRIBUTE int32\n\n// TODO: need to verify this construction\n// Flags used by the DwmGetWindowAttribute and DwmSetWindowAttribute functions\n// to specify window attributes for non-client rendering\nconst (\n\tDWMWA_NCRENDERING_ENABLED = iota + 1\n\tDWMWA_NCRENDERING_POLICY\n\tDWMWA_TRANSITIONS_FORCEDISABLED\n\tDWMWA_ALLOW_NCPAINT\n\tDWMWA_CAPTION_BUTTON_BOUNDS\n\tDWMWA_NONCLIENT_RTL_LAYOUT\n\tDWMWA_FORCE_ICONIC_REPRESENTATION\n\tDWMWA_FLIP3D_POLICY\n\tDWMWA_EXTENDED_FRAME_BOUNDS\n\tDWMWA_HAS_ICONIC_BITMAP\n\tDWMWA_DISALLOW_PEEK\n\tDWMWA_EXCLUDED_FROM_PEEK\n\tDWMWA_CLOAK\n\tDWMWA_CLOAKED\n\tDWMWA_FREEZE_REPRESENTATION\n\tDWMWA_LAST\n)\n\n// enum-lite implementation for the following constant structure\ntype GESTURE_TYPE int32\n\n// TODO: use iota?\n// Identifies the gesture type\nconst (\n\tGT_PEN_TAP                 = 0\n\tGT_PEN_DOUBLETAP           = 1\n\tGT_PEN_RIGHTTAP            = 2\n\tGT_PEN_PRESSANDHOLD        = 3\n\tGT_PEN_PRESSANDHOLDABORT   = 4\n\tGT_TOUCH_TAP               = 5\n\tGT_TOUCH_DOUBLETAP         = 6\n\tGT_TOUCH_RIGHTTAP          = 7\n\tGT_TOUCH_PRESSANDHOLD      = 8\n\tGT_TOUCH_PRESSANDHOLDABORT = 9\n\tGT_TOUCH_PRESSANDTAP       = 10\n)\n\n// Icons\nconst (\n\tICON_SMALL  = 0\n\tICON_BIG    = 1\n\tICON_SMALL2 = 2\n)\n\nconst (\n\tSIZE_RESTORED  = 0\n\tSIZE_MINIMIZED = 1\n\tSIZE_MAXIMIZED = 2\n\tSIZE_MAXSHOW   = 3\n\tSIZE_MAXHIDE   = 4\n)\n\n// XButton values\nconst (\n\tXBUTTON1 = 1\n\tXBUTTON2 = 2\n)\n\n// Devmode\nconst (\n\tDM_SPECVERSION = 0x0401\n\n\tDM_ORIENTATION        = 0x00000001\n\tDM_PAPERSIZE          = 0x00000002\n\tDM_PAPERLENGTH        = 0x00000004\n\tDM_PAPERWIDTH         = 0x00000008\n\tDM_SCALE              = 0x00000010\n\tDM_POSITION           = 0x00000020\n\tDM_NUP                = 0x00000040\n\tDM_DISPLAYORIENTATION = 0x00000080\n\tDM_COPIES             = 0x00000100\n\tDM_DEFAULTSOURCE      = 0x00000200\n\tDM_PRINTQUALITY       = 0x00000400\n\tDM_COLOR              = 0x00000800\n\tDM_DUPLEX             = 0x00001000\n\tDM_YRESOLUTION        = 0x00002000\n\tDM_TTOPTION           = 0x00004000\n\tDM_COLLATE            = 0x00008000\n\tDM_FORMNAME           = 0x00010000\n\tDM_LOGPIXELS          = 0x00020000\n\tDM_BITSPERPEL         = 0x00040000\n\tDM_PELSWIDTH          = 0x00080000\n\tDM_PELSHEIGHT         = 0x00100000\n\tDM_DISPLAYFLAGS       = 0x00200000\n\tDM_DISPLAYFREQUENCY   = 0x00400000\n\tDM_ICMMETHOD          = 0x00800000\n\tDM_ICMINTENT          = 0x01000000\n\tDM_MEDIATYPE          = 0x02000000\n\tDM_DITHERTYPE         = 0x04000000\n\tDM_PANNINGWIDTH       = 0x08000000\n\tDM_PANNINGHEIGHT      = 0x10000000\n\tDM_DISPLAYFIXEDOUTPUT = 0x20000000\n)\n\n// ChangeDisplaySettings\nconst (\n\tCDS_UPDATEREGISTRY  = 0x00000001\n\tCDS_TEST            = 0x00000002\n\tCDS_FULLSCREEN      = 0x00000004\n\tCDS_GLOBAL          = 0x00000008\n\tCDS_SET_PRIMARY     = 0x00000010\n\tCDS_VIDEOPARAMETERS = 0x00000020\n\tCDS_RESET           = 0x40000000\n\tCDS_NORESET         = 0x10000000\n\n\tDISP_CHANGE_SUCCESSFUL  = 0\n\tDISP_CHANGE_RESTART     = 1\n\tDISP_CHANGE_FAILED      = -1\n\tDISP_CHANGE_BADMODE     = -2\n\tDISP_CHANGE_NOTUPDATED  = -3\n\tDISP_CHANGE_BADFLAGS    = -4\n\tDISP_CHANGE_BADPARAM    = -5\n\tDISP_CHANGE_BADDUALVIEW = -6\n)\n\nconst (\n\tENUM_CURRENT_SETTINGS  = 0xFFFFFFFF\n\tENUM_REGISTRY_SETTINGS = 0xFFFFFFFE\n)\n\n// PIXELFORMATDESCRIPTOR\nconst (\n\tPFD_TYPE_RGBA       = 0\n\tPFD_TYPE_COLORINDEX = 1\n\n\tPFD_MAIN_PLANE     = 0\n\tPFD_OVERLAY_PLANE  = 1\n\tPFD_UNDERLAY_PLANE = -1\n\n\tPFD_DOUBLEBUFFER         = 0x00000001\n\tPFD_STEREO               = 0x00000002\n\tPFD_DRAW_TO_WINDOW       = 0x00000004\n\tPFD_DRAW_TO_BITMAP       = 0x00000008\n\tPFD_SUPPORT_GDI          = 0x00000010\n\tPFD_SUPPORT_OPENGL       = 0x00000020\n\tPFD_GENERIC_FORMAT       = 0x00000040\n\tPFD_NEED_PALETTE         = 0x00000080\n\tPFD_NEED_SYSTEM_PALETTE  = 0x00000100\n\tPFD_SWAP_EXCHANGE        = 0x00000200\n\tPFD_SWAP_COPY            = 0x00000400\n\tPFD_SWAP_LAYER_BUFFERS   = 0x00000800\n\tPFD_GENERIC_ACCELERATED  = 0x00001000\n\tPFD_SUPPORT_DIRECTDRAW   = 0x00002000\n\tPFD_DIRECT3D_ACCELERATED = 0x00004000\n\tPFD_SUPPORT_COMPOSITION  = 0x00008000\n\n\tPFD_DEPTH_DONTCARE        = 0x20000000\n\tPFD_DOUBLEBUFFER_DONTCARE = 0x40000000\n\tPFD_STEREO_DONTCARE       = 0x80000000\n)\n\nconst (\n\tINPUT_MOUSE    = 0\n\tINPUT_KEYBOARD = 1\n\tINPUT_HARDWARE = 2\n)\n\nconst (\n\tMOUSEEVENTF_ABSOLUTE        = 0x8000\n\tMOUSEEVENTF_HWHEEL          = 0x01000\n\tMOUSEEVENTF_MOVE            = 0x0001\n\tMOUSEEVENTF_MOVE_NOCOALESCE = 0x2000\n\tMOUSEEVENTF_LEFTDOWN        = 0x0002\n\tMOUSEEVENTF_LEFTUP          = 0x0004\n\tMOUSEEVENTF_RIGHTDOWN       = 0x0008\n\tMOUSEEVENTF_RIGHTUP         = 0x0010\n\tMOUSEEVENTF_MIDDLEDOWN      = 0x0020\n\tMOUSEEVENTF_MIDDLEUP        = 0x0040\n\tMOUSEEVENTF_VIRTUALDESK     = 0x4000\n\tMOUSEEVENTF_WHEEL           = 0x0800\n\tMOUSEEVENTF_XDOWN           = 0x0080\n\tMOUSEEVENTF_XUP             = 0x0100\n)\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/dwmapi.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// DEFINED IN THE DWM API BUT NOT IMPLEMENTED BY MS:\n// DwmAttachMilContent\n// DwmDetachMilContent\n// DwmEnableComposition\n// DwmGetGraphicsStreamClient\n// DwmGetGraphicsStreamTransformHint\n\nvar (\n\tmoddwmapi = syscall.NewLazyDLL(\"dwmapi.dll\")\n\n\tprocDwmDefWindowProc                 = moddwmapi.NewProc(\"DwmDefWindowProc\")\n\tprocDwmEnableBlurBehindWindow        = moddwmapi.NewProc(\"DwmEnableBlurBehindWindow\")\n\tprocDwmEnableMMCSS                   = moddwmapi.NewProc(\"DwmEnableMMCSS\")\n\tprocDwmExtendFrameIntoClientArea     = moddwmapi.NewProc(\"DwmExtendFrameIntoClientArea\")\n\tprocDwmFlush                         = moddwmapi.NewProc(\"DwmFlush\")\n\tprocDwmGetColorizationColor          = moddwmapi.NewProc(\"DwmGetColorizationColor\")\n\tprocDwmGetCompositionTimingInfo      = moddwmapi.NewProc(\"DwmGetCompositionTimingInfo\")\n\tprocDwmGetTransportAttributes        = moddwmapi.NewProc(\"DwmGetTransportAttributes\")\n\tprocDwmGetWindowAttribute            = moddwmapi.NewProc(\"DwmGetWindowAttribute\")\n\tprocDwmInvalidateIconicBitmaps       = moddwmapi.NewProc(\"DwmInvalidateIconicBitmaps\")\n\tprocDwmIsCompositionEnabled          = moddwmapi.NewProc(\"DwmIsCompositionEnabled\")\n\tprocDwmModifyPreviousDxFrameDuration = moddwmapi.NewProc(\"DwmModifyPreviousDxFrameDuration\")\n\tprocDwmQueryThumbnailSourceSize      = moddwmapi.NewProc(\"DwmQueryThumbnailSourceSize\")\n\tprocDwmRegisterThumbnail             = moddwmapi.NewProc(\"DwmRegisterThumbnail\")\n\tprocDwmRenderGesture                 = moddwmapi.NewProc(\"DwmRenderGesture\")\n\tprocDwmSetDxFrameDuration            = moddwmapi.NewProc(\"DwmSetDxFrameDuration\")\n\tprocDwmSetIconicLivePreviewBitmap    = moddwmapi.NewProc(\"DwmSetIconicLivePreviewBitmap\")\n\tprocDwmSetIconicThumbnail            = moddwmapi.NewProc(\"DwmSetIconicThumbnail\")\n\tprocDwmSetPresentParameters          = moddwmapi.NewProc(\"DwmSetPresentParameters\")\n\tprocDwmSetWindowAttribute            = moddwmapi.NewProc(\"DwmSetWindowAttribute\")\n\tprocDwmShowContact                   = moddwmapi.NewProc(\"DwmShowContact\")\n\tprocDwmTetherContact                 = moddwmapi.NewProc(\"DwmTetherContact\")\n\tprocDwmTransitionOwnedWindow         = moddwmapi.NewProc(\"DwmTransitionOwnedWindow\")\n\tprocDwmUnregisterThumbnail           = moddwmapi.NewProc(\"DwmUnregisterThumbnail\")\n\tprocDwmUpdateThumbnailProperties     = moddwmapi.NewProc(\"DwmUpdateThumbnailProperties\")\n)\n\nfunc DwmDefWindowProc(hWnd HWND, msg uint, wParam, lParam uintptr) (bool, uint) {\n\tvar result uint\n\tret, _, _ := procDwmDefWindowProc.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam,\n\t\tuintptr(unsafe.Pointer(&result)))\n\treturn ret != 0, result\n}\n\nfunc DwmEnableBlurBehindWindow(hWnd HWND, pBlurBehind *DWM_BLURBEHIND) HRESULT {\n\tret, _, _ := procDwmEnableBlurBehindWindow.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(unsafe.Pointer(pBlurBehind)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmEnableMMCSS(fEnableMMCSS bool) HRESULT {\n\tret, _, _ := procDwmEnableMMCSS.Call(\n\t\tuintptr(BoolToBOOL(fEnableMMCSS)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmExtendFrameIntoClientArea(hWnd HWND, pMarInset *MARGINS) HRESULT {\n\tret, _, _ := procDwmExtendFrameIntoClientArea.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(unsafe.Pointer(pMarInset)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmFlush() HRESULT {\n\tret, _, _ := procDwmFlush.Call()\n\treturn HRESULT(ret)\n}\n\nfunc DwmGetColorizationColor(pcrColorization *uint32, pfOpaqueBlend *BOOL) HRESULT {\n\tret, _, _ := procDwmGetColorizationColor.Call(\n\t\tuintptr(unsafe.Pointer(pcrColorization)),\n\t\tuintptr(unsafe.Pointer(pfOpaqueBlend)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmGetCompositionTimingInfo(hWnd HWND, pTimingInfo *DWM_TIMING_INFO) HRESULT {\n\tret, _, _ := procDwmGetCompositionTimingInfo.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(unsafe.Pointer(pTimingInfo)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmGetTransportAttributes(pfIsRemoting *BOOL, pfIsConnected *BOOL, pDwGeneration *uint32) HRESULT {\n\tret, _, _ := procDwmGetTransportAttributes.Call(\n\t\tuintptr(unsafe.Pointer(pfIsRemoting)),\n\t\tuintptr(unsafe.Pointer(pfIsConnected)),\n\t\tuintptr(unsafe.Pointer(pDwGeneration)))\n\treturn HRESULT(ret)\n}\n\n// TODO: verify handling of variable arguments\nfunc DwmGetWindowAttribute(hWnd HWND, dwAttribute uint32) (pAttribute interface{}, result HRESULT) {\n\tvar pvAttribute, pvAttrSize uintptr\n\tswitch dwAttribute {\n\tcase DWMWA_NCRENDERING_ENABLED:\n\t\tv := new(BOOL)\n\t\tpAttribute = v\n\t\tpvAttribute = uintptr(unsafe.Pointer(v))\n\t\tpvAttrSize = unsafe.Sizeof(*v)\n\tcase DWMWA_CAPTION_BUTTON_BOUNDS, DWMWA_EXTENDED_FRAME_BOUNDS:\n\t\tv := new(RECT)\n\t\tpAttribute = v\n\t\tpvAttribute = uintptr(unsafe.Pointer(v))\n\t\tpvAttrSize = unsafe.Sizeof(*v)\n\tcase DWMWA_CLOAKED:\n\t\tpanic(fmt.Sprintf(\"DwmGetWindowAttribute(%d) is not currently supported.\", dwAttribute))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"DwmGetWindowAttribute(%d) is not valid.\", dwAttribute))\n\t}\n\n\tret, _, _ := procDwmGetWindowAttribute.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(dwAttribute),\n\t\tpvAttribute,\n\t\tpvAttrSize)\n\tresult = HRESULT(ret)\n\treturn\n}\n\nfunc DwmInvalidateIconicBitmaps(hWnd HWND) HRESULT {\n\tret, _, _ := procDwmInvalidateIconicBitmaps.Call(\n\t\tuintptr(hWnd))\n\treturn HRESULT(ret)\n}\n\nfunc DwmIsCompositionEnabled(pfEnabled *BOOL) HRESULT {\n\tret, _, _ := procDwmIsCompositionEnabled.Call(\n\t\tuintptr(unsafe.Pointer(pfEnabled)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmModifyPreviousDxFrameDuration(hWnd HWND, cRefreshes int, fRelative bool) HRESULT {\n\tret, _, _ := procDwmModifyPreviousDxFrameDuration.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(cRefreshes),\n\t\tuintptr(BoolToBOOL(fRelative)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmQueryThumbnailSourceSize(hThumbnail HTHUMBNAIL, pSize *SIZE) HRESULT {\n\tret, _, _ := procDwmQueryThumbnailSourceSize.Call(\n\t\tuintptr(hThumbnail),\n\t\tuintptr(unsafe.Pointer(pSize)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmRegisterThumbnail(hWndDestination HWND, hWndSource HWND, phThumbnailId *HTHUMBNAIL) HRESULT {\n\tret, _, _ := procDwmRegisterThumbnail.Call(\n\t\tuintptr(hWndDestination),\n\t\tuintptr(hWndSource),\n\t\tuintptr(unsafe.Pointer(phThumbnailId)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmRenderGesture(gt GESTURE_TYPE, cContacts uint, pdwPointerID *uint32, pPoints *POINT) {\n\tprocDwmRenderGesture.Call(\n\t\tuintptr(gt),\n\t\tuintptr(cContacts),\n\t\tuintptr(unsafe.Pointer(pdwPointerID)),\n\t\tuintptr(unsafe.Pointer(pPoints)))\n\treturn\n}\n\nfunc DwmSetDxFrameDuration(hWnd HWND, cRefreshes int) HRESULT {\n\tret, _, _ := procDwmSetDxFrameDuration.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(cRefreshes))\n\treturn HRESULT(ret)\n}\n\nfunc DwmSetIconicLivePreviewBitmap(hWnd HWND, hbmp HBITMAP, pptClient *POINT, dwSITFlags uint32) HRESULT {\n\tret, _, _ := procDwmSetIconicLivePreviewBitmap.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(hbmp),\n\t\tuintptr(unsafe.Pointer(pptClient)),\n\t\tuintptr(dwSITFlags))\n\treturn HRESULT(ret)\n}\n\nfunc DwmSetIconicThumbnail(hWnd HWND, hbmp HBITMAP, dwSITFlags uint32) HRESULT {\n\tret, _, _ := procDwmSetIconicThumbnail.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(hbmp),\n\t\tuintptr(dwSITFlags))\n\treturn HRESULT(ret)\n}\n\nfunc DwmSetPresentParameters(hWnd HWND, pPresentParams *DWM_PRESENT_PARAMETERS) HRESULT {\n\tret, _, _ := procDwmSetPresentParameters.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(unsafe.Pointer(pPresentParams)))\n\treturn HRESULT(ret)\n}\n\nfunc DwmSetWindowAttribute(hWnd HWND, dwAttribute uint32, pvAttribute LPCVOID, cbAttribute uint32) HRESULT {\n\tret, _, _ := procDwmSetWindowAttribute.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(dwAttribute),\n\t\tuintptr(pvAttribute),\n\t\tuintptr(cbAttribute))\n\treturn HRESULT(ret)\n}\n\nfunc DwmShowContact(dwPointerID uint32, eShowContact DWM_SHOWCONTACT) {\n\tprocDwmShowContact.Call(\n\t\tuintptr(dwPointerID),\n\t\tuintptr(eShowContact))\n\treturn\n}\n\nfunc DwmTetherContact(dwPointerID uint32, fEnable bool, ptTether POINT) {\n\tprocDwmTetherContact.Call(\n\t\tuintptr(dwPointerID),\n\t\tuintptr(BoolToBOOL(fEnable)),\n\t\tuintptr(unsafe.Pointer(&ptTether)))\n\treturn\n}\n\nfunc DwmTransitionOwnedWindow(hWnd HWND, target DWMTRANSITION_OWNEDWINDOW_TARGET) {\n\tprocDwmTransitionOwnedWindow.Call(\n\t\tuintptr(hWnd),\n\t\tuintptr(target))\n\treturn\n}\n\nfunc DwmUnregisterThumbnail(hThumbnailId HTHUMBNAIL) HRESULT {\n\tret, _, _ := procDwmUnregisterThumbnail.Call(\n\t\tuintptr(hThumbnailId))\n\treturn HRESULT(ret)\n}\n\nfunc DwmUpdateThumbnailProperties(hThumbnailId HTHUMBNAIL, ptnProperties *DWM_THUMBNAIL_PROPERTIES) HRESULT {\n\tret, _, _ := procDwmUpdateThumbnailProperties.Call(\n\t\tuintptr(hThumbnailId),\n\t\tuintptr(unsafe.Pointer(ptnProperties)))\n\treturn HRESULT(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/gdi32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodgdi32 = syscall.NewLazyDLL(\"gdi32.dll\")\n\n\tprocGetDeviceCaps             = modgdi32.NewProc(\"GetDeviceCaps\")\n\tprocDeleteObject              = modgdi32.NewProc(\"DeleteObject\")\n\tprocCreateFontIndirect        = modgdi32.NewProc(\"CreateFontIndirectW\")\n\tprocAbortDoc                  = modgdi32.NewProc(\"AbortDoc\")\n\tprocBitBlt                    = modgdi32.NewProc(\"BitBlt\")\n\tprocCloseEnhMetaFile          = modgdi32.NewProc(\"CloseEnhMetaFile\")\n\tprocCopyEnhMetaFile           = modgdi32.NewProc(\"CopyEnhMetaFileW\")\n\tprocCreateBrushIndirect       = modgdi32.NewProc(\"CreateBrushIndirect\")\n\tprocCreateCompatibleDC        = modgdi32.NewProc(\"CreateCompatibleDC\")\n\tprocCreateDC                  = modgdi32.NewProc(\"CreateDCW\")\n\tprocCreateDIBSection          = modgdi32.NewProc(\"CreateDIBSection\")\n\tprocCreateEnhMetaFile         = modgdi32.NewProc(\"CreateEnhMetaFileW\")\n\tprocCreateIC                  = modgdi32.NewProc(\"CreateICW\")\n\tprocDeleteDC                  = modgdi32.NewProc(\"DeleteDC\")\n\tprocDeleteEnhMetaFile         = modgdi32.NewProc(\"DeleteEnhMetaFile\")\n\tprocEllipse                   = modgdi32.NewProc(\"Ellipse\")\n\tprocEndDoc                    = modgdi32.NewProc(\"EndDoc\")\n\tprocEndPage                   = modgdi32.NewProc(\"EndPage\")\n\tprocExtCreatePen              = modgdi32.NewProc(\"ExtCreatePen\")\n\tprocGetEnhMetaFile            = modgdi32.NewProc(\"GetEnhMetaFileW\")\n\tprocGetEnhMetaFileHeader      = modgdi32.NewProc(\"GetEnhMetaFileHeader\")\n\tprocGetObject                 = modgdi32.NewProc(\"GetObjectW\")\n\tprocGetStockObject            = modgdi32.NewProc(\"GetStockObject\")\n\tprocGetTextExtentExPoint      = modgdi32.NewProc(\"GetTextExtentExPointW\")\n\tprocGetTextExtentPoint32      = modgdi32.NewProc(\"GetTextExtentPoint32W\")\n\tprocGetTextMetrics            = modgdi32.NewProc(\"GetTextMetricsW\")\n\tprocLineTo                    = modgdi32.NewProc(\"LineTo\")\n\tprocMoveToEx                  = modgdi32.NewProc(\"MoveToEx\")\n\tprocPlayEnhMetaFile           = modgdi32.NewProc(\"PlayEnhMetaFile\")\n\tprocRectangle                 = modgdi32.NewProc(\"Rectangle\")\n\tprocResetDC                   = modgdi32.NewProc(\"ResetDCW\")\n\tprocSelectObject              = modgdi32.NewProc(\"SelectObject\")\n\tprocSetBkMode                 = modgdi32.NewProc(\"SetBkMode\")\n\tprocSetBrushOrgEx             = modgdi32.NewProc(\"SetBrushOrgEx\")\n\tprocSetStretchBltMode         = modgdi32.NewProc(\"SetStretchBltMode\")\n\tprocSetTextColor              = modgdi32.NewProc(\"SetTextColor\")\n\tprocSetBkColor                = modgdi32.NewProc(\"SetBkColor\")\n\tprocStartDoc                  = modgdi32.NewProc(\"StartDocW\")\n\tprocStartPage                 = modgdi32.NewProc(\"StartPage\")\n\tprocStretchBlt                = modgdi32.NewProc(\"StretchBlt\")\n\tprocSetDIBitsToDevice         = modgdi32.NewProc(\"SetDIBitsToDevice\")\n\tprocChoosePixelFormat         = modgdi32.NewProc(\"ChoosePixelFormat\")\n\tprocDescribePixelFormat       = modgdi32.NewProc(\"DescribePixelFormat\")\n\tprocGetEnhMetaFilePixelFormat = modgdi32.NewProc(\"GetEnhMetaFilePixelFormat\")\n\tprocGetPixelFormat            = modgdi32.NewProc(\"GetPixelFormat\")\n\tprocSetPixelFormat            = modgdi32.NewProc(\"SetPixelFormat\")\n\tprocSwapBuffers               = modgdi32.NewProc(\"SwapBuffers\")\n)\n\nfunc GetDeviceCaps(hdc HDC, index int) int {\n\tret, _, _ := procGetDeviceCaps.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(index))\n\n\treturn int(ret)\n}\n\nfunc DeleteObject(hObject HGDIOBJ) bool {\n\tret, _, _ := procDeleteObject.Call(\n\t\tuintptr(hObject))\n\n\treturn ret != 0\n}\n\nfunc CreateFontIndirect(logFont *LOGFONT) HFONT {\n\tret, _, _ := procCreateFontIndirect.Call(\n\t\tuintptr(unsafe.Pointer(logFont)))\n\n\treturn HFONT(ret)\n}\n\nfunc AbortDoc(hdc HDC) int {\n\tret, _, _ := procAbortDoc.Call(\n\t\tuintptr(hdc))\n\n\treturn int(ret)\n}\n\nfunc BitBlt(hdcDest HDC, nXDest, nYDest, nWidth, nHeight int, hdcSrc HDC, nXSrc, nYSrc int, dwRop uint) {\n\tret, _, _ := procBitBlt.Call(\n\t\tuintptr(hdcDest),\n\t\tuintptr(nXDest),\n\t\tuintptr(nYDest),\n\t\tuintptr(nWidth),\n\t\tuintptr(nHeight),\n\t\tuintptr(hdcSrc),\n\t\tuintptr(nXSrc),\n\t\tuintptr(nYSrc),\n\t\tuintptr(dwRop))\n\n\tif ret == 0 {\n\t\tpanic(\"BitBlt failed\")\n\t}\n}\n\nfunc CloseEnhMetaFile(hdc HDC) HENHMETAFILE {\n\tret, _, _ := procCloseEnhMetaFile.Call(\n\t\tuintptr(hdc))\n\n\treturn HENHMETAFILE(ret)\n}\n\nfunc CopyEnhMetaFile(hemfSrc HENHMETAFILE, lpszFile *uint16) HENHMETAFILE {\n\tret, _, _ := procCopyEnhMetaFile.Call(\n\t\tuintptr(hemfSrc),\n\t\tuintptr(unsafe.Pointer(lpszFile)))\n\n\treturn HENHMETAFILE(ret)\n}\n\nfunc CreateBrushIndirect(lplb *LOGBRUSH) HBRUSH {\n\tret, _, _ := procCreateBrushIndirect.Call(\n\t\tuintptr(unsafe.Pointer(lplb)))\n\n\treturn HBRUSH(ret)\n}\n\nfunc CreateCompatibleDC(hdc HDC) HDC {\n\tret, _, _ := procCreateCompatibleDC.Call(\n\t\tuintptr(hdc))\n\n\tif ret == 0 {\n\t\tpanic(\"Create compatible DC failed\")\n\t}\n\n\treturn HDC(ret)\n}\n\nfunc CreateDC(lpszDriver, lpszDevice, lpszOutput *uint16, lpInitData *DEVMODE) HDC {\n\tret, _, _ := procCreateDC.Call(\n\t\tuintptr(unsafe.Pointer(lpszDriver)),\n\t\tuintptr(unsafe.Pointer(lpszDevice)),\n\t\tuintptr(unsafe.Pointer(lpszOutput)),\n\t\tuintptr(unsafe.Pointer(lpInitData)))\n\n\treturn HDC(ret)\n}\n\nfunc CreateDIBSection(hdc HDC, pbmi *BITMAPINFO, iUsage uint, ppvBits *unsafe.Pointer, hSection HANDLE, dwOffset uint) HBITMAP {\n\tret, _, _ := procCreateDIBSection.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(pbmi)),\n\t\tuintptr(iUsage),\n\t\tuintptr(unsafe.Pointer(ppvBits)),\n\t\tuintptr(hSection),\n\t\tuintptr(dwOffset))\n\n\treturn HBITMAP(ret)\n}\n\nfunc CreateEnhMetaFile(hdcRef HDC, lpFilename *uint16, lpRect *RECT, lpDescription *uint16) HDC {\n\tret, _, _ := procCreateEnhMetaFile.Call(\n\t\tuintptr(hdcRef),\n\t\tuintptr(unsafe.Pointer(lpFilename)),\n\t\tuintptr(unsafe.Pointer(lpRect)),\n\t\tuintptr(unsafe.Pointer(lpDescription)))\n\n\treturn HDC(ret)\n}\n\nfunc CreateIC(lpszDriver, lpszDevice, lpszOutput *uint16, lpdvmInit *DEVMODE) HDC {\n\tret, _, _ := procCreateIC.Call(\n\t\tuintptr(unsafe.Pointer(lpszDriver)),\n\t\tuintptr(unsafe.Pointer(lpszDevice)),\n\t\tuintptr(unsafe.Pointer(lpszOutput)),\n\t\tuintptr(unsafe.Pointer(lpdvmInit)))\n\n\treturn HDC(ret)\n}\n\nfunc DeleteDC(hdc HDC) bool {\n\tret, _, _ := procDeleteDC.Call(\n\t\tuintptr(hdc))\n\n\treturn ret != 0\n}\n\nfunc DeleteEnhMetaFile(hemf HENHMETAFILE) bool {\n\tret, _, _ := procDeleteEnhMetaFile.Call(\n\t\tuintptr(hemf))\n\n\treturn ret != 0\n}\n\nfunc Ellipse(hdc HDC, nLeftRect, nTopRect, nRightRect, nBottomRect int) bool {\n\tret, _, _ := procEllipse.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(nLeftRect),\n\t\tuintptr(nTopRect),\n\t\tuintptr(nRightRect),\n\t\tuintptr(nBottomRect))\n\n\treturn ret != 0\n}\n\nfunc EndDoc(hdc HDC) int {\n\tret, _, _ := procEndDoc.Call(\n\t\tuintptr(hdc))\n\n\treturn int(ret)\n}\n\nfunc EndPage(hdc HDC) int {\n\tret, _, _ := procEndPage.Call(\n\t\tuintptr(hdc))\n\n\treturn int(ret)\n}\n\nfunc ExtCreatePen(dwPenStyle, dwWidth uint, lplb *LOGBRUSH, dwStyleCount uint, lpStyle *uint) HPEN {\n\tret, _, _ := procExtCreatePen.Call(\n\t\tuintptr(dwPenStyle),\n\t\tuintptr(dwWidth),\n\t\tuintptr(unsafe.Pointer(lplb)),\n\t\tuintptr(dwStyleCount),\n\t\tuintptr(unsafe.Pointer(lpStyle)))\n\n\treturn HPEN(ret)\n}\n\nfunc GetEnhMetaFile(lpszMetaFile *uint16) HENHMETAFILE {\n\tret, _, _ := procGetEnhMetaFile.Call(\n\t\tuintptr(unsafe.Pointer(lpszMetaFile)))\n\n\treturn HENHMETAFILE(ret)\n}\n\nfunc GetEnhMetaFileHeader(hemf HENHMETAFILE, cbBuffer uint, lpemh *ENHMETAHEADER) uint {\n\tret, _, _ := procGetEnhMetaFileHeader.Call(\n\t\tuintptr(hemf),\n\t\tuintptr(cbBuffer),\n\t\tuintptr(unsafe.Pointer(lpemh)))\n\n\treturn uint(ret)\n}\n\nfunc GetObject(hgdiobj HGDIOBJ, cbBuffer uintptr, lpvObject unsafe.Pointer) int {\n\tret, _, _ := procGetObject.Call(\n\t\tuintptr(hgdiobj),\n\t\tuintptr(cbBuffer),\n\t\tuintptr(lpvObject))\n\n\treturn int(ret)\n}\n\nfunc GetStockObject(fnObject int) HGDIOBJ {\n\tret, _, _ := procGetDeviceCaps.Call(\n\t\tuintptr(fnObject))\n\n\treturn HGDIOBJ(ret)\n}\n\nfunc GetTextExtentExPoint(hdc HDC, lpszStr *uint16, cchString, nMaxExtent int, lpnFit, alpDx *int, lpSize *SIZE) bool {\n\tret, _, _ := procGetTextExtentExPoint.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(lpszStr)),\n\t\tuintptr(cchString),\n\t\tuintptr(nMaxExtent),\n\t\tuintptr(unsafe.Pointer(lpnFit)),\n\t\tuintptr(unsafe.Pointer(alpDx)),\n\t\tuintptr(unsafe.Pointer(lpSize)))\n\n\treturn ret != 0\n}\n\nfunc GetTextExtentPoint32(hdc HDC, lpString *uint16, c int, lpSize *SIZE) bool {\n\tret, _, _ := procGetTextExtentPoint32.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(lpString)),\n\t\tuintptr(c),\n\t\tuintptr(unsafe.Pointer(lpSize)))\n\n\treturn ret != 0\n}\n\nfunc GetTextMetrics(hdc HDC, lptm *TEXTMETRIC) bool {\n\tret, _, _ := procGetTextMetrics.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(lptm)))\n\n\treturn ret != 0\n}\n\nfunc LineTo(hdc HDC, nXEnd, nYEnd int) bool {\n\tret, _, _ := procLineTo.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(nXEnd),\n\t\tuintptr(nYEnd))\n\n\treturn ret != 0\n}\n\nfunc MoveToEx(hdc HDC, x, y int, lpPoint *POINT) bool {\n\tret, _, _ := procMoveToEx.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(unsafe.Pointer(lpPoint)))\n\n\treturn ret != 0\n}\n\nfunc PlayEnhMetaFile(hdc HDC, hemf HENHMETAFILE, lpRect *RECT) bool {\n\tret, _, _ := procPlayEnhMetaFile.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(hemf),\n\t\tuintptr(unsafe.Pointer(lpRect)))\n\n\treturn ret != 0\n}\n\nfunc Rectangle(hdc HDC, nLeftRect, nTopRect, nRightRect, nBottomRect int) bool {\n\tret, _, _ := procRectangle.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(nLeftRect),\n\t\tuintptr(nTopRect),\n\t\tuintptr(nRightRect),\n\t\tuintptr(nBottomRect))\n\n\treturn ret != 0\n}\n\nfunc ResetDC(hdc HDC, lpInitData *DEVMODE) HDC {\n\tret, _, _ := procResetDC.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(lpInitData)))\n\n\treturn HDC(ret)\n}\n\nfunc SelectObject(hdc HDC, hgdiobj HGDIOBJ) HGDIOBJ {\n\tret, _, _ := procSelectObject.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(hgdiobj))\n\n\tif ret == 0 {\n\t\tpanic(\"SelectObject failed\")\n\t}\n\n\treturn HGDIOBJ(ret)\n}\n\nfunc SetBkMode(hdc HDC, iBkMode int) int {\n\tret, _, _ := procSetBkMode.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(iBkMode))\n\n\tif ret == 0 {\n\t\tpanic(\"SetBkMode failed\")\n\t}\n\n\treturn int(ret)\n}\n\nfunc SetBrushOrgEx(hdc HDC, nXOrg, nYOrg int, lppt *POINT) bool {\n\tret, _, _ := procSetBrushOrgEx.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(nXOrg),\n\t\tuintptr(nYOrg),\n\t\tuintptr(unsafe.Pointer(lppt)))\n\n\treturn ret != 0\n}\n\nfunc SetStretchBltMode(hdc HDC, iStretchMode int) int {\n\tret, _, _ := procSetStretchBltMode.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(iStretchMode))\n\n\treturn int(ret)\n}\n\nfunc SetTextColor(hdc HDC, crColor COLORREF) COLORREF {\n\tret, _, _ := procSetTextColor.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(crColor))\n\n\tif ret == CLR_INVALID {\n\t\tpanic(\"SetTextColor failed\")\n\t}\n\n\treturn COLORREF(ret)\n}\n\nfunc SetBkColor(hdc HDC, crColor COLORREF) COLORREF {\n\tret, _, _ := procSetBkColor.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(crColor))\n\n\tif ret == CLR_INVALID {\n\t\tpanic(\"SetBkColor failed\")\n\t}\n\n\treturn COLORREF(ret)\n}\n\nfunc StartDoc(hdc HDC, lpdi *DOCINFO) int {\n\tret, _, _ := procStartDoc.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(lpdi)))\n\n\treturn int(ret)\n}\n\nfunc StartPage(hdc HDC) int {\n\tret, _, _ := procStartPage.Call(\n\t\tuintptr(hdc))\n\n\treturn int(ret)\n}\n\nfunc StretchBlt(hdcDest HDC, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest int, hdcSrc HDC, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc int, dwRop uint) {\n\tret, _, _ := procStretchBlt.Call(\n\t\tuintptr(hdcDest),\n\t\tuintptr(nXOriginDest),\n\t\tuintptr(nYOriginDest),\n\t\tuintptr(nWidthDest),\n\t\tuintptr(nHeightDest),\n\t\tuintptr(hdcSrc),\n\t\tuintptr(nXOriginSrc),\n\t\tuintptr(nYOriginSrc),\n\t\tuintptr(nWidthSrc),\n\t\tuintptr(nHeightSrc),\n\t\tuintptr(dwRop))\n\n\tif ret == 0 {\n\t\tpanic(\"StretchBlt failed\")\n\t}\n}\n\nfunc SetDIBitsToDevice(hdc HDC, xDest, yDest, dwWidth, dwHeight, xSrc, ySrc int, uStartScan, cScanLines uint, lpvBits []byte, lpbmi *BITMAPINFO, fuColorUse uint) int {\n\tret, _, _ := procSetDIBitsToDevice.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(xDest),\n\t\tuintptr(yDest),\n\t\tuintptr(dwWidth),\n\t\tuintptr(dwHeight),\n\t\tuintptr(xSrc),\n\t\tuintptr(ySrc),\n\t\tuintptr(uStartScan),\n\t\tuintptr(cScanLines),\n\t\tuintptr(unsafe.Pointer(&lpvBits[0])),\n\t\tuintptr(unsafe.Pointer(lpbmi)),\n\t\tuintptr(fuColorUse))\n\n\treturn int(ret)\n}\n\nfunc ChoosePixelFormat(hdc HDC, pfd *PIXELFORMATDESCRIPTOR) int {\n\tret, _, _ := procChoosePixelFormat.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(pfd)),\n\t)\n\treturn int(ret)\n}\n\nfunc DescribePixelFormat(hdc HDC, iPixelFormat int, nBytes uint, pfd *PIXELFORMATDESCRIPTOR) int {\n\tret, _, _ := procDescribePixelFormat.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(iPixelFormat),\n\t\tuintptr(nBytes),\n\t\tuintptr(unsafe.Pointer(pfd)),\n\t)\n\treturn int(ret)\n}\n\nfunc GetEnhMetaFilePixelFormat(hemf HENHMETAFILE, cbBuffer uint32, pfd *PIXELFORMATDESCRIPTOR) uint {\n\tret, _, _ := procGetEnhMetaFilePixelFormat.Call(\n\t\tuintptr(hemf),\n\t\tuintptr(cbBuffer),\n\t\tuintptr(unsafe.Pointer(pfd)),\n\t)\n\treturn uint(ret)\n}\n\nfunc GetPixelFormat(hdc HDC) int {\n\tret, _, _ := procGetPixelFormat.Call(\n\t\tuintptr(hdc),\n\t)\n\treturn int(ret)\n}\n\nfunc SetPixelFormat(hdc HDC, iPixelFormat int, pfd *PIXELFORMATDESCRIPTOR) bool {\n\tret, _, _ := procSetPixelFormat.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(iPixelFormat),\n\t\tuintptr(unsafe.Pointer(pfd)),\n\t)\n\treturn ret == TRUE\n}\n\nfunc SwapBuffers(hdc HDC) bool {\n\tret, _, _ := procSwapBuffers.Call(uintptr(hdc))\n\treturn ret == TRUE\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/gdiplus.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst (\n\tOk                        = 0\n\tGenericError              = 1\n\tInvalidParameter          = 2\n\tOutOfMemory               = 3\n\tObjectBusy                = 4\n\tInsufficientBuffer        = 5\n\tNotImplemented            = 6\n\tWin32Error                = 7\n\tWrongState                = 8\n\tAborted                   = 9\n\tFileNotFound              = 10\n\tValueOverflow             = 11\n\tAccessDenied              = 12\n\tUnknownImageFormat        = 13\n\tFontFamilyNotFound        = 14\n\tFontStyleNotFound         = 15\n\tNotTrueTypeFont           = 16\n\tUnsupportedGdiplusVersion = 17\n\tGdiplusNotInitialized     = 18\n\tPropertyNotFound          = 19\n\tPropertyNotSupported      = 20\n\tProfileNotFound           = 21\n)\n\nfunc GetGpStatus(s int32) string {\n\tswitch s {\n\tcase Ok:\n\t\treturn \"Ok\"\n\tcase GenericError:\n\t\treturn \"GenericError\"\n\tcase InvalidParameter:\n\t\treturn \"InvalidParameter\"\n\tcase OutOfMemory:\n\t\treturn \"OutOfMemory\"\n\tcase ObjectBusy:\n\t\treturn \"ObjectBusy\"\n\tcase InsufficientBuffer:\n\t\treturn \"InsufficientBuffer\"\n\tcase NotImplemented:\n\t\treturn \"NotImplemented\"\n\tcase Win32Error:\n\t\treturn \"Win32Error\"\n\tcase WrongState:\n\t\treturn \"WrongState\"\n\tcase Aborted:\n\t\treturn \"Aborted\"\n\tcase FileNotFound:\n\t\treturn \"FileNotFound\"\n\tcase ValueOverflow:\n\t\treturn \"ValueOverflow\"\n\tcase AccessDenied:\n\t\treturn \"AccessDenied\"\n\tcase UnknownImageFormat:\n\t\treturn \"UnknownImageFormat\"\n\tcase FontFamilyNotFound:\n\t\treturn \"FontFamilyNotFound\"\n\tcase FontStyleNotFound:\n\t\treturn \"FontStyleNotFound\"\n\tcase NotTrueTypeFont:\n\t\treturn \"NotTrueTypeFont\"\n\tcase UnsupportedGdiplusVersion:\n\t\treturn \"UnsupportedGdiplusVersion\"\n\tcase GdiplusNotInitialized:\n\t\treturn \"GdiplusNotInitialized\"\n\tcase PropertyNotFound:\n\t\treturn \"PropertyNotFound\"\n\tcase PropertyNotSupported:\n\t\treturn \"PropertyNotSupported\"\n\tcase ProfileNotFound:\n\t\treturn \"ProfileNotFound\"\n\t}\n\treturn \"Unknown Status Value\"\n}\n\nvar (\n\ttoken uintptr\n\n\tmodgdiplus = syscall.NewLazyDLL(\"gdiplus.dll\")\n\n\tprocGdipCreateBitmapFromFile     = modgdiplus.NewProc(\"GdipCreateBitmapFromFile\")\n\tprocGdipCreateBitmapFromHBITMAP  = modgdiplus.NewProc(\"GdipCreateBitmapFromHBITMAP\")\n\tprocGdipCreateHBITMAPFromBitmap  = modgdiplus.NewProc(\"GdipCreateHBITMAPFromBitmap\")\n\tprocGdipCreateBitmapFromResource = modgdiplus.NewProc(\"GdipCreateBitmapFromResource\")\n\tprocGdipCreateBitmapFromStream   = modgdiplus.NewProc(\"GdipCreateBitmapFromStream\")\n\tprocGdipDisposeImage             = modgdiplus.NewProc(\"GdipDisposeImage\")\n\tprocGdiplusShutdown              = modgdiplus.NewProc(\"GdiplusShutdown\")\n\tprocGdiplusStartup               = modgdiplus.NewProc(\"GdiplusStartup\")\n)\n\nfunc GdipCreateBitmapFromFile(filename string) (*uintptr, error) {\n\tvar bitmap *uintptr\n\tret, _, _ := procGdipCreateBitmapFromFile.Call(\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(filename))),\n\t\tuintptr(unsafe.Pointer(&bitmap)))\n\n\tif ret != Ok {\n\t\treturn nil, errors.New(fmt.Sprintf(\"GdipCreateBitmapFromFile failed with status '%s' for file '%s'\", GetGpStatus(int32(ret)), filename))\n\t}\n\n\treturn bitmap, nil\n}\n\nfunc GdipCreateBitmapFromResource(instance HINSTANCE, resId *uint16) (*uintptr, error) {\n\tvar bitmap *uintptr\n\tret, _, _ := procGdipCreateBitmapFromResource.Call(\n\t\tuintptr(instance),\n\t\tuintptr(unsafe.Pointer(resId)),\n\t\tuintptr(unsafe.Pointer(&bitmap)))\n\n\tif ret != Ok {\n\t\treturn nil, errors.New(fmt.Sprintf(\"GdiCreateBitmapFromResource failed with status '%s'\", GetGpStatus(int32(ret))))\n\t}\n\n\treturn bitmap, nil\n}\n\nfunc GdipCreateBitmapFromStream(stream *IStream) (*uintptr, error) {\n\tvar bitmap *uintptr\n\tret, _, _ := procGdipCreateBitmapFromStream.Call(\n\t\tuintptr(unsafe.Pointer(stream)),\n\t\tuintptr(unsafe.Pointer(&bitmap)))\n\n\tif ret != Ok {\n\t\treturn nil, errors.New(fmt.Sprintf(\"GdipCreateBitmapFromStream failed with status '%s'\", GetGpStatus(int32(ret))))\n\t}\n\n\treturn bitmap, nil\n}\n\nfunc GdipCreateHBITMAPFromBitmap(bitmap *uintptr, background uint32) (HBITMAP, error) {\n\tvar hbitmap HBITMAP\n\tret, _, _ := procGdipCreateHBITMAPFromBitmap.Call(\n\t\tuintptr(unsafe.Pointer(bitmap)),\n\t\tuintptr(unsafe.Pointer(&hbitmap)),\n\t\tuintptr(background))\n\n\tif ret != Ok {\n\t\treturn 0, errors.New(fmt.Sprintf(\"GdipCreateHBITMAPFromBitmap failed with status '%s'\", GetGpStatus(int32(ret))))\n\t}\n\n\treturn hbitmap, nil\n}\n\nfunc GdipDisposeImage(image *uintptr) {\n\tprocGdipDisposeImage.Call(uintptr(unsafe.Pointer(image)))\n}\n\nfunc GdiplusShutdown() {\n\tprocGdiplusShutdown.Call(token)\n}\n\nfunc GdiplusStartup(input *GdiplusStartupInput, output *GdiplusStartupOutput) {\n\tret, _, _ := procGdiplusStartup.Call(\n\t\tuintptr(unsafe.Pointer(&token)),\n\t\tuintptr(unsafe.Pointer(input)),\n\t\tuintptr(unsafe.Pointer(output)))\n\n\tif ret != Ok {\n\t\tpanic(\"GdiplusStartup failed with status \" + GetGpStatus(int32(ret)))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/idispatch.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"unsafe\"\n)\n\ntype pIDispatchVtbl struct {\n\tpQueryInterface   uintptr\n\tpAddRef           uintptr\n\tpRelease          uintptr\n\tpGetTypeInfoCount uintptr\n\tpGetTypeInfo      uintptr\n\tpGetIDsOfNames    uintptr\n\tpInvoke           uintptr\n}\n\ntype IDispatch struct {\n\tlpVtbl *pIDispatchVtbl\n}\n\nfunc (this *IDispatch) QueryInterface(id *GUID) *IDispatch {\n\treturn ComQueryInterface((*IUnknown)(unsafe.Pointer(this)), id)\n}\n\nfunc (this *IDispatch) AddRef() int32 {\n\treturn ComAddRef((*IUnknown)(unsafe.Pointer(this)))\n}\n\nfunc (this *IDispatch) Release() int32 {\n\treturn ComRelease((*IUnknown)(unsafe.Pointer(this)))\n}\n\nfunc (this *IDispatch) GetIDsOfName(names []string) []int32 {\n\treturn ComGetIDsOfName(this, names)\n}\n\nfunc (this *IDispatch) Invoke(dispid int32, dispatch int16, params ...interface{}) *VARIANT {\n\treturn ComInvoke(this, dispid, dispatch, params...)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/istream.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"unsafe\"\n)\n\ntype pIStreamVtbl struct {\n\tpQueryInterface uintptr\n\tpAddRef         uintptr\n\tpRelease        uintptr\n}\n\ntype IStream struct {\n\tlpVtbl *pIStreamVtbl\n}\n\nfunc (this *IStream) QueryInterface(id *GUID) *IDispatch {\n\treturn ComQueryInterface((*IUnknown)(unsafe.Pointer(this)), id)\n}\n\nfunc (this *IStream) AddRef() int32 {\n\treturn ComAddRef((*IUnknown)(unsafe.Pointer(this)))\n}\n\nfunc (this *IStream) Release() int32 {\n\treturn ComRelease((*IUnknown)(unsafe.Pointer(this)))\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/iunknown.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\ntype pIUnknownVtbl struct {\n\tpQueryInterface uintptr\n\tpAddRef         uintptr\n\tpRelease        uintptr\n}\n\ntype IUnknown struct {\n\tlpVtbl *pIUnknownVtbl\n}\n\nfunc (this *IUnknown) QueryInterface(id *GUID) *IDispatch {\n\treturn ComQueryInterface(this, id)\n}\n\nfunc (this *IUnknown) AddRef() int32 {\n\treturn ComAddRef(this)\n}\n\nfunc (this *IUnknown) Release() int32 {\n\treturn ComRelease(this)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/kernel32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodkernel32 = syscall.NewLazyDLL(\"kernel32.dll\")\n\n\tprocGetModuleHandle            = modkernel32.NewProc(\"GetModuleHandleW\")\n\tprocMulDiv                     = modkernel32.NewProc(\"MulDiv\")\n\tprocGetConsoleWindow           = modkernel32.NewProc(\"GetConsoleWindow\")\n\tprocGetCurrentThread           = modkernel32.NewProc(\"GetCurrentThread\")\n\tprocGetLogicalDrives           = modkernel32.NewProc(\"GetLogicalDrives\")\n\tprocGetUserDefaultLCID         = modkernel32.NewProc(\"GetUserDefaultLCID\")\n\tprocLstrlen                    = modkernel32.NewProc(\"lstrlenW\")\n\tprocLstrcpy                    = modkernel32.NewProc(\"lstrcpyW\")\n\tprocGlobalAlloc                = modkernel32.NewProc(\"GlobalAlloc\")\n\tprocGlobalFree                 = modkernel32.NewProc(\"GlobalFree\")\n\tprocGlobalLock                 = modkernel32.NewProc(\"GlobalLock\")\n\tprocGlobalUnlock               = modkernel32.NewProc(\"GlobalUnlock\")\n\tprocMoveMemory                 = modkernel32.NewProc(\"RtlMoveMemory\")\n\tprocFindResource               = modkernel32.NewProc(\"FindResourceW\")\n\tprocSizeofResource             = modkernel32.NewProc(\"SizeofResource\")\n\tprocLockResource               = modkernel32.NewProc(\"LockResource\")\n\tprocLoadResource               = modkernel32.NewProc(\"LoadResource\")\n\tprocGetLastError               = modkernel32.NewProc(\"GetLastError\")\n\tprocOpenProcess                = modkernel32.NewProc(\"OpenProcess\")\n\tprocTerminateProcess           = modkernel32.NewProc(\"TerminateProcess\")\n\tprocCloseHandle                = modkernel32.NewProc(\"CloseHandle\")\n\tprocCreateToolhelp32Snapshot   = modkernel32.NewProc(\"CreateToolhelp32Snapshot\")\n\tprocModule32First              = modkernel32.NewProc(\"Module32FirstW\")\n\tprocModule32Next               = modkernel32.NewProc(\"Module32NextW\")\n\tprocProcess32First             = modkernel32.NewProc(\"Process32FirstW\")\n\tprocProcess32Next              = modkernel32.NewProc(\"Process32NextW\")\n\tprocGetSystemTimes             = modkernel32.NewProc(\"GetSystemTimes\")\n\tprocGetConsoleScreenBufferInfo = modkernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n\tprocSetConsoleTextAttribute    = modkernel32.NewProc(\"SetConsoleTextAttribute\")\n\tprocGetDiskFreeSpaceEx         = modkernel32.NewProc(\"GetDiskFreeSpaceExW\")\n\tprocGetProcessTimes            = modkernel32.NewProc(\"GetProcessTimes\")\n)\n\nfunc GetModuleHandle(modulename string) HINSTANCE {\n\tvar mn uintptr\n\tif modulename == \"\" {\n\t\tmn = 0\n\t} else {\n\t\tmn = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(modulename)))\n\t}\n\tret, _, _ := procGetModuleHandle.Call(mn)\n\treturn HINSTANCE(ret)\n}\n\nfunc MulDiv(number, numerator, denominator int) int {\n\tret, _, _ := procMulDiv.Call(\n\t\tuintptr(number),\n\t\tuintptr(numerator),\n\t\tuintptr(denominator))\n\n\treturn int(ret)\n}\n\nfunc GetConsoleWindow() HWND {\n\tret, _, _ := procGetConsoleWindow.Call()\n\n\treturn HWND(ret)\n}\n\nfunc GetCurrentThread() HANDLE {\n\tret, _, _ := procGetCurrentThread.Call()\n\n\treturn HANDLE(ret)\n}\n\nfunc GetLogicalDrives() uint32 {\n\tret, _, _ := procGetLogicalDrives.Call()\n\n\treturn uint32(ret)\n}\n\nfunc GetUserDefaultLCID() uint32 {\n\tret, _, _ := procGetUserDefaultLCID.Call()\n\n\treturn uint32(ret)\n}\n\nfunc Lstrlen(lpString *uint16) int {\n\tret, _, _ := procLstrlen.Call(uintptr(unsafe.Pointer(lpString)))\n\n\treturn int(ret)\n}\n\nfunc Lstrcpy(buf []uint16, lpString *uint16) {\n\tprocLstrcpy.Call(\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(lpString)))\n}\n\nfunc GlobalAlloc(uFlags uint, dwBytes uint32) HGLOBAL {\n\tret, _, _ := procGlobalAlloc.Call(\n\t\tuintptr(uFlags),\n\t\tuintptr(dwBytes))\n\n\tif ret == 0 {\n\t\tpanic(\"GlobalAlloc failed\")\n\t}\n\n\treturn HGLOBAL(ret)\n}\n\nfunc GlobalFree(hMem HGLOBAL) {\n\tret, _, _ := procGlobalFree.Call(uintptr(hMem))\n\n\tif ret != 0 {\n\t\tpanic(\"GlobalFree failed\")\n\t}\n}\n\nfunc GlobalLock(hMem HGLOBAL) unsafe.Pointer {\n\tret, _, _ := procGlobalLock.Call(uintptr(hMem))\n\n\tif ret == 0 {\n\t\tpanic(\"GlobalLock failed\")\n\t}\n\n\treturn unsafe.Pointer(ret)\n}\n\nfunc GlobalUnlock(hMem HGLOBAL) bool {\n\tret, _, _ := procGlobalUnlock.Call(uintptr(hMem))\n\n\treturn ret != 0\n}\n\nfunc MoveMemory(destination, source unsafe.Pointer, length uint32) {\n\tprocMoveMemory.Call(\n\t\tuintptr(unsafe.Pointer(destination)),\n\t\tuintptr(source),\n\t\tuintptr(length))\n}\n\nfunc FindResource(hModule HMODULE, lpName, lpType *uint16) (HRSRC, error) {\n\tret, _, _ := procFindResource.Call(\n\t\tuintptr(hModule),\n\t\tuintptr(unsafe.Pointer(lpName)),\n\t\tuintptr(unsafe.Pointer(lpType)))\n\n\tif ret == 0 {\n\t\treturn 0, syscall.GetLastError()\n\t}\n\n\treturn HRSRC(ret), nil\n}\n\nfunc SizeofResource(hModule HMODULE, hResInfo HRSRC) uint32 {\n\tret, _, _ := procSizeofResource.Call(\n\t\tuintptr(hModule),\n\t\tuintptr(hResInfo))\n\n\tif ret == 0 {\n\t\tpanic(\"SizeofResource failed\")\n\t}\n\n\treturn uint32(ret)\n}\n\nfunc LockResource(hResData HGLOBAL) unsafe.Pointer {\n\tret, _, _ := procLockResource.Call(uintptr(hResData))\n\n\tif ret == 0 {\n\t\tpanic(\"LockResource failed\")\n\t}\n\n\treturn unsafe.Pointer(ret)\n}\n\nfunc LoadResource(hModule HMODULE, hResInfo HRSRC) HGLOBAL {\n\tret, _, _ := procLoadResource.Call(\n\t\tuintptr(hModule),\n\t\tuintptr(hResInfo))\n\n\tif ret == 0 {\n\t\tpanic(\"LoadResource failed\")\n\t}\n\n\treturn HGLOBAL(ret)\n}\n\nfunc GetLastError() uint32 {\n\tret, _, _ := procGetLastError.Call()\n\treturn uint32(ret)\n}\n\nfunc OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) HANDLE {\n\tinherit := 0\n\tif inheritHandle {\n\t\tinherit = 1\n\t}\n\n\tret, _, _ := procOpenProcess.Call(\n\t\tuintptr(desiredAccess),\n\t\tuintptr(inherit),\n\t\tuintptr(processId))\n\treturn HANDLE(ret)\n}\n\nfunc TerminateProcess(hProcess HANDLE, uExitCode uint) bool {\n\tret, _, _ := procTerminateProcess.Call(\n\t\tuintptr(hProcess),\n\t\tuintptr(uExitCode))\n\treturn ret != 0\n}\n\nfunc CloseHandle(object HANDLE) bool {\n\tret, _, _ := procCloseHandle.Call(\n\t\tuintptr(object))\n\treturn ret != 0\n}\n\nfunc CreateToolhelp32Snapshot(flags, processId uint32) HANDLE {\n\tret, _, _ := procCreateToolhelp32Snapshot.Call(\n\t\tuintptr(flags),\n\t\tuintptr(processId))\n\n\tif ret <= 0 {\n\t\treturn HANDLE(0)\n\t}\n\n\treturn HANDLE(ret)\n}\n\nfunc Module32First(snapshot HANDLE, me *MODULEENTRY32) bool {\n\tret, _, _ := procModule32First.Call(\n\t\tuintptr(snapshot),\n\t\tuintptr(unsafe.Pointer(me)))\n\n\treturn ret != 0\n}\n\nfunc Module32Next(snapshot HANDLE, me *MODULEENTRY32) bool {\n\tret, _, _ := procModule32Next.Call(\n\t\tuintptr(snapshot),\n\t\tuintptr(unsafe.Pointer(me)))\n\n\treturn ret != 0\n}\nfunc Process32First(snapshot HANDLE, pe *PROCESSENTRY32) bool {\n\tret, _, _ := procProcess32First.Call(\n\t\tuintptr(snapshot),\n\t\tuintptr(unsafe.Pointer(pe)))\n\n\treturn ret != 0\n}\n\nfunc Process32Next(snapshot HANDLE, pe *PROCESSENTRY32) bool {\n\tret, _, _ := procProcess32Next.Call(\n\t\tuintptr(snapshot),\n\t\tuintptr(unsafe.Pointer(pe)))\n\n\treturn ret != 0\n}\nfunc GetSystemTimes(lpIdleTime, lpKernelTime, lpUserTime *FILETIME) bool {\n\tret, _, _ := procGetSystemTimes.Call(\n\t\tuintptr(unsafe.Pointer(lpIdleTime)),\n\t\tuintptr(unsafe.Pointer(lpKernelTime)),\n\t\tuintptr(unsafe.Pointer(lpUserTime)))\n\n\treturn ret != 0\n}\n\nfunc GetProcessTimes(hProcess HANDLE, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime *FILETIME) bool {\n\tret, _, _ := procGetProcessTimes.Call(\n\t\tuintptr(hProcess),\n\t\tuintptr(unsafe.Pointer(lpCreationTime)),\n\t\tuintptr(unsafe.Pointer(lpExitTime)),\n\t\tuintptr(unsafe.Pointer(lpKernelTime)),\n\t\tuintptr(unsafe.Pointer(lpUserTime)))\n\n\treturn ret != 0\n}\n\nfunc GetConsoleScreenBufferInfo(hConsoleOutput HANDLE) *CONSOLE_SCREEN_BUFFER_INFO {\n\tvar csbi CONSOLE_SCREEN_BUFFER_INFO\n\tret, _, _ := procGetConsoleScreenBufferInfo.Call(\n\t\tuintptr(hConsoleOutput),\n\t\tuintptr(unsafe.Pointer(&csbi)))\n\tif ret == 0 {\n\t\treturn nil\n\t}\n\treturn &csbi\n}\n\nfunc SetConsoleTextAttribute(hConsoleOutput HANDLE, wAttributes uint16) bool {\n\tret, _, _ := procSetConsoleTextAttribute.Call(\n\t\tuintptr(hConsoleOutput),\n\t\tuintptr(wAttributes))\n\treturn ret != 0\n}\n\nfunc GetDiskFreeSpaceEx(dirName string) (r bool,\n\tfreeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes uint64) {\n\tret, _, _ := procGetDiskFreeSpaceEx.Call(\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(dirName))),\n\t\tuintptr(unsafe.Pointer(&freeBytesAvailable)),\n\t\tuintptr(unsafe.Pointer(&totalNumberOfBytes)),\n\t\tuintptr(unsafe.Pointer(&totalNumberOfFreeBytes)))\n\treturn ret != 0,\n\t\tfreeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/ole32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodole32 = syscall.NewLazyDLL(\"ole32.dll\")\n\n\tprocCoInitializeEx        = modole32.NewProc(\"CoInitializeEx\")\n\tprocCoInitialize          = modole32.NewProc(\"CoInitialize\")\n\tprocCoUninitialize        = modole32.NewProc(\"CoUninitialize\")\n\tprocCreateStreamOnHGlobal = modole32.NewProc(\"CreateStreamOnHGlobal\")\n)\n\nfunc CoInitializeEx(coInit uintptr) HRESULT {\n\tret, _, _ := procCoInitializeEx.Call(\n\t\t0,\n\t\tcoInit)\n\n\tswitch uint32(ret) {\n\tcase E_INVALIDARG:\n\t\tpanic(\"CoInitializeEx failed with E_INVALIDARG\")\n\tcase E_OUTOFMEMORY:\n\t\tpanic(\"CoInitializeEx failed with E_OUTOFMEMORY\")\n\tcase E_UNEXPECTED:\n\t\tpanic(\"CoInitializeEx failed with E_UNEXPECTED\")\n\t}\n\n\treturn HRESULT(ret)\n}\n\nfunc CoInitialize() {\n\tprocCoInitialize.Call(0)\n}\n\nfunc CoUninitialize() {\n\tprocCoUninitialize.Call()\n}\n\nfunc CreateStreamOnHGlobal(hGlobal HGLOBAL, fDeleteOnRelease bool) *IStream {\n\tstream := new(IStream)\n\tret, _, _ := procCreateStreamOnHGlobal.Call(\n\t\tuintptr(hGlobal),\n\t\tuintptr(BoolToBOOL(fDeleteOnRelease)),\n\t\tuintptr(unsafe.Pointer(&stream)))\n\n\tswitch uint32(ret) {\n\tcase E_INVALIDARG:\n\t\tpanic(\"CreateStreamOnHGlobal failed with E_INVALIDARG\")\n\tcase E_OUTOFMEMORY:\n\t\tpanic(\"CreateStreamOnHGlobal failed with E_OUTOFMEMORY\")\n\tcase E_UNEXPECTED:\n\t\tpanic(\"CreateStreamOnHGlobal failed with E_UNEXPECTED\")\n\t}\n\n\treturn stream\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/oleaut32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodoleaut32 = syscall.NewLazyDLL(\"oleaut32\")\n\n\tprocVariantInit        = modoleaut32.NewProc(\"VariantInit\")\n\tprocSysAllocString     = modoleaut32.NewProc(\"SysAllocString\")\n\tprocSysFreeString      = modoleaut32.NewProc(\"SysFreeString\")\n\tprocSysStringLen       = modoleaut32.NewProc(\"SysStringLen\")\n\tprocCreateDispTypeInfo = modoleaut32.NewProc(\"CreateDispTypeInfo\")\n\tprocCreateStdDispatch  = modoleaut32.NewProc(\"CreateStdDispatch\")\n)\n\nfunc VariantInit(v *VARIANT) {\n\thr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\tpanic(\"Invoke VariantInit error.\")\n\t}\n\treturn\n}\n\nfunc SysAllocString(v string) (ss *int16) {\n\tpss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))\n\tss = (*int16)(unsafe.Pointer(pss))\n\treturn\n}\n\nfunc SysFreeString(v *int16) {\n\thr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\tpanic(\"Invoke SysFreeString error.\")\n\t}\n\treturn\n}\n\nfunc SysStringLen(v *int16) uint {\n\tl, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))\n\treturn uint(l)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/opengl32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodopengl32 = syscall.NewLazyDLL(\"opengl32.dll\")\n\n\tprocwglCreateContext      = modopengl32.NewProc(\"wglCreateContext\")\n\tprocwglCreateLayerContext = modopengl32.NewProc(\"wglCreateLayerContext\")\n\tprocwglDeleteContext      = modopengl32.NewProc(\"wglDeleteContext\")\n\tprocwglGetProcAddress     = modopengl32.NewProc(\"wglGetProcAddress\")\n\tprocwglMakeCurrent        = modopengl32.NewProc(\"wglMakeCurrent\")\n\tprocwglShareLists         = modopengl32.NewProc(\"wglShareLists\")\n)\n\nfunc WglCreateContext(hdc HDC) HGLRC {\n\tret, _, _ := procwglCreateContext.Call(\n\t\tuintptr(hdc),\n\t)\n\n\treturn HGLRC(ret)\n}\n\nfunc WglCreateLayerContext(hdc HDC, iLayerPlane int) HGLRC {\n\tret, _, _ := procwglCreateLayerContext.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(iLayerPlane),\n\t)\n\n\treturn HGLRC(ret)\n}\n\nfunc WglDeleteContext(hglrc HGLRC) bool {\n\tret, _, _ := procwglDeleteContext.Call(\n\t\tuintptr(hglrc),\n\t)\n\n\treturn ret == TRUE\n}\n\nfunc WglGetProcAddress(szProc string) uintptr {\n\tret, _, _ := procwglGetProcAddress.Call(\n\t\tuintptr(unsafe.Pointer(syscall.StringBytePtr(szProc))),\n\t)\n\n\treturn ret\n}\n\nfunc WglMakeCurrent(hdc HDC, hglrc HGLRC) bool {\n\tret, _, _ := procwglMakeCurrent.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(hglrc),\n\t)\n\n\treturn ret == TRUE\n}\n\nfunc WglShareLists(hglrc1, hglrc2 HGLRC) bool {\n\tret, _, _ := procwglShareLists.Call(\n\t\tuintptr(hglrc1),\n\t\tuintptr(hglrc2),\n\t)\n\n\treturn ret == TRUE\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/psapi.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodpsapi = syscall.NewLazyDLL(\"psapi.dll\")\n\n\tprocEnumProcesses = modpsapi.NewProc(\"EnumProcesses\")\n)\n\nfunc EnumProcesses(processIds []uint32, cb uint32, bytesReturned *uint32) bool {\n\tret, _, _ := procEnumProcesses.Call(\n\t\tuintptr(unsafe.Pointer(&processIds[0])),\n\t\tuintptr(cb),\n\t\tuintptr(unsafe.Pointer(bytesReturned)))\n\n\treturn ret != 0\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/shell32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmodshell32 = syscall.NewLazyDLL(\"shell32.dll\")\n\n\tprocSHBrowseForFolder   = modshell32.NewProc(\"SHBrowseForFolderW\")\n\tprocSHGetPathFromIDList = modshell32.NewProc(\"SHGetPathFromIDListW\")\n\tprocDragAcceptFiles     = modshell32.NewProc(\"DragAcceptFiles\")\n\tprocDragQueryFile       = modshell32.NewProc(\"DragQueryFileW\")\n\tprocDragQueryPoint      = modshell32.NewProc(\"DragQueryPoint\")\n\tprocDragFinish          = modshell32.NewProc(\"DragFinish\")\n\tprocShellExecute        = modshell32.NewProc(\"ShellExecuteW\")\n\tprocExtractIcon         = modshell32.NewProc(\"ExtractIconW\")\n)\n\nfunc SHBrowseForFolder(bi *BROWSEINFO) uintptr {\n\tret, _, _ := procSHBrowseForFolder.Call(uintptr(unsafe.Pointer(bi)))\n\n\treturn ret\n}\n\nfunc SHGetPathFromIDList(idl uintptr) string {\n\tbuf := make([]uint16, 1024)\n\tprocSHGetPathFromIDList.Call(\n\t\tidl,\n\t\tuintptr(unsafe.Pointer(&buf[0])))\n\n\treturn syscall.UTF16ToString(buf)\n}\n\nfunc DragAcceptFiles(hwnd HWND, accept bool) {\n\tprocDragAcceptFiles.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(BoolToBOOL(accept)))\n}\n\nfunc DragQueryFile(hDrop HDROP, iFile uint) (fileName string, fileCount uint) {\n\tret, _, _ := procDragQueryFile.Call(\n\t\tuintptr(hDrop),\n\t\tuintptr(iFile),\n\t\t0,\n\t\t0)\n\n\tfileCount = uint(ret)\n\n\tif iFile != 0xFFFFFFFF {\n\t\tbuf := make([]uint16, fileCount+1)\n\n\t\tret, _, _ := procDragQueryFile.Call(\n\t\t\tuintptr(hDrop),\n\t\t\tuintptr(iFile),\n\t\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\t\tuintptr(fileCount+1))\n\n\t\tif ret == 0 {\n\t\t\tpanic(\"Invoke DragQueryFile error.\")\n\t\t}\n\n\t\tfileName = syscall.UTF16ToString(buf)\n\t}\n\n\treturn\n}\n\nfunc DragQueryPoint(hDrop HDROP) (x, y int, isClientArea bool) {\n\tvar pt POINT\n\tret, _, _ := procDragQueryPoint.Call(\n\t\tuintptr(hDrop),\n\t\tuintptr(unsafe.Pointer(&pt)))\n\n\treturn int(pt.X), int(pt.Y), (ret == 1)\n}\n\nfunc DragFinish(hDrop HDROP) {\n\tprocDragFinish.Call(uintptr(hDrop))\n}\n\nfunc ShellExecute(hwnd HWND, lpOperation, lpFile, lpParameters, lpDirectory string, nShowCmd int) error {\n\tvar op, param, directory uintptr\n\tif len(lpOperation) != 0 {\n\t\top = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpOperation)))\n\t}\n\tif len(lpParameters) != 0 {\n\t\tparam = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpParameters)))\n\t}\n\tif len(lpDirectory) != 0 {\n\t\tdirectory = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpDirectory)))\n\t}\n\n\tret, _, _ := procShellExecute.Call(\n\t\tuintptr(hwnd),\n\t\top,\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpFile))),\n\t\tparam,\n\t\tdirectory,\n\t\tuintptr(nShowCmd))\n\n\terrorMsg := \"\"\n\tif ret != 0 && ret <= 32 {\n\t\tswitch int(ret) {\n\t\tcase ERROR_FILE_NOT_FOUND:\n\t\t\terrorMsg = \"The specified file was not found.\"\n\t\tcase ERROR_PATH_NOT_FOUND:\n\t\t\terrorMsg = \"The specified path was not found.\"\n\t\tcase ERROR_BAD_FORMAT:\n\t\t\terrorMsg = \"The .exe file is invalid (non-Win32 .exe or error in .exe image).\"\n\t\tcase SE_ERR_ACCESSDENIED:\n\t\t\terrorMsg = \"The operating system denied access to the specified file.\"\n\t\tcase SE_ERR_ASSOCINCOMPLETE:\n\t\t\terrorMsg = \"The file name association is incomplete or invalid.\"\n\t\tcase SE_ERR_DDEBUSY:\n\t\t\terrorMsg = \"The DDE transaction could not be completed because other DDE transactions were being processed.\"\n\t\tcase SE_ERR_DDEFAIL:\n\t\t\terrorMsg = \"The DDE transaction failed.\"\n\t\tcase SE_ERR_DDETIMEOUT:\n\t\t\terrorMsg = \"The DDE transaction could not be completed because the request timed out.\"\n\t\tcase SE_ERR_DLLNOTFOUND:\n\t\t\terrorMsg = \"The specified DLL was not found.\"\n\t\tcase SE_ERR_NOASSOC:\n\t\t\terrorMsg = \"There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.\"\n\t\tcase SE_ERR_OOM:\n\t\t\terrorMsg = \"There was not enough memory to complete the operation.\"\n\t\tcase SE_ERR_SHARE:\n\t\t\terrorMsg = \"A sharing violation occurred.\"\n\t\tdefault:\n\t\t\terrorMsg = fmt.Sprintf(\"Unknown error occurred with error code %v\", ret)\n\t\t}\n\t} else {\n\t\treturn nil\n\t}\n\n\treturn errors.New(errorMsg)\n}\n\nfunc ExtractIcon(lpszExeFileName string, nIconIndex int) HICON {\n\tret, _, _ := procExtractIcon.Call(\n\t\t0,\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpszExeFileName))),\n\t\tuintptr(nIconIndex))\n\n\treturn HICON(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/typedef.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"unsafe\"\n)\n\n// From MSDN: Windows Data Types\n// http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751.aspx\n// ATOM                  WORD\n// BOOL                  int32\n// BOOLEAN               byte\n// BYTE                  byte\n// CCHAR                 int8\n// CHAR                  int8\n// COLORREF              DWORD\n// DWORD                 uint32\n// DWORDLONG             ULONGLONG\n// DWORD_PTR             ULONG_PTR\n// DWORD32               uint32\n// DWORD64               uint64\n// FLOAT                 float32\n// HACCEL                HANDLE\n// HALF_PTR              struct{} // ???\n// HANDLE                PVOID\n// HBITMAP               HANDLE\n// HBRUSH                HANDLE\n// HCOLORSPACE           HANDLE\n// HCONV                 HANDLE\n// HCONVLIST             HANDLE\n// HCURSOR               HANDLE\n// HDC                   HANDLE\n// HDDEDATA              HANDLE\n// HDESK                 HANDLE\n// HDROP                 HANDLE\n// HDWP                  HANDLE\n// HENHMETAFILE          HANDLE\n// HFILE                 HANDLE\n// HFONT                 HANDLE\n// HGDIOBJ               HANDLE\n// HGLOBAL               HANDLE\n// HHOOK                 HANDLE\n// HICON                 HANDLE\n// HINSTANCE             HANDLE\n// HKEY                  HANDLE\n// HKL                   HANDLE\n// HLOCAL                HANDLE\n// HMENU                 HANDLE\n// HMETAFILE             HANDLE\n// HMODULE               HANDLE\n// HPALETTE              HANDLE\n// HPEN                  HANDLE\n// HRESULT               int32\n// HRGN                  HANDLE\n// HSZ                   HANDLE\n// HWINSTA               HANDLE\n// HWND                  HANDLE\n// INT                   int32\n// INT_PTR               uintptr\n// INT8                  int8\n// INT16                 int16\n// INT32                 int32\n// INT64                 int64\n// LANGID                WORD\n// LCID                  DWORD\n// LCTYPE                DWORD\n// LGRPID                DWORD\n// LONG                  int32\n// LONGLONG              int64\n// LONG_PTR              uintptr\n// LONG32                int32\n// LONG64                int64\n// LPARAM                LONG_PTR\n// LPBOOL                *BOOL\n// LPBYTE                *BYTE\n// LPCOLORREF            *COLORREF\n// LPCSTR                *int8\n// LPCTSTR               LPCWSTR\n// LPCVOID               unsafe.Pointer\n// LPCWSTR               *WCHAR\n// LPDWORD               *DWORD\n// LPHANDLE              *HANDLE\n// LPINT                 *INT\n// LPLONG                *LONG\n// LPSTR                 *CHAR\n// LPTSTR                LPWSTR\n// LPVOID                unsafe.Pointer\n// LPWORD                *WORD\n// LPWSTR                *WCHAR\n// LRESULT               LONG_PTR\n// PBOOL                 *BOOL\n// PBOOLEAN              *BOOLEAN\n// PBYTE                 *BYTE\n// PCHAR                 *CHAR\n// PCSTR                 *CHAR\n// PCTSTR                PCWSTR\n// PCWSTR                *WCHAR\n// PDWORD                *DWORD\n// PDWORDLONG            *DWORDLONG\n// PDWORD_PTR            *DWORD_PTR\n// PDWORD32              *DWORD32\n// PDWORD64              *DWORD64\n// PFLOAT                *FLOAT\n// PHALF_PTR             *HALF_PTR\n// PHANDLE               *HANDLE\n// PHKEY                 *HKEY\n// PINT_PTR              *INT_PTR\n// PINT8                 *INT8\n// PINT16                *INT16\n// PINT32                *INT32\n// PINT64                *INT64\n// PLCID                 *LCID\n// PLONG                 *LONG\n// PLONGLONG             *LONGLONG\n// PLONG_PTR             *LONG_PTR\n// PLONG32               *LONG32\n// PLONG64               *LONG64\n// POINTER_32            struct{} // ???\n// POINTER_64            struct{} // ???\n// POINTER_SIGNED        uintptr\n// POINTER_UNSIGNED      uintptr\n// PSHORT                *SHORT\n// PSIZE_T               *SIZE_T\n// PSSIZE_T              *SSIZE_T\n// PSTR                  *CHAR\n// PTBYTE                *TBYTE\n// PTCHAR                *TCHAR\n// PTSTR                 PWSTR\n// PUCHAR                *UCHAR\n// PUHALF_PTR            *UHALF_PTR\n// PUINT                 *UINT\n// PUINT_PTR             *UINT_PTR\n// PUINT8                *UINT8\n// PUINT16               *UINT16\n// PUINT32               *UINT32\n// PUINT64               *UINT64\n// PULONG                *ULONG\n// PULONGLONG            *ULONGLONG\n// PULONG_PTR            *ULONG_PTR\n// PULONG32              *ULONG32\n// PULONG64              *ULONG64\n// PUSHORT               *USHORT\n// PVOID                 unsafe.Pointer\n// PWCHAR                *WCHAR\n// PWORD                 *WORD\n// PWSTR                 *WCHAR\n// QWORD                 uint64\n// SC_HANDLE             HANDLE\n// SC_LOCK               LPVOID\n// SERVICE_STATUS_HANDLE HANDLE\n// SHORT                 int16\n// SIZE_T                ULONG_PTR\n// SSIZE_T               LONG_PTR\n// TBYTE                 WCHAR\n// TCHAR                 WCHAR\n// UCHAR                 uint8\n// UHALF_PTR             struct{} // ???\n// UINT                  uint32\n// UINT_PTR              uintptr\n// UINT8                 uint8\n// UINT16                uint16\n// UINT32                uint32\n// UINT64                uint64\n// ULONG                 uint32\n// ULONGLONG             uint64\n// ULONG_PTR             uintptr\n// ULONG32               uint32\n// ULONG64               uint64\n// USHORT                uint16\n// USN                   LONGLONG\n// WCHAR                 uint16\n// WORD                  uint16\n// WPARAM                UINT_PTR\ntype (\n\tATOM            uint16\n\tBOOL            int32\n\tCOLORREF        uint32\n\tDWM_FRAME_COUNT uint64\n\tHACCEL          HANDLE\n\tHANDLE          uintptr\n\tHBITMAP         HANDLE\n\tHBRUSH          HANDLE\n\tHCURSOR         HANDLE\n\tHDC             HANDLE\n\tHDROP           HANDLE\n\tHDWP            HANDLE\n\tHENHMETAFILE    HANDLE\n\tHFONT           HANDLE\n\tHGDIOBJ         HANDLE\n\tHGLOBAL         HANDLE\n\tHGLRC           HANDLE\n\tHICON           HANDLE\n\tHIMAGELIST      HANDLE\n\tHINSTANCE       HANDLE\n\tHKEY            HANDLE\n\tHKL             HANDLE\n\tHMENU           HANDLE\n\tHMODULE         HANDLE\n\tHMONITOR        HANDLE\n\tHPEN            HANDLE\n\tHRESULT         int32\n\tHRGN            HANDLE\n\tHRSRC           HANDLE\n\tHTHUMBNAIL      HANDLE\n\tHWND            HANDLE\n\tLPCVOID         unsafe.Pointer\n\tPVOID           unsafe.Pointer\n\tQPC_TIME        uint64\n)\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162805.aspx\ntype POINT struct {\n\tX, Y int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162897.aspx\ntype RECT struct {\n\tLeft, Top, Right, Bottom int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms633577.aspx\ntype WNDCLASSEX struct {\n\tSize       uint32\n\tStyle      uint32\n\tWndProc    uintptr\n\tClsExtra   int32\n\tWndExtra   int32\n\tInstance   HINSTANCE\n\tIcon       HICON\n\tCursor     HCURSOR\n\tBackground HBRUSH\n\tMenuName   *uint16\n\tClassName  *uint16\n\tIconSm     HICON\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644958.aspx\ntype MSG struct {\n\tHwnd    HWND\n\tMessage uint32\n\tWParam  uintptr\n\tLParam  uintptr\n\tTime    uint32\n\tPt      POINT\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037.aspx\ntype LOGFONT struct {\n\tHeight         int32\n\tWidth          int32\n\tEscapement     int32\n\tOrientation    int32\n\tWeight         int32\n\tItalic         byte\n\tUnderline      byte\n\tStrikeOut      byte\n\tCharSet        byte\n\tOutPrecision   byte\n\tClipPrecision  byte\n\tQuality        byte\n\tPitchAndFamily byte\n\tFaceName       [LF_FACESIZE]uint16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839.aspx\ntype OPENFILENAME struct {\n\tStructSize      uint32\n\tOwner           HWND\n\tInstance        HINSTANCE\n\tFilter          *uint16\n\tCustomFilter    *uint16\n\tMaxCustomFilter uint32\n\tFilterIndex     uint32\n\tFile            *uint16\n\tMaxFile         uint32\n\tFileTitle       *uint16\n\tMaxFileTitle    uint32\n\tInitialDir      *uint16\n\tTitle           *uint16\n\tFlags           uint32\n\tFileOffset      uint16\n\tFileExtension   uint16\n\tDefExt          *uint16\n\tCustData        uintptr\n\tFnHook          uintptr\n\tTemplateName    *uint16\n\tPvReserved      unsafe.Pointer\n\tDwReserved      uint32\n\tFlagsEx         uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb773205.aspx\ntype BROWSEINFO struct {\n\tOwner        HWND\n\tRoot         *uint16\n\tDisplayName  *uint16\n\tTitle        *uint16\n\tFlags        uint32\n\tCallbackFunc uintptr\n\tLParam       uintptr\n\tImage        int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931.aspx\ntype GUID struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221627.aspx\ntype VARIANT struct {\n\tVT         uint16 //  2\n\tWReserved1 uint16 //  4\n\tWReserved2 uint16 //  6\n\tWReserved3 uint16 //  8\n\tVal        int64  // 16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221416.aspx\ntype DISPPARAMS struct {\n\tRgvarg            uintptr\n\tRgdispidNamedArgs uintptr\n\tCArgs             uint32\n\tCNamedArgs        uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms221133.aspx\ntype EXCEPINFO struct {\n\tWCode             uint16\n\tWReserved         uint16\n\tBstrSource        *uint16\n\tBstrDescription   *uint16\n\tBstrHelpFile      *uint16\n\tDwHelpContext     uint32\n\tPvReserved        uintptr\n\tPfnDeferredFillIn uintptr\n\tScode             int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145035.aspx\ntype LOGBRUSH struct {\n\tLbStyle uint32\n\tLbColor COLORREF\n\tLbHatch uintptr\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565.aspx\ntype DEVMODE struct {\n\tDmDeviceName       [CCHDEVICENAME]uint16\n\tDmSpecVersion      uint16\n\tDmDriverVersion    uint16\n\tDmSize             uint16\n\tDmDriverExtra      uint16\n\tDmFields           uint32\n\tDmOrientation      int16\n\tDmPaperSize        int16\n\tDmPaperLength      int16\n\tDmPaperWidth       int16\n\tDmScale            int16\n\tDmCopies           int16\n\tDmDefaultSource    int16\n\tDmPrintQuality     int16\n\tDmColor            int16\n\tDmDuplex           int16\n\tDmYResolution      int16\n\tDmTTOption         int16\n\tDmCollate          int16\n\tDmFormName         [CCHFORMNAME]uint16\n\tDmLogPixels        uint16\n\tDmBitsPerPel       uint32\n\tDmPelsWidth        uint32\n\tDmPelsHeight       uint32\n\tDmDisplayFlags     uint32\n\tDmDisplayFrequency uint32\n\tDmICMMethod        uint32\n\tDmICMIntent        uint32\n\tDmMediaType        uint32\n\tDmDitherType       uint32\n\tDmReserved1        uint32\n\tDmReserved2        uint32\n\tDmPanningWidth     uint32\n\tDmPanningHeight    uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183376.aspx\ntype BITMAPINFOHEADER struct {\n\tBiSize          uint32\n\tBiWidth         int32\n\tBiHeight        int32\n\tBiPlanes        uint16\n\tBiBitCount      uint16\n\tBiCompression   uint32\n\tBiSizeImage     uint32\n\tBiXPelsPerMeter int32\n\tBiYPelsPerMeter int32\n\tBiClrUsed       uint32\n\tBiClrImportant  uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162938.aspx\ntype RGBQUAD struct {\n\tRgbBlue     byte\n\tRgbGreen    byte\n\tRgbRed      byte\n\tRgbReserved byte\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183375.aspx\ntype BITMAPINFO struct {\n\tBmiHeader BITMAPINFOHEADER\n\tBmiColors *RGBQUAD\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183371.aspx\ntype BITMAP struct {\n\tBmType       int32\n\tBmWidth      int32\n\tBmHeight     int32\n\tBmWidthBytes int32\n\tBmPlanes     uint16\n\tBmBitsPixel  uint16\n\tBmBits       unsafe.Pointer\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183567.aspx\ntype DIBSECTION struct {\n\tDsBm        BITMAP\n\tDsBmih      BITMAPINFOHEADER\n\tDsBitfields [3]uint32\n\tDshSection  HANDLE\n\tDsOffset    uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162607.aspx\ntype ENHMETAHEADER struct {\n\tIType          uint32\n\tNSize          uint32\n\tRclBounds      RECT\n\tRclFrame       RECT\n\tDSignature     uint32\n\tNVersion       uint32\n\tNBytes         uint32\n\tNRecords       uint32\n\tNHandles       uint16\n\tSReserved      uint16\n\tNDescription   uint32\n\tOffDescription uint32\n\tNPalEntries    uint32\n\tSzlDevice      SIZE\n\tSzlMillimeters SIZE\n\tCbPixelFormat  uint32\n\tOffPixelFormat uint32\n\tBOpenGL        uint32\n\tSzlMicrometers SIZE\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145106.aspx\ntype SIZE struct {\n\tCX, CY int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145132.aspx\ntype TEXTMETRIC struct {\n\tTmHeight           int32\n\tTmAscent           int32\n\tTmDescent          int32\n\tTmInternalLeading  int32\n\tTmExternalLeading  int32\n\tTmAveCharWidth     int32\n\tTmMaxCharWidth     int32\n\tTmWeight           int32\n\tTmOverhang         int32\n\tTmDigitizedAspectX int32\n\tTmDigitizedAspectY int32\n\tTmFirstChar        uint16\n\tTmLastChar         uint16\n\tTmDefaultChar      uint16\n\tTmBreakChar        uint16\n\tTmItalic           byte\n\tTmUnderlined       byte\n\tTmStruckOut        byte\n\tTmPitchAndFamily   byte\n\tTmCharSet          byte\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd183574.aspx\ntype DOCINFO struct {\n\tCbSize       int32\n\tLpszDocName  *uint16\n\tLpszOutput   *uint16\n\tLpszDatatype *uint16\n\tFwType       uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb775514.aspx\ntype NMHDR struct {\n\tHwndFrom HWND\n\tIdFrom   uintptr\n\tCode     uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774743.aspx\ntype LVCOLUMN struct {\n\tMask       uint32\n\tFmt        int32\n\tCx         int32\n\tPszText    *uint16\n\tCchTextMax int32\n\tISubItem   int32\n\tIImage     int32\n\tIOrder     int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760.aspx\ntype LVITEM struct {\n\tMask       uint32\n\tIItem      int32\n\tISubItem   int32\n\tState      uint32\n\tStateMask  uint32\n\tPszText    *uint16\n\tCchTextMax int32\n\tIImage     int32\n\tLParam     uintptr\n\tIIndent    int32\n\tIGroupId   int32\n\tCColumns   uint32\n\tPuColumns  uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774754.aspx\ntype LVHITTESTINFO struct {\n\tPt       POINT\n\tFlags    uint32\n\tIItem    int32\n\tISubItem int32\n\tIGroup   int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774771.aspx\ntype NMITEMACTIVATE struct {\n\tHdr       NMHDR\n\tIItem     int32\n\tISubItem  int32\n\tUNewState uint32\n\tUOldState uint32\n\tUChanged  uint32\n\tPtAction  POINT\n\tLParam    uintptr\n\tUKeyFlags uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774773.aspx\ntype NMLISTVIEW struct {\n\tHdr       NMHDR\n\tIItem     int32\n\tISubItem  int32\n\tUNewState uint32\n\tUOldState uint32\n\tUChanged  uint32\n\tPtAction  POINT\n\tLParam    uintptr\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774780.aspx\ntype NMLVDISPINFO struct {\n\tHdr  NMHDR\n\tItem LVITEM\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb775507.aspx\ntype INITCOMMONCONTROLSEX struct {\n\tDwSize uint32\n\tDwICC  uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb760256.aspx\ntype TOOLINFO struct {\n\tCbSize     uint32\n\tUFlags     uint32\n\tHwnd       HWND\n\tUId        uintptr\n\tRect       RECT\n\tHinst      HINSTANCE\n\tLpszText   *uint16\n\tLParam     uintptr\n\tLpReserved unsafe.Pointer\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms645604.aspx\ntype TRACKMOUSEEVENT struct {\n\tCbSize      uint32\n\tDwFlags     uint32\n\tHwndTrack   HWND\n\tDwHoverTime uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms534067.aspx\ntype GdiplusStartupInput struct {\n\tGdiplusVersion           uint32\n\tDebugEventCallback       uintptr\n\tSuppressBackgroundThread BOOL\n\tSuppressExternalCodecs   BOOL\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms534068.aspx\ntype GdiplusStartupOutput struct {\n\tNotificationHook   uintptr\n\tNotificationUnhook uintptr\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd162768.aspx\ntype PAINTSTRUCT struct {\n\tHdc         HDC\n\tFErase      BOOL\n\tRcPaint     RECT\n\tFRestore    BOOL\n\tFIncUpdate  BOOL\n\tRgbReserved [32]byte\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa363646.aspx\ntype EVENTLOGRECORD struct {\n\tLength              uint32\n\tReserved            uint32\n\tRecordNumber        uint32\n\tTimeGenerated       uint32\n\tTimeWritten         uint32\n\tEventID             uint32\n\tEventType           uint16\n\tNumStrings          uint16\n\tEventCategory       uint16\n\tReservedFlags       uint16\n\tClosingRecordNumber uint32\n\tStringOffset        uint32\n\tUserSidLength       uint32\n\tUserSidOffset       uint32\n\tDataLength          uint32\n\tDataOffset          uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms685996.aspx\ntype SERVICE_STATUS struct {\n\tDwServiceType             uint32\n\tDwCurrentState            uint32\n\tDwControlsAccepted        uint32\n\tDwWin32ExitCode           uint32\n\tDwServiceSpecificExitCode uint32\n\tDwCheckPoint              uint32\n\tDwWaitHint                uint32\n}\ntype PROCESSENTRY32 struct {\n\tDwSize              uint32\n\tCntUsage            uint32\n\tTh32ProcessID       uint32\n\tTh32DefaultHeapID   uintptr\n\tTh32ModuleID        uint32\n\tCntThreads          uint32\n\tTh32ParentProcessID uint32\n\tPcPriClassBase      int32\n\tDwFlags             uint32\n\tSzExeFile           [MAX_PATH]uint16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx\ntype MODULEENTRY32 struct {\n\tSize         uint32\n\tModuleID     uint32\n\tProcessID    uint32\n\tGlblcntUsage uint32\n\tProccntUsage uint32\n\tModBaseAddr  *uint8\n\tModBaseSize  uint32\n\tHModule      HMODULE\n\tSzModule     [MAX_MODULE_NAME32 + 1]uint16\n\tSzExePath    [MAX_PATH]uint16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284.aspx\ntype FILETIME struct {\n\tDwLowDateTime  uint32\n\tDwHighDateTime uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119.aspx\ntype COORD struct {\n\tX, Y int16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms686311.aspx\ntype SMALL_RECT struct {\n\tLeft, Top, Right, Bottom int16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093.aspx\ntype CONSOLE_SCREEN_BUFFER_INFO struct {\n\tDwSize              COORD\n\tDwCursorPosition    COORD\n\tWAttributes         uint16\n\tSrWindow            SMALL_RECT\n\tDwMaximumWindowSize COORD\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx\ntype MARGINS struct {\n\tCxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969500.aspx\ntype DWM_BLURBEHIND struct {\n\tDwFlags                uint32\n\tfEnable                BOOL\n\thRgnBlur               HRGN\n\tfTransitionOnMaximized BOOL\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969501.aspx\ntype DWM_PRESENT_PARAMETERS struct {\n\tcbSize             uint32\n\tfQueue             BOOL\n\tcRefreshStart      DWM_FRAME_COUNT\n\tcBuffer            uint32\n\tfUseSourceRate     BOOL\n\trateSource         UNSIGNED_RATIO\n\tcRefreshesPerFrame uint32\n\teSampling          DWM_SOURCE_FRAME_SAMPLING\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969502.aspx\ntype DWM_THUMBNAIL_PROPERTIES struct {\n\tdwFlags               uint32\n\trcDestination         RECT\n\trcSource              RECT\n\topacity               byte\n\tfVisible              BOOL\n\tfSourceClientAreaOnly BOOL\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969503.aspx\ntype DWM_TIMING_INFO struct {\n\tcbSize                 uint32\n\trateRefresh            UNSIGNED_RATIO\n\tqpcRefreshPeriod       QPC_TIME\n\trateCompose            UNSIGNED_RATIO\n\tqpcVBlank              QPC_TIME\n\tcRefresh               DWM_FRAME_COUNT\n\tcDXRefresh             uint32\n\tqpcCompose             QPC_TIME\n\tcFrame                 DWM_FRAME_COUNT\n\tcDXPresent             uint32\n\tcRefreshFrame          DWM_FRAME_COUNT\n\tcFrameSubmitted        DWM_FRAME_COUNT\n\tcDXPresentSubmitted    uint32\n\tcFrameConfirmed        DWM_FRAME_COUNT\n\tcDXPresentConfirmed    uint32\n\tcRefreshConfirmed      DWM_FRAME_COUNT\n\tcDXRefreshConfirmed    uint32\n\tcFramesLate            DWM_FRAME_COUNT\n\tcFramesOutstanding     uint32\n\tcFrameDisplayed        DWM_FRAME_COUNT\n\tqpcFrameDisplayed      QPC_TIME\n\tcRefreshFrameDisplayed DWM_FRAME_COUNT\n\tcFrameComplete         DWM_FRAME_COUNT\n\tqpcFrameComplete       QPC_TIME\n\tcFramePending          DWM_FRAME_COUNT\n\tqpcFramePending        QPC_TIME\n\tcFramesDisplayed       DWM_FRAME_COUNT\n\tcFramesComplete        DWM_FRAME_COUNT\n\tcFramesPending         DWM_FRAME_COUNT\n\tcFramesAvailable       DWM_FRAME_COUNT\n\tcFramesDropped         DWM_FRAME_COUNT\n\tcFramesMissed          DWM_FRAME_COUNT\n\tcRefreshNextDisplayed  DWM_FRAME_COUNT\n\tcRefreshNextPresented  DWM_FRAME_COUNT\n\tcRefreshesDisplayed    DWM_FRAME_COUNT\n\tcRefreshesPresented    DWM_FRAME_COUNT\n\tcRefreshStarted        DWM_FRAME_COUNT\n\tcPixelsReceived        uint64\n\tcPixelsDrawn           uint64\n\tcBuffersEmpty          DWM_FRAME_COUNT\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd389402.aspx\ntype MilMatrix3x2D struct {\n\tS_11, S_12, S_21, S_22 float64\n\tDX, DY                 float64\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/aa969505.aspx\ntype UNSIGNED_RATIO struct {\n\tuiNumerator   uint32\n\tuiDenominator uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms632603.aspx\ntype CREATESTRUCT struct {\n\tCreateParams uintptr\n\tInstance     HINSTANCE\n\tMenu         HMENU\n\tParent       HWND\n\tCy, Cx       int32\n\tY, X         int32\n\tStyle        int32\n\tName         *uint16\n\tClass        *uint16\n\tdwExStyle    uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145065.aspx\ntype MONITORINFO struct {\n\tCbSize    uint32\n\tRcMonitor RECT\n\tRcWork    RECT\n\tDwFlags   uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd145066.aspx\ntype MONITORINFOEX struct {\n\tMONITORINFO\n\tSzDevice [CCHDEVICENAME]uint16\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/dd368826.aspx\ntype PIXELFORMATDESCRIPTOR struct {\n\tSize                   uint16\n\tVersion                uint16\n\tDwFlags                uint32\n\tIPixelType             byte\n\tColorBits              byte\n\tRedBits, RedShift      byte\n\tGreenBits, GreenShift  byte\n\tBlueBits, BlueShift    byte\n\tAlphaBits, AlphaShift  byte\n\tAccumBits              byte\n\tAccumRedBits           byte\n\tAccumGreenBits         byte\n\tAccumBlueBits          byte\n\tAccumAlphaBits         byte\n\tDepthBits, StencilBits byte\n\tAuxBuffers             byte\n\tILayerType             byte\n\tReserved               byte\n\tDwLayerMask            uint32\n\tDwVisibleMask          uint32\n\tDwDamageMask           uint32\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx\ntype INPUT struct {\n\tType uint32\n\tMi   MOUSEINPUT\n\tKi   KEYBDINPUT\n\tHi   HARDWAREINPUT\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx\ntype MOUSEINPUT struct {\n\tDx          int32\n\tDy          int32\n\tMouseData   uint32\n\tDwFlags     uint32\n\tTime        uint32\n\tDwExtraInfo uintptr\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271(v=vs.85).aspx\ntype KEYBDINPUT struct {\n\tWVk         uint16\n\tWScan       uint16\n\tDwFlags     uint32\n\tTime        uint32\n\tDwExtraInfo uintptr\n}\n\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646269(v=vs.85).aspx\ntype HARDWAREINPUT struct {\n\tUMsg    uint32\n\tWParamL uint16\n\tWParamH uint16\n}\n\ntype KbdInput struct {\n\ttyp uint32\n\tki  KEYBDINPUT\n}\n\ntype MouseInput struct {\n\ttyp uint32\n\tmi  MOUSEINPUT\n}\n\ntype HardwareInput struct {\n\ttyp uint32\n\thi  HARDWAREINPUT\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/user32.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tmoduser32 = syscall.NewLazyDLL(\"user32.dll\")\n\n\tprocRegisterClassEx               = moduser32.NewProc(\"RegisterClassExW\")\n\tprocLoadIcon                      = moduser32.NewProc(\"LoadIconW\")\n\tprocLoadCursor                    = moduser32.NewProc(\"LoadCursorW\")\n\tprocShowWindow                    = moduser32.NewProc(\"ShowWindow\")\n\tprocUpdateWindow                  = moduser32.NewProc(\"UpdateWindow\")\n\tprocCreateWindowEx                = moduser32.NewProc(\"CreateWindowExW\")\n\tprocAdjustWindowRect              = moduser32.NewProc(\"AdjustWindowRect\")\n\tprocAdjustWindowRectEx            = moduser32.NewProc(\"AdjustWindowRectEx\")\n\tprocDestroyWindow                 = moduser32.NewProc(\"DestroyWindow\")\n\tprocDefWindowProc                 = moduser32.NewProc(\"DefWindowProcW\")\n\tprocDefDlgProc                    = moduser32.NewProc(\"DefDlgProcW\")\n\tprocPostQuitMessage               = moduser32.NewProc(\"PostQuitMessage\")\n\tprocGetMessage                    = moduser32.NewProc(\"GetMessageW\")\n\tprocTranslateMessage              = moduser32.NewProc(\"TranslateMessage\")\n\tprocDispatchMessage               = moduser32.NewProc(\"DispatchMessageW\")\n\tprocSendMessage                   = moduser32.NewProc(\"SendMessageW\")\n\tprocPostMessage                   = moduser32.NewProc(\"PostMessageW\")\n\tprocWaitMessage                   = moduser32.NewProc(\"WaitMessage\")\n\tprocSetWindowText                 = moduser32.NewProc(\"SetWindowTextW\")\n\tprocGetWindowTextLength           = moduser32.NewProc(\"GetWindowTextLengthW\")\n\tprocGetWindowText                 = moduser32.NewProc(\"GetWindowTextW\")\n\tprocGetWindowRect                 = moduser32.NewProc(\"GetWindowRect\")\n\tprocMoveWindow                    = moduser32.NewProc(\"MoveWindow\")\n\tprocScreenToClient                = moduser32.NewProc(\"ScreenToClient\")\n\tprocCallWindowProc                = moduser32.NewProc(\"CallWindowProcW\")\n\tprocSetWindowLong                 = moduser32.NewProc(\"SetWindowLongW\")\n\tprocSetWindowLongPtr              = moduser32.NewProc(\"SetWindowLongW\")\n\tprocGetWindowLong                 = moduser32.NewProc(\"GetWindowLongW\")\n\tprocGetWindowLongPtr              = moduser32.NewProc(\"GetWindowLongW\")\n\tprocEnableWindow                  = moduser32.NewProc(\"EnableWindow\")\n\tprocIsWindowEnabled               = moduser32.NewProc(\"IsWindowEnabled\")\n\tprocIsWindowVisible               = moduser32.NewProc(\"IsWindowVisible\")\n\tprocSetFocus                      = moduser32.NewProc(\"SetFocus\")\n\tprocInvalidateRect                = moduser32.NewProc(\"InvalidateRect\")\n\tprocGetClientRect                 = moduser32.NewProc(\"GetClientRect\")\n\tprocGetDC                         = moduser32.NewProc(\"GetDC\")\n\tprocReleaseDC                     = moduser32.NewProc(\"ReleaseDC\")\n\tprocSetCapture                    = moduser32.NewProc(\"SetCapture\")\n\tprocReleaseCapture                = moduser32.NewProc(\"ReleaseCapture\")\n\tprocGetWindowThreadProcessId      = moduser32.NewProc(\"GetWindowThreadProcessId\")\n\tprocMessageBox                    = moduser32.NewProc(\"MessageBoxW\")\n\tprocGetSystemMetrics              = moduser32.NewProc(\"GetSystemMetrics\")\n\tprocCopyRect                      = moduser32.NewProc(\"CopyRect\")\n\tprocEqualRect                     = moduser32.NewProc(\"EqualRect\")\n\tprocInflateRect                   = moduser32.NewProc(\"InflateRect\")\n\tprocIntersectRect                 = moduser32.NewProc(\"IntersectRect\")\n\tprocIsRectEmpty                   = moduser32.NewProc(\"IsRectEmpty\")\n\tprocOffsetRect                    = moduser32.NewProc(\"OffsetRect\")\n\tprocPtInRect                      = moduser32.NewProc(\"PtInRect\")\n\tprocSetRect                       = moduser32.NewProc(\"SetRect\")\n\tprocSetRectEmpty                  = moduser32.NewProc(\"SetRectEmpty\")\n\tprocSubtractRect                  = moduser32.NewProc(\"SubtractRect\")\n\tprocUnionRect                     = moduser32.NewProc(\"UnionRect\")\n\tprocCreateDialogParam             = moduser32.NewProc(\"CreateDialogParamW\")\n\tprocDialogBoxParam                = moduser32.NewProc(\"DialogBoxParamW\")\n\tprocGetDlgItem                    = moduser32.NewProc(\"GetDlgItem\")\n\tprocDrawIcon                      = moduser32.NewProc(\"DrawIcon\")\n\tprocClientToScreen                = moduser32.NewProc(\"ClientToScreen\")\n\tprocIsDialogMessage               = moduser32.NewProc(\"IsDialogMessageW\")\n\tprocIsWindow                      = moduser32.NewProc(\"IsWindow\")\n\tprocEndDialog                     = moduser32.NewProc(\"EndDialog\")\n\tprocPeekMessage                   = moduser32.NewProc(\"PeekMessageW\")\n\tprocTranslateAccelerator          = moduser32.NewProc(\"TranslateAcceleratorW\")\n\tprocSetWindowPos                  = moduser32.NewProc(\"SetWindowPos\")\n\tprocFillRect                      = moduser32.NewProc(\"FillRect\")\n\tprocDrawText                      = moduser32.NewProc(\"DrawTextW\")\n\tprocAddClipboardFormatListener    = moduser32.NewProc(\"AddClipboardFormatListener\")\n\tprocRemoveClipboardFormatListener = moduser32.NewProc(\"RemoveClipboardFormatListener\")\n\tprocOpenClipboard                 = moduser32.NewProc(\"OpenClipboard\")\n\tprocCloseClipboard                = moduser32.NewProc(\"CloseClipboard\")\n\tprocEnumClipboardFormats          = moduser32.NewProc(\"EnumClipboardFormats\")\n\tprocGetClipboardData              = moduser32.NewProc(\"GetClipboardData\")\n\tprocSetClipboardData              = moduser32.NewProc(\"SetClipboardData\")\n\tprocEmptyClipboard                = moduser32.NewProc(\"EmptyClipboard\")\n\tprocGetClipboardFormatName        = moduser32.NewProc(\"GetClipboardFormatNameW\")\n\tprocIsClipboardFormatAvailable    = moduser32.NewProc(\"IsClipboardFormatAvailable\")\n\tprocBeginPaint                    = moduser32.NewProc(\"BeginPaint\")\n\tprocEndPaint                      = moduser32.NewProc(\"EndPaint\")\n\tprocGetKeyboardState              = moduser32.NewProc(\"GetKeyboardState\")\n\tprocMapVirtualKey                 = moduser32.NewProc(\"MapVirtualKeyExW\")\n\tprocGetAsyncKeyState              = moduser32.NewProc(\"GetAsyncKeyState\")\n\tprocToAscii                       = moduser32.NewProc(\"ToAscii\")\n\tprocSwapMouseButton               = moduser32.NewProc(\"SwapMouseButton\")\n\tprocGetCursorPos                  = moduser32.NewProc(\"GetCursorPos\")\n\tprocSetCursorPos                  = moduser32.NewProc(\"SetCursorPos\")\n\tprocSetCursor                     = moduser32.NewProc(\"SetCursor\")\n\tprocCreateIcon                    = moduser32.NewProc(\"CreateIcon\")\n\tprocDestroyIcon                   = moduser32.NewProc(\"DestroyIcon\")\n\tprocMonitorFromPoint              = moduser32.NewProc(\"MonitorFromPoint\")\n\tprocMonitorFromRect               = moduser32.NewProc(\"MonitorFromRect\")\n\tprocMonitorFromWindow             = moduser32.NewProc(\"MonitorFromWindow\")\n\tprocGetMonitorInfo                = moduser32.NewProc(\"GetMonitorInfoW\")\n\tprocEnumDisplayMonitors           = moduser32.NewProc(\"EnumDisplayMonitors\")\n\tprocEnumDisplaySettingsEx         = moduser32.NewProc(\"EnumDisplaySettingsExW\")\n\tprocChangeDisplaySettingsEx       = moduser32.NewProc(\"ChangeDisplaySettingsExW\")\n\tprocSendInput                     = moduser32.NewProc(\"SendInput\")\n)\n\nfunc RegisterClassEx(wndClassEx *WNDCLASSEX) ATOM {\n\tret, _, _ := procRegisterClassEx.Call(uintptr(unsafe.Pointer(wndClassEx)))\n\treturn ATOM(ret)\n}\n\nfunc LoadIcon(instance HINSTANCE, iconName *uint16) HICON {\n\tret, _, _ := procLoadIcon.Call(\n\t\tuintptr(instance),\n\t\tuintptr(unsafe.Pointer(iconName)))\n\n\treturn HICON(ret)\n\n}\n\nfunc LoadCursor(instance HINSTANCE, cursorName *uint16) HCURSOR {\n\tret, _, _ := procLoadCursor.Call(\n\t\tuintptr(instance),\n\t\tuintptr(unsafe.Pointer(cursorName)))\n\n\treturn HCURSOR(ret)\n\n}\n\nfunc ShowWindow(hwnd HWND, cmdshow int) bool {\n\tret, _, _ := procShowWindow.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(cmdshow))\n\n\treturn ret != 0\n\n}\n\nfunc UpdateWindow(hwnd HWND) bool {\n\tret, _, _ := procUpdateWindow.Call(\n\t\tuintptr(hwnd))\n\treturn ret != 0\n}\n\nfunc CreateWindowEx(exStyle uint, className, windowName *uint16,\n\tstyle uint, x, y, width, height int, parent HWND, menu HMENU,\n\tinstance HINSTANCE, param unsafe.Pointer) HWND {\n\tret, _, _ := procCreateWindowEx.Call(\n\t\tuintptr(exStyle),\n\t\tuintptr(unsafe.Pointer(className)),\n\t\tuintptr(unsafe.Pointer(windowName)),\n\t\tuintptr(style),\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(width),\n\t\tuintptr(height),\n\t\tuintptr(parent),\n\t\tuintptr(menu),\n\t\tuintptr(instance),\n\t\tuintptr(param))\n\n\treturn HWND(ret)\n}\n\nfunc AdjustWindowRectEx(rect *RECT, style uint, menu bool, exStyle uint) bool {\n\tret, _, _ := procAdjustWindowRectEx.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(style),\n\t\tuintptr(BoolToBOOL(menu)),\n\t\tuintptr(exStyle))\n\n\treturn ret != 0\n}\n\nfunc AdjustWindowRect(rect *RECT, style uint, menu bool) bool {\n\tret, _, _ := procAdjustWindowRect.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(style),\n\t\tuintptr(BoolToBOOL(menu)))\n\n\treturn ret != 0\n}\n\nfunc DestroyWindow(hwnd HWND) bool {\n\tret, _, _ := procDestroyWindow.Call(\n\t\tuintptr(hwnd))\n\n\treturn ret != 0\n}\n\nfunc DefWindowProc(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {\n\tret, _, _ := procDefWindowProc.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam)\n\n\treturn ret\n}\n\nfunc DefDlgProc(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {\n\tret, _, _ := procDefDlgProc.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam)\n\n\treturn ret\n}\n\nfunc PostQuitMessage(exitCode int) {\n\tprocPostQuitMessage.Call(\n\t\tuintptr(exitCode))\n}\n\nfunc GetMessage(msg *MSG, hwnd HWND, msgFilterMin, msgFilterMax uint32) int {\n\tret, _, _ := procGetMessage.Call(\n\t\tuintptr(unsafe.Pointer(msg)),\n\t\tuintptr(hwnd),\n\t\tuintptr(msgFilterMin),\n\t\tuintptr(msgFilterMax))\n\n\treturn int(ret)\n}\n\nfunc TranslateMessage(msg *MSG) bool {\n\tret, _, _ := procTranslateMessage.Call(\n\t\tuintptr(unsafe.Pointer(msg)))\n\n\treturn ret != 0\n\n}\n\nfunc DispatchMessage(msg *MSG) uintptr {\n\tret, _, _ := procDispatchMessage.Call(\n\t\tuintptr(unsafe.Pointer(msg)))\n\n\treturn ret\n\n}\n\nfunc SendMessage(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {\n\tret, _, _ := procSendMessage.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam)\n\n\treturn ret\n}\n\nfunc PostMessage(hwnd HWND, msg uint32, wParam, lParam uintptr) bool {\n\tret, _, _ := procPostMessage.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam)\n\n\treturn ret != 0\n}\n\nfunc WaitMessage() bool {\n\tret, _, _ := procWaitMessage.Call()\n\treturn ret != 0\n}\n\nfunc SetWindowText(hwnd HWND, text string) {\n\tprocSetWindowText.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))))\n}\n\nfunc GetWindowTextLength(hwnd HWND) int {\n\tret, _, _ := procGetWindowTextLength.Call(\n\t\tuintptr(hwnd))\n\n\treturn int(ret)\n}\n\nfunc GetWindowText(hwnd HWND) string {\n\ttextLen := GetWindowTextLength(hwnd) + 1\n\n\tbuf := make([]uint16, textLen)\n\tprocGetWindowText.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(textLen))\n\n\treturn syscall.UTF16ToString(buf)\n}\n\nfunc GetWindowRect(hwnd HWND) *RECT {\n\tvar rect RECT\n\tprocGetWindowRect.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&rect)))\n\n\treturn &rect\n}\n\nfunc MoveWindow(hwnd HWND, x, y, width, height int, repaint bool) bool {\n\tret, _, _ := procMoveWindow.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(width),\n\t\tuintptr(height),\n\t\tuintptr(BoolToBOOL(repaint)))\n\n\treturn ret != 0\n\n}\n\nfunc ScreenToClient(hwnd HWND, x, y int) (X, Y int, ok bool) {\n\tpt := POINT{X: int32(x), Y: int32(y)}\n\tret, _, _ := procScreenToClient.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&pt)))\n\n\treturn int(pt.X), int(pt.Y), ret != 0\n}\n\nfunc CallWindowProc(preWndProc uintptr, hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr {\n\tret, _, _ := procCallWindowProc.Call(\n\t\tpreWndProc,\n\t\tuintptr(hwnd),\n\t\tuintptr(msg),\n\t\twParam,\n\t\tlParam)\n\n\treturn ret\n}\n\nfunc SetWindowLong(hwnd HWND, index int, value uint32) uint32 {\n\tret, _, _ := procSetWindowLong.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(index),\n\t\tuintptr(value))\n\n\treturn uint32(ret)\n}\n\nfunc SetWindowLongPtr(hwnd HWND, index int, value uintptr) uintptr {\n\tret, _, _ := procSetWindowLongPtr.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(index),\n\t\tvalue)\n\n\treturn ret\n}\n\nfunc GetWindowLong(hwnd HWND, index int) int32 {\n\tret, _, _ := procGetWindowLong.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(index))\n\n\treturn int32(ret)\n}\n\nfunc GetWindowLongPtr(hwnd HWND, index int) uintptr {\n\tret, _, _ := procGetWindowLongPtr.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(index))\n\n\treturn ret\n}\n\nfunc EnableWindow(hwnd HWND, b bool) bool {\n\tret, _, _ := procEnableWindow.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(BoolToBOOL(b)))\n\treturn ret != 0\n}\n\nfunc IsWindowEnabled(hwnd HWND) bool {\n\tret, _, _ := procIsWindowEnabled.Call(\n\t\tuintptr(hwnd))\n\n\treturn ret != 0\n}\n\nfunc IsWindowVisible(hwnd HWND) bool {\n\tret, _, _ := procIsWindowVisible.Call(\n\t\tuintptr(hwnd))\n\n\treturn ret != 0\n}\n\nfunc SetFocus(hwnd HWND) HWND {\n\tret, _, _ := procSetFocus.Call(\n\t\tuintptr(hwnd))\n\n\treturn HWND(ret)\n}\n\nfunc InvalidateRect(hwnd HWND, rect *RECT, erase bool) bool {\n\tret, _, _ := procInvalidateRect.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(BoolToBOOL(erase)))\n\n\treturn ret != 0\n}\n\nfunc GetClientRect(hwnd HWND) *RECT {\n\tvar rect RECT\n\tret, _, _ := procGetClientRect.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&rect)))\n\n\tif ret == 0 {\n\t\tpanic(fmt.Sprintf(\"GetClientRect(%d) failed\", hwnd))\n\t}\n\n\treturn &rect\n}\n\nfunc GetDC(hwnd HWND) HDC {\n\tret, _, _ := procGetDC.Call(\n\t\tuintptr(hwnd))\n\n\treturn HDC(ret)\n}\n\nfunc ReleaseDC(hwnd HWND, hDC HDC) bool {\n\tret, _, _ := procReleaseDC.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(hDC))\n\n\treturn ret != 0\n}\n\nfunc SetCapture(hwnd HWND) HWND {\n\tret, _, _ := procSetCapture.Call(\n\t\tuintptr(hwnd))\n\n\treturn HWND(ret)\n}\n\nfunc ReleaseCapture() bool {\n\tret, _, _ := procReleaseCapture.Call()\n\n\treturn ret != 0\n}\n\nfunc GetWindowThreadProcessId(hwnd HWND) (HANDLE, int) {\n\tvar processId int\n\tret, _, _ := procGetWindowThreadProcessId.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&processId)))\n\n\treturn HANDLE(ret), processId\n}\n\nfunc MessageBox(hwnd HWND, title, caption string, flags uint) int {\n\tret, _, _ := procMessageBox.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))),\n\t\tuintptr(flags))\n\n\treturn int(ret)\n}\n\nfunc GetSystemMetrics(index int) int {\n\tret, _, _ := procGetSystemMetrics.Call(\n\t\tuintptr(index))\n\n\treturn int(ret)\n}\n\nfunc CopyRect(dst, src *RECT) bool {\n\tret, _, _ := procCopyRect.Call(\n\t\tuintptr(unsafe.Pointer(dst)),\n\t\tuintptr(unsafe.Pointer(src)))\n\n\treturn ret != 0\n}\n\nfunc EqualRect(rect1, rect2 *RECT) bool {\n\tret, _, _ := procEqualRect.Call(\n\t\tuintptr(unsafe.Pointer(rect1)),\n\t\tuintptr(unsafe.Pointer(rect2)))\n\n\treturn ret != 0\n}\n\nfunc InflateRect(rect *RECT, dx, dy int) bool {\n\tret, _, _ := procInflateRect.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(dx),\n\t\tuintptr(dy))\n\n\treturn ret != 0\n}\n\nfunc IntersectRect(dst, src1, src2 *RECT) bool {\n\tret, _, _ := procIntersectRect.Call(\n\t\tuintptr(unsafe.Pointer(dst)),\n\t\tuintptr(unsafe.Pointer(src1)),\n\t\tuintptr(unsafe.Pointer(src2)))\n\n\treturn ret != 0\n}\n\nfunc IsRectEmpty(rect *RECT) bool {\n\tret, _, _ := procIsRectEmpty.Call(\n\t\tuintptr(unsafe.Pointer(rect)))\n\n\treturn ret != 0\n}\n\nfunc OffsetRect(rect *RECT, dx, dy int) bool {\n\tret, _, _ := procOffsetRect.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(dx),\n\t\tuintptr(dy))\n\n\treturn ret != 0\n}\n\nfunc PtInRect(rect *RECT, x, y int) bool {\n\tpt := POINT{X: int32(x), Y: int32(y)}\n\tret, _, _ := procPtInRect.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(unsafe.Pointer(&pt)))\n\n\treturn ret != 0\n}\n\nfunc SetRect(rect *RECT, left, top, right, bottom int) bool {\n\tret, _, _ := procSetRect.Call(\n\t\tuintptr(unsafe.Pointer(rect)),\n\t\tuintptr(left),\n\t\tuintptr(top),\n\t\tuintptr(right),\n\t\tuintptr(bottom))\n\n\treturn ret != 0\n}\n\nfunc SetRectEmpty(rect *RECT) bool {\n\tret, _, _ := procSetRectEmpty.Call(\n\t\tuintptr(unsafe.Pointer(rect)))\n\n\treturn ret != 0\n}\n\nfunc SubtractRect(dst, src1, src2 *RECT) bool {\n\tret, _, _ := procSubtractRect.Call(\n\t\tuintptr(unsafe.Pointer(dst)),\n\t\tuintptr(unsafe.Pointer(src1)),\n\t\tuintptr(unsafe.Pointer(src2)))\n\n\treturn ret != 0\n}\n\nfunc UnionRect(dst, src1, src2 *RECT) bool {\n\tret, _, _ := procUnionRect.Call(\n\t\tuintptr(unsafe.Pointer(dst)),\n\t\tuintptr(unsafe.Pointer(src1)),\n\t\tuintptr(unsafe.Pointer(src2)))\n\n\treturn ret != 0\n}\n\nfunc CreateDialog(hInstance HINSTANCE, lpTemplate *uint16, hWndParent HWND, lpDialogProc uintptr) HWND {\n\tret, _, _ := procCreateDialogParam.Call(\n\t\tuintptr(hInstance),\n\t\tuintptr(unsafe.Pointer(lpTemplate)),\n\t\tuintptr(hWndParent),\n\t\tlpDialogProc,\n\t\t0)\n\n\treturn HWND(ret)\n}\n\nfunc DialogBox(hInstance HINSTANCE, lpTemplateName *uint16, hWndParent HWND, lpDialogProc uintptr) int {\n\tret, _, _ := procDialogBoxParam.Call(\n\t\tuintptr(hInstance),\n\t\tuintptr(unsafe.Pointer(lpTemplateName)),\n\t\tuintptr(hWndParent),\n\t\tlpDialogProc,\n\t\t0)\n\n\treturn int(ret)\n}\n\nfunc GetDlgItem(hDlg HWND, nIDDlgItem int) HWND {\n\tret, _, _ := procGetDlgItem.Call(\n\t\tuintptr(unsafe.Pointer(hDlg)),\n\t\tuintptr(nIDDlgItem))\n\n\treturn HWND(ret)\n}\n\nfunc DrawIcon(hDC HDC, x, y int, hIcon HICON) bool {\n\tret, _, _ := procDrawIcon.Call(\n\t\tuintptr(unsafe.Pointer(hDC)),\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(unsafe.Pointer(hIcon)))\n\n\treturn ret != 0\n}\n\nfunc ClientToScreen(hwnd HWND, x, y int) (int, int) {\n\tpt := POINT{X: int32(x), Y: int32(y)}\n\n\tprocClientToScreen.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(&pt)))\n\n\treturn int(pt.X), int(pt.Y)\n}\n\nfunc IsDialogMessage(hwnd HWND, msg *MSG) bool {\n\tret, _, _ := procIsDialogMessage.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(msg)))\n\n\treturn ret != 0\n}\n\nfunc IsWindow(hwnd HWND) bool {\n\tret, _, _ := procIsWindow.Call(\n\t\tuintptr(hwnd))\n\n\treturn ret != 0\n}\n\nfunc EndDialog(hwnd HWND, nResult uintptr) bool {\n\tret, _, _ := procEndDialog.Call(\n\t\tuintptr(hwnd),\n\t\tnResult)\n\n\treturn ret != 0\n}\n\nfunc PeekMessage(lpMsg *MSG, hwnd HWND, wMsgFilterMin, wMsgFilterMax, wRemoveMsg uint32) bool {\n\tret, _, _ := procPeekMessage.Call(\n\t\tuintptr(unsafe.Pointer(lpMsg)),\n\t\tuintptr(hwnd),\n\t\tuintptr(wMsgFilterMin),\n\t\tuintptr(wMsgFilterMax),\n\t\tuintptr(wRemoveMsg))\n\n\treturn ret != 0\n}\n\nfunc TranslateAccelerator(hwnd HWND, hAccTable HACCEL, lpMsg *MSG) bool {\n\tret, _, _ := procTranslateMessage.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(hAccTable),\n\t\tuintptr(unsafe.Pointer(lpMsg)))\n\n\treturn ret != 0\n}\n\nfunc SetWindowPos(hwnd, hWndInsertAfter HWND, x, y, cx, cy int, uFlags uint) bool {\n\tret, _, _ := procSetWindowPos.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(hWndInsertAfter),\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(cx),\n\t\tuintptr(cy),\n\t\tuintptr(uFlags))\n\n\treturn ret != 0\n}\n\nfunc FillRect(hDC HDC, lprc *RECT, hbr HBRUSH) bool {\n\tret, _, _ := procFillRect.Call(\n\t\tuintptr(hDC),\n\t\tuintptr(unsafe.Pointer(lprc)),\n\t\tuintptr(hbr))\n\n\treturn ret != 0\n}\n\nfunc DrawText(hDC HDC, text string, uCount int, lpRect *RECT, uFormat uint) int {\n\tret, _, _ := procDrawText.Call(\n\t\tuintptr(hDC),\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))),\n\t\tuintptr(uCount),\n\t\tuintptr(unsafe.Pointer(lpRect)),\n\t\tuintptr(uFormat))\n\n\treturn int(ret)\n}\n\nfunc AddClipboardFormatListener(hwnd HWND) bool {\n\tret, _, _ := procAddClipboardFormatListener.Call(\n\t\tuintptr(hwnd))\n\treturn ret != 0\n}\n\nfunc RemoveClipboardFormatListener(hwnd HWND) bool {\n\tret, _, _ := procRemoveClipboardFormatListener.Call(\n\t\tuintptr(hwnd))\n\treturn ret != 0\n}\n\nfunc OpenClipboard(hWndNewOwner HWND) bool {\n\tret, _, _ := procOpenClipboard.Call(\n\t\tuintptr(hWndNewOwner))\n\treturn ret != 0\n}\n\nfunc CloseClipboard() bool {\n\tret, _, _ := procCloseClipboard.Call()\n\treturn ret != 0\n}\n\nfunc EnumClipboardFormats(format uint) uint {\n\tret, _, _ := procEnumClipboardFormats.Call(\n\t\tuintptr(format))\n\treturn uint(ret)\n}\n\nfunc GetClipboardData(uFormat uint) HANDLE {\n\tret, _, _ := procGetClipboardData.Call(\n\t\tuintptr(uFormat))\n\treturn HANDLE(ret)\n}\n\nfunc SetClipboardData(uFormat uint, hMem HANDLE) HANDLE {\n\tret, _, _ := procSetClipboardData.Call(\n\t\tuintptr(uFormat),\n\t\tuintptr(hMem))\n\treturn HANDLE(ret)\n}\n\nfunc EmptyClipboard() bool {\n\tret, _, _ := procEmptyClipboard.Call()\n\treturn ret != 0\n}\n\nfunc GetClipboardFormatName(format uint) (string, bool) {\n\tcchMaxCount := 255\n\tbuf := make([]uint16, cchMaxCount)\n\tret, _, _ := procGetClipboardFormatName.Call(\n\t\tuintptr(format),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(cchMaxCount))\n\n\tif ret > 0 {\n\t\treturn syscall.UTF16ToString(buf), true\n\t}\n\n\treturn \"Requested format does not exist or is predefined\", false\n}\n\nfunc IsClipboardFormatAvailable(format uint) bool {\n\tret, _, _ := procIsClipboardFormatAvailable.Call(uintptr(format))\n\treturn ret != 0\n}\n\nfunc BeginPaint(hwnd HWND, paint *PAINTSTRUCT) HDC {\n\tret, _, _ := procBeginPaint.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(paint)))\n\treturn HDC(ret)\n}\n\nfunc EndPaint(hwnd HWND, paint *PAINTSTRUCT) {\n\tprocBeginPaint.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(unsafe.Pointer(paint)))\n}\n\nfunc GetKeyboardState(lpKeyState *[]byte) bool {\n\tret, _, _ := procGetKeyboardState.Call(\n\t\tuintptr(unsafe.Pointer(&(*lpKeyState)[0])))\n\treturn ret != 0\n}\n\nfunc MapVirtualKeyEx(uCode, uMapType uint, dwhkl HKL) uint {\n\tret, _, _ := procMapVirtualKey.Call(\n\t\tuintptr(uCode),\n\t\tuintptr(uMapType),\n\t\tuintptr(dwhkl))\n\treturn uint(ret)\n}\n\nfunc GetAsyncKeyState(vKey int) uint16 {\n\tret, _, _ := procGetAsyncKeyState.Call(uintptr(vKey))\n\treturn uint16(ret)\n}\n\nfunc ToAscii(uVirtKey, uScanCode uint, lpKeyState *byte, lpChar *uint16, uFlags uint) int {\n\tret, _, _ := procToAscii.Call(\n\t\tuintptr(uVirtKey),\n\t\tuintptr(uScanCode),\n\t\tuintptr(unsafe.Pointer(lpKeyState)),\n\t\tuintptr(unsafe.Pointer(lpChar)),\n\t\tuintptr(uFlags))\n\treturn int(ret)\n}\n\nfunc SwapMouseButton(fSwap bool) bool {\n\tret, _, _ := procSwapMouseButton.Call(\n\t\tuintptr(BoolToBOOL(fSwap)))\n\treturn ret != 0\n}\n\nfunc GetCursorPos() (x, y int, ok bool) {\n\tpt := POINT{}\n\tret, _, _ := procGetCursorPos.Call(uintptr(unsafe.Pointer(&pt)))\n\treturn int(pt.X), int(pt.Y), ret != 0\n}\n\nfunc SetCursorPos(x, y int) bool {\n\tret, _, _ := procSetCursorPos.Call(\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t)\n\treturn ret != 0\n}\n\nfunc SetCursor(cursor HCURSOR) HCURSOR {\n\tret, _, _ := procSetCursor.Call(\n\t\tuintptr(cursor),\n\t)\n\treturn HCURSOR(ret)\n}\n\nfunc CreateIcon(instance HINSTANCE, nWidth, nHeight int, cPlanes, cBitsPerPixel byte, ANDbits, XORbits *byte) HICON {\n\tret, _, _ := procCreateIcon.Call(\n\t\tuintptr(instance),\n\t\tuintptr(nWidth),\n\t\tuintptr(nHeight),\n\t\tuintptr(cPlanes),\n\t\tuintptr(cBitsPerPixel),\n\t\tuintptr(unsafe.Pointer(ANDbits)),\n\t\tuintptr(unsafe.Pointer(XORbits)),\n\t)\n\treturn HICON(ret)\n}\n\nfunc DestroyIcon(icon HICON) bool {\n\tret, _, _ := procDestroyIcon.Call(\n\t\tuintptr(icon),\n\t)\n\treturn ret != 0\n}\n\nfunc MonitorFromPoint(x, y int, dwFlags uint32) HMONITOR {\n\tret, _, _ := procMonitorFromPoint.Call(\n\t\tuintptr(x),\n\t\tuintptr(y),\n\t\tuintptr(dwFlags),\n\t)\n\treturn HMONITOR(ret)\n}\n\nfunc MonitorFromRect(rc *RECT, dwFlags uint32) HMONITOR {\n\tret, _, _ := procMonitorFromRect.Call(\n\t\tuintptr(unsafe.Pointer(rc)),\n\t\tuintptr(dwFlags),\n\t)\n\treturn HMONITOR(ret)\n}\n\nfunc MonitorFromWindow(hwnd HWND, dwFlags uint32) HMONITOR {\n\tret, _, _ := procMonitorFromWindow.Call(\n\t\tuintptr(hwnd),\n\t\tuintptr(dwFlags),\n\t)\n\treturn HMONITOR(ret)\n}\n\nfunc GetMonitorInfo(hMonitor HMONITOR, lmpi *MONITORINFO) bool {\n\tret, _, _ := procGetMonitorInfo.Call(\n\t\tuintptr(hMonitor),\n\t\tuintptr(unsafe.Pointer(lmpi)),\n\t)\n\treturn ret != 0\n}\n\nfunc EnumDisplayMonitors(hdc HDC, clip *RECT, fnEnum, dwData uintptr) bool {\n\tret, _, _ := procEnumDisplayMonitors.Call(\n\t\tuintptr(hdc),\n\t\tuintptr(unsafe.Pointer(clip)),\n\t\tfnEnum,\n\t\tdwData,\n\t)\n\treturn ret != 0\n}\n\nfunc EnumDisplaySettingsEx(szDeviceName *uint16, iModeNum uint32, devMode *DEVMODE, dwFlags uint32) bool {\n\tret, _, _ := procEnumDisplaySettingsEx.Call(\n\t\tuintptr(unsafe.Pointer(szDeviceName)),\n\t\tuintptr(iModeNum),\n\t\tuintptr(unsafe.Pointer(devMode)),\n\t\tuintptr(dwFlags),\n\t)\n\treturn ret != 0\n}\n\nfunc ChangeDisplaySettingsEx(szDeviceName *uint16, devMode *DEVMODE, hwnd HWND, dwFlags uint32, lParam uintptr) int32 {\n\tret, _, _ := procChangeDisplaySettingsEx.Call(\n\t\tuintptr(unsafe.Pointer(szDeviceName)),\n\t\tuintptr(unsafe.Pointer(devMode)),\n\t\tuintptr(hwnd),\n\t\tuintptr(dwFlags),\n\t\tlParam,\n\t)\n\treturn int32(ret)\n}\n\n/* remove to build without cgo\nfunc SendInput(inputs []INPUT) uint32 {\n\tvar validInputs []C.INPUT\n\n\tfor _, oneInput := range inputs {\n\t\tinput := C.INPUT{_type: C.DWORD(oneInput.Type)}\n\n\t\tswitch oneInput.Type {\n\t\tcase INPUT_MOUSE:\n\t\t\t(*MouseInput)(unsafe.Pointer(&input)).mi = oneInput.Mi\n\t\tcase INPUT_KEYBOARD:\n\t\t\t(*KbdInput)(unsafe.Pointer(&input)).ki = oneInput.Ki\n\t\tcase INPUT_HARDWARE:\n\t\t\t(*HardwareInput)(unsafe.Pointer(&input)).hi = oneInput.Hi\n\t\tdefault:\n\t\t\tpanic(\"unkown type\")\n\t\t}\n\n\t\tvalidInputs = append(validInputs, input)\n\t}\n\n\tret, _, _ := procSendInput.Call(\n\t\tuintptr(len(validInputs)),\n\t\tuintptr(unsafe.Pointer(&validInputs[0])),\n\t\tuintptr(unsafe.Sizeof(C.INPUT{})),\n\t)\n\treturn uint32(ret)\n}\n*/\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/utils.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nimport (\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nfunc MakeIntResource(id uint16) *uint16 {\n\treturn (*uint16)(unsafe.Pointer(uintptr(id)))\n}\n\nfunc LOWORD(dw uint32) uint16 {\n\treturn uint16(dw)\n}\n\nfunc HIWORD(dw uint32) uint16 {\n\treturn uint16(dw >> 16 & 0xffff)\n}\n\nfunc BoolToBOOL(value bool) BOOL {\n\tif value {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n\nfunc UTF16PtrToString(cstr *uint16) string {\n\tif cstr != nil {\n\t\tus := make([]uint16, 0, 256)\n\t\tfor p := uintptr(unsafe.Pointer(cstr)); ; p += 2 {\n\t\t\tu := *(*uint16)(unsafe.Pointer(p))\n\t\t\tif u == 0 {\n\t\t\t\treturn string(utf16.Decode(us))\n\t\t\t}\n\t\t\tus = append(us, u)\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\nfunc ComAddRef(unknown *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(unknown.lpVtbl.pAddRef, 1,\n\t\tuintptr(unsafe.Pointer(unknown)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n\nfunc ComRelease(unknown *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(unknown.lpVtbl.pRelease, 1,\n\t\tuintptr(unsafe.Pointer(unknown)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n\nfunc ComQueryInterface(unknown *IUnknown, id *GUID) *IDispatch {\n\tvar disp *IDispatch\n\thr, _, _ := syscall.Syscall(unknown.lpVtbl.pQueryInterface, 3,\n\t\tuintptr(unsafe.Pointer(unknown)),\n\t\tuintptr(unsafe.Pointer(id)),\n\t\tuintptr(unsafe.Pointer(&disp)))\n\tif hr != 0 {\n\t\tpanic(\"Invoke QieryInterface error.\")\n\t}\n\treturn disp\n}\n\nfunc ComGetIDsOfName(disp *IDispatch, names []string) []int32 {\n\twnames := make([]*uint16, len(names))\n\tdispid := make([]int32, len(names))\n\tfor i := 0; i < len(names); i++ {\n\t\twnames[i] = syscall.StringToUTF16Ptr(names[i])\n\t}\n\thr, _, _ := syscall.Syscall6(disp.lpVtbl.pGetIDsOfNames, 6,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(unsafe.Pointer(&wnames[0])),\n\t\tuintptr(len(names)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&dispid[0])))\n\tif hr != 0 {\n\t\tpanic(\"Invoke GetIDsOfName error.\")\n\t}\n\treturn dispid\n}\n\nfunc ComInvoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (result *VARIANT) {\n\tvar dispparams DISPPARAMS\n\n\tif dispatch&DISPATCH_PROPERTYPUT != 0 {\n\t\tdispnames := [1]int32{DISPID_PROPERTYPUT}\n\t\tdispparams.RgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))\n\t\tdispparams.CNamedArgs = 1\n\t}\n\tvar vargs []VARIANT\n\tif len(params) > 0 {\n\t\tvargs = make([]VARIANT, len(params))\n\t\tfor i, v := range params {\n\t\t\t//n := len(params)-i-1\n\t\t\tn := len(params) - i - 1\n\t\t\tVariantInit(&vargs[n])\n\t\t\tswitch v.(type) {\n\t\t\tcase bool:\n\t\t\t\tif v.(bool) {\n\t\t\t\t\tvargs[n] = VARIANT{VT_BOOL, 0, 0, 0, 0xffff}\n\t\t\t\t} else {\n\t\t\t\t\tvargs[n] = VARIANT{VT_BOOL, 0, 0, 0, 0}\n\t\t\t\t}\n\t\t\tcase *bool:\n\t\t\t\tvargs[n] = VARIANT{VT_BOOL | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*bool))))}\n\t\t\tcase byte:\n\t\t\t\tvargs[n] = VARIANT{VT_I1, 0, 0, 0, int64(v.(byte))}\n\t\t\tcase *byte:\n\t\t\t\tvargs[n] = VARIANT{VT_I1 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*byte))))}\n\t\t\tcase int16:\n\t\t\t\tvargs[n] = VARIANT{VT_I2, 0, 0, 0, int64(v.(int16))}\n\t\t\tcase *int16:\n\t\t\t\tvargs[n] = VARIANT{VT_I2 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int16))))}\n\t\t\tcase uint16:\n\t\t\t\tvargs[n] = VARIANT{VT_UI2, 0, 0, 0, int64(v.(int16))}\n\t\t\tcase *uint16:\n\t\t\t\tvargs[n] = VARIANT{VT_UI2 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint16))))}\n\t\t\tcase int, int32:\n\t\t\t\tvargs[n] = VARIANT{VT_UI4, 0, 0, 0, int64(v.(int))}\n\t\t\tcase *int, *int32:\n\t\t\t\tvargs[n] = VARIANT{VT_I4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int))))}\n\t\t\tcase uint, uint32:\n\t\t\t\tvargs[n] = VARIANT{VT_UI4, 0, 0, 0, int64(v.(uint))}\n\t\t\tcase *uint, *uint32:\n\t\t\t\tvargs[n] = VARIANT{VT_UI4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint))))}\n\t\t\tcase int64:\n\t\t\t\tvargs[n] = VARIANT{VT_I8, 0, 0, 0, v.(int64)}\n\t\t\tcase *int64:\n\t\t\t\tvargs[n] = VARIANT{VT_I8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*int64))))}\n\t\t\tcase uint64:\n\t\t\t\tvargs[n] = VARIANT{VT_UI8, 0, 0, 0, int64(v.(uint64))}\n\t\t\tcase *uint64:\n\t\t\t\tvargs[n] = VARIANT{VT_UI8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*uint64))))}\n\t\t\tcase float32:\n\t\t\t\tvargs[n] = VARIANT{VT_R4, 0, 0, 0, int64(v.(float32))}\n\t\t\tcase *float32:\n\t\t\t\tvargs[n] = VARIANT{VT_R4 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*float32))))}\n\t\t\tcase float64:\n\t\t\t\tvargs[n] = VARIANT{VT_R8, 0, 0, 0, int64(v.(float64))}\n\t\t\tcase *float64:\n\t\t\t\tvargs[n] = VARIANT{VT_R8 | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*float64))))}\n\t\t\tcase string:\n\t\t\t\tvargs[n] = VARIANT{VT_BSTR, 0, 0, 0, int64(uintptr(unsafe.Pointer(SysAllocString(v.(string)))))}\n\t\t\tcase *string:\n\t\t\t\tvargs[n] = VARIANT{VT_BSTR | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*string))))}\n\t\t\tcase *IDispatch:\n\t\t\t\tvargs[n] = VARIANT{VT_DISPATCH, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*IDispatch))))}\n\t\t\tcase **IDispatch:\n\t\t\t\tvargs[n] = VARIANT{VT_DISPATCH | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(**IDispatch))))}\n\t\t\tcase nil:\n\t\t\t\tvargs[n] = VARIANT{VT_NULL, 0, 0, 0, 0}\n\t\t\tcase *VARIANT:\n\t\t\t\tvargs[n] = VARIANT{VT_VARIANT | VT_BYREF, 0, 0, 0, int64(uintptr(unsafe.Pointer(v.(*VARIANT))))}\n\t\t\tdefault:\n\t\t\t\tpanic(\"unknown type\")\n\t\t\t}\n\t\t}\n\t\tdispparams.Rgvarg = uintptr(unsafe.Pointer(&vargs[0]))\n\t\tdispparams.CArgs = uint32(len(params))\n\t}\n\n\tvar ret VARIANT\n\tvar excepInfo EXCEPINFO\n\tVariantInit(&ret)\n\thr, _, _ := syscall.Syscall9(disp.lpVtbl.pInvoke, 8,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(dispid),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(dispatch),\n\t\tuintptr(unsafe.Pointer(&dispparams)),\n\t\tuintptr(unsafe.Pointer(&ret)),\n\t\tuintptr(unsafe.Pointer(&excepInfo)),\n\t\t0)\n\tif hr != 0 {\n\t\tif excepInfo.BstrDescription != nil {\n\t\t\tbs := UTF16PtrToString(excepInfo.BstrDescription)\n\t\t\tpanic(bs)\n\t\t}\n\t}\n\tfor _, varg := range vargs {\n\t\tif varg.VT == VT_BSTR && varg.Val != 0 {\n\t\t\tSysFreeString(((*int16)(unsafe.Pointer(uintptr(varg.Val)))))\n\t\t}\n\t}\n\tresult = &ret\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/w32/vars.go",
    "content": "// Copyright 2010-2012 The W32 Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage w32\n\nvar (\n\tIID_NULL                      = &GUID{0x00000000, 0x0000, 0x0000, [8]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}\n\tIID_IUnknown                  = &GUID{0x00000000, 0x0000, 0x0000, [8]byte{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}\n\tIID_IDispatch                 = &GUID{0x00020400, 0x0000, 0x0000, [8]byte{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}\n\tIID_IConnectionPointContainer = &GUID{0xB196B284, 0xBAB4, 0x101A, [8]byte{0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07}}\n\tIID_IConnectionPoint          = &GUID{0xB196B286, 0xBAB4, 0x101A, [8]byte{0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07}}\n)\n"
  },
  {
    "path": "vendor.yml",
    "content": "vendors:\n- path: github.com/shirou/gopsutil\n  rev: 3166d415382aa5bbd8bb151cc50a756730cd5ec4\n"
  }
]