aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-11-28 17:41:03 +0000
committerChristine Dodrill <me@christine.website>2019-11-28 18:24:54 +0000
commit41bb9eb9d3881bfb48bb3077a0d83b802a5bb1ab (patch)
tree32cd554fb2c2905eee11437d8b94263fbb9aea75
parenta33ba59767a136a2d5ddd70eec4de5d4185566eb (diff)
downloadx-41bb9eb9d3881bfb48bb3077a0d83b802a5bb1ab.tar.xz
x-41bb9eb9d3881bfb48bb3077a0d83b802a5bb1ab.zip
move hlang to another repo
-rw-r--r--cmd/h/Dockerfile19
-rw-r--r--cmd/h/compile.go105
-rw-r--r--cmd/h/http.go423
-rw-r--r--cmd/h/main.go133
-rw-r--r--cmd/h/run.go73
-rw-r--r--cmd/h/version.go13
-rw-r--r--go.mod7
-rw-r--r--go.sum44
8 files changed, 0 insertions, 817 deletions
diff --git a/cmd/h/Dockerfile b/cmd/h/Dockerfile
deleted file mode 100644
index 5d3ea5a..0000000
--- a/cmd/h/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-ARG X_VERSION
-FROM xena/xperimental:$X_VERSION AS x
-
-FROM xena/alpine AS build
-WORKDIR /wabt
-RUN apk --no-cache add build-base cmake git python \
- && git clone --recursive https://github.com/WebAssembly/wabt /wabt \
- && mkdir build \
- && cd build \
- && cmake .. \
- && make && make install
-RUN ldd $(which wat2wasm)
-
-FROM xena/alpine
-COPY --from=build /usr/local/bin/wat2wasm /usr/local/bin/wat2wasm
-COPY --from=x /usr/local/bin/h /usr/local/bin/h
-ENV PORT 5000
-RUN apk --no-cache add libstdc++
-CMD /usr/local/bin/h
diff --git a/cmd/h/compile.go b/cmd/h/compile.go
deleted file mode 100644
index a2077da..0000000
--- a/cmd/h/compile.go
+++ /dev/null
@@ -1,105 +0,0 @@
-package main
-
-import (
- "bytes"
- "context"
- "io/ioutil"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
- "text/template"
- "time"
-
- "github.com/eaburns/peggy/peg"
- "within.website/x/h"
-)
-
-var (
- wat2wasmLoc string
- wasmTemplateObj *template.Template
-)
-
-func init() {
- loc, err := exec.LookPath("wat2wasm")
- if err != nil {
- panic(err)
- }
-
- wat2wasmLoc = loc
- wasmTemplateObj = template.Must(template.New("h.wast").Parse(wasmTemplate))
-}
-
-// CompiledProgram is a fully parsed and compiled h program.
-type CompiledProgram struct {
- Source string `json:"src"`
- WebAssemblyText string `json:"wat"`
- Binary []byte `json:"bin"`
- AST string `json:"ast"`
-}
-
-func compile(source string) (*CompiledProgram, error) {
- tree, err := h.Parse(source)
- if err != nil {
- return nil, err
- }
-
- var sb strings.Builder
- err = peg.PrettyWrite(&sb, tree)
-
- result := CompiledProgram{
- Source: source,
- AST: sb.String(),
- }
-
- dir, err := ioutil.TempDir("", "h")
- if err != nil {
- return nil, err
- }
- defer os.RemoveAll(dir)
-
- fout, err := os.Create(filepath.Join(dir, "h.wast"))
- if err != nil {
- return nil, err
- }
-
- buf := bytes.NewBuffer(nil)
-
- err = wasmTemplateObj.Execute(buf, []byte(tree.Text))
- if err != nil {
- return nil, err
- }
-
- result.WebAssemblyText = buf.String()
- _, err = fout.WriteString(result.WebAssemblyText)
- if err != nil {
- return nil, err
- }
-
- fname := fout.Name()
-
- err = fout.Close()
- if err != nil {
- return nil, err
- }
-
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
- defer cancel()
-
- cmd := exec.CommandContext(ctx, wat2wasmLoc, fname, "-o", filepath.Join(dir, "h.wasm"))
- cmd.Dir = dir
-
- err = cmd.Run()
- if err != nil {
- return nil, err
- }
-
- data, err := ioutil.ReadFile(filepath.Join(dir, "h.wasm"))
- if err != nil {
- return nil, err
- }
-
- result.Binary = data
-
- return &result, nil
-}
diff --git a/cmd/h/http.go b/cmd/h/http.go
deleted file mode 100644
index b95ba18..0000000
--- a/cmd/h/http.go
+++ /dev/null
@@ -1,423 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "flag"
- "fmt"
- "io/ioutil"
- "net/http"
-
- "github.com/rs/cors"
- "within.website/ln/ex"
-)
-
-var (
- maxBytes = flag.Int64("max-playground-bytes", 75, "how many bytes of data should users be allowed to post to the playground?")
-)
-
-func doHTTP() error {
- http.Handle("/", doTemplate(indexTemplate))
- http.Handle("/docs", doTemplate(docsTemplate))
- http.Handle("/faq", doTemplate(faqTemplate))
- http.Handle("/play", doTemplate(playgroundTemplate))
- http.HandleFunc("/api/playground", runPlayground)
-
- return http.ListenAndServe(":"+*port, ex.HTTPLog(cors.Default().Handler(http.DefaultServeMux)))
-}
-
-func httpError(w http.ResponseWriter, err error, code int) {
- w.Header().Set("Content-Type", "application/json")
- w.WriteHeader(code)
- json.NewEncoder(w).Encode(struct {
- Error string `json:"err"`
- }{
- Error: err.Error(),
- })
-}
-
-func runPlayground(w http.ResponseWriter, r *http.Request) {
- if r.Method != http.MethodPost {
- http.NotFound(w, r)
- return
- }
-
- rc := http.MaxBytesReader(w, r.Body, *maxBytes)
- defer rc.Close()
-
- data, err := ioutil.ReadAll(rc)
- if err != nil {
- httpError(w, err, http.StatusBadGateway)
- return
- }
-
- comp, err := compile(string(data))
- if err != nil {
- httpError(w, fmt.Errorf("compliation error: %v", err), http.StatusBadRequest)
- return
- }
-
- er, err := run(comp.Binary)
- if err != nil {
- httpError(w, fmt.Errorf("runtime error: %v", err), http.StatusInternalServerError)
- return
- }
-
- w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(struct {
- Program *CompiledProgram `json:"prog"`
- Results *ExecResult `json:"res"`
- }{
- Program: comp,
- Results: er,
- })
-}
-
-func doTemplate(body string) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "text/html")
- fmt.Fprintln(w, body)
- })
-}
-
-const indexTemplate = `<html>
- <head>
- <title>The h Programming Language</title>
- <link rel="stylesheet" href="https://within.website/static/gruvbox.css">
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- </head>
- <body>
- <main>
- <nav>
- <a href="/">The h Programming Language</a> -
- <a href="/docs">Docs</a> -
- <a href="/play">Playground</a> -
- <a href="/faq">FAQ</a>
- </nav>
-
- <h1>The h Programming Language</h1>
-
- <p><big>A simple, fast, open-source, complete and safe language for developing modern software for the web</big></p>
-
- <hr />
-
- <h2>Example Program</h2>
-
- <code><pre>h</pre></code>
-
- <p>Outputs:</p>
-
- <code><pre>h</pre></code>
-
- <hr />
-
- <h2>Fast Compilation</h2>
-
- <p>h compiles hundreds of characters of source per second. I didn't really test how fast it is, but when I was testing it the speed was fast enough that I didn't care to profile it.</p>
-
- <hr />
-
- <h2>Safety</h2>
-
- <p>h is completely memory safe with no garbage collector or heap allocations. It does not allow memory leaks to happen, nor do any programs in h have the possibility to allocate memory.</p>
-
- <ul>
- <li>No null</li>
- <li>Completely deterministic behavior</li>
- <li>No mutable state</li>
- <li>No persistence</li>
- <li>All functions are pure functions</li>
- <li>No sandboxing required</li>
- </ul>
-
- <hr />
-
- <h2>Zero* Dependencies</h2>
-
- <p>h generates <a href="http://webassembly.org">WebAssembly</a>, so every binary produced by the compiler is completely dependency free save a single system call: <code>h.h</code>. This allows for modern, future-proof code that will work on all platforms.</p>
-
- <hr />
-
- <h2>Simple</h2>
-
- <p>h has a <a href="https://github.com/Xe/x/blob/master/h/h.peg">simple grammar</a> that gzips to 117 bytes. Creating a runtime environment for h is so trivial just about anyone can do it.</p>
-
- <hr />
-
- <h2>Platform Support</h2>
-
- <p>h supports the following platforms:</p>
-
- <ul>
- <li>Google Chrome</li>
- <li>Electron</li>
- <li>Chromium Embedded Framework</li>
- <li>Microsoft Edge</li>
- <li>Olin</li>
- </ul>
-
- <hr />
-
- <h2>International Out of the Box</h2>
-
- <p>h supports multiple written and spoken languages with true contextual awareness. It not only supports the Latin <code>h</code> as input, it also accepts the <a href="http://lojban.org">Lojbanic</a> <code>'</code> as well. This allows for full 100% internationalization into Lojban should your project needs require it.</p>
-
- <hr />
-
- <h2>Testimonials</h2>
-
- <p>Not convinced? Take the word of people we probably didn't pay for their opinion.</p>
-
- <ul>
- <li>I don't see the point of this.</li>
- <li>This solves all my problems. All of them. Just not in the way I expected it to.</li>
- <li>Yes.</li>
- <li>Perfect.</li>
- <li>h is the backbone of my startup.</li>
- </ul>
-
- <hr />
-
- <h2>Open-Source</h2>
-
- <p>The h compiler and default runtime are <a href="https://github.com/Xe/x/tree/master/cmd/h">open-source</a> free software sent out into the <a href="https://creativecommons.org/choose/zero/">Public Domain</a>. You can use h for any purpose at all with no limitations or restrictions.</p>
-
- <hr />
-
- <footer>
- <center><p><i>From <a href="https://christine.website">Within</a></i></p></center>
- </footer>
- </main>
- </body>
-</html>`
-
-const docsTemplate = `<html>
- <head>
- <title>The h Programming Language - Docs</title>
- <link rel="stylesheet" href="https://within.website/static/gruvbox.css">
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- </head>
- <body>
- <main>
- <nav>
- <a href="/">The h Programming Language</a> -
- <a href="/docs">Docs</a> -
- <a href="/play">Playground</a> -
- <a href="/faq">FAQ</a>
- </nav>
-
- <h1>Documentation</h1>
-
- <p><big id="comingsoon">Coming soon...</big></p>
- <script>
- Date.prototype.addDays = function(days) {
- var date = new Date(this.valueOf());
- date.setDate(date.getDate() + days);
- return date;
- }
-
- let date = new Date();
- date = date.addDays(1);
- document.getElementById("comingsoon").innerHTML = "Coming " + date.toDateString();
- </script>
-
- <hr />
-
- <footer>
- <center><p><i>From <a href="https://christine.website">Within</a></i></p></center>
- </footer>
- </main>
- </body>
-</html>`
-
-const faqTemplate = `<html>
- <head>
- <title>The h Programming Language - FAQ</title>
- <link rel="stylesheet" href="https://within.website/static/gruvbox.css">
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- </head>
- <body>
- <main>
- <nav>
- <a href="/">The h Programming Language</a> -
- <a href="/docs">Docs</a> -
- <a href="/play">Playground</a> -
- <a href="/faq">FAQ</a>
- </nav>
-
- <h1>Frequently Asked Questions</h1>
-
- <h2>What are the instructions of h?</h2>
-
- <p>h supports the following instructions:</p>
- <ul>
- <li><code>h</code></li>
- <li><code>'</code></li>
- </ul>
-
- <p>All valid h instructions must be separated by a space (<code>\0x20</code> or the spacebar on your computer). No other forms of whitespace are permitted. Any other characters will render your program <a href="http://jbovlaste.lojban.org/dict/gentoldra">gentoldra</a>.</p>
-
- <h2>How do I install and use h?</h2>
-
- <p>With any computer running <a href="https://golang.org">Go</a> 1.11 or higher:</p>
-
- <code><pre>go get -u -v within.website/x/cmd/h</pre></code>
-
- Usage is simple:
-
- <code><pre>Usage of h:
- -config string
- configuration file, if set (see flagconfyg(4))
- -koan
- if true, print the h koan and then exit
- -license
- show software licenses?
- -manpage
- generate a manpage template?
- -max-playground-bytes int
- how many bytes of data should users be allowed to
- post to the playground? (default 75)
- -o string
- if specified, write the webassembly binary created
- by -p here
- -o-wat string
- if specified, write the uncompiled webassembly
- created by -p here
- -p string
- h program to compile/run
- -port string
- HTTP port to listen on
- -v if true, print the version of h and then exit</pre></code>
-
- <h2>What version is h?</h2>
-
- <p>Version 1.0, this will hopefully be the only release.</p>
-
- <h2>What is the h koan?</h2>
-
- <p>And Jesus said unto the theologians, "Who do you say that I am?"</p>
-
- <p>They replied: "You are the eschatological manifestation of the ground of our being, the kerygma of which we find the ultimate meaning in our interpersonal relationships."</p>
-
- <p>And Jesus said "...What?"</p>
-
- <p>Some time passed and one of them spoke "h".</p>
-
- <p>Jesus was enlightened.</p>
-
- <h2>Why?</h2>
-
- <p>That's a good question. The following blogposts may help you understand this more:</p>
-
- <ul>
- <li><a href="https://christine.website/blog/the-origin-of-h-2015-12-14">The Origin of h</a></li>
- <li><a href="https://christine.website/blog/formal-grammar-of-h-2019-05-19">A Formal Grammar of h</a></li>
- </ul>
-
- <h2>Who wrote h?</h2>
-
- <p><a href="https://christine.website">Within</a></p>
-
- <hr />
-
- <footer>
- <center><p><i>From <a href="https://christine.website">Within</a></i></p></center>
- </footer>
- </main>
- </body>
-</html>`
-
-const playgroundTemplate = `<html>
- <head>
- <title>The h Programming Language - Playground</title>
- <link rel="stylesheet" href="https://within.website/static/gruvbox.css">
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- </head>
- <body>
- <main>
- <nav>
- <a href="/">The h Programming Language</a> -
- <a href="/docs">Docs</a> -
- <a href="/play">Playground</a> -
- <a href="/faq">FAQ</a>
- </nav>
-
- <h1>Playground</h1>
-
- <p><small>Unfortunately, Javascript is required to use this page, sorry.</small></p>
-
- <h2>Program</h2>
-
- <input id="program" type="text" value="h" />
-
- <input onClick="runProgram()" type="button" value="Run">
- <p id="status"></p>
-
- <h3>Output</h3>
-
- <code><pre id="output"></pre></code>
-
- <h4>WebAssembly Text Format</h4>
-
- <code><pre id="wat_box"></pre></code>
-
- <p>Gas used: <span id="gas_used"></span></p>
- <p>Execution time (nanoseconds): <span id="exec_time"></span></p>
-
- <h4>AST</h4>
-
- <code><pre id="ast_box"></pre></code>
-
- <script>
- function runProgram() {
- const programData = document.getElementById("program").value;
- const output = document.getElementById("output");
- const watBox = document.getElementById("wat_box");
- const astBox = document.getElementById("ast_box");
- const gasUsed = document.getElementById("gas_used");
- const execTime = document.getElementById("exec_time");
- const status = document.getElementById("status");
-
- status.innerHTML = "submitting to the server...";
-
- postData("/api/playground", programData)
- .then(function(data) {
- if (data.err != null) {
- status.innerHTML = data.err;
- return;
- }
-
- status.innerHTML = "success";
- watBox.innerHTML = data.prog.wat;
- astBox.innerHTML = data.prog.ast;
- output.innerHTML = data.res.out;
- gasUsed.innerHTML = data.res.gas;
- execTime.innerHTML = data.res.exec_duration;
- })
- .catch(function(error) {
- console.log(error);
- status.innerHTML = error + ". Please try again later?";
- });
- }
-
- function postData(url = "", data = "h") {
- return fetch(url, {
- method: "POST",
- mode: "cors",
- cache: "no-cache",
- headers: {
- "Content-Type": "text/plain",
- },
- referrer: "no-referrer",
- body: data,
- }).then(response => response.json());
- }
- </script>
-
- <hr />
-
- <footer>
- <center><p><i>From <a href="https://christine.website">Within</a></i></p></center>
- </footer>
- </main>
- </body>
-</html>`
diff --git a/cmd/h/main.go b/cmd/h/main.go
deleted file mode 100644
index 63229ac..0000000
--- a/cmd/h/main.go
+++ /dev/null
@@ -1,133 +0,0 @@
-package main
-
-import (
- "flag"
- "fmt"
- "io/ioutil"
- "log"
- "os"
-
- "within.website/x/internal"
-)
-
-var _ = func() error { log.SetFlags(log.LstdFlags | log.Llongfile); return nil }()
-
-var (
- program = flag.String("p", "", "h program to compile/run")
- outFname = flag.String("o", "", "if specified, write the webassembly binary created by -p here")
- watFname = flag.String("o-wat", "", "if specified, write the uncompiled webassembly created by -p here")
- port = flag.String("port", "", "HTTP port to listen on")
- writeTao = flag.Bool("koan", false, "if true, print the h koan and then exit")
- writeVersion = flag.Bool("v", false, "if true, print the version of h and then exit")
-)
-
-const koan = `And Jesus said unto the theologians, "Who do you say that I am?"
-
-They replied: "You are the eschatological manifestation of the ground of our
-being, the kerygma of which we find the ultimate meaning in our interpersonal
-relationships."
-
-And Jesus said "...What?"
-
-Some time passed and one of them spoke "h".
-
-Jesus was enlightened.`
-
-func tao() {
- fmt.Println(koan)
- os.Exit(0)
-}
-
-func oneOff() error {
- log.Println("compiling...")
- comp, err := compile(*program)
- if err != nil {
- return err
- }
-
- log.Println("running...")
- er, err := run(comp.Binary)
- if err != nil {
- return err
- }
-
- log.Println("success!")
-
- log.Printf("gas used:\t%d", er.GasUsed)
- log.Printf("exec time:\t%s", er.ExecTime)
- log.Println("output:")
- fmt.Print(er.Output)
-
- if *outFname != "" {
- err := ioutil.WriteFile(*outFname, comp.Binary, 0666)
- if err != nil {
- return err
- }
-
- log.Printf("wrote %d bytes to %s", len(comp.Binary), *outFname)
- }
-
- if *watFname != "" {
- err := ioutil.WriteFile(*watFname, []byte(comp.WebAssemblyText), 0666)
- if err != nil {
- return err
- }
-
- log.Printf("write %d bytes of source to %s", len(comp.WebAssemblyText), *watFname)
- }
-
- return nil
-}
-
-func main() {
- internal.HandleStartup()
-
- if *writeVersion {
- dumpVersion()
- }
-
- if *writeTao {
- tao()
- }
-
- if *program != "" {
- err := oneOff()
- if err != nil {
- panic(err)
- }
-
- return
- }
-
- if *port != "" {
- err := doHTTP()
- if err != nil {
- panic(err)
- }
-
- return
- }
-}
-
-const wasmTemplate = `(module
- (import "h" "h" (func $h (param i32)))
- (func $h_main
- (local i32 i32 i32)
- (local.set 0 (i32.const 10))
- (local.set 1 (i32.const 104))
- (local.set 2 (i32.const 39))
- {{ range . -}}
- {{ if eq . 32 -}}
- (call $h (get_local 0))
- {{ end -}}
- {{ if eq . 104 -}}
- (call $h (get_local 1))
- {{ end -}}
- {{ if eq . 39 -}}
- (call $h (get_local 2))
- {{ end -}}
- {{ end -}}
- (call $h (get_local 0))
- )
- (export "h" (func $h_main))
-)`
diff --git a/cmd/h/run.go b/cmd/h/run.go
deleted file mode 100644
index fb55bb7..0000000
--- a/cmd/h/run.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package main
-
-import (
- "errors"
- "time"
-
- "github.com/perlin-network/life/compiler"
- "github.com/perlin-network/life/exec"
-)
-
-type Process struct {
- Output []byte
-}
-
-// ResolveGlobal does nothing, currently.
-func (p *Process) ResolveGlobal(module, field string) int64 { return 0 }
-
-// ResolveFunc resolves h's ABI and importable function.
-func (p *Process) ResolveFunc(module, field string) exec.FunctionImport {
- switch module {
- case "h":
- switch field {
- case "h":
- return func(vm *exec.VirtualMachine) int64 {
- frame := vm.GetCurrentFrame()
- data := frame.Locals[0]
- p.Output = append(p.Output, byte(data))
-
- return 0
- }
-
- default:
- panic("impossible state")
- }
-
- default:
- panic("impossible state")
- }
-}
-
-type ExecResult struct {
- Output string `json:"out"`
- GasUsed uint64 `json:"gas"`
- ExecTime time.Duration `json:"exec_duration"`
-}
-
-func run(bin []byte) (*ExecResult, error) {
- p := &Process{}
-
- var cfg exec.VMConfig
- gp := &compiler.SimpleGasPolicy{GasPerInstruction: 1}
- vm, err := exec.NewVirtualMachine(bin, cfg, p, gp)
- if err != nil {
- return nil, err
- }
-
- mainFunc, ok := vm.GetFunctionExport("h")
- if !ok {
- return nil, errors.New("impossible state: no h function exposed")
- }
-
- t0 := time.Now()
- _, err = vm.Run(mainFunc)
- if err != nil {
- return nil, err
- }
-
- return &ExecResult{
- Output: string(p.Output),
- GasUsed: vm.Gas,
- ExecTime: time.Since(t0),
- }, nil
-}
diff --git a/cmd/h/version.go b/cmd/h/version.go
deleted file mode 100644
index f321497..0000000
--- a/cmd/h/version.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
-)
-
-const version = "1.0.0"
-
-func dumpVersion() {
- fmt.Println("h programming language version", version)
- os.Exit(0)
-}
diff --git a/go.mod b/go.mod
index 5f370dd..139053f 100644
--- a/go.mod
+++ b/go.mod
@@ -43,13 +43,9 @@ require (
github.com/otiai10/copy v1.0.2
github.com/otiai10/curr v0.0.0-20190513014714-f5a3d24e5776 // indirect
github.com/pborman/uuid v1.2.0
- github.com/perlin-network/life v0.0.0-20190625155037-103174020946
github.com/peterh/liner v1.1.0
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
github.com/pkg/errors v0.8.1
- github.com/rs/cors v1.7.0
- github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
- github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd // indirect
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
github.com/streamrail/concurrent-map v0.0.0-20160823150647-8bf1e9bacbf6
github.com/stretchr/testify v1.3.0 // indirect
@@ -71,13 +67,10 @@ require (
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
golang.org/x/oauth2 v0.0.0-20190523182746-aaccbc9213b0
google.golang.org/appengine v1.6.0 // indirect
- gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/tucnak/telebot.v2 v2.0.0-20190415090633-8c1c512262f2
within.website/confyg v0.4.0
within.website/johaus v1.1.0
within.website/ln v0.7.0
)
-replace github.com/go-interpreter/wagon v0.0.0 => github.com/perlin-network/wagon v0.3.1-0.20180825141017-f8cb99b55a39
-
go 1.13
diff --git a/go.sum b/go.sum
index 8f54d3c..58dc1d3 100644
--- a/go.sum
+++ b/go.sum
@@ -26,8 +26,6 @@ github.com/dgryski/go-failure v0.0.0-20151001134759-4963dbd58fd0 h1:SJzP6kZNFsdx
github.com/dgryski/go-failure v0.0.0-20151001134759-4963dbd58fd0/go.mod h1:vVcpVd0tzL5XdRrkHax1asNJsHVpgA0cd9fHPHU5a/w=
github.com/dgryski/go-onlinestats v0.0.0-20170612111826-1c7d19468768 h1:Xzl7CSuSnGsyU+9xmSU2h8w3d7Tnis66xeoNN207tLo=
github.com/dgryski/go-onlinestats v0.0.0-20170612111826-1c7d19468768/go.mod h1:alfmlCqcg4uw9jaoIU1nOp9RFdJLMuu8P07BCEgpgoo=
-github.com/disintegration/imaging v1.6.0 h1:nVPXRUUQ36Z7MNf0O77UzgnOb1mkMMor7lmJMJXc/mA=
-github.com/disintegration/imaging v1.6.0/go.mod h1:xuIt+sRxDFrHS0drzXUlCJthkJ8k7lkkUojDSR247MQ=
github.com/disintegration/imaging v1.6.1 h1:JnBbK6ECIZb1NsWIikP9pd8gIlTIRx7fuDNpU9fsxOE=
github.com/disintegration/imaging v1.6.1/go.mod h1:xuIt+sRxDFrHS0drzXUlCJthkJ8k7lkkUojDSR247MQ=
github.com/eaburns/peggy v0.0.0-20180405011029-d685ddd3cbcb/go.mod h1:5tfPwI6ukiK3W5vJzkj5MBQKHHY9Gcy2y6k1FC/23Xk=
@@ -86,12 +84,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/miekg/dns v1.1.14 h1:wkQWn9wIp4mZbwW8XV6Km6owkvRPbOiV004ZM2CkGvA=
-github.com/miekg/dns v1.1.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI=
-github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.16 h1:iMEQ/IVHxPTtx2Q07JP/k4CKRvSjiAZjZ0hnhgYEDmE=
-github.com/miekg/dns v1.1.16/go.mod h1:YNV562EiewvSmpCB6/W4c6yqjK7Z+M/aIS1JHsIVeg8=
github.com/miekg/dns v1.1.17 h1:BhJxdA7bH51vKFZSY8Sn9pR7++LREvg0eYFzHA452ew=
github.com/miekg/dns v1.1.17/go.mod h1:WgzbA6oji13JREwiNsRDNfl7jYdPnmz+VEuLrA+/48M=
github.com/miekg/dns v1.1.19 h1:0ymbfaLG1/utH2+BydNiF+dx1jSEmdr/nylOtkGHZZg=
@@ -119,10 +111,6 @@ github.com/otiai10/mint v1.2.4/go.mod h1:d+b7n/0R3tdyUYYylALXpWQ/kTN+QobSq/4SRGB
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/perlin-network/life v0.0.0-20190625155037-103174020946 h1:qA5Q7rgctaRZKDiTKbEJrazx1M4Pbiwb8Gfr3WiuVTg=
-github.com/perlin-network/life v0.0.0-20190625155037-103174020946/go.mod h1:z/EH0mO9zbeuTT5NX4u2VqVSG8y2vDQXz6iDKxikW2I=
-github.com/perlin-network/wagon v0.3.1-0.20180825141017-f8cb99b55a39 h1:CYHXy6CWxxL7ugjvCbTELOm2j5iRLEWGPl3AQYvretw=
-github.com/perlin-network/wagon v0.3.1-0.20180825141017-f8cb99b55a39/go.mod h1:zHOMvbitcZek8oshsMO5VpyBjWjV9X8cn8WTZwdebpM=
github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os=
github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
@@ -132,16 +120,8 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI=
-github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
-github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sendgrid/rest v2.4.1+incompatible h1:HDib/5xzQREPq34lN3YMhQtMkdXxS/qLp5G3k9a5++4=
github.com/sendgrid/rest v2.4.1+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
-github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0=
-github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo=
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
github.com/streamrail/concurrent-map v0.0.0-20160823150647-8bf1e9bacbf6 h1:XklXvOrWxWCDX2n4vdEQWkjuIP820XD6C4kF0O0FzH4=
@@ -161,26 +141,14 @@ github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef h1:7D6Nm4D6f0ci9yttWaKjM1TMAXrH5Su72dojqYGntFY=
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM=
github.com/velour/chat v0.0.0-20180713122344-fd1d1606cb89/go.mod h1:ejwOYCjnDMyO5LXFXRARQJGBZ6xQJZ3rgAHE5drSuMM=
-github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
-github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 h1:YyPWX3jLOtYKulBR6AScGIs74lLrJcgeKRwcbAuQOG4=
github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119/go.mod h1:/nuTSlK+okRfR/vnIPqR89fFKonnWPiZymN5ydRJkX8=
-github.com/xtaci/kcp-go v5.4.2+incompatible h1:srUoSnFj4dkRzo2b+yz1WENGB32vAv0iuMS8wjYmaEI=
-github.com/xtaci/kcp-go v5.4.2+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE=
-github.com/xtaci/kcp-go v5.4.4+incompatible h1:QIJ0a0Q0N1G20yLHL2+fpdzyy2v/Cb3PI+xiwx/KK9c=
-github.com/xtaci/kcp-go v5.4.4+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE=
github.com/xtaci/kcp-go v5.4.5+incompatible h1:CdPonwNu3RKu7HcXSno5r0GXfTViDY2iFV2RDOao/4U=
github.com/xtaci/kcp-go v5.4.5+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE=
github.com/xtaci/kcp-go v5.4.11+incompatible h1:tJbtarpmOoOD74cZ41uvvF5Hyt1nvctHQCOxZ6ot5xw=
github.com/xtaci/kcp-go v5.4.11+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE=
github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM=
github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE=
-github.com/xtaci/smux v1.3.3 h1:+vnzZHTLGHrj+LzUZEkKmvu4KkG7fj4jwMPqhawvErg=
-github.com/xtaci/smux v1.3.3/go.mod h1:f+nYm6SpuHMy/SH0zpbvAFHT1QoMcgLOsWcFip5KfPw=
-github.com/xtaci/smux v1.3.4 h1:7BJNo6A3d8CJXV1cCwwN9lZaGigNB2BbSDKIbtf7bHE=
-github.com/xtaci/smux v1.3.4/go.mod h1:f+nYm6SpuHMy/SH0zpbvAFHT1QoMcgLOsWcFip5KfPw=
-github.com/xtaci/smux v1.3.5 h1:wR36ew6NaYwbhIBSnoYFeinX/Gs6A67wj0yXqH0Qa+c=
-github.com/xtaci/smux v1.3.5/go.mod h1:f+nYm6SpuHMy/SH0zpbvAFHT1QoMcgLOsWcFip5KfPw=
github.com/xtaci/smux v1.3.6 h1:TFsd1myAvw5uU48uo5N9dS9l4AiCQXB+Id/ubqHgLJM=
github.com/xtaci/smux v1.3.6/go.mod h1:f+nYm6SpuHMy/SH0zpbvAFHT1QoMcgLOsWcFip5KfPw=
github.com/xtaci/smux v1.4.4 h1:FukIfahko+KHhS9Gxppkp6756opZymvPOLNmpny1is4=
@@ -191,12 +159,9 @@ go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go4.org v0.0.0-20190313082347-94abd6928b1d h1:JkRdGP3zvTtTbabWSAC6n67ka30y7gOzWAah4XYJSfw=
go4.org v0.0.0-20190313082347-94abd6928b1d/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
-golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
-golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M=
@@ -213,8 +178,6 @@ golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -227,12 +190,9 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180928133829-e4b3c5e90611/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190219203350-90b0e4468f99/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed h1:uPxWBzB3+mlnjy9W58qY1j/cjyFjutgw/Vhan2zLy/A=
-golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd h1:DBH9mDw0zluJT/R+nGuV3jWFWLFaHyYZWD4tOT+cjn0=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=