Repository: gobuffalo/buffalo
Pull request #1822 (2019-10-30 14:52:02)

v0.15.0


Patch:
diff --git a/Dockerfile.build b/Dockerfile.build
index ee362412..8a5b6d84 100644
--- a/Dockerfile.build
+++ b/Dockerfile.build
@@ -20,8 +20,7 @@ RUN npm -v
 RUN service postgresql start && \
     su -c "psql -c \"ALTER USER postgres  WITH PASSWORD 'postgres';\"" - postgres
 
-RUN go get -u github.com/golang/dep/cmd/dep \
-&& go get -tags sqlite -v -u github.com/gobuffalo/pop \
+RUN go get -tags sqlite -v -u github.com/gobuffalo/pop \
 && go get -tags sqlite -v -u github.com/gobuffalo/packr/v2/packr2 \
 && go get -tags sqlite -v -u github.com/gobuffalo/buffalo-pop \
 && rm -rf $GOPATH/src && mkdir -p $BP
diff --git a/README.md b/README.md
index c88e6f7d..83fbd0ef 100644
--- a/README.md
+++ b/README.md
@@ -7,9 +7,9 @@
 <a href="https://www.codetriage.com/gobuffalo/buffalo"><img src="https://www.codetriage.com/gobuffalo/buffalo/badges/users.svg" alt="Open Source Helpers" /></a>
 </p>
 
-# Buffalo
+"Buffalo"
 
-A Go web development eco-system, designed to make your life easier.
+A Go web development eco-system, designed to make your project easier.
 
 Buffalo helps you to generate a web project that already has everything from front-end (JavaScript, SCSS, etc.) to the back-end (database, routing, etc.) already hooked up and ready to run. From there it provides easy APIs to build your web application quickly in Go.
 
@@ -61,7 +61,7 @@ First, thank you so much for wanting to contribute! It means so much that you ca
 **Here are the core rules to respect**:
 * If you have any question, please consider using the [Slack channel](https://gobuffalo.io/docs/slack) (*#buffalo*, *#buffalo_fr* or *#buffalo-dev* for contribution related questions) or [Stack Overflow](https://stackoverflow.com/questions/tagged/buffalo). We use GitHub issues for **bug reports and feature requests only**.
 * All contributors of this project are working on their free time: be patient and kind. :)
-* Consider opening an issue **BEFORE** creating a Pull request (PR): you won't loose your time on fixing non-existing bugs, or fixing the wrong bug. Also we can help you to produce the best PR!
+* Consider opening an issue **BEFORE** creating a Pull request (PR): you won't lose your time on fixing non-existing bugs, or fixing the wrong bug. Also we can help you to produce the best PR!
 * All PRs **MUST** be opened against the *development* branch. If you want to write an hot-fix, we'll first fix the *development* branch before moving the patch to *master* branch.
 
 **WE WILL CLOSE ANY ISSUE OR PR NOT FOLLOWING THESE CORE RULES**.
diff --git a/app.go b/app.go
index f40a2863..8ef8245e 100644
--- a/app.go
+++ b/app.go
@@ -41,8 +41,8 @@ func New(opts Options) *App {
 	a := &App{
 		Options: opts,
 		ErrorHandlers: ErrorHandlers{
-			404: defaultErrorHandler,
-			500: defaultErrorHandler,
+			http.StatusNotFound:            defaultErrorHandler,
+			http.StatusInternalServerError: defaultErrorHandler,
 		},
 		router:   mux.NewRouter(),
 		moot:     &sync.RWMutex{},
@@ -62,8 +62,8 @@ func New(opts Options) *App {
 		}
 	}
 
-	a.router.NotFoundHandler = notFoundHandler("path not found: %s %s", 404)
-	a.router.MethodNotAllowedHandler = notFoundHandler("method not found: %s %s", 405)
+	a.router.NotFoundHandler = notFoundHandler("path not found: %s %s", http.StatusNotFound)
+	a.router.MethodNotAllowedHandler = notFoundHandler("method not found: %s %s", http.StatusMethodNotAllowed)
 
 	if a.MethodOverride == nil {
 		a.MethodOverride = MethodOverride
diff --git a/buffalo/cmd/fix/dep.go b/buffalo/cmd/fix/dep.go
deleted file mode 100644
index 09f6bf84..00000000
--- a/buffalo/cmd/fix/dep.go
+++ /dev/null
@@ -1,97 +0,0 @@
-package fix
-
-import (
-	"context"
-	"fmt"
-	"os"
-	"os/exec"
-	"strings"
-
-	"github.com/gobuffalo/buffalo/runtime"
-	"github.com/gobuffalo/genny"
-	"github.com/gobuffalo/genny/gogen"
-)
-
-// packages to add to Gopkg.toml
-var apkg = []string{}
-
-// packages ensure get updated
-var upkg = []string{
-	"github.com/gobuffalo/buffalo",
-	"github.com/gobuffalo/plush",
-	"github.com/gobuffalo/events",
-	"github.com/gobuffalo/suite",
-	"github.com/gobuffalo/flect",
-}
-
-// DepEnsure runs `dep ensure -v` or `go get -u` depending on app tooling
-// to make sure that any newly changed imports are added to dep or installed.
-func DepEnsure(r *Runner) error {
-	if r.App.WithPop {
-		upkg = append(upkg, "github.com/gobuffalo/fizz", "github.com/gobuffalo/pop")
-	}
-	if !r.App.WithDep {
-		fmt.Println("~~~ Running go get ~~~")
-		return modGetUpdate(r)
-	}
-
-	fmt.Println("~~~ Running dep ensure ~~~")
-	return runDepEnsure(r)
-}
-
-func runDepEnsure(r *Runner) error {
-	for _, x := range []string{"beta", "rc", "development"} {
-		if strings.Contains(runtime.Version, x) {
-			r.Warnings = append(r.Warnings, fmt.Sprintf("This is not an official release and you will need to MANUALLY adjust your Gopkg.toml file to use this release."))
-			break
-		}
-	}
-
-	if len(apkg) > 0 {
-		args := []string{"ensure", "-v", "-add"}
-		args = append(args, apkg...)
-		if err := depRunner(args); err != nil {
-			// *sigh* - yeah, i know
-			if !strings.Contains(err.Error(), "is already in Gopkg.toml") {
-				return err
-			}
-		}
-	}
-
-	if len(upkg) > 0 {
-		args := []string{"ensure", "-v", "-update"}
-		if err := depRunner(args); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-func depRunner(args []string) error {
-	cc := exec.Command("dep", args...)
-	cc.Stdin = os.Stdin
-	cc.Stderr = os.Stderr
-	cc.Stdout = os.Stdout
-	return cc.Run()
-}
-
-func modGetUpdate(r *Runner) error {
-	run := genny.WetRunner(context.Background())
-	g := genny.New()
-	for _, x := range upkg {
-		if x == "github.com/gobuffalo/buffalo" {
-			continue
-		}
-		g.Command(gogen.Get(x))
-	}
-
-	for _, x := range []string{"beta", "rc"} {
-		if !strings.Contains(runtime.Version, x) {
-			continue
-		}
-		g.Command(gogen.Get("github.com/gobuffalo/buffalo@"+runtime.Version, "-u"))
-	}
-	run.With(g)
-	return run.Run()
-}
diff --git a/buffalo/cmd/fix/fix.go b/buffalo/cmd/fix/fix.go
index ebeec765..59b132db 100644
--- a/buffalo/cmd/fix/fix.go
+++ b/buffalo/cmd/fix/fix.go
@@ -55,7 +55,6 @@ var checks = []Check{
 	WebpackCheck,
 	PackageJSONCheck,
 	AddPackageJSONScripts,
-	DepEnsure,
 	installTools,
 	DeprecrationsCheck,
 	fixDocker,
diff --git a/buffalo/cmd/fix/imports.go b/buffalo/cmd/fix/imports.go
index 5f6ba661..ac127ff5 100644
--- a/buffalo/cmd/fix/imports.go
+++ b/buffalo/cmd/fix/imports.go
@@ -1,12 +1,10 @@
 package fix
 
 import (
-	"bytes"
 	"fmt"
 	"go/ast"
 	"go/parser"
 	"go/token"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strconv"
@@ -26,27 +24,8 @@ type ImportConverter struct {
 func (c ImportConverter) Process(r *Runner) error {
 	fmt.Println("~~~ Rewriting Imports ~~~")
 
-	err := filepath.Walk(".", c.processFile)
-	if err != nil {
-		return err
-	}
-
-	if !r.App.WithDep {
-		return nil
-	}
-
-	b, err := ioutil.ReadFile("Gopkg.toml")
-	if err != nil {
-		return err
-	}
-
-	for k := range c.Data {
-		if bytes.Contains(b, []byte(k)) {
-			r.Warnings = append(r.Warnings, fmt.Sprintf("Your Gopkg.toml contains the following import that need to be changed MANUALLY: %s", k))
-		}
-	}
+	return filepath.Walk(".", c.processFile)
 
-	return nil
 }
 
 func (c ImportConverter) processFile(p string, info os.FileInfo, err error) error {
diff --git a/buffalo/cmd/fix/tools.go b/buffalo/cmd/fix/tools.go
index c4db43f5..08da170c 100644
--- a/buffalo/cmd/fix/tools.go
+++ b/buffalo/cmd/fix/tools.go
@@ -3,7 +3,6 @@ package fix
 import (
 	"context"
 	"fmt"
-	"os/exec"
 
 	"github.com/gobuffalo/genny"
 	"github.com/gobuffalo/genny/gogen"
@@ -16,11 +15,6 @@ func installTools(r *Runner) error {
 	run := genny.WetRunner(context.Background())
 	g := genny.New()
 	app := r.App
-	if app.WithDep {
-		if _, err := exec.LookPath("dep"); err != nil {
-			g.RunFn(gogen.Install("github.com/golang/dep/cmd/dep"))
-		}
-	}
 	if app.WithPop {
 		rTools = append(rTools, "github.com/gobuffalo/buffalo-pop")
 	}
diff --git a/buffalo/cmd/new.go b/buffalo/cmd/new.go
index cf584e13..6df9a382 100644
--- a/buffalo/cmd/new.go
+++ b/buffalo/cmd/new.go
@@ -81,7 +81,6 @@ func parseNewOptions(args []string) (newAppOptions, error) {
 
 	app.AsAPI = viper.GetBool("api")
 	app.VCS = viper.GetString("vcs")
-	app.WithDep = viper.GetBool("with-dep")
 	if app.WithDep {
 		app.WithModules = false
 		envy.MustSet("GO111MODULE", "off")
@@ -273,7 +272,6 @@ func init() {
 	newCmd.Flags().BoolP("dry-run", "d", false, "dry run")
 	newCmd.Flags().BoolP("verbose", "v", false, "verbosely print out the go get commands")
 	newCmd.Flags().Bool("skip-pop", false, "skips adding pop/soda to your app")
-	newCmd.Flags().Bool("with-dep", false, "adds github.com/golang/dep to your app")
 	newCmd.Flags().Bool("skip-webpack", false, "skips adding Webpack to your app")
 	newCmd.Flags().Bool("skip-yarn", false, "use npm instead of yarn for frontend dependencies management")
 	newCmd.Flags().String("db-type", "postgres", fmt.Sprintf("specify the type of database you want to use [%s]", strings.Join(pop.AvailableDialects, ", ")))
diff --git a/buffalo/cmd/setup.go b/buffalo/cmd/setup.go
index 83edece6..f85520f7 100644
--- a/buffalo/cmd/setup.go
+++ b/buffalo/cmd/setup.go
@@ -2,25 +2,19 @@ package cmd
 
 import (
 	"bytes"
-	"context"
 	"fmt"
 	"os"
 	"os/exec"
 	"strings"
 
-	"golang.org/x/sync/errgroup"
-
-	"github.com/gobuffalo/envy"
 	"github.com/gobuffalo/events"
 	"github.com/gobuffalo/meta"
-	"github.com/markbates/deplist"
 	"github.com/sirupsen/logrus"
 	"github.com/spf13/cobra"
 )
 
 var setupOptions = struct {
 	verbose       bool
-	updateGoDeps  bool
 	dropDatabases bool
 }{}
 
@@ -31,9 +25,6 @@ var setupCmd = &cobra.Command{
 	Short: "Setup a newly created, or recently checked out application.",
 	Long: `Setup runs through checklist to make sure dependencies are setup correctly.
 
-Dependencies (if used):
-* Runs "dep ensure" to install required Go dependencies.
-
 Asset Pipeline (if used):
 * Runs "npm install" or "yarn install" to install asset dependencies.
 
@@ -51,7 +42,7 @@ Tests:
 			"app": app,
 		}
 		events.EmitPayload(EvtSetupStarted, payload)
-		for _, check := range []setupCheck{assetCheck, updateGoDepsCheck, databaseCheck, testCheck} {
+		for _, check := range []setupCheck{assetCheck, databaseCheck, testCheck} {
 			err := check(app)
 			if err != nil {
 				events.EmitError(EvtSetupErr, err, payload)
@@ -63,64 +54,6 @@ Tests:
 	},
 }
 
-func updateGoDepsCheck(app meta.App) error {
-	if app.WithModules {
-		c := exec.Command(envy.Get("GO_BIN", "go"), "get")
-		return run(c)
-	}
-	if app.WithDep {
-		if _, err := exec.LookPath("dep"); err != nil {
-			if err := run(exec.Command(envy.Get("GO_BIN", "go"), "get", "github.com/golang/dep/cmd/dep")); err != nil {
-				return err
-			}
-		}
-		args := []string{"ensure"}
-		if setupOptions.verbose {
-			args = append(args, "-v")
-		}
-		if setupOptions.updateGoDeps {
-			args = append(args, "--update")
-		}
-		err := run(exec.Command("dep", args...))
-		if err != nil {
-			return err
-		}
-		return nil
-	}
-
-	// go old school with the installation
-	ctx, cancel := context.WithCancel(context.Background())
-	defer cancel()
-	wg, _ := errgroup.WithContext(ctx)
-	deps, err := deplist.List()
-	if err != nil {
-		return err
-	}
-
-	deps["github.com/gobuffalo/suite"] = "github.com/gobuffalo/suite"
-
-	for dep := range deps {
-		args := []string{"get"}
-		if setupOptions.verbose {
-			args = append(args, "-v")
-		}
-		if setupOptions.updateGoDeps {
-			args = append(args, "-u")
-		}
-		args = append(args, dep)
-		c := exec.Command(envy.Get("GO_BIN", "go"), args...)
-		f := func() error {
-			return run(c)
-		}
-		wg.Go(f)
-	}
-	err = wg.Wait()
-	if err != nil {
-		return fmt.Errorf("We encountered the following error trying to install and update the dependencies for this application:\n%s", err)
-	}
-	return nil
-}
-
 func testCheck(meta.App) error {
 	err := run(exec.Command("buffalo", "test"))
 	if err != nil {
@@ -238,7 +171,6 @@ func run(cmd *exec.Cmd) error {
 
 func init() {
 	setupCmd.Flags().BoolVarP(&setupOptions.verbose, "verbose", "v", false, "run with verbose output")
-	setupCmd.Flags().BoolVarP(&setupOptions.updateGoDeps, "update", "u", false, "run go get -u against the application's Go dependencies")
 	setupCmd.Flags().BoolVarP(&setupOptions.dropDatabases, "drop", "d", false, "drop existing databases")
 
 	decorate("setup", setupCmd)
diff --git a/buffalo/cmd/updater/dep.go b/buffalo/cmd/updater/dep.go
deleted file mode 100644
index 08f60a19..00000000
--- a/buffalo/cmd/updater/dep.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// DepEnsure runs `dep ensure -v` to make sure that any newly changed
-// imports are added to dep.
-var DepEnsure = fix.DepEnsure
diff --git a/buffalo/cmd/updater/deprecations.go b/buffalo/cmd/updater/deprecations.go
deleted file mode 100644
index 5a5a9f65..00000000
--- a/buffalo/cmd/updater/deprecations.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// DeprecrationsCheck will either log, or fix, deprecated items in the application
-var DeprecrationsCheck = fix.DeprecrationsCheck
diff --git a/buffalo/cmd/updater/imports.go b/buffalo/cmd/updater/imports.go
deleted file mode 100644
index 2cedf811..00000000
--- a/buffalo/cmd/updater/imports.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// ImportConverter will changes imports from a -> b
-type ImportConverter = fix.ImportConverter
diff --git a/buffalo/cmd/updater/npm.go b/buffalo/cmd/updater/npm.go
deleted file mode 100644
index 37c60fcf..00000000
--- a/buffalo/cmd/updater/npm.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// PackageJSONCheck will compare the current default Buffalo
-// package.json against the applications package.json. If they are
-// different you have the option to overwrite the existing package.json
-// file with the new one.
-var PackageJSONCheck = fix.PackageJSONCheck
diff --git a/buffalo/cmd/updater/runner.go b/buffalo/cmd/updater/runner.go
deleted file mode 100644
index 3b951220..00000000
--- a/buffalo/cmd/updater/runner.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// Check interface for runnable checker functions
-type Check = fix.Check
-
-// Runner will run all compatible checks
-type Runner = fix.Runner
-
-// Run all compatible checks
-var Run = fix.Run
diff --git a/buffalo/cmd/updater/updater.go b/buffalo/cmd/updater/updater.go
deleted file mode 100644
index 8cc3d66e..00000000
--- a/buffalo/cmd/updater/updater.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package updater
-
-import "github.com/markbates/oncer"
-
-func init() {
-	oncer.Deprecate(0, "github.com/gobuffalo/buffalo/updater", "Use github.com/gobuffalo/buffalo/fix instead.")
-}
diff --git a/buffalo/cmd/updater/webpack.go b/buffalo/cmd/updater/webpack.go
deleted file mode 100644
index 7002d819..00000000
--- a/buffalo/cmd/updater/webpack.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package updater
-
-import "github.com/gobuffalo/buffalo/buffalo/cmd/fix"
-
-// WebpackCheck will compare the current default Buffalo
-// webpack.config.js against the applications webpack.config.js. If they are
-// different you have the option to overwrite the existing webpack.config.js
-// file with the new one.
-var WebpackCheck = fix.WebpackCheck
diff --git a/buffalo/cmd/version.go b/buffalo/cmd/version.go
index 8af62acf..927a514d 100644
--- a/buffalo/cmd/version.go
+++ b/buffalo/cmd/version.go
@@ -1,13 +1,20 @@
 package cmd
 
 import (
+	"encoding/json"
+	"os"
+
 	"github.com/gobuffalo/buffalo/runtime"
 	"github.com/sirupsen/logrus"
 	"github.com/spf13/cobra"
 )
 
+var jsonOutput bool
+
 func init() {
 	decorate("version", versionCmd)
+	versionCmd.Flags().BoolVar(&jsonOutput, "json", false, "Print information in json format")
+
 	RootCmd.AddCommand(versionCmd)
 }
 
@@ -15,6 +22,15 @@ var versionCmd = &cobra.Command{
 	Use:   "version",
 	Short: "Print the version information",
 	Run: func(c *cobra.Command, args []string) {
+		if jsonOutput {
+			build := runtime.BuildInfo{}
+			build.Version = runtime.Version
+			enc := json.NewEncoder(os.Stderr)
+			enc.SetIndent("", "    ")
+			enc.Encode(build)
+			return
+		}
+
 		logrus.Infof("Buffalo version is: %s", runtime.Version)
 	},
 	// needed to override the root level pre-run func
diff --git a/context.go b/context.go
index 1c720172..770f6b8c 100644
--- a/context.go
+++ b/context.go
@@ -3,6 +3,7 @@ package buffalo
 import (
 	"context"
 	"net/http"
+	"net/url"
 	"sync"
 
 	"github.com/gobuffalo/buffalo/binding"
@@ -46,16 +47,21 @@ func (a *App) newContext(info RouteInfo, res http.ResponseWriter, req *http.Requ
 	if ws, ok := res.(*Response); ok {
 		res = ws
 	}
-	params := req.URL.Query()
+
+	// Parse URL Params
+	params := url.Values{}
 	vars := mux.Vars(req)
 	for k, v := range vars {
-		params.Set(k, v)
+		params.Add(k, v)
 	}
 
+	// Parse URL Query String Params
+	// For POST, PUT, and PATCH requests, it also parse the request body as a form.
+	// Request body parameters take precedence over URL query string values in params
 	if err := req.ParseForm(); err == nil {
 		for k, v := range req.Form {
 			for _, vv := range v {
-				params.Set(k, vv)
+				params.Add(k, vv)
 			}
 		}
 	}
diff --git a/default_context.go b/default_context.go
index 2a8c41cb..bbbe1fa1 100644
--- a/default_context.go
+++ b/default_context.go
@@ -127,7 +127,7 @@ func (d *DefaultContext) Render(status int, rr render.Renderer) error {
 			if er, ok := errx.Unwrap(err).(render.ErrRedirect); ok {
 				return d.Redirect(er.Status, er.URL)
 			}
-			return HTTPError{Status: 500, Cause: err}
+			return HTTPError{Status: http.StatusInternalServerError, Cause: err}
 		}
 
 		if d.Session() != nil {
@@ -142,7 +142,7 @@ func (d *DefaultContext) Render(status int, rr render.Renderer) error {
 		d.Response().WriteHeader(status)
 		_, err = io.Copy(d.Response(), bb)
 		if err != nil {
-			return HTTPError{Status: 500, Cause: err}
+			return HTTPError{Status: http.StatusInternalServerError, Cause: err}
 		}
 
 		return nil
diff --git a/errors.go b/errors.go
index eaf4e3cf..00f946b5 100644
--- a/errors.go
+++ b/errors.go
@@ -33,7 +33,7 @@ type ErrorHandler func(int, error, Context) error
 // ErrorHandlers is used to hold a list of ErrorHandler
 // types that can be used to handle specific status codes.
 /*
-	a.ErrorHandlers[500] = func(status int, err error, c buffalo.Context) error {
+	a.ErrorHandlers[http.StatusInternalServerError] = func(status int, err error, c buffalo.Context) error {
 		res := c.Response()
 		res.WriteHeader(status)
 		res.Write([]byte(err.Error()))
@@ -88,8 +88,8 @@ func (a *App) PanicHandler(next Handler) Handler {
 						"app":     a,
 					},
 				)
-				eh := a.ErrorHandlers.Get(500)
-				eh(500, err, c)
+				eh := a.ErrorHandlers.Get(http.StatusInternalServerError)
+				eh(http.StatusInternalServerError, err, c)
 			}
 		}()
 		return next(c)
@@ -102,12 +102,12 @@ func (a *App) defaultErrorMiddleware(next Handler) Handler {
 		if err == nil {
 			return nil
 		}
-		status := 500
+		status := http.StatusInternalServerError
 		// unpack root cause and check for HTTPError
 		cause := errx.Unwrap(err)
 		switch cause {
 		case sql.ErrNoRows:
-			status = 404
+			status = http.StatusNotFound
 		default:
 			if h, ok := cause.(HTTPError); ok {
 				status = h.Status
@@ -130,7 +130,7 @@ func (a *App) defaultErrorMiddleware(next Handler) Handler {
 			})
 			// things have really hit the fan if we're here!!
 			a.Logger.Error(err)
-			c.Response().WriteHeader(500)
+			c.Response().WriteHeader(http.StatusInternalServerError)
 			c.Response().Write([]byte(err.Error()))
 		}
 		return nil
diff --git a/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl b/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl
index f515d884..b0282073 100644
--- a/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl
+++ b/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl
@@ -1,9 +1,13 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+    "net/http"
+    
+	"github.com/gobuffalo/buffalo"
+)
 
 // UserEdit default implementation.
 func UserEdit(c buffalo.Context) error {
   // custom existing work
-	return c.Render(200, r.HTML("user/edit.html"))
+	return c.Render(http.StatusOK, r.HTML("user/edit.html"))
 }
diff --git a/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl
index 482d5504..c24f36ad 100644
--- a/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl
+++ b/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl
@@ -1,8 +1,12 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+    "net/http"
+    
+	"github.com/gobuffalo/buffalo"
+)
 
 // UserIndex default implementation.
 func UserIndex(c buffalo.Context) error {
-	return c.Render(200, r.HTML("user/index.html"))
+	return c.Render(http.StatusOK, r.HTML("user/index.html"))
 }
diff --git a/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl
index 0670e684..19480459 100644
--- a/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl
+++ b/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl
@@ -1,14 +1,18 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+    "net/http"
+    
+	"github.com/gobuffalo/buffalo"
+)
 
 // UserEdit default implementation.
 func UserEdit(c buffalo.Context) error {
   // custom existing work
-	return c.Render(200, r.HTML("user/edit.html"))
+	return c.Render(http.StatusOK, r.HTML("user/edit.html"))
 }
 
 // UserShow default implementation.
 func UserShow(c buffalo.Context) error {
-	return c.Render(200, r.HTML("user/show.html"))
+	return c.Render(http.StatusOK, r.HTML("user/show.html"))
 }
diff --git a/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl
index c2e51b48..79689d17 100644
--- a/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl
+++ b/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl
@@ -1,13 +1,17 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+    "net/http"
+    
+	"github.com/gobuffalo/buffalo"
+)
 
 // UserShow default implementation.
 func UserShow(c buffalo.Context) error {
-	return c.Render(200, r.HTML("user/show.html"))
+	return c.Render(http.StatusOK, r.HTML("user/show.html"))
 }
 
 // UserEdit default implementation.
 func UserEdit(c buffalo.Context) error {
-	return c.Render(200, r.HTML("user/edit.html"))
+	return c.Render(http.StatusOK, r.HTML("user/edit.html"))
 }
diff --git a/genny/actions/templates/actions.go.tmpl b/genny/actions/templates/actions.go.tmpl
index 18867031..b9219344 100644
--- a/genny/actions/templates/actions.go.tmpl
+++ b/genny/actions/templates/actions.go.tmpl
@@ -1,6 +1,6 @@
 {{ range $action := .actions }}
 // {{$.name.Pascalize}}{{$action.Pascalize}} default implementation.
 func {{$.name.Pascalize}}{{$action.Pascalize}}(c buffalo.Context) error {
-	return c.Render(200, r.HTML("{{$.name.File}}/{{$action.File}}.html"))
+	return c.Render(http.StatusOK, r.HTML("{{$.name.File}}/{{$action.File}}.html"))
 }
 {{end}}
diff --git a/genny/actions/templates/actions_header.go.tmpl b/genny/actions/templates/actions_header.go.tmpl
index 1d2598d2..214a6a3f 100644
--- a/genny/actions/templates/actions_header.go.tmpl
+++ b/genny/actions/templates/actions_header.go.tmpl
@@ -1,3 +1,7 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+    "net/http"
+    
+	"github.com/gobuffalo/buffalo"
+)
diff --git a/genny/assets/webpack/templates/webpack.config.js.tmpl b/genny/assets/webpack/templates/webpack.config.js.tmpl
index b9831c25..c87c4e57 100644
--- a/genny/assets/webpack/templates/webpack.config.js.tmpl
+++ b/genny/assets/webpack/templates/webpack.config.js.tmpl
@@ -38,12 +38,12 @@ const configurator = {
 
   plugins() {
     var plugins = [
-      new CleanObsoleteChunks(),
       new Webpack.ProvidePlugin({$: "jquery",jQuery: "jquery"}),
       new MiniCssExtractPlugin({filename: "[name].[contenthash].css"}),
       new CopyWebpackPlugin([{from: "./assets",to: ""}], {copyUnmodified: true,ignore: ["css/**", "js/**", "src/**"] }),
       new Webpack.LoaderOptionsPlugin({minimize: true,debug: false}),
       new ManifestPlugin({fileName: "manifest.json"})
+      new CleanObsoleteChunks(),
     ];
 
     return plugins
diff --git a/genny/build/_fixtures/coke/actions/home.go b/genny/build/_fixtures/coke/actions/home.go
index 1ae4ec3b..b1e90319 100644
--- a/genny/build/_fixtures/coke/actions/home.go
+++ b/genny/build/_fixtures/coke/actions/home.go
@@ -1,9 +1,13 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+	"net/http"
+
+	"github.com/gobuffalo/buffalo"
+)
 
 // HomeHandler is a default handler to serve up
 // a home page.
 func HomeHandler(c buffalo.Context) error {
-	return c.Render(200, r.HTML("index.html"))
+	return c.Render(http.StatusOK, r.HTML("index.html"))
 }
diff --git a/genny/build/build_deps.go b/genny/build/build_deps.go
index 010f98b0..dfd28c7a 100644
--- a/genny/build/build_deps.go
+++ b/genny/build/build_deps.go
@@ -3,7 +3,6 @@ package build
 import (
 	"github.com/gobuffalo/envy"
 	"github.com/gobuffalo/genny"
-	"github.com/gobuffalo/genny/depgen"
 	"github.com/gobuffalo/genny/gogen"
 )
 
@@ -18,11 +17,6 @@ func buildDeps(opts *Options) (*genny.Generator, error) {
 		return g, nil
 	}
 
-	if opts.App.WithDep {
-		// mount the dep generator
-		return depgen.Ensure(false)
-	}
-
 	// mount the go get runner
 	tf := opts.App.BuildTags(opts.Environment, opts.Tags...)
 	if len(tf) > 0 {
diff --git a/genny/docker/templates/multi/Dockerfile.tmpl b/genny/docker/templates/multi/Dockerfile.tmpl
index 1f88d8a6..ab7aa8cf 100644
--- a/genny/docker/templates/multi/Dockerfile.tmpl
+++ b/genny/docker/templates/multi/Dockerfile.tmpl
@@ -21,7 +21,7 @@ ADD . .
 RUN dep ensure
 {{else -}}
 {{if .opts.App.WithModules -}}
-ENV GO111MODULES=on
+ENV GO111MODULE=on
 {{end -}}
 RUN go get ./...
 {{end -}}
diff --git a/genny/info/pkg.go b/genny/info/pkg.go
index 998be913..dd98fb82 100644
--- a/genny/info/pkg.go
+++ b/genny/info/pkg.go
@@ -7,7 +7,7 @@ import (
 
 func pkgChecks(opts *Options, box packd.Finder) genny.RunFn {
 	return func(r *genny.Runner) error {
-		for _, x := range []string{"go.mod", "Gopkg.toml", "Gopkg.lock"} {
+		for _, x := range []string{"go.mod"} {
 			f, err := box.FindString(x)
 			if err == nil {
 				opts.Out.Header("\nBuffalo: " + x)
diff --git a/genny/newapp/api/api.go b/genny/newapp/api/api.go
index 933a7d2b..c1c6fccc 100644
--- a/genny/newapp/api/api.go
+++ b/genny/newapp/api/api.go
@@ -35,7 +35,7 @@ func New(opts *Options) (*genny.Group, error) {
 	gg.Add(g)
 
 	// DEP/MODS/go get should be last
-	if !opts.App.WithDep && !opts.App.WithModules {
+	if !opts.App.WithModules {
 		g := genny.New()
 		g.Command(gogen.Get("./...", "-t"))
 		gg.Add(g)
diff --git a/genny/newapp/api/templates/actions/home.go.tmpl b/genny/newapp/api/templates/actions/home.go.tmpl
index 543ed4c6..8ef5cd43 100644
--- a/genny/newapp/api/templates/actions/home.go.tmpl
+++ b/genny/newapp/api/templates/actions/home.go.tmpl
@@ -1,9 +1,13 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+  "net/http"
+
+  "github.com/gobuffalo/buffalo"
+)
 
 // HomeHandler is a default handler to serve up
 // a home page.
 func HomeHandler(c buffalo.Context) error {
-  return c.Render(200, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))
+  return c.Render(http.StatusOK, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))
 }
diff --git a/genny/newapp/core/core.go b/genny/newapp/core/core.go
index ac4e7a04..557c0062 100644
--- a/genny/newapp/core/core.go
+++ b/genny/newapp/core/core.go
@@ -10,7 +10,6 @@ import (
 	"github.com/gobuffalo/buffalo/plugins/plugdeps"
 	"github.com/gobuffalo/buffalo/runtime"
 	"github.com/gobuffalo/genny"
-	"github.com/gobuffalo/genny/depgen"
 	"github.com/gobuffalo/genny/gogen"
 	"github.com/gobuffalo/genny/gogen/gomods"
 	"github.com/gobuffalo/meta"
@@ -103,17 +102,7 @@ func New(opts *Options) (*genny.Group, error) {
 	}
 	gg.Merge(ig)
 
-	// DEP/MODS/go get should be last
-	if app.WithDep {
-		// init dep
-		di, err := depgen.Init("", false)
-		if err != nil {
-			return gg, err
-		}
-		gg.Add(di)
-	}
-
-	if !app.WithDep && !app.WithModules {
+	if !app.WithModules {
 		g := genny.New()
 		g.Command(gogen.Get("./...", "-t"))
 		gg.Add(g)
diff --git a/genny/newapp/core/errors.go b/genny/newapp/core/errors.go
index f47fc7c4..854ce752 100644
--- a/genny/newapp/core/errors.go
+++ b/genny/newapp/core/errors.go
@@ -2,8 +2,5 @@ package core
 
 import "fmt"
 
-// ErrGoModulesWithDep is thrown when trying to use both dep and go modules
-var ErrGoModulesWithDep = fmt.Errorf("dep and modules can not be used at the same time")
-
 // ErrNotInGoPath is thrown when not using go modules outside of GOPATH
 var ErrNotInGoPath = fmt.Errorf("currently not in a $GOPATH")
diff --git a/genny/newapp/core/options.go b/genny/newapp/core/options.go
index a669222d..96799d1b 100644
--- a/genny/newapp/core/options.go
+++ b/genny/newapp/core/options.go
@@ -72,10 +72,6 @@ func (opts *Options) Validate() error {
 		}
 	}
 
-	if opts.App.WithModules && opts.App.WithDep {
-		return ErrGoModulesWithDep
-	}
-
 	name := strings.ToLower(opts.App.Name.String())
 	fb := append(opts.ForbiddenNames, "buffalo", "test", "dev")
 	for _, n := range fb {
diff --git a/genny/newapp/core/templates/actions/home.go.tmpl b/genny/newapp/core/templates/actions/home.go.tmpl
index 37437474..efc4eee9 100644
--- a/genny/newapp/core/templates/actions/home.go.tmpl
+++ b/genny/newapp/core/templates/actions/home.go.tmpl
@@ -1,9 +1,13 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+  "net/http"
+
+  "github.com/gobuffalo/buffalo"
+)
 
 // HomeHandler is a default handler to serve up
 // a home page.
 func HomeHandler(c buffalo.Context) error {
-	return c.Render(200, r.String("Hello from Buffalo"))
+	return c.Render(http.StatusOK, r.String("Hello from Buffalo"))
 }
diff --git a/genny/newapp/web/templates/actions/home.go.tmpl b/genny/newapp/web/templates/actions/home.go.tmpl
index 1ae4ec3b..151df6db 100644
--- a/genny/newapp/web/templates/actions/home.go.tmpl
+++ b/genny/newapp/web/templates/actions/home.go.tmpl
@@ -1,9 +1,13 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+  "net/http"
+
+  "github.com/gobuffalo/buffalo"
+)
 
 // HomeHandler is a default handler to serve up
 // a home page.
 func HomeHandler(c buffalo.Context) error {
-	return c.Render(200, r.HTML("index.html"))
+	return c.Render(http.StatusOK, r.HTML("index.html"))
 }
diff --git a/genny/newapp/web/web.go b/genny/newapp/web/web.go
index 30d728f0..bb05b824 100644
--- a/genny/newapp/web/web.go
+++ b/genny/newapp/web/web.go
@@ -56,7 +56,7 @@ func New(opts *Options) (*genny.Group, error) {
 	}
 
 	// DEP/MODS/go get should be last
-	if !opts.App.WithDep && !opts.App.WithModules {
+	if !opts.App.WithModules {
 		g := genny.New()
 		g.Command(gogen.Get("./...", "-t"))
 		gg.Add(g)
diff --git a/genny/resource/_fixtures/default/actions/widgets.go.tmpl b/genny/resource/_fixtures/default/actions/widgets.go.tmpl
index 51cb9d6d..d8fb7ecf 100644
--- a/genny/resource/_fixtures/default/actions/widgets.go.tmpl
+++ b/genny/resource/_fixtures/default/actions/widgets.go.tmpl
@@ -3,6 +3,7 @@ package actions
 import (
 
   "fmt"
+  "net/http"
   "github.com/gobuffalo/buffalo"
   "github.com/gobuffalo/pop"
   "github.com/markbates/coke/models"
@@ -48,7 +49,7 @@ func (v WidgetsResource) List(c buffalo.Context) error {
   // Add the paginator to the context so it can be used in the template.
   c.Set("pagination", q.Paginator)
 
-  return c.Render(200, r.Auto(c, widgets))
+  return c.Render(http.StatusOK, r.Auto(c, widgets))
 }
 
 // Show gets the data for one Widget. This function is mapped to
@@ -65,16 +66,16 @@ func (v WidgetsResource) Show(c buffalo.Context) error {
 
   // To find the Widget the parameter widget_id is used.
   if err := tx.Find(widget, c.Param("widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // New renders the form for creating a new Widget.
 // This function is mapped to the path GET /widgets/new
 func (v WidgetsResource) New(c buffalo.Context) error {
-  return c.Render(200, r.Auto(c, &models.Widget{}))
+  return c.Render(http.StatusOK, r.Auto(c, &models.Widget{}))
 }
 
 // Create adds a Widget to the DB. This function is mapped to the
@@ -106,13 +107,13 @@ func (v WidgetsResource) Create(c buffalo.Context) error {
 
     // Render again the new.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, widget))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget))
   }
 
   // If there are no errors set a success message
   c.Flash().Add("success", T.Translate(c, "widget.created.success"))
   // and redirect to the widgets index page
-  return c.Render(201, r.Auto(c, widget))
+  return c.Render(http.StatusCreated, r.Auto(c, widget))
 }
 
 // Edit renders a edit form for a Widget. This function is
@@ -128,10 +129,10 @@ func (v WidgetsResource) Edit(c buffalo.Context) error {
   widget := &models.Widget{}
 
   if err := tx.Find(widget, c.Param("widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // Update changes a Widget in the DB. This function is mapped to
@@ -147,7 +148,7 @@ func (v WidgetsResource) Update(c buffalo.Context) error {
   widget := &models.Widget{}
 
   if err := tx.Find(widget, c.Param("widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   // Bind Widget to the html form elements
@@ -166,13 +167,13 @@ func (v WidgetsResource) Update(c buffalo.Context) error {
 
     // Render again the edit.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, widget))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget))
   }
 
   // If there are no errors set a success message
   c.Flash().Add("success", T.Translate(c, "widget.updated.success"))
   // and redirect to the widgets index page
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // Destroy deletes a Widget from the DB. This function is mapped
@@ -189,7 +190,7 @@ func (v WidgetsResource) Destroy(c buffalo.Context) error {
 
   // To find the Widget the parameter widget_id is used.
   if err := tx.Find(widget, c.Param("widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   if err := tx.Destroy(widget); err != nil {
@@ -199,5 +200,5 @@ func (v WidgetsResource) Destroy(c buffalo.Context) error {
   // If there are no errors set a flash message
   c.Flash().Add("success", T.Translate(c, "widget.destroyed.success"))
   // Redirect to the widgets index page
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
diff --git a/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl b/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl
index ee0dc98a..75ed139a 100644
--- a/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl
+++ b/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl
@@ -3,6 +3,7 @@ package actions
 import (
 
   "fmt"
+  "net/http"
   "github.com/gobuffalo/buffalo"
   "github.com/gobuffalo/pop"
   "github.com/markbates/coke/models"
@@ -50,7 +51,7 @@ func (v AdminWidgetsResource) List(c buffalo.Context) error {
 
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "admin/widgets")
-  return c.Render(200, r.Auto(c, widgets))
+  return c.Render(http.StatusOK, r.Auto(c, widgets))
 }
 
 // Show gets the data for one Widget. This function is mapped to
@@ -67,12 +68,12 @@ func (v AdminWidgetsResource) Show(c buffalo.Context) error {
 
   // To find the Widget the parameter admin_widget_id is used.
   if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "admin/widgets")
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // New renders the form for creating a new Widget.
@@ -80,7 +81,7 @@ func (v AdminWidgetsResource) Show(c buffalo.Context) error {
 func (v AdminWidgetsResource) New(c buffalo.Context) error {
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "admin/widgets")
-  return c.Render(200, r.Auto(c, &models.Widget{}))
+  return c.Render(http.StatusOK, r.Auto(c, &models.Widget{}))
 }
 
 // Create adds a Widget to the DB. This function is mapped to the
@@ -112,13 +113,13 @@ func (v AdminWidgetsResource) Create(c buffalo.Context) error {
 
     // Render again the new.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, widget))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget))
   }
 
   // If there are no errors set a success message
   c.Flash().Add("success", T.Translate(c, "widget.created.success"))
   // and redirect to the admin/widgets index page
-  return c.Render(201, r.Auto(c, widget))
+  return c.Render(http.StatusCreated, r.Auto(c, widget))
 }
 
 // Edit renders a edit form for a Widget. This function is
@@ -134,12 +135,12 @@ func (v AdminWidgetsResource) Edit(c buffalo.Context) error {
   widget := &models.Widget{}
 
   if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "admin/widgets")
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // Update changes a Widget in the DB. This function is mapped to
@@ -155,7 +156,7 @@ func (v AdminWidgetsResource) Update(c buffalo.Context) error {
   widget := &models.Widget{}
 
   if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   // Bind Widget to the html form elements
@@ -174,13 +175,13 @@ func (v AdminWidgetsResource) Update(c buffalo.Context) error {
 
     // Render again the edit.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, widget))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget))
   }
 
   // If there are no errors set a success message
   c.Flash().Add("success", T.Translate(c, "widget.updated.success"))
   // and redirect to the admin/widgets index page
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
 
 // Destroy deletes a Widget from the DB. This function is mapped
@@ -197,7 +198,7 @@ func (v AdminWidgetsResource) Destroy(c buffalo.Context) error {
 
   // To find the Widget the parameter admin_widget_id is used.
   if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   if err := tx.Destroy(widget); err != nil {
@@ -207,5 +208,5 @@ func (v AdminWidgetsResource) Destroy(c buffalo.Context) error {
   // If there are no errors set a flash message
   c.Flash().Add("success", T.Translate(c, "widget.destroyed.success"))
   // Redirect to the admin/widgets index page
-  return c.Render(200, r.Auto(c, widget))
+  return c.Render(http.StatusOK, r.Auto(c, widget))
 }
diff --git a/genny/resource/templates/standard/actions/resource-name.go.tmpl b/genny/resource/templates/standard/actions/resource-name.go.tmpl
index 4258a4f7..aa53e3db 100644
--- a/genny/resource/templates/standard/actions/resource-name.go.tmpl
+++ b/genny/resource/templates/standard/actions/resource-name.go.tmpl
@@ -1,6 +1,10 @@
 package actions
 
-import "github.com/gobuffalo/buffalo"
+import (
+  "net/http"
+
+  "github.com/gobuffalo/buffalo"
+)
 
 type {{.opts.Name.Resource}}Resource struct{
   buffalo.Resource
@@ -9,7 +13,7 @@ type {{.opts.Name.Resource}}Resource struct{
 {{ range $a := .actions }}
 // {{$a.String}} default implementation.
 func (v {{$.opts.Name.Resource}}Resource) {{$a.String}}(c buffalo.Context) error {
-  return c.Render(200, r.String("{{$.opts.Model.Proper}}#{{$a.String}}"))
+  return c.Render(http.StatusOK, r.String("{{$.opts.Model.Proper}}#{{$a.String}}"))
 }
 
 {{end}}
diff --git a/genny/resource/templates/use_model/actions/resource-name.go.tmpl b/genny/resource/templates/use_model/actions/resource-name.go.tmpl
index 6ed8cf59..939a1f93 100644
--- a/genny/resource/templates/use_model/actions/resource-name.go.tmpl
+++ b/genny/resource/templates/use_model/actions/resource-name.go.tmpl
@@ -3,6 +3,7 @@ package actions
 import (
 
   "fmt"
+  "net/http"
   "github.com/gobuffalo/buffalo"
   "github.com/gobuffalo/pop"
   "{{.opts.App.ModelsPkg}}"
@@ -52,7 +53,7 @@ func (v {{.opts.Name.Resource}}Resource) List(c buffalo.Context) error {
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "{{.opts.Name.URL}}")
   {{ end -}}
-  return c.Render(200, r.Auto(c, {{.opts.Model.VarCasePlural}}))
+  return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCasePlural}}))
 }
 
 // Show gets the data for one {{.opts.Model.Proper}}. This function is mapped to
@@ -69,14 +70,14 @@ func (v {{.opts.Name.Resource}}Resource) Show(c buffalo.Context) error {
 
   // To find the {{.opts.Model.Proper}} the parameter {{.opts.Name.ParamID}} is used.
   if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   {{ if ne .opts.Model.Tableize.String .opts.Name.URL.String -}}
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "{{.opts.Name.URL}}")
   {{ end -}}
-  return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+  return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
 }
 
 {{ if .opts.App.AsWeb -}}
@@ -87,7 +88,7 @@ func (v {{.opts.Name.Resource}}Resource) New(c buffalo.Context) error {
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "{{.opts.Name.URL}}")
   {{ end -}}
-  return c.Render(200, r.Auto(c, &models.{{.opts.Model.Proper}}{}))
+  return c.Render(http.StatusOK, r.Auto(c, &models.{{.opts.Model.Proper}}{}))
 }
 {{ end -}}
 
@@ -120,7 +121,7 @@ func (v {{.opts.Name.Resource}}Resource) Create(c buffalo.Context) error {
 
     // Render again the new.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
   }
 
   {{ if .opts.App.AsWeb -}}
@@ -129,7 +130,7 @@ func (v {{.opts.Name.Resource}}Resource) Create(c buffalo.Context) error {
   {{ end -}}
 
   // and redirect to the {{.opts.Name.URL}} index page
-  return c.Render(201, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+  return c.Render(http.StatusCreated, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
 }
 
 {{ if .opts.App.AsWeb -}}
@@ -146,14 +147,14 @@ func (v {{.opts.Name.Resource}}Resource) Edit(c buffalo.Context) error {
   {{.opts.Model.VarCaseSingle}} := &models.{{.opts.Model.Proper}}{}
 
   if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   {{ if ne .opts.Model.Tableize.String .opts.Name.URL.String -}}
   // hint for Auto renderer to search proper template location
   c.Set("template_prefix", "{{.opts.Name.URL}}")
   {{ end -}}
-  return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+  return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
 }
 {{ end -}}
 
@@ -170,7 +171,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error {
   {{.opts.Model.VarCaseSingle}} := &models.{{.opts.Model.Proper}}{}
 
   if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   // Bind {{.opts.Model.Proper}} to the html form elements
@@ -189,7 +190,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error {
 
     // Render again the edit.html template that the user can
     // correct the input.
-    return c.Render(422, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+    return c.Render(http.StatusUnprocessableEntity, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
   }
 
   {{ if .opts.App.AsWeb -}}
@@ -198,7 +199,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error {
   {{ end -}}
 
   // and redirect to the {{.opts.Name.URL}} index page
-  return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+  return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
 }
 
 // Destroy deletes a {{.opts.Model.Proper}} from the DB. This function is mapped
@@ -215,7 +216,7 @@ func (v {{.opts.Name.Resource}}Resource) Destroy(c buffalo.Context) error {
 
   // To find the {{.opts.Model.Proper}} the parameter {{.opts.Name.ParamID}} is used.
   if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil {
-    return c.Error(404, err)
+    return c.Error(http.StatusNotFound, err)
   }
 
   if err := tx.Destroy({{.opts.Model.VarCaseSingle}}); err != nil {
@@ -228,5 +229,5 @@ func (v {{.opts.Name.Resource}}Resource) Destroy(c buffalo.Context) error {
   {{ end -}}
 
   // Redirect to the {{.opts.Name.URL}} index page
-  return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
+  return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}}))
 }
diff --git a/go.mod b/go.mod
index c8bd9d63..d06decb1 100644
--- a/go.mod
+++ b/go.mod
@@ -30,7 +30,6 @@ require (
 	github.com/gorilla/mux v1.7.3
 	github.com/gorilla/sessions v1.2.0
 	github.com/karrick/godirwalk v1.12.0
-	github.com/markbates/deplist v1.3.0
 	github.com/markbates/grift v1.1.0
 	github.com/markbates/oncer v1.0.0
 	github.com/markbates/refresh v1.8.0
diff --git a/go.sum b/go.sum
index 0ca1de42..a40af65d 100644
--- a/go.sum
+++ b/go.sum
@@ -642,7 +642,6 @@ github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A
 github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM=
 github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE=
 github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk=
-github.com/markbates/deplist v1.3.0 h1:uPgoloPraPBPYtNSxj2UwZBh2EHW9TmMvQCP2FBiRlU=
 github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk=
 github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c=
 github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o=
diff --git a/handler.go b/handler.go
index cb6fb13f..aff79daf 100644
--- a/handler.go
+++ b/handler.go
@@ -8,15 +8,15 @@ package buffalo
 // mean returning an error.
 /*
 	func (c Context) error {
-		return c.Render(200, render.String("Hello World!"))
+		return c.Render(http.StatusOK, render.String("Hello World!"))
 	}
 
 	func (c Context) error {
-		return c.Redirect(301, "http://github.com/gobuffalo/buffalo")
+		return c.Redirect(http.StatusMovedPermanently, "http://github.com/gobuffalo/buffalo")
 	}
 
 	func (c Context) error {
-		return c.Error(422, fmt.Errorf("oops!!"))
+		return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("oops!!"))
 	}
 */
 type Handler func(Context) error
diff --git a/mail/README.md b/mail/README.md
index 0810d5eb..e60ffbd8 100644
--- a/mail/README.md
+++ b/mail/README.md
@@ -16,6 +16,7 @@ package x
 
 import (
 	"log"
+	"net/http"
 
 	"github.com/gobuffalo/buffalo/render"
 	"github.com/gobuffalo/envy"
@@ -93,7 +94,7 @@ func ContactFormHandler(c buffalo.Context) error {
 
     //Calling to send the message
     SendContactMessage(contact)
-    return c.Redirect(302, "contact/thanks")
+    return c.Redirect(http.StatusFound, "contact/thanks")
 }
 ...
 ```
diff --git a/packrd/packed-packr.go b/packrd/packed-packr.go
index 8d1eefd7..761bf763 100644
--- a/packrd/packed-packr.go
+++ b/packrd/packed-packr.go
@@ -18,15 +18,15 @@ var _ = func() error {
 		"05100d4d041557fb02475d22742548e4": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000",
 		"05e19295c88c44d295648bdae4acecc9": "1f8b08000000000000ff9491cd6aeb301085f77a8a41b959daba50e822d8eea281d24d13fab3f758562451d923a471fafa05a76d429b14ba12127ce77c9aa92260f076aca536239b249bca0f1672d2b574cc31af94b29eddd4959a0665a99b763b0ca4bece409d1a30b3492a90a532efad8437dfb3abe5d5f57fd9542a3642fc2c1215824b667752443de9929255d5b2068a9ccb6d98ac1fb7af1696cd59b7df919bccc8533e4861e05aded19ab404d5540acf2a241329b1c6d4cf3f3e5cff22f42da0c3de9a0bfca7123cce0cdc62ea8f6ef3dc16701615e279b3deac606db24e3eb2a75188c502eec7cc18021e1edab6ed303bf10f2c81350cc504c5fe4262dbb673c44b466b4ed98f551fb12747891f7030b06ca0289c0971a6df030000ffff6adc5c3b4d020000",
 		"06011b1be9e2c4c5af5b87c37b111fb5": "1f8b08000000000000ffb4525fabd330147fcfa738373048e092828fd3de27ef54d0090e049f246dd31a97e68424ad1ba3df5d925654e6540ab72ffd93dff9fd3b75b23eca4e812444f70e7d044600a8c18ea67b885edb2ee4e74ec72f43256aec8b0eaba16da5c1a235aa8eb78f1dbabf1ccafae88bf15942bcd894a05b60e862108f76d41e6daf6c84bb1268a34665d0a577cae1029b879b9cca8ee7990fa684e384b483ad415b1d1987cb2a29dd82f21eb625247af16e08f1a022a3afde7f7edc7fa4f74013e715dfe681f2e779f2ae04ab4d564f97c14eec64948629ef3901987e714c001a8feea58cb292417dea0de3e96385a7e4209726f6ea1ba34be6addca674c98628289ffd567812af656054dbbc228d3688af012de58b8d70ff2354c2eeb46d0e79d97f1ac9034b0bffca32a701c8d4cbff93fc7e50b2519e851993984ac83ae22dcae6cd4f4de657e84d645a367d555e1e5dd95eb31089736ffea3b9dfe14fd59a43973bdb79ec5797f53d0000ffff2c57ff41f9030000",
-		"0694c6ea5c1d85f554afb9a0057580a1": "1f8b08000000000000ff8c8dc14ac5301045d7e62b86d2450b921697822b415c2888f803633ad14032916902e230ff2e58d1b77cbbcbe170ae2a08f21bc188a1a5ca707d03fe983b98b96501d5d13316f24fb807cce98bcc547ffd53081b45ecb9412a1f990a71c31fc5c5cee1fccc14e0b5c788b9fadbca8d3edb0c245205d45d08b52e0cc13f136f24d3d5ba5e82f8fb97c78769f8bbb84b99cc96fffc01fc7b2b799867674e95783373df010000ffff7763c1ba00010000",
-		"0b4e548d0d999245c21d128e3591ddec": "1f8b08000000000000ff4cccb14ac5401085e1da798a43aa046473f1156c526823bec0dccd2459ccee2c93590988ef2e428a5b1d38fc7c95e317af028e9eb41c4429573547b726dfda3d44cde3aaf7b62cbceb786d47348e9834cbc465dec5900e306659b8ed8eed3a5d71887d0b5afdef199b6641e555022dadc447a18fb8f0f0aac5e5f40162a6861f7a32f16605317c4899c5fa97dbed1916a6cff7b7be4b6596336c9ef76e18e897fe020000ffff49cb1402d2000000",
+		"0694c6ea5c1d85f554afb9a0057580a1": "1f8b08000000000000ff8c8d414a04410c45d7d629c2308b6e90f45e702588a0a2a81788d569a7a12a35a4532086dc5d70445dbafb3c1effb98392bc31ec29dbda042e2e014f738388344de0be47a1caf8485ba6b27e7084fbb7ff17c2cc0bf562b0d663e1ca62f4a5a4a54bfeffcd90e1b52f0b9586574d8cdf6d04566d0a9ece94adab40c62796997538981df1d9c8faf6707b0e8a372ff777c3ee2776bd168e987e43278007ab65378e29923bcb1c913e030000ffff1fc509720a010000",
+		"0b4e548d0d999245c21d128e3591ddec": "1f8b08000000000000ff4c8e414ac6301085d7ce2986ac5a90e4106e0a2a827a81f9d369136c326132911fc4bb4ba10b578ff7787c7c8de217ed8c142d4bed00b93451c309105d650bc9ac3938db9e2d8d9b8f52c22eb7b16d7448b8d2c10c10022e5278a1ba1eac983b12aebcd1380cd3359a6067fd661cedfc1326298c8d76f6b08d1aff13a68817de3f4935bedb8cac2a8a3ff0a06c432b46ffce75659d4e4fff6164a3bf3d3fa2fae5f3f56572b9ae7cf7c9cae1e6197ee12f0000ffff1754f1f8f0000000",
 		"108d5933b56a75738dec1d893c62c321": "1f8b08000000000000ff2a4a2d2ccd2c4ad5504aad28c82f4ed5cdc94f4c492db2575144e5670596a616552a66158228254d6b2eb8bea4fcfc92e292a2c402fd94cce212fdac627db8885e52695e4a4eaa5e56314807978a8686a682ad9d42351757ada63517200000ffff259b08ba7a000000",
 		"147321c9c890ee6fa6166e16c0197a99": "1f8b08000000000000ff7c92418bdb301085effa158359d8f660895c5d7ad8c56d0994ed9226e9d1c8f25811912d45239b1657ffbd384eda26949e06349a4f6fde9395bd1ea4c602b4634cbb8201e490adf86ac5bf678c613f2e479fbe541f5ef6ef2352646c9ac0b48027e0ce47e2e5f3f68747c8bca3a8035206794a8c308c46212df3d7dec9b269ca01fb065262acc6d605ac4805e363716efd9f9cd282a393855cc1a30a28234223a3ac25214cd332f9e43d7f911df28fc6624ad52cfcdd23e4bbdf4afed63123bb636302e41e1eb69ba7fdfa6bf5bc5b7f2eab72bd117ea8ad51421261a4d9a6ca74de855879190fc5cd9baf521da5c6d7a39ed7333d4569ed628176a0318236f130d45cb94e68570f6d2bad1377f56ac41fee37130f25faabd87fb1e62c45835ea8ae99ebf962831eb0a721e0b2af25bc633cbcd10eaca1085c70cee127e8801ef211c4887de382787b13d9252bb84885f397f8150000ffff5ca6846048020000",
 		"1aab4f3df928dd93d41d28e4f6a15660": "1f8b08000000000000ff2a484cce4e4c4f55484c2ec9cccf2be602040000ffffe129fcc910000000",
 		"1d008b8139b4fb2ec09d8c313f8e8f95": "1f8b08000000000000ff9456dd6ee3bc11bdf7534c75651b3685f6aa709105b2d96453c09b049177b74051248c34b289501c96a4acb881dfbd185272ec00d9fdbe8b2032393c73e687676865f92cd708b20c8a8c1f8d5463c905188f00b2b50a9bf64994d4e46b7a6aeb5a6acad16c77d987bbfd7f36a8c995e8bdfec0b2e9e683055b5be964a369bd46f7f18123a3f7145ae3486bac728f65eb301b8d005e5f41d520c8062fcead153f55d8dc9185fd9e0fbfbebeed7ca30ab5bf7b5eeff7bf8d6d6ec9e6fd5fd365c90f9a0ae6fb3d7b2dbdab3f0e8177f98cfaebdfcdc756bcfb31112e9acbb77fcb4693d128cfe1f2e607280fadc70a02c106b505dfa9506ec06308caac3d3c49de2503dd061d42d8209f94d66a554aae3d233ca1326b70ad11f0056bd9eac0ab59855bd4641b342113a3ad74d1e319702b88af18c6d9d7db87cb9b1fd9ecd476126da5b530eda973b2e3e20aa61ca3583969bc96815c8ce4dc5af698384aadc1511bd083341534aaaa3476d221b716f4887cca6fa8d5153c2154582b839580d54679460a1b04836e8b50a209e8806ad851ebde052f4679ce4bf7d472ba6647ce66b076d45a3f030ca51002984085a5960e2b58dddec1fc137cb9fd79c318c96f83d2786ebd1db520ab0ae431f940f028ad7d84a9ac03ba690fc699970c11ddcd206c6448dfd029ade1e676051bb9c5b461b03bc2e47811bc6c6251396cd72287ead053ebca81708cd583f4d0a1d643d0ff0c20b5a79e76841fd2ee10ca0d96cf5881323199e42a74fcb53b49440cfeb1e04c5f298dfe915948b8385f5d5ccfcf97cb8438034fa0c25030a93bb9e3aee3c356cb122bd0d287c1573c73427dc6dc554819b10eb76806b28c71284bcc2c1b0602835b74dc1ca5648110a3ba352577da7872d297f0cad7b28efd7a760646e9b8026961e8377183dd78f8beb591553203b834db055f8d59ffbb40ef15991bd9e002b28763c1e135c199daef1f7c32cbd2b1fd6414fff36d680335322826be0387957258c6988a62395013df3d8ea39216c5723c793bbda43538fc6f8b3e2475c580cec3b8563a7e70fbef26e204e74860c5dd7066197fbf01df390acc43aea5323ec045717f053204593e7b019b10ac5fe479d775823ae9ad20b7ce95a9f045d88dcd2f1c793f2f54c087fbc4eee18adc1addee61cc4893c1cd3d36b48dd7a5525e3e69ee7ce54ff9b29a72457a72bf14fc08fad349eb0165b939e4461990105887d21014832d94e287d42d8eb3f0924dc4786ac98a0b3206a3dd9f221a674552bbe465dcc49123be7c9e4c06ee3c44d20c89b80586d646e96b3d26863a5d83c509f6f1cea10178f3ebe56a9ce5d90caea9c16b692a7d28236fbfddd66425bdc7e03fd3cb84bdfba89a356f43eda88937d2b64f5a95901a91dc6e0410f93a0cad338c3ada47213fe6946eab265981a652ea1e75c6c3095a1b81c3610ec063ff1611abc7599469532584c1c93b318dc9a184cf5025b9784d065fe462bd19aa2f79142b5e6fc8212853936b22d5c5a17b0fc356287ef2e415953e8f88ea7fd134a9c869ea0f1af1ed40f08aad581f78e8a18b7fe492d0ac6671e52cbe05a2aec4c11ebf3269ed2245e079ac0a910fbf2633c8d0ccbf17d9e41f11e02fefc44a1481ec189d9bc4f21caab33ae2359ef4851a94e31729e681d0eff60a240d285352135f0b29a771f0d42cb9ca83a100d7abd55d2120e38c2ef21c5f646335f24b2683b34f69ddbfdb381aa16ffe2b420fd3a9a1309d029a78c18a6229620579969f0c725811541449335887e0b0a4a6c1788de29005ebe865f79b5a479b3fd0271fbe40f3d4216fcafcabeee8f33e3c888f0b95d04e474d512ceffb5a2cd2e4e1f7d81964d651d5c6ebd34f93a258de7124d7282b747e018db4fff6815f1bff49ff5eb37fcdafc875d25558cd59db295bf4e5c9f68cb2e75ef97f000000fffffc509619290c0000",
 		"1d2a7dc90d5509ab525ab3147a1a4bf9": "1f8b08000000000000ff348e314fc330148477ff8ac3ca9030383b12030b124b8580bd7ab8afa9456c07bfe7012cff77948a6e77a7d3ddb791ffa285415e434e624c885b2e8ad100565934a4c59add2c412ff5d3f91c67d1c2ea2f65be16ce3f73e1ef1a0a5b3399d650282d8c81f0f008f73f8cdecdb9268f9104f74fd7f0bd06e5091f2c7a6c6d70795371078aecde58722d9e7bbfa9636b18c8bd92785ac32fa3f771423300897ba6b08ef690152f715b3972523eddd9c9f41d87d3697fff0b0000ffffd638316cea000000",
-		"20f0fffdc5b71982ce85ee87b75fb3db": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4433bd9d0b11cf2d988c8ba44270d21e4df43bcbe77467fc28d007d099c44a9b5260f06055e3e0f9a6a2864612629ff23ef34625a226563e1a69a4c02ef1f80e2c6f9f7c7e8576ddd371563956a50dcd7a562346f5dd7422671032f648f1838150c49cc937b5eae6e2a39a4cdd816f41f45cf3b4161e8ebba62646dd55d3d020000ffffeff2ca6daa000000",
-		"249b50674fa80d5d2389e61231cdbc08": "1f8b08000000000000ff2a484cce4e4c4f55484c2ec9cccf2be6e2cacc2dc82f2a51504acf2cc9284dd24bcecfd54fcf4f2a4d4b4bccc9d787d24a5c80000000ffffdd06e7bf37000000",
+		"20f0fffdc5b71982ce85ee87b75fb3db": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608bb8a0e2610b1e65c8ced66036b366260711dfbd74af3f1fff4ae99b2e8c942c4b5580bcacd20c5d653b7c99ad0e60ee35a127c5bbc74d8d3d1b073cb3dae7200b0f54a7c2cd07fc835d63c5fb07248dc3f9edd5bb830bf199cd07801d697cfae954fc6d1c4723ebfafeb2c7c61a4f3271d8c849aa51aeea6ff928d36f1cade57af1618fee834b9285d1048f7d9ea9880bf00fd7000000ffffecd480c3c7000000",
+		"249b50674fa80d5d2389e61231cdbc08": "1f8b08000000000000ff2cc74d0a84300c06d0f5e41421ab7163cf9496fea16d827ebdbf20ae1ecf351d5a336b42b77913f5e17681ffc4cc2c332334c0e52dfda476b415f76423548bab143d2d7c0a6df4040000ffff73c1922350000000",
 		"2b101e95a5f58f9db6a47dae28e04166": "1f8b08000000000000ff7c52cd8a1b3d10bcfb29fa1318fc416686dc72900cf9bb267b302c3985b6a667d56b8d24a4f62c8ef1bb87b16cafc3929c24d155d5adaad6ff7df9fe79f3e3e12b3819fd7aa1eb01a01d613f5f00f44882107024a326a69714b328b031080531ea857b71a6a7892d35e7c73be0c0c2e89b62d19379afee85acc35c488cdacbd07cb89684c5d3fad37e18d04768e07884362629edc794da6f3852bb9911fc8be074d25d852f008ec706788010e50effc8e21e699bd0eee074aa0d96068a1c3c1547241b7c5aa96d6dd6da52d4ffb0bcaa51e8ff41c2943c5b148ee19ef8a74bb6e4a1499871bcf309f7e228085b96c34f893b0a0ababf702fe51b771ee42d1f96eb5709cf610799bc516c6350e0320d176229240f286ea578c4272add80d30c6ad9c6f307ce21e8ee1ab9dec6feb05e54dd9e27b01e4b316a1e073950be84560d4a98e7ac576af0585c3b2fd0ab2b157260f2fdcda8aee7e9aabe34f08c13169b39bd35f8f9e6afeeea4cbaab0bfa3b0000ffff85cad3beb8020000",
 		"380ebe4d9806da77bde6826811c711a7": "1f8b08000000000000ff84524d6bdc3010bdeb573c9425b40549ec2d98f410dab23d357b28ed31c8f25816ebb584242f856dfe7b91ec7c7443e9e99937efc333a8a5de477a4826ba901b06088c1344826a67377609ca7a95a2519b7764060f7e3e4b1f72927721c8bd36076d697fb08f8f1cbf61e60cd1812b0ed16fdfd734d33d47fccb5a75c743e722444098dbd119a553a29ceac87a58ca1033accbc3dc4ae38fcafa76ee7b3d7a7581ec7c16703d5eba7eba3c7ca680b5698dfb2b6bd493551d05658e5dc12aec2880a63447aa993426bac81019e204a9a4948b64ea9e14f42bf898b1bffbfef523df146836bbfb82aa7513672c656d292d27cf943263b28038e9981a5c3f7f33e0a4a3d3edb8a881ddfdc3976f3f1af0a2e18c5d615717c08962727e8219bc338481c64091c93991585614eea82d35b87e458dbab603eb6ca19b95fe9f7b2b6ede58b7f286b1e22ebf7b854f839e2c217bf0dbdb061fde74f3329b13210f8485c2ce3f6dc3804bdb525ad9d767aa176db0aef3f2a4cb85d7c7b10cff040000ffff5b69610df5020000",
 		"3dc49c126d9ae937cfa7f3b28cd6695d": "1f8b08000000000000ff548fcb6dc3301044ef530a01ef36910e5c80409313890ec555b8348d741f08f900bebdc300efcd64cbd6152168906aeb0ff8672d8390921915b7d214633f14cd3297ddf2a3d215e2d1fd9262daa8089723a68f2eabe178dc6a491add39ced9f464990a597b791fec0a619ba749deaecb755827821c2523d9648f2bff41721c11e2b3419235b7ca652b3eac7fbde803e4be3dff5aeedb530282f819b23320171f8a958d3d0ee6b3e9f737be030000ffffcfa015bc01010000",
@@ -36,15 +36,15 @@ var _ = func() error {
 		"50f60207eb74d1b7f2b9b07fa815c278": "1f8b08000000000000ffecd1416b32311006e0fbfe8a21dfd945053f616fb215040b915d4be9496232c5c5b8b364a26d59f2df4b2c6a0f655bbc095e873c7933797bbd5e62f080969a1dd63e4b004ca52c6a9f8126bd75a4f4260e95576bc59841dba6d4784e170e5fabf71056df7802b021f6f190685b1102607d900e442ef3792127f96c3593e55280180cc7693feda70301104202d090eb740b594437fc3f1c8d4f66cfe8bacc53392d040847e4cf318af98d9ce98c9a94e5b32c1e0488cbebc866304a00a8f115d51c3f0a80d9eec86006a662b5b6781cfe63b6315263f74665f9b82aa45ce6d3e366a7a8af0bfe827f845bfcf8cdcda72f679678e4ab5a8fee5ef7cdd5dd38327b1d77baa6f48bbe577f6bd57f060000ffff849b5ab1ea050000",
 		"5326a1f49e88f03a1e5f2c3a40e54348": "1f8b08000000000000ffac94516b1b490cc7dffd29747b70249038073e8e63215cdd26d0408883ed50fae41defcaf6d0d9d146a3716a8cbf7bd1aebdb6d3bad0d0079b5ded48fa4b3f692e2f2f3b052ed15155a297b4035058e33097149272159e5da22623666a02a690acd75daa24741f1967f6eb663339f0d6a30b0aeaea28374e9fd55611abadd7fbfb5f7d8d01398584899aaf268417e2a2357504c329257fea0f3e5384dc788d040682f57387f034bc87206cfd1c66c4200b84604a849cfcccce231bb1e4d35d8cc86e1737bdbad2c4a9febd3b6b95a7aaf7fceabb8255ddff95e180635be2b570c4bfcae8c48ec4086a1f42636434851ea128d7bdb057ff4082200b236067b0a25897914576d905902c908f2507308c10ac432f6e0576ee89b1e8d6a1ee3cc8c206c84dc08bba64ed421983680c31d683710e189fa3652cd4e831d7a8501936250a72e86e95fd8cb216fdbbf0564c45cc8f68b4448d0b54f703fdd232796da771b0346ccdd4610021a02532db0261695cc40076d784ba6bdd23c2eb75b25e279b0dfae58021b9e98ffbeffba3dbc9d3f03e791bfebdfab70cc166b36bf6af6dd93eeb9ec2a9da3e0e46e3e490519db4a174cae77130549f9a617dbca178b27da3db61b205da446f299fccd01f8d3e0d8637476e0dfcbe2fea3d6807a025fcc37985e90a028ae8a65b81e80b64a0aade9596fef6bd9e3095b725958252698caf781d7e3aa096422f34c69c9c6b2e1148a2ccfe2ba7ff4ce6e8918d9be476bfdf1ffa4fe3bbc1c31f8d17646df20c8c2fb2d779b3665fa7a845e97c67aa23d3a717e22f503155c86ed5ddc6bb6b2e0dbd143c0984c8780105d52ff9c2f839c219b1063bd71b21ecf6a4dbf9160000fffff8e8761fed050000",
 		"53cc1d15028e0b1431c355d61ba109d4": "1f8b08000000000000ff648ec14ec2401086ef7d8a3ff4a209e9039870a8b2310605d2ad282732b453d8b8ec34bbdb62dfde948428718ef3ff33df97a23c9a808c5d8fc658c699020eecd853e41afb01fbae69c8ca1454d738b267c42363ecf7e40ded2d070cd2c131d748d26b1f5160856a1817e572a2961b8803b5ad351545230e21928f5d8b20e30b7f939dc57f0554e23d57d10e5992a2948bc42fb70b8c85dace36f9ebbb4223fe44717ab1a9c8c152640fcfd11bee476d1360dc3fd2e83ca00bc61d20217be6c8aebf9b2cd476729f256992427dd3a9b5fc90a498e765fe986bb55be75a7fac8af9ecf33a490aadb47e592d775a3d15aabc8ddecaf54eab62a38a3ffb9f000000ffffb53849697f010000",
-		"58087a293b8355d4c89fcbff6f66a041": "1f8b08000000000000ffec595b53e33a127ecfafe8f1c396bd9555186a9ed8e2210c304bd5ec2c0519f6714ad86d47852c792419c249f9bf9f6a4926092717a8b99cb9f01412b7babfbe7ddd320dcf6f7885c07327b4b28381a81b6d1ca483014052d62ea1cf4ab8697bcd725d8f2a7ddd9625977a143f370b34baf10fe773a61b67d9b869d87f7581d29edf545d970cb2c1603482c9545828854410162a5468b8c302aeefe128286270e64097251a0b1caeb915395867dadcb506a1d486b4f0a210aa1a0216c209550157051428317c818657c8e0ac847bdd1aa8090599abb5413a9debba9138036d48001462e19f819b72056e8ad1ac20b11a95e314ae85acd3a4856c83ebdd61debb532da5be23108ad7f42175458aec4217162054efec011df2513a804ba1aa567203691f42ff809d1bdda0e9ba8c648f8f60c2af251ec0b96c0d978f85fd43f10746f10bb4ba35f91af10fbc46d63f8ed2e7dc4d1792a315d18f17efa3d495c03b9860dd48ee903c2ed02c9d72f1895d3d7f4a310a421ede2894c30638fd5f1439ca87e9bf97daf81fd68728a47ae0ee1bdca939d4d47c00102bf84168d07968ef857550a1b3c0a57c64f09dd16dd3752c9673ab7c43f91ae34de34bc4c36cb89b92ae7727135813cf019d84f47617d8cc8349f307a86fb572387319a031da00794156d079abc747906ba530802a8daefdcf7938340070b321e81b3838849c5d71d9629ab85992b1f49f8d6e48793c9b0d004409aff48d370160d0b54641593b764296cb34511a9ce1caf2684db7aa48e86047a4b21ab62b6ede728ba10cba8e00fcc3a7ccb2b5f19d7b1dbe322ba1a8dc0cda563acbe09c1b5e5b48a8d513dfff4983e653f84a9e1a2d8907e898d08a053dc758f2563ab825a72d708341c3e1eb473a0ef7f7123af39930ba19eb019c1a5d07d369cee21f5916515ea033026f7173c12c92717c14628bc69089cf6c2c65ba355ad9bfbdf0ab435042aee6038de9033e1ac1b82862f179ccd4317ab900c06a100e72aee01aa1b5819148a0ef5df23c6797e8d26411c264089ffb38689385ec920b0a611d05b14b678802578bbefff55f5d17d04e8572beadc7add360501568d043b6c84d3e85c637f70336903af7781618fb479f1a83a59825c3c5145af49aafc9f91c5015d1780c5ece2ebcd1747f6f6f0886118e341f6e2fdd2c8b2c7139d577812528800577dc3ba3d5268edac619a4b0a78d4d9c319acf9379d2752b4f7c259e1d77cfa11442fe33520a55b8f44580c01560ddb8fb0db1de4440346a256e23a05ec303034d34944215db864fc89ce1353a34b03e3f946eea38b6d2fd6ec64e852ad6f77f0f76089171d264bdee24db421179886efa66efcd90849618fa77ebe13ea0a18783ff8b9d756cff8fd75efb68041ff02eba13fabbd4a6f68ee606795c3615de6d6af5c5c2bb7543d8d8ea0aef9edecf1f70473bffd299ded5c63ed94b0a29356f2989489709ba6a6cea6a1d0970d7b2471a7d36cfff77f985db5e00b6939cff061a3c220edcae2c066cea6a19fa05c3c5c7ae505ece8e7632de93379e1f734a5d71290a4acf6233e8113d046700708bc6d8e1d228e8cf8d55110b617b941671dd1129510663ec3fdc8ed57d9a4549ba83f29b80d31798057ecb85246a00a1ac287081ba6f5f7f32b67438940c837abf1ac685985a1578c5e382a9f08ead68a12b77c85d6bd1d04eda9fcdb5319887674235ad63abe32cd2c09bfdfde710fecad05b47fadef65949660dfa0b82d27d502c3ae060db3c476ba1466b79859ed84e25b7d33463e3a2489328900c61c2265421d237f312cfad45c7fc4cc182f5e7b3471c18b0d135c560214270f4ca42b2e01a10aac0997f11b2963b5f7fcd29795208f73026797831f230293711eb5fe994543d63386edf834784e2e98c4b2ebc2cc34f9a022f6beb0fb0b63eda643e367ed0e453ae2adcb2cc441adebeccacdc42cf3f7edb5b6840fed27a3f51ebad5f031f2fccdf6dffdbb63fc5eafa65f6271a6a2f0bd4a605aaf5d9fe3e0bd4735f33f897cfd6197d1ffe51b58da5975e126fe4694fd24b5bd2f1c9fb93c9c937a5ea88ff85ab7ffb77862b28fab2f80a54fe25ac5212837c7d4e2982773b59e5e27b33ca9f010000ffffea202445cc1f0000",
+		"58087a293b8355d4c89fcbff6f66a041": "1f8b08000000000000ffec595b53e3b8127ecfafe8f1c329fb548e72ce79648b8730c02cb5b30c05817d9c12763b51214b1e4986b029fff7ad9664923089033bf71d9e42e2be7ceacbd72d53f3fc864f1178ee845676301055ad8d8374300048caca25f4a9d08d66ced5fecb54b85973cd725d8da6faba294b2ef5287e6e17a875d05e2c98ae9d65e3ba66bfeb02a53dbb99b66d32c80683d108263361a11412415898a242c31d16707d0f07c110831307ba2cd158e070cdadc8c13ad3e4ae3108a5366485178550d32160219c5053e0aa800225862f50f329323829e15e37062a4241ee2a6d90b4735dd512e7a00d0980422cfc337033aec0cd30ba152456a1729c62b794759aac906f70dd71983fddb19652df1108c52bfa907a4a86ecd21616205477d83d52f251da830ba1a68de406d22e84fe013b33ba46d3b619c91e1ec0845f4bdc8333d9182e1f0bfb87e24f8ce2e7687563f20de2a7bc42d63d8ed267dccd9692a335d1cbf3b751ea4ae01d4cb0aa257748272ed0ac68b9f8c4aeeb1f538c829087370ae5b0054ef717458ef261baefa536fe87cd210aa91eb8fb1a775a0e35b51800c40a7e101ab41eda5b611d4cd159e0523e72f8c6e8a66e5b16cbb951bebb7c8df1baf625e261d6dccdc8d69ba3096c88e7803421bddd0536f360d2fc01ea6bad1cce5d06688c3640a7202fe8bcd7c303c8b5521840954657fee73c280d00dc7c08fa06f6f62167575c3698266e9e642cfd77ad6b321e75b3018028e195bef12e000cbac628282bc78ec87399264a83335c591ebde946150929b6c430eb61bbe2e635b718caa06d09c0bf7cca2cdb18df85b7e12b732a14959b41db4867199c71c32b0b09b57ae2fb3fa9d1bc0f5fe9a4464be20152135ab160e7104bde4807b774680bdc60b0b0ffbf4736f6ffffdf84743e104637671d8063a3abe03acd59fc23cb22ca737446e02d6e2f9865320e0f426cd11872f1818da54c7ba395fde2855fed8312723d1f684c17f0d108c645118bcf63a68ed1ab0500568370907305d7088d0d8c44025defd2c97376812e4d96214c86f0a18b833659c82e1d41216ca22076e10c51e07ad177bffea76d03da9950ceb7f5b8711a0caa020d7ac816b9c96750fbe67ec00652e71ecf1263f7e87d6db014f364b89c42cb5ef335b95800aa223a8fc1cbd9b9779ad20064178ebbc6befb6d088611a2341ff617719645beb898e9bbc01714ca823bee8fa5d536b6ea630f32d811c836f6182d16c92269dbb527be264f0edbe7900b21ff11c9856a5dfa7240e00ab0aaddfd96586fa3221aba12fba8a8b3f0c045130da55045df180a9933bc42870636e787d24dbdc7d678c0cdd9b150c56626e8c00e21724f9a6cb69d643d649187e8ae96fba976c714da2129ad70f7cfdbdd5da8437787482cf7dab1fd03afbd9fd1084ef12e1e2c747ea94de58f9c1be471215578b78d04964b71ef16b1950414de3dbdd34f7147a3ff2439dfd5ea3eed2ba62949af299d48570fba986ceb7c1d4972d76a48167d5ecfde5d7ce26e1880ed24f06f409507c493fdc662c066ae92a173305c93ec1a2de6ec60272b3e793ffa3e27d91597a2a0f42cb7870ed143700600b7688c1dae8c8b4e6fac8a5808fd515ac67547a444199cb15fb91dabfb348b927463e53701a72f300bfc960b492401425951e01275d7c85e333677504a86c1bc5f24e3fa4c4d0b7ccae33aaaf08ead59a10b7ac85d63d1d006dbe9e6da18ccc333a1eac6b1f591f731215caadae81cad25dc47ca0977ff9ca9b03623374d060feba4244406fd4d43e92e5e161d70b04d4efea1221053f4ec772cb99da5191b17459a448164081336a1e291becf57c870233ae6070f16acd3cf1e1165c046f71d83850871d36bfbcc928640a802e7fe8d4a3fc186e22b3ee7643d2a847b18ad3cbc707998aedb28f863e22553cf18a8fd5bf588503c9d9be9082fabf593e6c5cb12fc5d2fc18fb6a1cbda0fab7cc6d5147b16a248e5fd0bd1da6df7ecf2cbde7603f297a6fc819b72f36af97809ff6a3b65df4e16abed1fb393d1f87b59cafec652d6f842f8ca4bd9b3df74f877e4d6197d1ffe9fd647ed2befb2b792bb67f695a5ebf0e8edd1e4e88bf27bc4ff42f02f2f341f8d8d35545d997c06feff14be29895b3e3fdb14e1743bf9e6fcdb71cd5f010000ffff27116c459a200000",
 		"593cbb702bb3c5a0fcbfa227df3a58f1": "1f8b08000000000000ff7452cb6edc300cbceb2b089dd6856b033d1ac821011a1468da5ef203b24ddb42255195a83c50ecbf17921f9b069bbdac389a1992637935fc5633821a58938b4268eb29309c04809c352fa96f06b2ed4c7d9a2665a8cd8ad03e7d911f32f6ff806ec4204525c4930a10e0d38a345fddac1d1650c5881cefe8056ea038373ff1f92495f7dd7a256b904dd3fad41b3dc84a8829b901b4d37caae0af000870039b6f966ec75fbeec9309f9d7b6f0edf1c70318f54a8981097a8414718489022863d6eb807f12468edd26cbe0439174a5ce73193da8ecdd7893e2d22c6c8dacc5a54fde6520c74a3bede6e24d13f082c068bd518c87fde30edcd14bf77efd83bd2570a9ab7ad3dfeee195e98e28df4e733b8e475f58d0780c11160c78acb862dd9ee156efc115939c9123f7b927e2c841f98cd8c32eb981ac45c7654ba31dc6b7ea1e0d3d8372236c6febfaabd9dcda6c1de5bbf63636f714ec777c5d3fc405aaaf33ef29ace4ffa09d7cce877325cee25f000000ffff1baf99a500030000",
 		"5a8408312923fc8c5fdddc2e213566cc": "1f8b08000000000000ff010000ffff0000000000000000",
-		"5dd1df1b2c53e1a3425bfe5dc07ff730": "1f8b08000000000000ff8c525d8f123d14beefaf3859decb773a10634cd660823bb81a6521ec977b653aed613832735adb4e7443f8ef663a08a8bb89e102e8739e8f9e3e03b85953000aa0a069eb485988aa4228acdea05f518da0d880c76f2d790cf066bc8760f44a0e5f8a01ac6374e13ccf8dd5419a84496d9b1cb922c6bc0de8ab960c76071935aac23c19259fac6ca936b978b79ccfa0b265bb5aa9dae6fbeff3ed565a1783bc431fc8f26e072a40a2a01762797b05cdc69087ccc17f97f3c5e4e67d1ebcce7fd126cec985d21b55e16253ed76e27ebefc587c58fedbb0d86e690547f09ee2fa1e4ba7f406b2dd4e0c2076abfb4e750d5ae935425c23b06b80384455d71022baffa1e51a4300d76bcbafc132e8b5e20a839814c5ef807ccaf541794e96ddf8a3f22c6bab3720d306baff07c72c639b396f2b8f2188ed16eb8089d94d9e46fb6b904d9a3bfe4a66f2e94005ba83aa4107c8a1f578eaf70469664d5b6348f0f4ea0e2ee7a3d168362f6e3f4dafc7964fac3bd9ca428511642ea5fc03dab7a32f02645d632369c82ce42571ae9c137da154ed88317194db8032a6bf77ff5aa50aebe730ad328d3ed28ab48a18c4a139c941888bf9e201b26ce56d33def7f1600e528801dcb2b64d831c215af02da77294c4ca3f02319c396f4dab23593e83c61a3c1703e8b7f2657a75373ec29dd85b6293043af9686128d30782058aa0154389101019ba4460db18c8f47dd496a322469f763e298ae578cf1662fa7931bf9ec28be170f86ce4862aafba1c014a5c598f1dc2c4d5c985baec17b3e2b8819e84af8f0fd2c1f803f5f1e467000000ffffb0f46bad7a040000",
+		"5dd1df1b2c53e1a3425bfe5dc07ff730": "1f8b08000000000000ff8c525d8f1231147defafb8597c743a10634cd660823bb81a6521b81fee93e9b497e1cacc6d6d3bd10de1bf9be920a0ee268607a0e79e8fde9e015caf29000550d0b475a42c44552114566fd0afa846506cc0e3f7963c067833de43307a25872fc500d631ba709ee7c6ea204dc2a4b64d8e5c1163de06f4554b06bb838c1a55619e8c924f56b6549b5cbc5bce6750d9b25dad546df3fdf7f9762bad8b41dea20f6479b703152051d00bb1bcb9826663c843e6e0d9e57c31b97e9f07aff3dfb4897372a1f44655b8d854bb9db89b2f3f161f96ff372cb65b5ac111bca3b8bec3d229bd816cb7130388ddea7e505d83567a8d10d708ec1a200e51d5358488ee39b45c6308e07a6df92d5806bd565c611093a2f813908fb9de2bcfc9b21b7f509e656df50664da40f7ffe098656c33e76de53104b1dd621d3031bbc9d368ff0cb24973c75fc94c3e1ea840775035e80039b41e4ffd1e21cdac696b0c099e5eddc2e57c341acde6c5cda7e9d8f28973a75a59a83082cca5947f41fb72f43d80ac2b6c240d9985bc24ce9573a2ef93aa1d31268e721b50c6f4d7ee1fab5461fd14a655a6d1475a91561183381427390871315fdc4396adbc6dc6fb3a1ecc410a31801bd6b6699023440bbee5d48d9258f907208633e7ad697524cb67d05883e76200fd52be4eaf6ec747b8137b4b6c9240271f2d0c65fa40b04011b462281102224397086c1b0399be8eda7254c4e8d3ca2745b11cefd9424cbf2ce69fa7f062381c3e19b9a1caab2e47801257d6638730717572a12efbc5ac386ea027e1ebe3837430fe447d3cf9150000ffffe4b68cd779040000",
 		"6046dc01b561b25c62c4c0d22e8131a1": "1f8b08000000000000ffecbd6d8f1cc7912efa79f82beace7e590399c98cc8c837c3f48145c9f6023cf72cb05e5ddc4f06b74489bcdb228921454bfaf517f14454750f3994a8e1c86c9f630356176bbaba3223232322e3e589dffd8fefbf3d2c6f9e5cbd7af6e2f9834b4af97279f27c7df1d5b3e7df3cb8fceef5d7715cfe8fdfdffbddff15e3f2a727cf9f5c3d7efde2eab7cb1fbe7af15f4f967f3b1cbe7bf51ab716a694530ecb7f7cf9a7e58bef5fbeb87abdfcfbe1bb6fe2bf3d5f126e7e69eff8edd252cecb67df3d3b7cb5e4df2c4b8cfaf39fffaf877ff97ffffd8be5d59b6f967fffcfcf1efddbc3e532debfffff9487f7ef7ffe97cff10b94e8fefd2ffeefcbe5f2e9ebd72f7f7bfffedffef6b7f4b7925e5c7d73ff4f578f5f3e7db6bebaff1f5ffee9be7ef1f3bf7c7effd59b6f88d257afbfbafcfdbddfe92f9fcc932e97675f3db8fcecbbafbf7e7c78f1d7efeb1ffffaa7172f9f3eb9ba5cbefff6f0fcd5831b5ec23967fd51ffca6fbf3f3c7bfedf377d91e69cf7f1d7cbe5fb0797f9e5f797f72e961fec6a79f3ecc9df3e7ba1f797bccc8cff2bd51fffd7e149fcafc7eb7f7f73f5e2bbe75f3db87cfee46fcbb5ef7cffede1b7af5e3e5e9f3cb87c79f5e4d593ab374f746adffcfedec5ef5e3e7efd74f9fad9e1f0e0f2f98be74f2e9757afaf5efcf7930797ffc24493ea7623feedd957af9f3eb8a4b6df393c7bfe647dfcf2c125de7bedf6fff7e2d9f3b7ef7ffbecf593abc3b36f9fbd7e7049f972f9eac1e5bd8b8bff496d240934c6da66ec1ca8d53423514f25702fa9d8f5c3562971e839f53098024b4e822b9199c643bd6a75a612ec8b836710217c7bdebbb878c88553c1edc6a9e2bb6c97f88143cc89435e634e142951d04fd65bb1245e23a51eb9a7164b92586be25813c5c169e8233d12a516f5ff5cf020c522a9dfbbb8d03f732ca9c59c5aec8963d639e5d4d7ac132da904e23422e9a4f4e525d535871c721c3d75ff7895f52b55bfc291ea23e2ae447b3a93e8d06be49c585fa7cfd95b7aec69c6a62f0a19ffae4ae9d4624b823770121db37e869a26ee29f138b550f4bf071d3b4dffba4d44ffdcf5d3df1674c2ba2c2591fec9be1ab827b18fb6e2517c4fdfa66bcaab5243a92c51dfae33c0bcf19d8155183eda9186be8a31291dacbe4a473182a4b1e654424915eb37a20e9d729a4a76fb59c12b9b7ff2460c257adf2f9ee654fe0c56fcf1f2beee0be5e2c7577fba7afcd5b327cf5f63d3ffc7977ffab7cfff4a7fbd5cbef1dbfff9fcd9eb570f2ebf7bf5e4ea3f747ffdafe7fff9eac9e5f23d3db89429a9895c2e3fd083cb2a39b5dacae5f23d9ffe891f5cf69c6aa172f9fb7b1717bf7bf5fac5cb6579f1f5d7af9ebc7e709975ebfc7078f2e052efc7f5c5e1c5d56fffe573ea0f6bc320df7920491ef3e6a7f2c8f5b31b9fa21b1ff88cbf685ffcc16871ff3a31de121bdf5d1dfef55f36dafc06fb1a9bba041a1d9b9ad208d45a246a49b0a9c5ae8f9bbaee9bba1c37f59a95dd4bd48d2b2391f272e804ce3b44aa9466e8caff4df98138954734f426979cf8d13e085fd2972f0e3f7cf3e2b90ffb5ffef0c74ea55c2e2f5f3c7baeabd89ba8f490b934a92a1b724fb2d4ae7c53674fbcd43e12872a6369ac5ba99691ead2cad8af479e7e3db66ba154977b171723d7d443ad2df5a5cf9128d43ef57a8cd0724bbc74fd77689c535d7ae734432b92da72f141c36fa0928c5416154fa1144e75a9a2bb8570b7250a85ca5287ee84ac2f6fa2f7b24eaeebf04aae49963e702969e8c0bb4e8f5b4bb4d825eb4cbb8a4fa6aa93d63dc779a4b90c7d92b3a4b2cc1138531a0b652c49563a509e69069a4a5993607db125a3d1535d3863fff696445fcdd49575babe8565e8d77a496de1aa0ba1d7b4701bf8ced0eb5ef15365e101969839c9c243e9c1194f4e888bacb4e1a1220a9cb6f0245dac4636679e3d51682a6c17ee84eba9636e59af2be6c2e012a5e6a22a8a4313251265d1a5c3b313927576ac689aa1d6ae64645dfd5297a6e4aa042eaaa9059923b1bebf15d54bbd276535957375a6fa1e46e89f95cf59aef3f1084df0ab52f43aeb00949347a853c7c853c06a92faf5794063b6417abfe277664fdb1a756e200ef754436f9cfac24d257a1f25d5a55053119cf58152671a61704eb494a1ea58794254d486c13dcd45ca4ca4fa78912a50e57391a15c3fb8a5b12859200b74e349d1fb5413e900aa3263185997bc4edd897d369d2d29b9fbc0cc791b9872b9da05bd299bb7a65baf5749b4b4a933ec8595fd5507874e75e945d43e98398da5575299a02cb653ff28f9f63da8224fb7ce0cad97340fb1aa2ea4340e9cf186540fac6bdd0ea21f94cad3515239508dc574684b3dce5443e976a11a8f420e8d5458ea1cf7ab436f6a38ccc46f22cd43644923724be51065268e2dcd4727a3f9f1dd717ff6707ed11edab86b515ee342fa3ca9de95549e4612fd37d7d4637baab64c3bc4a202ad3d8d95f45f0c8191caaaef1e816a1a5174ab488b552da75e4c7147ddb80c5b43d7416a64e5a636cdae2a814ce3b34afb1194054a4f7c502b2a70a203bea41357f9cf9cc6a1c008a8a91d5ab7ab7aa8d574793d88287d929a7d072e6a9c49ea87d6d47ca1540f45ad0e4c905a2a5138f53791f8906145c83ad56aa846893860a2084cbca1d69e32995a7945a7d1a2c0b6503ad59ee6bbb46e7ff8bc7f518dd63c27e803aad14c2336d588983fc94c2d0c5d40bd948374d842f254482d3cb595cada7b12908af20ca3e0fb41bfaf8ba7dc3f92403b327e78ea42917d3fc953651f02c3347d693f28152434dc1cca067aafe8dcb2b2310fd8a5a93d526dc24166769e509bf0d1c9746e60b23fb6cff90f6c1317557041ca487d153556cd4a93585355ce51d394d68a498afe45774fd3bfa89d27abf285ee24e51ffd2495079c9ab21726a37f0b2a774999465f53549eeaafdb5c2516650f49758d2a9a945b6960044de75974282bb6206c509512532d793d87502a7a8428b34316ebe82567e85b7dddc9ec6ea203fee7741013ec92ca2a30be39546cd9118a32ad1e0b708ca87124561358cf033acab92a3b068e2aa71acce68989e9c8a4e43483f4aae3534b04d72d9cbcefe74646b01f549cafaa03d4245312e650c10d6dc5512cb1ae41d4f7e0c453d25c752f32560c6b596d852af6dfaae7a58089e8c6f6e38eb27fb53d8a93911e27aa4e7eac19363e36a8b1bc9ebc6ce84f0e87672f5f3d595e5f3d7efeeaeb1757df3eb8fcf6f1ebab67dfff6b4ec463519e9d3496fd436f4a4d35cb5846a9494aa1df5cbe3dfbf57b35c97b1a97cbfac383cb32492faf70f772b9fa019f3a00359d6f3586d839e5cc63e95992cc516e1e446992da368892f86e07d1d31cc5ecd95e3bbf6708256f74603ddbda105477db2070f50e1f756eb38e4dc489eed9ae7c14ab2d9f8a90ae4bdf54deb06e2e3000c5b9f1f84c12672c387f632bda2e54e1deedefd088d891ca416ab7eaaf06ce2627c63aa1246660bdad3bbf98ecb093abddcafb9951796be23e43a628b7d36aa2555f82932743ca90f3b1deebd10e93aad22ab481ee423bbceae932aac4aafa3b105838ef12045ec16070e0c4b91ffb60469c63ed67e034504182c3ea0ccdd527e11cdca31d73f5a45ed748f6749250ec341eaa523c43e2956813ab7a96d6a71ef26c81bb8a2c9e1557339c2cd5cfd8085c7194a1b1aa71112452379f05e368a7477c8874d61556f2135c225827b50fd49e523b081aa60635d887096fc29fa632432052598367d7ea16012437848b1a48b20e9fac1e9294bd42818722bbab420eee6c394415e9c36d9aa29c34d4a0e82a3eff8cf9fc7879efe2e2ed697f900f4ceed805564829d39aa89057abb729e734651de535d8905cb0a1365b6906eea60729f0486d9d60385ddad8942caad628a7baaa0a87e280882d38039aeebbc158b9b6e86aa106ae53175d42562d39c388259b229dbe27d80cb70e3d1e8a1de0121f8619a9f5d1fe433f7e900483cc8a26b4b6ffda3d1d38892c3da74679de2cc260cf7e9408738b9839d10adb0976287c62902aba99d706cf12991684b5c0f068a950e81015caef4aa8000b621abf43bb11dc52fa408f33a8d0834501c3bf2bf128520d3460a0817b0b2e093f0f438f60aa1fa03d39f5472763feb9556da14ad3d5c38c942174797bb65d4581724eb482f758d7146ec91a601f16350470b2527e13d8fdca753d1b29860b6963453267224cd4a47bb7d89e6e7086ce6096649295cdb690a087d6088710a920192b8c9f66f4afba8b0503512634f9a1d28fa71d305a6c50084a1c50c74e280433174ec30328cc6adbc23eee4a5736ff044ce50981aa4f408ce93d1c76533db841d60f3066ccce7e245542cb662aeb146c7554d1c841d9a2c6a9bf36201cf56755b4f32196a1a3c4407403412f1e224c42d8e513ebaa7bc797eb67247483d30167e615225a79ce5c9b6113d2b2ba8c0e9b8cd645d6adccab8be868225aa289e8eafa07323a988c8ebb8c8e2ea4e326a4a30969d5a32ea7e326a7e3514ec35bdd533b0c18bea4a7bad8931c7485479a8792f425ca4a8f4ea6f5cefc3f89a8aee07913d52ea9c32ea9c351529ba00e9ba08e47411d5d524793d4f128a9a38beab88beaf881a2ba9a376e4c089f8915c3efaaf15dd8fc066d85675db5ad0711b08b225570bb4ee1d1c90fddc070324be3133b4f25800a499ba19a20f8193d43c1972a7c88ddce34b0fb5453d83952cd311c17da8a63605122aa39d6cca0ab387041fae26cc415b6d108a586ac473bd58419fc22cadf7a402a6a01821795e445c9c6784b24ddc5c6b370fa9b2c87042f70f9c2098017ea8e257821f4740e55574aace27c1bca5a084195aa3fa007b081788aca41e5e982bd6fa456918425ac01dbbd92f977e4a09235bb5da9328ab15daa0a4018434a41610bc860157b80bc28aa52d6683e80a20489b6793ca0644e146c3d4214041ef34d2ee377328e5c6ab38a79323c5682af91ee4b446eb0954311634bc6299986bb9ab0626a466f3195d861663668a67d66165d9a6e89a9ecf4331e8c6509d95c007d972766a1739c300895732265b89758d92bd666ee88199b0a7bc92038c7fd8530f4a34c7d56854e85656e14af38c4ea8aeb54a3e4487a8a8820acaeddaa36baeaae6a4a78eaa8d46e81187cc8bde3c00f653470b88673fd6423dcb065da1795b62d23f05af1187031cde81ab75b540bcebf5457e85378323a2219b0f27425e000d063b7ae8d4af7083f2c4d0f33aa98d0430ee68fc3471de6a90169a7528e7028283950d1159c0fc56e22d028d8173a3e0a2763bdd1e95c3fab9fd53f1e9dce0ca7692d736151215095ce0b4b4d23d49a93de1f887e0cbb6a053efd0eaf7bd7ef16c1f5d0ef16d6e770ffdec505179563b50e7d047ed45a259585558e855a8b3ec22db9aa7c8f9ffced213786cb5ff4698fe7484e7d69b0736bd181347bb3706a4b1335722ac205ad4c7d5b2da92c4d256da8d59dd34d8fd01ee7d16bc65c6569100436277d5d0bb5cdc44bc34ef3fba4df10b8b22b8205157fd7c9e7f74c6bd303dbb44a472862e8fb4b535e6eb32e4594bbbbf9e6b9208e56970269d94957a540d57635e2179e3abd4e88afcc167aaebe1216379833c9c2b3223ea05f41b464e89a94dc4243c0a650c3a9a6a6b614d0baf5acf74bc635be236d8f3758c8a08d9aca4dbef66bfaeed7d3c2eeb07eaf223ea876a5035c877aced4c36f6c7a41309be8d1c9e06e0e3cbecd8816ced015e345d75c0982d0a3e84e6c5389560b488c604cc5d1afe796ca52595747f9484f00baaa8c27e1385139817889f266e8d497da085715f1c0866b4a6d5156ec58665c8786409432a54542e803f7d4754e5065a253290b2290a14d4eb49462315f7d6f4110482750970297b532ddbcc698f72e2edecf9b826113227bba55dbd4a9f16cd803a7619b9f09feb2ee8fd6556a2965058c5b1765c7e3753686d74d3f95d394f93f2c28d77044ac3c122dadb16a7a8f0a9e5c5b3c728e6580512b22c10381297db25c0b2f7770815e37133be47f7a5fc0f88f7ffcbcfde1445034c1ea668b556378ca70cbc826701021ab704411ddb8277fda02ff7883fb7f76e4e7d43adfc476cc6e611c1f29321c60e4091df0347a3e096d4e3fd86cf085f91d813080f3ef90f73c98cddd4cf815f23c180fb4d8335bb24b868980ffc23a235868fe9a68593d96e2939116334256dbc5fcda3eece1c39cab3dc3e631779f24d9c9d662201ccca46b9e6103171fc14a820711ffcd9eba93032c3cfdef2758ab8ab029b77faed5d9af55eb0db6889cae5580211d1807355f1578ef33bca6dbdacd6861d219b6542a318736d609546b27f96204cab66da994cad1a83e7e72a9a279b16bb4b5b5b38daf55f15f29c7d502ab0dbc89fd40e30f4cf8f3695baa785cab6abe10a48f350f09280f29cf114ea367b05475ea61a9cefccfa5fa5597cafd457cd7d9ad057ec6d1cded4596d596f73c50cbd02c27199ac53334cb498666fd800ccd7d793c42522c59d333347799f493199a6c39ac01a19d3d43933d4393dfcad064cfd0947733349b6768f60fccd0849b169fbca7ab22c23cf78b1bb26f1e7efe793e5a0abb9de08a475c82b7931dc1ae78ea89e219ae11c6cd8ac736c991ba6cdae744f7b0eb1e3e61c37715cfb4d8dca9da09bbda014ddf553c3a4cdb77bbee99a7ba67533c2e0dccabfe96e269c1b26e6fd8227fee8d6ff0595ca36b955da7ff93ae1f4cd72a3f43d7d6dbae7f7da36f6f3b358ac8a5fa29ad874bf5f193527d27ac8bf5b98b75b2f57a3f51fd89ea9fd7e439ed5ae15d79be53f51d91be9135be6528057a4b9e77c8f37e23515bbf294c7d4ad43acbae29ff49d40f226a9d3725069d12f557d760f72e2ede2e33f85535981bec3729b15f5783ddbbb878b453f3180bbf7afcd5b3c7871b2a0df8af16d1eea5a7d6a758505b724b34695c2e570f2ea5a632271f2b12fe725340bdf445974a262ffb076e4e4a75f4b2f0e0346b97dffc5c69c30757293c943ef83d550a37d71bd45a48de53d630f2e49b5f33c71f8b47bcef5f27e4fbab1478ab52e8390761c42b113cc602b23bfcf4c09a13af14b95a244704b97489a394242bd74001f71849802509feba6dd640cdc2b908c155fd99325379b4bff56732f27aae81e1f7cfa608c16d26baea6a5a49903da89f5d15db2a76c60d081d58fa0c83812d5083642a4826fd3f79811276644f25224d8103c9da548906825354efc01189b7b225a758ee21458498914b808371b4644cb6b8931296d8cf012c183147c4cdb2056cece4c0b10acc8a16518590b7dfd3f5a878ba2153802c6b4c3795253a53ec88a2af6c31654b8fd1c32d59bd485df5cbd411958c24dbe7bd8b8b877a0a9e817922fdc1897dbc7ab45ffdcc429561abdd53f5fc2e4b6043224ebec52c3d2e7827135d955f91f05b908d37b7cf37f926be3233fe4e58eb26beea1ec6d5a9985c6c10f4f2d314ae73aa002e9ccaca16e42d816a4431093e9eda6caca0ccbd344ad295dc2434361497e2165dc6c1912ccd35759daf92014c8e502d84fa083ac1cda2e86a35789450b78365a935b304c2c08b78c541d5680865d17c4d2de550229b8e0b08865ab2a34eca2c0e2c6a923536a8164b7554d3d57209df3dd85e23556b3a74290539855e7ba84b6b99ce88816e37a6b9d24ce0916527ca6e0e6d264bd9861ecdf556118b55535a4cc1daa4dd46c6817ff5c37db0f424da3e57b2fc1095254e187c1e72c8fb31c053ddb7a82e0e1196ace9fe3dd5ebdd6d1b4bdd44828bdf85dc31ab0703eb6f5982f3661a9ee636d48c7c9d5a61901c39c84e3492d808857c66ec938e9d3c525d2baca116105a27d702b09a8ae7aac769bb17c95c2e45b99941382dbadd635191b1a50f9415894158ad1ec93734ebf3d59faa6aee288b23a5aa0c4bcd2c5e37e0312d952f88de531ca9458461f2ba25ed547d0c59a47ad19046bb5ab688e5204e0804b68cfd15a5046aa5423fe8d8a0058ba5caaf88ed8f005eee961b4601d314cbcff7f423361980307641da2c923455b82131dfd20656378e0526a8399b24f1216fb906c5f4924a12fbcd692f1e2b922af41f1c3ce36b062be3d0c9588e020cf8026121a17b165c433225e40caa35500a4c4865a8f8249f2a92232d7f05f5299e7bc16b337bd3f2dd2c97a058e29eca126327b20c57af8229ab551b50e06a89139ecae2f93096ee5b603f4306e6807163f96deaa2bc8269aa41fbb0669450a01252af4b60140a9eb0f887c5c7c60835e76b512abfea057791758638591f308550b2b65dd3f11a8592fa7dbdf6e248ff27b37fad0751822e7d203c465612296f5f733d86d04a3e5ed7a6d7a8ad915a126dd782fb153c2162f17aff67c64fa1e44d32a3f40b994a39275eba28d79789b85ba9ca68134335ebceaeb3d2b50cd4ec75e4110e14a5f576bc6ed063282dbb7771d15ac5e3082e361b0642fe56cba92cb3a83cd7998ee3f53b81c39be37d22c2c2c72594822c71e24590f55949872d1637a49a44af916bc7b83b425519b08825632018a94fcefd3bf04ceb46d1c96cff2ca9ec5fe30f1e9a9a34faacfeecc0754de43582953a0687b40ccea9e19a4265c6f79be5a6a3a6b0fbf77d48482fa1869fd2ad55493e30922d48c7aa9cf1828a97e9af28252aa832432d4613bd325a5a2570c1df319422692c621922c533449c3a459cb81d8f545cb3fe14ae74ae0df3c6b7d9be514181899f2c3b352a663df17bdb0215fcca4625bc1606890ae145d802c9a47362e4b2948291aa98d291caf6b8ce7efbd9d2f09d8661dab5cdb86121505785598a64a403a18a57ffd16d5e765b5f88af0b8829f8c98919946bebf9a14b555046cba08b71a15c634f2928e2a689253c5dd89b38e7946d9c8bd899f33dc17e4f1e3fe51d5b1cc1ab09cb872179201f5765db514692be0d93e7c6313c4063702eea8f311c23797686a3fd27b187b81e69a816c136e4f5d9d57a78f2f60644ed9312c47c0bb530dc0a25b13d75f5647dbde03b7cb9e00bedf238eb4ebd5d2e1e391997cbd327cfbe798af8c70df6fcf64acb84aba10a3ff5e2d7edbca4f64cdefdb1279fabf9596036ab6de8ee2e31e310f6623ff96c7eaaddad4471df103db437abe9e163d83e7f7c7bc2dd26ac437e6b063ee1729cb0bce7e19a6ff3b0935ada473c5ce563863d3ee2e1f631c36eb7a2b63fdc6f456d1f76ff18828d8f1af6ada8ed0f8f5b51db873d3f8660f363863d6f456d7bb8e58fd8922d7f04c11a7dccb0e9238441a38fd8928d3f8660e56386cd1f210c5af905d47e27ce8f737c538b84695865a79518593400de8158de5b5682c8c7d4c362af3880c259e4304e285b573df5530f0fb8155b5e2dbec3eed380c3e2ad675fbc7cbc3e7bfdc3834bbd6d5e9c593c1d71ac5b6c125568a1a04ed5ab483d9062c1154e03e594e6abb0ac72c111dfa6dddcf9a1bf30f509af0998f876572bc4ca3767e856c180a7a29533557c130e2bc645858f9791ae8f842a87ce7202b3875bca0a002df8e39a8786dc19623f5ef012d40f468be09a726f1eb34185b847769ba172052073ad79cba10768842060531eb6a9c441aa31723567681d6eeb2349dff5e77e506e48b9ebdc1064ccb1f09b2a16fa42a15fb47a3f54c779a4adc46265129ce84ba16325b8bef1934ce17b7a70d947aa866f258d0cdaca6fb11a11f53c464983b76116553b3acced1e230bf63c32855a1d762e49f52745c39691e1314fb8513dc3329c246478c4b76ff782d56452dc9231aa0790e1b83d642b03ddd2362da4bce5436c09195b4019b167b7dc11e68e0873fb53e22e59099e92114cea59e6a45bef1e9e6e70cd8e4d3a995430d39f3ccb1359161eb0453c225a8cb7444fc8409a88951fe2bfc7b19987b25e2b89bd41d676f8451a006f548076a72b3cf851875bf79c00cf5b85973f6f7e69681389b4c5a5375c398bf6185819aa14b628790b0e74b2ff8afdaa67b180d8f0df013963eea4adbe2015de6e0ec763914532688f3e1e535dd98f466535f28be3030c1fb3de2feeeaa7688a6300d7c333139cb696db83300106886a2dfcf727a95b274a6026997bb782e308e118b270cceadab1c68d04804cd86641ae3465539e2733ac4eb96adc6d3439090121e0b87a30c1ffbde50c1182fa793f3a921f344b38fef6ceb247c6a42d07c3a321b491c9c2255bd064bac6c271d455a967403bf52d7b64383a84f87df1dc941a8f01b9874a43e48002896ebbb6ff3a6d7ffc6999d1e0caa933f1c143167cc2e4cd55fa3861737656e9276cde9c65aea76c1b3b1567731477faefd49db1f73d79fc3790968cd53d9089cf768dd9c7c6f46fc991beb1fd293318bb070bf3bccdeed5b7e3588f49a99bbc18b1bccdec5ecfec392c668594edf38810794d61a8b619e2baa6b2abc4a1e77868447e8f1c2abb99eb59137bcc53f581ac967e860043377c13440d2682052d8d5003a11c5680b2b55afe0c0255d103b3b1986c773016f2a273849450728f0014024878580d322b156e660a1603392d0815954812694b3cead898e201b67a2d96fbb3b3449d5a6035d4578b095bccb4a2e095535bb71f1e006a21035269ab6ffb025955ac8ed2726cd6e28ce7a62de23e865304e9a34304338fe031cf6196af8130b0c5e5d82c5d64434741d8ba02a7a8acbb755b215e4bd4a1752f79c53e89cdb813da915644042165d9c36908ceab3488823fe09c62c5ad5d976035394c41409369203886f5d40632badb447555d12701de7042caf748839b97a00bea9d2bc25cc5923b62b71097efb415822a14577628904d7db5f02b329e8201bb2add0cba4ed7ca8f25c52cf3dd1810a46c6fd85c92eabac5cf05a803d3b49ca34491e1c61a400e2020c009168084f02a961e263558a89a8ae7a317147ba30018cfad11201091bba52e4412032bb18497b6010b89e14d30b8863675c226b43a629c5be091c4bd910c6d1dc480ff44f726f605c996ff0641bf5657cb645f2cc04a81295310bb230b2b237fcd227f641b93900562c1dbb187e5c54bc1c5f58fe530d1c35eb13056ee270824d61e4e96fa97b1086a57591af497a7f1fada12407595c563d73dd800eb34232298dd76d1f032766c2b2be8b7d147ab399f911dd4c450a32c47171926c5405518675272e8b18a743dc490c11a6db5a0710f16096d61c62d59062ad2d45ce847cad9e112722b9871d6a001d9f54875f56d8fd4552c75c3e04e106b4501602a0f3b23942abaf77b81252ba267ff23d17e11b19be5c4b08b0120b08d606926dd4fff96f260d9082530a0a8c8ad6ed9c4a8a53a98e93282e1534f24c014307931680f334caaa76fc14c729f03721e0305377775f9105d66a4792a19a609b011871f0c802c52b6640731c9ad6b13c84a400c2c5a0f1b961e0be1ee542760e018d529d2bae5ec54186a0dcab979ce890954cbe6a951764b004695b29319b130ca2defc67d0d03b3cfe6d311cfb0edf8ae0abf6a9901c80e30540b53786be4702c5cb38236da2aef8d73233240516a2fa64e2d47d8b2e8807112b29925ae3625f8c47f097f948ab27fdd142e6500e3a2ec482a3ecb8ae81372216670109fba56cf10a66630dd8190a3412e465aa8b6e5b09f238aced5d23bcd6cedd8d11ca6eed16699bd6c0e18834082355fede069ba2c3b6acf495a9b95fe109945d16c15574ffba890600c241aa59c1ca96bfc69291b3a77c79768c09a01e761b31bba844a158c07c972dda5256f1920dc2c838242a98e610588126c2b1ed841c584790654a31f7d375f1cf084f09768893102a9667076d34090a6ed11867466202de9e4d6b6953aa4061044b687b77c2d8928a28a767631a445f0a831638bae11d873562be0408094d2772bc4322da160b7446dd722782147cb4dd13366736c7b689f0adc0d03026a2b2ae3abe14f217f2bb29da1c666736fc7cfed735cc754fb7959570780273cff49e2564ee6ca4005d31ac9b724769c4145c2be9f5e19e65526e6ec3079c72eef0cb30f7688e7f58923520a3c232e01d90d1f896650f21a69ab1e81cc401dca06eb2791bcb8c49c2f1b4cd2d8ab5eec3ef291762ba9b8be81de59f5a02a38ab00ed723d06299ba31512f491493a1841f8bb183a260cc1860c15604cb4069b8a517e7f24ea2d3d9d77eddbe2897492464853252f06da2ca07a5b70a7bb1fa65ad3b50386c5cf999674b969c3726b9fe69d8d554f993c879f325bb353a6dd618b829e05316bb735379f876915007fb86135cf8598a0218859a711d3eeb0c5a3cf83980d293e9d37d16bc52b65af8b399b3d54e187685312add610449019ce663bab603b13877b25835439f135d613f712fe7f262385cba74d2bbf6dee5fb781f2f90cb354023e4a36a768738886091f49b1a8e4b98cb463a4303c77605f83888c94771efde4b2a94836d9d4a60bfa22ec81abd9ce0312b16471dc1e2b8850731b18cf4089ed916fa990ee1cba11f85236ceed3c86d306a1b4a62363fe3cf853c6087554c39fb5e24ea0c2b2b97f917bde572a8e8a4f1dec6b4eab787bb0cc3bdf6632520db51ba6bc01881a9a2a908b01ab7a1e23ad79a2594c5b6345798c75e43297f730a4ef6ad8e3704bc13d4ee6e53d1313a1d4e253c0f8dddb85536e77cf4bb7a2019a96e731d05de97ca4b2107cc203b1392f2bea51cd07547bb8b3c3dc606225b87005ae7db3d33b8ed42db0956e9dc9cac8a87009b6b5794f39da40eeb173adc078c3592927500ad5a0a4c384eb03809400d11de731b182b208a6e926fe0080e606c5d7ad1d0bced806421aa695fca0a0d4dabe9cc7442413da5a11f06103e5c0c38a5e457054e1550ca574070297c06878733e9ba704d601aed5db0d585719ec28fd3893610e00abf66a81816e38b6c1ea027b7097b449d8e6413684a3cf64f802dd55ab753ce8ee3eaea1e0bf67c30d65e4405d5071392ccce4d9141641ad5ee68a6a0f2febc5bfce63f86a3208a257b26e5c6c6e750ee6a0bca5ed7bf703059e7cb54a634378630418f87c4443ed56512830c3c8e30edd50c2e1473e13e150e17037416ce7dcadc4b78433b2b4ea003d293b35eb09e6dff889b4e0bff3301925995ccd9b8976598816aad5dac399685e1e680ea707058f2c0f3bee2095e75c283911f5accd738ab6e4cae2b18733d93e6ced39ad97c006c8615d72d97bf09cc9488ba573f03c71b41707fa3b12f4d37b5f98cdfbc23cdcfbc2deb657ef9cc718c9bdd75cbcbd70a1ee632c3f55dd50ad599c4cef368dd424f893cfc5086833719026c9fb699982453282f7b53a132ba0a1fbabd49e8a9db2c7067f01ac002be53c17b5a0eb2e0186ec6a9156a40a20b14310517e176af113a959b1324d649a0dc311410b040beb9f892cab1dbd13304c4b891deef81e1e7b3e177aa297010b599e2f1c0b563f546e8444f94483b4766266026ea905b215f69ecf49b01658fed2d056c9b29aab53b3eb71e53c8659d81a78795fd1ee0950d54edcba93ce659cc69c96e56760421b969fc4b361cf82c41fb5a98be7916fdd1c2d13fa6cd853182825c2a9ae561f52bd118632e799a408189441114ad3f35cd8f25c8261c5b5f330b1ac20556dade24138299e20a077ce8294dc9be70201a1d98a42d146a8c0f03f139b8e07524fc5f2388b953219b696f5fd3e1779c403febc821295bd90a4fad9f44ca2c3dc37dbbf796123f7cdf66f7226631cf9ed310e3ab731f6b18d716e63ccdb18cfc57a33a7531335dbadc66903b43b1f4959fb7442f6eca954fb627b5edaa71fe3d8177b6c639cdb629f8957ac6571c8a9b26e5949e4e988c0873b97610e87706a3ecc7a8aa21ece269f42e969c05da79041732b0f3c9f14aa86b499daac4ef1b8f0c5eb20cfc431d6b86cf9a76c7ba8713db394c956ac5d5f8571c97bab77b811c2993026a3ab327a0a9e380fac6d7c897c1eabcd65cf36aeae1e256fab7d2ef69a20c1a85507677564f6b2378738939dc365beb57358e8cc764e6146cf3b83199fc1fadc3a887da019e84c768f77926c76e8a9ae20556272a0f358efb2ed9db6ed9db2ad773b97bd23841e8743c93880a0c0e4f03b3cc299d81a95045d430b6a3107d61a30c7bade259e89bb0dc899d62e72dd6036d80120249ec9fe06ae282a860c34deaa3336bcf2e3c6b90619f9ab363afb3918cabf67c3b51d1ff4d86dad58b9b8d552d20d60f59f6050d10635a30fea97ca923b19145a2ed3d87aaaf0eeaa27ef91c8b06b643f15b06774006cdbbd3e8c8c0442f700de30628095e2adcc67f01613860bef85acb1591dde49dd6f75e81aab09ae0efd72f47a5b9f976a45ecd1c7147d4c8655660d7a82a769a254fa972abb3ba1ac4335ef50a6a8cc169423ce4fd186504abf369e20c1fb127caaf138c2f4de973092437e58eaf32759b57e6d44c147144f47f48b2c923b715e5372f7753dbaaf737297472bf336a6f19d0c6c1e075653df863693bc3db44fae31a54f43ad460ebad9c23d0db472e0a9e735ebfa015c9d1e0093c364187e825afa950db8c3212bc0a7c31056cec498e60ecca05150a26e260b0d203d601e2d967558ae801570c0c35303104ac49070806a12d10f4225bba5af8b7d59bc7adece102648a878d57311c77204d636b573f1c7f0a870c4e91c7b6a685c81d311da5e9466384c30a7546d6d39fa8131db33890d9509379d65faa462c84ad626a37afb8dd5baf264acef006044303c847a3e7b1098e682be3bd635039c350dad021050a897aa08794d6bbd32ad668a93ac15e042649e496b948b6d7c26f363a9413a5b7f1e548758b5116afc0d95aa58ce79031a1059b4b4443a9f446361ef2a50572207712b193d5328941cf996c7b4bb465eb56dcdb9be01c448368812ee91d190c83e0fb122869ee810d9a17fca9f89fb2132e4b7a08601686368c883cd72bc7a95038a1decc320222cd659f52933621956d48664198afb7c3d1b1f254e06f763fe74b1f632f0610af2a23aba1f422ad78af4780a83cd2c3ea2788a7749aeb7757cdef90a14ccaacb9b421b90a9b5130a15a07b86f903542dfbf8b2ccdba75cfe5a88b234fa3b88b2a59c0997df01bef0cb17871f3e19adb7761af72e2e2823a121d3e257bd2d13a86683d35c28034f043d312ece8349fe41c091e139b061663f1d6cf7d41ae7db6374dce938598d170fdbd21e8498fb9693db874afecf049b268bdc8e4407116b06d7dec4d1121f8a1a466fe254e910bb956e4e0376dbaf0e6c8d3ee50020c7a72ca91c28a3472819ae2e7963c4fde24d19c0a73a10f059dfb4d40faab8ca9bc8edc0b17e29949ff6240742ca523f14b54fdfcc432ca1bf613a48e86f0aebdb91d498d3fc73ab1f27acee8cb027c2aa3564d6e79e68697d0621ef0916a4eefd783e3907209fa48c96da215b3dbe41fd4eaf139c9645864e75584fc322d48f37b7f219fc1ae1954eb4ed360fa7d91d955df54cf65ae71284da1b16afb468def00f107b1bc470f14e9a05487ce54b9972768cdda58532c7a29fd6baaf0b8aa48be0baebb55aa1274af86cc6de5109555b92a5f71ea4b17d8ef21126c3dd32f3064425c3b3a7fa064475ca0d9f768cb5fb18ab971bd99db31aa3f04647cff0ea1b688ecc33c9946b3d6fd6a19f20ecce598d71ba7015d9b27c269dd918770520a3bcad00ce658cad79b6944c5febdecb36c63351520d27ed5a86376f46adcdb0061dfe797687c25a4b12a05dcad2d07db535514b8b3b7aff64bfea797ea442fa3546cf1dd8fc32132d5c9167d36baa4bc93d35243adcda56bc73674db5d6493555745acea102551ba8c1db95da3772883c1162fd38e3e5d7a077c925f4aa868a08fa3ce3ba010bfe3c39a4cc9a4ae8d4535f8a489aa17349732979831aa7331c75958291ce3416c1a1a197bc94397527524b63399dd799786b303c13d218a3a76acd9c5c99f473f1d880a43ed2e266a2de9377c7791b8eb833d0bd53d35ba572683274bf09a51e5a563ea81d59d9b35de3e34f366203d6edc90d8ac692dcec21ae69435dace3b661bdbb96ca3d238851c41b44b177e411ef745357832591501df4a5eb09dec1cc9bf592d960d0258d55104740bf189cfe11e2f07654dd609aa67e5faceb3d9c027543d91ec0f4afabe5f3a089087e3902046c1e0129cc71c480db44fb243298ff12591cb71cdda0f30a40460332b756022d7680cb3bc8395afd00b45c9f6e28bf24c3e923f45e61c03b02cccf7a41a866a5bddfd00020bbe5c05147d03a926c9f40d8ee1d803468e57824f7e9f5a393eb33e92bd83a107e3aa5be16efd281eefcb6d8e8eab01aa27e31c453fcb1a3210d79d3062b7a23e0ee187e4c067b34f00c72022cc8e4ada32c892b4c5be5553656dc1a7390752699ab35a19c480b10f4f969684755d1838b3278879056707b64a2bb266919c86a6bddb028fadeb21adbe0fd9cfa8bd9d428facb3875ed16486ca1603bceedf34dfe2582c15a767cac6c583b7a250dec7aab67403b935f9c35f96bad240acda9e67fa8cde13843c83ff12c1a245b9ec7e1b1cea9c42a9ccaea08a925508d53478a8fa7d9dbba1d7bf301bfdc6bfd4bd85abd58f266719a12686af8e6bc35b3f1cccc60189f0350a0cd1b29f6d4228341aba3117bf00132050143246a9550f65663fa34798f9824d1760b3ac578c3926aa89c962d4ad6aa4ed6d8ac4991a741aa0868d74a837fe9aa502ad2da5deb828cc98a35f16a601e03bc6e4e53f2c223eb8d4181adc1dfde2b51f6f67f74eccd6929b5d646c65b57146fe4c9d6bac256ca9a3756f76d23e5c6bfde1d776458b7ad95bdb79f60cd66b014b44f90598abcf820c57b89595e1a3081adf1337c23eb7e635a267144e69bf79313743f1c7b53c86cbd2fb79691d5da9978d7c7e648b786796179f8e3d81e7906efbdb27dae8695096bcbb9179f871cb2372b645fbae26d2eebb684de9595d7ad83a2153f5a3729ef9cd23d811b80165e9cdf1d216a2f39be3d604c4e77b95a607151a5243cf62aa0d32a54ef6be9ad3e9b3711457f9fbd5da8352429616f0abaf5a6f5566779af6f3d5663b6635bd0719d36f1f875714d61ddd268df41c506e66dba3f4191436faa516a9d6f623b9614985960bdad8ead84b70c7ad9eeed9d3fb18bfd8e37850b68261c9bf7f6dcf2ec0d1069eb232c9bb8d93a78e2ab16790cd3be76d2c1d6fbe93a4672f14e9d0329df0cbdb20d7bf830e72ed31c376c2b493e6645f1d66dc7811bdbd60382b11f0dca736f5b0a6583ffde5abce7d42bddf919b04e6fec3a5677d67a462ded22bb6e26cb890928de29feedbe425bd7540a5b6110a2be9f804191bbd4b8fd9341ffc11914ad4bb8fdefc6a0adab21589b9c32e88ec9c14756f446cefd846167dcdaaff3de7119b6259813ac72e44f7613a26dfce9a6c58617ff7efef4b6bdd5fb1cf6ad597a89c716c8e5c8a2d85f636b078d63eed6ebdaa01737fe8c4706b54e679eb7e03ddd6d69c917f8ccf9b3751cb100abe24470068d1b83fa6291534ce2c6a1de3b8ebca1e406595eb63671e4d623baaa7f0a1eadb35897f07ff2e83f328fd659bdf1fbdf8747b7d8c1372f9e7ff2ac9d6ca5ca7569a3ee57f0a84c5ada440fde99d35c3ac393d34b9233cc3e6ac3e6d196366768232f9d2642be92c6b9e41fb5e9d8146dcb3f6a1e0ed1cb31d299e4dfb74c69475590b437edcb5b9a6de77a2e9d45a820cb6ff48349b969e0ab5b535674b96d9602086156ed70b9ddb31ebbde71babaa0226f138a46f887ec8dfc77118b9a6986efb2b85bac1cadc8fd349f03a32131ea471c107643dc44f771f34d58958a8b1b6b4047915cba0fb7d7c6e6ed64c827eb90c230cdc44fdfc55b715b7b6eca26bd2558f7e6638f611f9e798e697321d306a2fbe47078f6f2d593e5f5d5e3e7afbe7e71f5ed83cb6f1fbfbe7af6fdbfe6443c16d50493c6b27fe066974475d6a5674a3c6bfd8d410e9446a91be44099ac3c75f5fd834b92542e97ab1ffceaf6af959a2a2fa3d424329abf5366d717d93be9a7de09d6b5ba62eb4443d60f1840b891d8030a540d0e7bf526c94004888c8ef0de58b9c15f54a2d729c69e642dae359b1f80a6a10fd9329a73a87ae35a6baf34d0329ddc274bde4ca0a4f950d0e6cbc03c45e092950ce8e67ddc3fee92e3d694cc328c96a5d06f2e6fded319ff7b47f8a4c6e56eb12a6e5c4499b684323f6eb6b173ca99c7d2b32499a37ceae99626a96dd32d896f9ceeff495bf3a7dfd9e74d2fd5bb35e5c1bcc05f33fbd8e64a757b2f8f7daed0bcfada9ee8e3f8a9a7398a20dda2d7ceefe3a65f39bd02332df98699f24e6196139484f7abeebf07dfef9dc1ac4b425e058e1b2fe06f56eb59d340dc1a870d3b5520720d1dee3045354c6f6143a8c244477d159fe86e6051c01a869dcf2c9e652075441657153d154d38fa4b446b018423071427e99f6af036fbfaa33322a58d537b58e60852f5f7246788e61ef609fd7866842e8805551c71a057a2d16ea8c5038468af8df012758bb80a7aeaa16f480466664455e37e0eb2941294539fd97c49d5a934b68c826dc6c571ba39f49f9f7247f8b8e013483b30d7aada06e69ca473db4dffbb58329fbc992d370a629d7e8ac18e08e804c01156d275a40db4881e9f48c69066ed63676c331554e8abac18865252079a94c45e6e7b76baf3c6c205ee27e6d5c00e58c76b678b1a0b4e256b6c26062321ae0a680b30151a0c024c240dab6214e59640d39b683b52c40cac278c198a87ac951b7a18697a1b4bf17695e741131e2d545d48ec86500a02c1123a08647a28275a5ba0623804141865e0c3b018dacaa67c4690b6617ef46cfa66acd3fba0b3f7069916073993c9d7a9c7605d0d5df8a9fb16f950debd19701e629461eb71db213523418ff2ea6db006ba20a814180005a9ab959cce882c34601000234459a27a16092047a0989b45e0d7e1476d36b8b1a2f4457fd673e9cc4d288468a2ec3290e884aec5608e16c1f88cc852b56433ec37efce4cca326d9d6ec43070473cb3cc90224784a9a2bb11df2f40ae1db7ed7773f75b053de7eb5ca12eb29a4c338c58b275269fdefadd1acee83dd54885ad77ed2db11aef1e274300a932d240ca2d6f96e6b0a143b4b7d540627a30c4100b26b67399c3696d51f449c46d12f13889e8b388368b787d163f75f4c16127fa296bffb0bb85529b8d97ce89a5743f73a90cad1f7fe63abe783b6c9dbc7690c8d2736a94e7273c74d5526e98ea0d87ae4fbe63a543c490dab2bd6f51f83cc32861587ae93c97b1963130d6023bc3071b6db0f1dc062b452d611e23c93a1d698d2d760600bb6a59afd9daecaaf89b2ad7550f009a6d35a82d32a02dea11757534d1546a4011d728d38136abea45fd23027162901100138825072a517ff2a1d8cd81ee6930eb747c144ec67a1ec4f39664aadb570377c271a1a075910e5e4f6c75acc088f28e466a910163c7e836cec5a4862c5093daa0d260536f1dcd6b804d5d5637a9813905933a1c4d6ab7a8ed242501a041d37253cca48e629cb519d4d12dea0840b6ae921f09edb74c1fbc738274ddc666516f0675dc0cea78625047b3a8e36e51c7a3451d37933aee26753c9ad4d16d6a808ca1f4852bcea172efe296059e774d85960568aa03ab0fbb3ab85d1d8e76b59bd56137abc36656bb551dddaa8e9b551dddac0e6656c753b33aba5d1d37bb3aee767574c33a6e86753c33c3ba629dcdb076bb3aec767538dad5665687cdac8e47b33aba5d1dcdae8e47bb3aba611d77c33a9e99615d07a9599d18c09740679bc110fe0009ba6e6675c4c993e0bf81cba5de7601efda11c51315164de5a0ad0cf09675f8aa0d1b7ca67c885dd7a4af641d943994cdd01634036b2a4445edd5e635202a2981604706510de78a15c4946a59f17af4aa2624ac5f33d2cacb3aad72429455e0e865bc25523b44ecb7beda4117720a421a65d9ca2bc22b0dab461886488b534e29b14a6a883d07642b17b87ff45fd6d56120d6ac32aba77630f8c1b6a279a92a0965bdaa4a8d62c5554f7230ec42320f1e63afa2a52ccecf4a3e396220a7160bdc29a467f0ae0683d94a4569826aa86e30b896fae390df38e44cab11840c2dde68d1009ec51c5e9e5884d0b6d51aea0a7483dcedaa86b19d1859fb34941d07a01cd502196bb4a2268edd9a096f7e5352a525488c19c0aee408da6e1521c0c935842b31d83c8c5e2c433c4eb811947322e5357283579363c5e91bf487233383e0c8c65a235be05e6d28207d82dcd1c95d55bb9a3185f6c2142547c2be026175ed504061852fdd0c38e070714df521771da54883f4a9aa902b62edc75df021d180f7644ca431a8dff1fea4a66295465fdb8c1d1aa8b548d4b03d8aae8e5e3f6c9550be9f6a186c7d4e0bae44661a0ff5aaa9a40af6c5c1135edcae57f72e2e1e72613c300312e2fdbb68fda73f701ec2aae6a17c5d01551a8e1553239ac16e1d6f507a404813e99055aa802b36510bd82e64358c96865256490d6125ec1caa5bbd2e37d7cfd90cf719bb4a811237795094d5bdf0a5ab5103390fcba8fa53aada99f5191d4c419f0e4ae56089bef045a9d4817d1587c1cfb1d7f5ba1550f53146e950c1f449f79801fac275a546054ca9aa2ac7ecb21c81cb4c3a3666734995359b5304855bddac320adb340575619b3dc38e871c40a1680df43bf25d2a720e210a2c49d18b29a3e52f4ae203321aa1fd1a248ad80f4e7bf13067a2a0b08fd8e0bf3a5427421e1cd9e48e037516544a75f7ea36f8e05057a72303bd903c09d1e44577ae90a18d5402b24b52b68a6db6cebfcd4c0db8eecc110390b711dd64357432fc5eb776732a46200c5d375514fa4928f8b3174eead1ce4a62b0fc367beb2baed354bbe661cde8918cddadd72570635cef2cfe1182280f99777d726e40d7550e6bae82dc7d0c4f166dddbdcf66c065aa08d301fb787777f7b5f17e7a23b20346bdf7adb80c7e02353b86d51e9fc730b9d13fc2302bcabf7b56a31c6609b0f619e272335755229e891ba214b5546cb8711f6fdcc71baf8df777f7bff9fdbd7308602349a10669c3dcc3e7312680a14a173b5bfdeefeab37dffcfedeff1f0000ffff5fe69651a1010100",
 		"617109ec9b8616e0de6f52cadc0ad126": "1f8b08000000000000ff5490cf4ec3300c87ef3cc54f968640a2aae04ad20b4fe22d5e172d69a6381b428877476bba35bbe49f3ffbb3639cbf601758d5524edf343c01eddb2e852ebaeefd638e006663b14f192fc7374451e551f4157ec23eb01ef08b4de51a32ea381337bc851e651c2417cc6b774d3f623310720ab2c468cdab82a8635b0c30db73296942f93989a57aa1fb3021a9101c17ee9cd7e8ef520267cf5de0ad044b5f33d796058c9e78aad4c13b2793a592cf42c373f151f4d3f457e0a195beea9b597be72febffe0efd6fb7a5e9065fb0f0000ffff829b6c549e010000",
 		"63b59db05ede78b10cb5f7da70d5553a": "1f8b08000000000000ffacce410a02310c40d17d4f11ba3707f00e82201ea034510aa529498a8c43efeec6c185ab8139c0ffbc13143a435c5794ee861721ae782bed396ad2f266bc3762b52cca7362564ece84367266b318005c53b39abc48fbfb5c553aeb9cf04a06dfe6316a5d601bc5b00f303a1d03d8467b01c4e62acb1184df2a864f000000ffff4c95c89e87010000",
 		"6636bf271e9c01d1d5f067708b9de426": "1f8b08000000000000ff8cd0c16af3300cc0f17b9e42080229a429bd86341f1f85ddd6055a765763b53673eca0382dc5f8dd470adbd86d275dfe483fd4287383ded234ed70a42baf359362c1360368f4b63df01d62acfc18a6ead52bb655277e6449a9d9e86d9b351b656e6d9635f90e2e5e86172fc5effe9d644f131f8dbb5a4ea984487d30ded5df7b0f34f057d6d959c8a6d451d0c5aa848183f6aa06ecde8e274c2b88903f6df90e469260c816186375f1562daacd82a874182cae7e4a6bdcc7c9177f39189fcfa801cfc1c139b8f59dc41977c5125051a075efddc5c88035e07f6178f819a659f81f9670f6ea5103eec9f56c176cde664d0e69999f010000ffff061f56f169010000",
-		"69effaf8141ec967d8eaec8fe3a77d60": "1f8b08000000000000ff8c564f73dbb80ebffb53e0693263294f9666de511dbf1eb299ceeeb44977b7dd1e6c4f424b904d4726558252e2dafeee3b14a93f8e9dedfa60da24f00308803f209582347cc365c9d2279882c2ef1557e87bcf76cb0bde8daccc87422e8702ab422efbd31b59ee1ccae7a25a7131144d65b99b38c049d91cf79a9fb8e03744b72f5ab1549f2b6fb9e09394688256e21c80099e235d506d4d6e9dc499ea4d814cdc2f4916a8f1665d89271ae88f5bfdd4884da4939ba48de0b843f9ba2a78befb8dce1da89a930dbd79f98fbcc63fb0902c3b53eeac17bc46d5c8387563d9e9a752e47c5529a6a58229ec470028b4e24809e495483597c20fcc3640cd547be844cd879565c15366041398b94d8071140b99e1c356665581146fbe57a876936a4331a934568c17146d681c0e3518116a8a53a278001b514abde0c2fe388e9ac51455443b91fa5ea77e1d5f47d75e10e552ddb274edfbc6e95d00d3ff774ef31cec2e4ca7d39f590e3a350085ba52c2fd753e0014a8e10977306de2b38b1496054bd18ffd793477d8f3d827951e367448890e2b19cce3e0308f7c4d668f662c5dd8fd7815c2781c749efa4fb88b4833a5e91bd76bdf7bf002381cc08fcf75af621e441a4977779e42ce0ac29fdf81e77e9bddd913ee164655544531d43c3d87596364f113e0a1525456b476bed934dac56ab6a223806368d46db992dffa602ad0ed19f3ce80c0e74b0fd10fc28180e396e8b39235cfd0be167f7f9580674bd30b37bf9bb5df389e005ca2197f9ff30205db6202deccac8b68964aa151e835a3f5224a895ee19c119d3fdbe74a6e13e82ad80bb54cc0f38e8b10f686fbbe8aadcc78ce314b40ab0a43be1252610233cf54ecf5b51782b7697f98f7757ded2de07831021f25cb50dd97a6c0a9bd8721c92dff810e3fc365b54a6ce9bc0ac30959da00dcd900b42c196d480acf6576f16e34ccb0cb5e97614b0fce9921e5b88c3bb5b60495e19221cdf4b50960ea3e81781eb90771158783d38a70a8683e97521a154d78c213c13dd8dd044cbc27f68f17826cfdde93ac548a9f586903783cbe0940ec5f220c00fa2736c0ddf717d6f4f2fe2a0eed1d3d3dc0c797b4a8324ce0948d2fc36c2c4ce7ea922db1e8b0de807ac325ff59e6f9c17cfdefa0757ea07a15f8f3f7f5749efd771eb55f81b167bdae5467ea32224afd8f00a6125b844b4eb9be18292459d4e8b7cf3c70faf8524a6a11de5b32f8cfe9e6d51baead641ffd952cd7a8365d0eda3c2e5cdb6a2b7f59f122bb69daef79ab8d63b8bbff729bc0af39ec64054c21ac59cdc50a38518504cf5caf41af3981901a96688e083578a59225aa62e785b0654fd8c251a5d04029f870ff707bf717706ae45b7160048fcb2acf5921ad6f8f206b548a67487077ffcbadd16ad11aebcf6ba6b1c6d7885a8254e065586321cb2d0aed458d9e9d3850d430356653248a50d4510b6e9ada899aa30ec3fa764e198c1d5b694a11451d0edacc2e39196822d74ffa4e202b5d563a814bbc6d097b435e0825d3eb041eaff60f0f1957e6fc1897d5b2e0a963e8c7ae0e1ca1bd32dc35aeb077b72af095d409f9f5b2ae409361e37dd128c832c56c1c691a87306ec6a7669162bce8da2ef4cdd7f6f4ba19724e220b418b6d1d6a1db6fdd9f0fcebc1d2dfb3b24491fd992a5eea2f6ce5682a083aaf1ba6b67843276cda9b4996a319320dfce9c8ebb7ded879b76b077d0096c82acdf39deb49fd2bdc32b13281dd3f21960fb9c91539d77aa12eeda9dc9afb53dbda7a91546e4b85648c1e4f431974d730813284bde53f9af170588eae7faa0466ed5517c328bc0ecf71741c8d6c01448664943623cd49790c18c20f467f070000ffffcf23b5ab690d0000",
+		"69effaf8141ec967d8eaec8fe3a77d60": "1f8b08000000000000ff8c565d73e2b8127de757f475a50a3bd7d855f7d153dc79c8a6a6766b2699dd9dd979002a11761b448ce451cb4e18e0bf6fc9923f08646779c020f539dd6ab54f772a0569f886cb92a54f300585df2baed0f79eed9217bc1b599b0f855c0e0d56855cf6bb37b2dc3996cf45b5e262689aca7237718493b2d9ee919fb8e03744b72f5ab1549f83b75cf0494a34416b714ec004cf912e405b975b677106bd299089fb25c90235deac2bf14403fcb8c5a7c66c229ddd246d0cc71dcbd755c1f3dd6f741e40d5ec6ce8cdc37fe435fe818564d919b8f35ef01a5563e3e0c6b3c3a752e47c5529a6a58229ec470028b4e24809e495483597c20fcc3240cd54bbe94ccd879565c153660c1398b9458071140b99e1c356665581146fbe57a876936a4331a934568c17146d681c0e118c0835c529513ca08d28a5de70617f1c47cdc31455443b91fa5e07bf8eafa36b2f8872a96e59baf67d13f42e80e9ffbba0790e7615a6d3e9cf3c071d0c40a1ae94707f5d0c00056a78c21d4c9bfcec228565c152f4637f1ecd1df73cf649a5870d1d52a2c34a06f33838cc235f9359a3194b17763d5e85301e075da4fe13ee22d24c69fac6f5daf71ebc000e07f0e373ec55cc834823e9eecc53c85941f8f333f0dc6f6f77f684bb85818aaa2886c8d37d98354e163f211e82a2b2a2b58bcd5ea37d58646b3a023886066ecb95fc360653816ecdb8770e043eb702147d56b2e619da97c1df5f25e0d9caf3c2cdefe6d92f1c837040704945fc7dce0b146c8b097833f35c44b3540a8d42af19ad17514af48ae74cc7fcd93e57729b4057a05ea865029e775c84b037d2f6556c65c6738e59025a5518f295900a139879a620afafbd10bc4dfbc3bc3ed7d7de024e1db719f8285986eabe34f54bed398c066ef90f74fc192eab55622be3551a4eb4d026e0ce26a015c168435278c76078e87319f41dede2dd6878c3eef6ba1bb6f2e0a21d4a8ebb71076b4b50192d19ca4c5f9b00a6ee1388e7917b21aee270b05b110e81e673e9cea3a2c95f7862b807bb9a80b99089fde38520dbb8f7242b95e22756da0c1f8f6f1210fb970c0382fe151bf0eefb036b7a797f1587f68c9e1ef0e34b5a54192670aac697693696a60b75c99658745c6f50bd1192ff2cf3fc60befe77d03a3f50bd0afcf9fb7a3acffe3b8fdaafc0f8b35157aa73759911a5fe470253aa2dc3a5a05c5f8c14922c6af45b1d081c1e5f4a492dc37bab16ff395dbc7a23b495ecb3bf92e51ad5a6bb83f61e17ae6db595bfac7891dd34edf7bcd5c631dcdd7fb94de0d71c76b202a610d6ace662059ca8428267aed7a0d79c40480d4b345b841abc52c91255b1f342d8b2276ce9a85268a8147cb87fb8bdfb0b3835f6ad393082c76595e7ac9036b64790352ac53324b8bbffe5d6a05ab6c6fbf39a69acf135a39620157819d658c8728b427b5183b313078a1aa6c66d8a44118a3a6ac94d533b8139e930aa6fe794c1d8b195a61451d4e1a0cdec9293812672fdc4ef244e56baac74029784dd2afa86bc104aa6d7093c5eed1f1e32aeccfe312eab65c15327e18f5d1d38417be5b86b5c611f6e55e02bab13f1eb6d5d8126c3c6fba25190558ad938d2340e61dc8c4fcd438af1a26bbbd0375fdbd3eb66c839c92c042db70da80dd8f66723e9af074b7fcfca1245f667aa78a9bfb09593a920e8a26e94daf20d83b0d7de4cb21ccd9069e84f475ebf8dc6cebb5d3be813b04456699eef5cd3eadfc22d132b93d8fd1362f9909bbb22175a6fd45d7b2ab7e6fcd4f6bede2495db522119a7c7d35406dd314ca28c606ff98f663c1c96a36bb02a81597bd4c5300bafd3731c1d47235b00911119a5cd4873521e0385f083d1df010000ffffd40be591690d0000",
 		"6b9404501bcb97dedc55c936193973c7": "1f8b08000000000000ffbc544d6fdb300cbde757104633a4401da3d74cf15034c150602b82ade85d899858982c1912dd2c13f4df07f92389b734b7ed628916f5f8f8449209f9061bc59d9b2715df615a201768937c04c08afbdcfba9a9c84dbf1a816afad99aba0a8165c57d3e6299906ff988d5aa0750d2515a6b470785021a4b6a2535b6704ac605808de7a0a4fef162261af77d84675ee2f41b3a53db0d86b0e2544c6eefc037d83348d6a4614d3aadac2cb93d24e1163c8c5b4480478b9c109e710f43ca2b6b2ab421749121b4775816d9b0ac56f968c488af15f659b446f34d1d5959a168f953d426eebc07cbf50ee1a682d91cda700f44d641da45f21ee4167474993e9ab234fae5502124843f29397a312a72efa34f93fd8abb0d57f21742d4988abc87422dba3b03a305f8a0d7aefad8fbc7b5a3c9686dc4e1a4f9d658980cd579e5f6913bfc2ef54e6108b720355cf458a9da7215c2b9e68c6cbf3d2952be2bc95096f29a2e2dbac8236bef6fae309e7a1fa186f285f8c82c23919f073ed7edc28f36e2d10018b446ad546ae5aea0e4dc6550cb8342fe836653cd1e062e2b6e79f9b408617659f2638a4f0b08973a41eaad49ee203ef20c925789fbd814e37709a2903464d0f5c63f61b7e7564bbd3b115c0a49d709fe770545ac599bdc412238f1b4442a8c4866902c965f962fcbe3c1c6e8adb4653c79b008075383ab2d7e3a25b74047d61cfecaaf1b9227f354632cebfbe77c2c753dcbb26600c5e1745686b14bd20d6aea27f4780e15df49cdc9d849b793463724bad0bf030000ffff7c6741bce2050000",
 		"709da3f0db2b11326f25fd99c4035c2e": "1f8b08000000000000ff74903d6b342114856befafb8afc58b2e83032917b6d866cb14c942cae08ace4a6655f49a0fc2fcf7e038c51248a93ecf390793366f7ab2a80df9180a80bfa5980905304eb6900f1307607cf274ad1765e26d9ce2a53aa7e73836398fef0ffc2fa0544f968304a0af64f1b8963cb74b2c94ab21fc06b65b29d51f61017035183cdb42af778220dc6d83d45936af4f1ed0e68cfb03f69447fbd1a5174fd793ffa49a6d11c794841c70dddb10c17fc7f301b952a3db0c2e2530efd6ec7f070c7e6e8d8cd449939e85cd59025b00982eadfbff5d52e3fa71bffdead050d6f73dd52068405d242cf0130000ffff7b2fce9c7d010000",
 		"72751874ad9edbf6b806613c6e298ddd": "1f8b08000000000000ff9454d16eda30147dcf571cb915da2639511f265551f74007630f5d614057ed0939c9255835b16b3b6815cbbf4f490894765dbba78baeef3927bee7e08496dad2c2a5561a1f07db2d875c82ee116ae35d38b89c3f180233daf9dc9263a8aa00e010c6f39c3c4a93094fe8f5f61d59382f94027f4087ba573c55920adff09372f45791f583bb57ffa7d0408ec88bac235005b843949452650e51ae2367d3e8f41da52b0db6ddb6e27d63c28948ef444e93bbbcaa187e232d3d78061631f0e5d9fb862dcdf6142f419bb9f55d262db881291325d3483847de3547b946fdf9bc442efdaa4cc254afa35c27e57229948e9ed4ce8b83d6adf4ab0199ee7e3bba232e258a3ccac844e93aab6b3398910115aeb474d8ff3107f7e01b845118864fb748bf8cb61e93fefceb27765a97f87434ae6b94c8820581f322271737c39e9c0f82b02e7c23ac8bd1dbff0e808db05224aa9d0646e3c5f0fa470c56cfb0b7660f988c67f3d174385b0c2ee36323afc59ac22f5251552d0ea46f0a1cf0ede7ecfbd562d09ff72ffbb3e1abcc07c8743c9e2f26fdd9ec763c1dc46056eb4eb9db23301fcee67bf2c5cdf4aa15a8b906c98d5555c582e004a3c6426cc83aa90ba42b2d53c28a94211b84a523de9acce55ae414a3f7a8a544b37f6077d6b6e35dfb35f4193f7f063d0bcf83a046d7869de0f34a1439c16bb08b8b181f9e69b3faac7404bf22b42d8c74779b00780a6b459beee3a034998ab1bb8e23bb91699d9a9722726c246f9f85f8e3bfdd7f962bbe7fb0ba9d1d79d8bd91ede8ee5fda7ee39f000000ffffc16ad22346050000",
@@ -52,14 +52,14 @@ var _ = func() error {
 		"793124cfbcf9ae17892b017c666be8f1": "1f8b08000000000000ff3cccb14e042110c6f19a798a0985010bb637b1b43d2d2eb617c4d95da20b38ccc618c2bb9bdd906be73fdfaff8f0e517c2d6d025bf917b1b87de01e256320b1a505aa84a4c8b06507a89b2ee1f2ee46daac22461e5e9ecf3dfc4f4b347260d1660de53c02b55b9bd168939d5dbbbff8e9f5ec8083e0ed15d2d36508c4fcf38c6ee42bf462c80ca45ea111e06d03a28e2f3f748eeee5950ec2ef98539b321660b1dfe030000ffff4d5ec109db000000",
 		"7a4cf344aedb69074260e6cef71f14b8": "1f8b08000000000000ff2a484cce4e4c4f55b051b555c82f2829d60bcec82f2af14bcc4d5550b5e3e24acecf2b2e51084b2d2acecccf53b055502a33d033d03350e202040000ffff53ac591538000000",
 		"7aee976b536bb9edb3b5ec620565cfba": "1f8b08000000000000ff74523d8fe32010edf32b90eb65623b5e65956a8b6baeb8eeea48188f1db21838c0f9d069f3db4fe038c6bbb90ecd7bf3de9b61feae08c914eb31db91ac1eda96499dbd84e209ad135a857a0139e463b5672296846af002473756a5e0a85cd4f8f5f3f75873dc0ae35db623c18390acc153209cb1368c7f104acfccf3432493e02d64b3c00da1d458dd59742e5b11f219652d1aed84d7f61ac89df087a106aefb75a7eff1d78b311a34a81a545c6092a5d6da3b6f990922156ca09872186d0cda30d98e64fb028a0aaa097b6fb5f5ec8c4ef7b86eb59adeb4b51887dfbfc2db2c75fc33e018f3b681ea6b9d0ea3c7ad8012ca79c0064f3f9e667eaf598d72cda58856dbc7a72498b6f85fd05874e829aad3774a6450a9598336a26f90c36bf6b21a61ee5c02de8ab4152f463b4ce11cb6b137c2ad900bb04c7b3b6d0e688fa9f83e877c5e95634be72d1473b7f357f9c5b8dcccf060e5327411754750999e0ae53c9392de2f8e1a3974e37557f7e9479d4e8af67a744f78b70212c35e2841c3aaf0e22de33e21ee73a8a09c88931097c814d5b5d3123d527e18d4877bd01fba5c9beb33f30a5ea3e642f481e4dfdde2e16cd2154e981427b418b6f530c8cafbc216c49e29d1a24b675b7ea9d20dd2f06df7204509793ceed5e7ea5f000000ffff64e3e7006d040000",
-		"7bfa8af3a48357849c69805d49e22d8d": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4746807173286433e1b115997e8a42184fc7b88d7f7cee84fb812a02f819328b5d4e4c1a0c0cbe74e530d852cfc9394e3c81b8d98e648d958b8a92693c0fb07a0b89fe9efd7e8576ddd371563956a50dcd7a562346f5dd742267103cf64f71838150c49cc937b9eaf6e2a39a4d5d816f481a2e78da030f4755930b2b6eaae1e010000ffffeabb8082aa000000",
+		"7bfa8af3a48357849c69805d49e22d8d": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608b5814ec21824719b2b33598cdac99c941c4772fedf5e7e35f297fd39991b215690a509655baa16b6cbb2fb3d501cca365f4a478f778536914e380efacf67994858fd4a6cadd07fc834d67c5fb07248d2fe9f4e6ddce85f8cce603c086343efd0caafe3a8ec9c8869e5eb7d859e341260e37729066549afa6bdecbf41b93f5d2ce3e6cd17d70cdb2309ae07ecc33557101fee1120000ffff2fa22d1ac7000000",
 		"7e882a42175bb172ad7014ae8bf629cb": "1f8b08000000000000ffcacb4f498dcfcd4f29cd492dd6e7d2d2cbc94fe74acaccd3e702040000ffffe55507d519000000",
 		"8086dcc0dc8cd747b27caae0808d1553": "1f8b08000000000000ffb2c930b4abaed6cb4bcc4dd50b482c4e4eccc9ac4aadad55aeaed64b4c2ec9cccf4316b5d1cf30b4e302040000ffff9ca0bf3a33000000",
 		"80e003a140ebedf9c08cd0406024feda": "1f8b08000000000000ff94544d8fa3300c3dc3afb0345a69f740c54799a9d2cbfe95405288066294ba2ab3abf9efab244009add4ae7273ece717bf17ef6ad4c4959606fec651af747255825a06459e0ee331fe8ee35672e1af2b5e7f36062f5a2435766818bcbde7bc94f21847031742e98641960e23f8e2a8c23139ab3f2e5ea111d224157ad45d870d82ea1b0b3cf53ccc2d77a4a8936768337b7b424d164632283cae8b5ca56a5ab2b1f4184713a16babc8d2e9b969944e2a24c29e4156b8ba294a383028b7bdf2a55788bc6a9f1d1c8c50e7a1e35f0c94ee949649d561fdb9c0334803606e7137f4488e940859a3e1a45033b868218d050b4a9513c593369e93a37d5faf7153ba13585f7aa9c925ac703a792206f9617efef952b992072c57ef59e95b0ca38b3c7043ce8b725fdc8f7ff1d2ad5b5b6ca4cdf37b69f74e8070acc42b4f76adcb7ec277973b9f42158a2f2003249c79bdff9cf6e9d6b09edc09916caa9b2eef54a319b8b1dffcf55697f63cf4e002b156fced50d9f382e6b5d4248d145b063eee727ef752280ebceb806b013f7b3ecefff5e3231dc65fb636fc3cc188bd79968166a59512ca49d0ef272ddef72fb4289eb488c2ff16a8e8e9ad72ee4d1cbad84bf7947859bc403c0d89af19bb5565f317cfa4ab8b6987cd4b2c4bd31ffff588a0f16a3745b73d332f18fbd07f010000ffffa680b9a8b2050000",
 		"80fc98a1e2bcaf004a0ae6186e3c7387": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000",
-		"81f7b0862d1e52602eed2b3f9d226446": "1f8b08000000000000ff4ccd314bf44010c6f17e3fc5f36e95c04b72585a6a73582868612116739bc92698dd5966674538eebbcb7129acfe300cbfa750f8a2c8a060abe4eadc9a8aa8c1c7d596761a82a431caa9cd336d32eef5ce8d238e92f84879da58b15610269ea96d86653f9aa0b27e335ab9fe1316498c42910737b71cfe0a5dc08e0f8f928d7fac07ab8ae2ec00656b9a118657ce136b777738fc870e4f6f2fcf5da2f2514dd71c3f6f39fbc4b552647f0fffce5bb8ae9ae0e1e6fff397be7717f71b0000ffff845bf41afa000000",
-		"8234cc9b0fb8bae99a360082dfdb5135": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4433bd9d0b11cf2d988c8ba44270d21e4df43bcbe77467fc28d007d099c44a9b5260f06055e3e0f9a6a2864612629ff23ef34625a226563e1a69a4c02ef1f80e2c6f9f7c7e8576ddd371563956a50dcd7a562346f5dd7422671032f648f1838150c49cc937b5eae6e2a39a4cdd816f41f45cf3b4161e8ebba62646dd55d3d020000ffffeff2ca6daa000000",
-		"8430e21160781cc43830f0576fd9350a": "1f8b08000000000000ff7c8f414bf4400c86eff915a1df1e5af8982e1e054f9e15597fc1ec34adc5ce644833a20cf9ef52ac85bd784a0ecf9bf749f6e1dd4f843ee8cc6905986366516ca659dfcad5058efdc4d7328e7ee17e9f0d807e65c25a1d675dddb38fe42eb472914066bf1bae2a256805c43d78406000b5a2f834119e3cde3fa0db15d00cfa1e6b3d79f7aa32a7c90c071a7d5914e798178a94d46fac83b1a480edc746ffa9d2ddde6bc361f4c849e9533b241116dc6485b448c2e02e940692f6ee7cfe8fb287dbe6e87ae28116f7229c49ccfedd34345df7f323a5c10cbe030000ffff07809a5767010000",
+		"81f7b0862d1e52602eed2b3f9d226446": "1f8b08000000000000ff4c8e3f4bc4401047fbfd143fb74a4036bda5368782075e612116739bc92698fdc3ecac08c77d770997e2aac70cc37b53c8ff506090d725a76acc124b164567009b588759b558b34d61d1b99d9dcf7108f9dca689d63cecb4a637661870c8910f94c695054b0561e489daaa98f7a56654965f462bdb3d61ce915128b033534bfeded079ec7af79293f29ff660912cb81840589b2478f7c16964e9b647dd49495b3dbe3d42dcebe9f8de452a5f556549e1fb868b8d5c2b05b64fb09fbcfaadaf19cfb7d283bdf6bdb99aff000000ffff5167c69218010000",
+		"8234cc9b0fb8bae99a360082dfdb5135": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608bb8a0e2610b1e65c8ced66036b366260711dfbd74af3f1fff4ae99b2e8c942c4b5580bcacd20c5d653b7c99ad0e60ee35a127c5bbc74d8d3d1b073cb3dae7200b0f54a7c2cd07fc835d63c5fb07248dc3f9edd5bb830bf199cd07801d697cfae954fc6d1c4723ebfafeb2c7c61a4f3271d8c849aa51aeea6ff928d36f1cade57af1618fee834b9285d1048f7d9ea9880bf00fd7000000ffffecd480c3c7000000",
+		"8430e21160781cc43830f0576fd9350a": "1f8b08000000000000ff7c904d6ac4300c85f73a854867914071f685aeba2cfd61e6041e47c984269651e4d26274f7629a0ecca62b49f0f4de27251f3efc44e883ce1c3780794d2c8a2d203691b4bfa8a606ea34cd7ac9671778ed273ee771f40bf77b6da003d0ef44588ae3a49b7bf52bb9236d9c2590d95f879b4a0e5a00715fbd8ac0004a41f171223c787c7844b763a119f43d9672f0eea432c7c90c071a7d5e14e7352db452545fb50ec61c03b69f55fd2f4a77ebd7862bd11347a52fed904458b0c20a699688c11d290e246d7d8b3ba9d7bcbd3ddfa3ec366d734d7de18116f72e9c48ccee6eb29aaefbbd96e260063f010000ffffc834eef185010000",
 		"87a430673d7bde399a1126daf0d7c0e6": "1f8b08000000000000ff348e314fc330148477ff8ac3ca9030383b12030b124b8580bd7ab8afa9456c07bfe7012cff77948a6e77a7d3ddb791ffa285415e434e624c885b2e8ad100565934a4c59add2c412ff5d3f91c67d1c2ea2f65be16ce3f73e1ef1a0a5b3399d650282d8c81f0f008f73f8cdecdb9268f9104f74fd7f0bd06e5091f2c7a6c6d70795371078aecde58722d9e7bbfa9636b18c8bd92785ac32fa3f771423300897ba6b08ef690152f715b3972523eddd9c9f41d87d3697fff0b0000ffffd638316cea000000",
 		"8ce13eeed27bfd94470fb7430910bf43": "1f8b08000000000000ff2c8d4b6a03310c86f73a8536597a085d9ab647e8054a311a5be31864c9f8119adb974cbaf9d0e3e7fba9b5d0cda6c70d4a56eb9cc26192b80f0f0eefacc93a3814cb2f0e704863f07c0e6ded522238ccbd1ce765d6060ef7a2e0502d71a89696f0f3b50d1ac3458a3786a25156e214f877b28e627ad66dd99e64bdc3be8aa4d068defc297ded89851e1edfae571db017a5fe084a953dbe5f3e905adbbea8325e3edd998768b592a67008e5e1f1fb075869170ed1c4faf038fb6210cbff967d1d0789c15f000000ffff20a0099817010000",
 		"8fca3f2f698f93dd31db24828b9ab0f7": "1f8b08000000000000ff2ccdb10dc3201046e13a37c52f2a68f00caed266058c023939e690392ac4ee511257affaf46a887bc84fe4939336223eaa9c0a4b80c9acafbef928c79265eb2985b72c570dddcc18f052b5f9b556bf466529edb167cc69c811a55e22b8b05a8741c025fdfdb7b2e10fbed83a47933e010000fffff34f28648b000000",
@@ -98,7 +98,7 @@ var _ = func() error {
 		"f565bf21889ed8876e21065a9a977d2b": "1f8b08000000000000ff34cdc16ec2301004d0fb7ec5c8a7a4aa927ba59eda5ecb851fd898b531246bcbb14108e5df5120ec6547a3274d627b662f605b42d499284c29e6828600e34339d6a1b371ea7d1caa733cc6fefdb3e841b2a196e8c219191fafa6fb531f54885c558ba0a1342dee04647c6323ff726db6b84bcfe115acf72b8eeb587ea216d1b2bf25f982e194c6607985fd698e6a3e09585a5ae8110000ffff7d25ad33bf000000",
 		"fb34aa975abbcb40d48be167668d4187": "1f8b08000000000000ffd2d5d5e54a492d4bcdc92fc84dcd2bb1e2525048c94ccc494d2eb152502a2eccc92c4935560209269624262516a75a295457ebe5179414eb05e5e797d4d6c6c3b80145a9699915b5b5f148a6e9410ce0e22a492da686d12063e0661614e5a794269764e6e751c164846130f301010000ffff301e0ded19010000",
 		"fd59f9c3d2c7ce0c05d1ff0f2c3cd0a5": "1f8b08000000000000ff6c8dd16a032110459f77be6210165c28e6079a40e86b1b02fd02575d235147744c1f4affbd74699616f27461cebd738a3657ed1d9a6401422a5419250cc207bef459194a3b4f735f161d6977cf12bb0fb9ad69926d0206f13cee910a37755ee1f9ea713c0898006ebae2f1a643d47374b8c7fb4a9ddcc7769713c0d2b3c19003cb093f61d8983a5a2b452562f1849be7fd42954f3a391c0f2fc94e7f07afa1b1cbf261f717feebbf51cf2c7f0ceba72ff80e0000ffff4170c27a17010000",
-		"fd8cf2902df93c6d983a9dd3cf7c039e": "1f8b08000000000000ff4ccec14ac6301004e0b3798aa1a71624fdf111f4d2b33ec1fee9260d26d9b2dd8820bebb0839fca78161f89893c227250605cbd22ee7723d450d53ca76f4bb0f52d724f71e231559474ecead2b36a9bc51db0b2bf205c2ce917a311ca334c1c5fac5e8e7ff9e7048659c94d8bbd85b7814e68081fb3769c6dfb6805545f1e39e94ad6b43f0efdc76d6f9e5767b86fa0fd3dcd23c6d5c8a20aa54bc8e83cbe27edd5f000000ffff9034dbfedc000000",
+		"fd8cf2902df93c6d983a9dd3cf7c039e": "1f8b08000000000000ff4c8e414ac5401044d7f6298aac1290c91d74f3c185e03f41ff4927199c991e3a3d228877974016ae8a2a8ac76b1c3f791370f4a4f5204aa5a9394602862a3eefee6da0b36dc9f7fe0851cbbce9a3af2b679daf1c68229a67dcb4c88deb92c5900e301659b967c77e8dae38c4be04bd9d7fc6ae45d07893406baff13f618cb8f0e155abcbb74f103335fcd0938977ab88e143ea22369e9ee1eeecfd787f7b8685bb5baadb38dc2467c56a5af072c94e13fdd25f000000ffff16411447fa000000",
 	})
 	if err != nil {
 		panic(err)
diff --git a/render/auto.go b/render/auto.go
index be0f448d..7f0b095d 100644
--- a/render/auto.go
+++ b/render/auto.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"io"
+	"net/http"
 	"path"
 	"reflect"
 	"strings"
@@ -108,7 +109,7 @@ func (ir htmlAutoRenderer) Render(w io.Writer, data Data) error {
 	switch data["method"] {
 	case "PUT", "POST", "DELETE":
 		if err := ir.redirect(pname, w, data); err != nil {
-			if er, ok := err.(ErrRedirect); ok && er.Status >= 300 && er.Status < 400 {
+			if er, ok := err.(ErrRedirect); ok && er.Status >= http.StatusMultipleChoices && er.Status < http.StatusBadRequest {
 				return err
 			}
 			if data["method"] == "PUT" {
@@ -167,9 +168,9 @@ func (ir htmlAutoRenderer) redirect(name name.Ident, w io.Writer, data Data) err
 			}
 		}
 
-		code := 302
+		code := http.StatusFound
 		if i, ok := data["status"].(int); ok {
-			if i >= 300 {
+			if i >= http.StatusMultipleChoices {
 				code = i
 			}
 		}
diff --git a/request_logger.go b/request_logger.go
index c64ce14f..0ceaf786 100644
--- a/request_logger.go
+++ b/request_logger.go
@@ -3,6 +3,7 @@ package buffalo
 import (
 	"crypto/rand"
 	"encoding/hex"
+	"net/http"
 	"time"
 
 	humanize "github.com/dustin/go-humanize"
@@ -53,7 +54,7 @@ func RequestLoggerFunc(h Handler) Handler {
 			ws, ok := c.Response().(*Response)
 			if !ok {
 				ws = &Response{ResponseWriter: c.Response()}
-				ws.Status = 200
+				ws.Status = http.StatusOK
 			}
 			req := c.Request()
 			ct := httpx.ContentType(req)
diff --git a/resource.go b/resource.go
index 915ae2f4..be598c1c 100644
--- a/resource.go
+++ b/resource.go
@@ -1,6 +1,9 @@
 package buffalo
 
-import "fmt"
+import (
+	"fmt"
+	"net/http"
+)
 
 // Resource interface allows for the easy mapping
 // of common RESTful actions to a set of paths. See
@@ -44,7 +47,7 @@ type Middler interface {
 	}
 
 	func (ur *UsersResource) List(c Context) error {
-		return c.Render(200, render.String("hello")
+		return c.Render(http.StatusOK, render.String("hello")
 	}
 
 	// This will fulfill the Resource interface, despite only having
@@ -55,25 +58,25 @@ type BaseResource struct{}
 
 // List default implementation. Returns a 404
 func (v BaseResource) List(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 // Show default implementation. Returns a 404
 func (v BaseResource) Show(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 // Create default implementation. Returns a 404
 func (v BaseResource) Create(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 // Update default implementation. Returns a 404
 func (v BaseResource) Update(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 // Destroy default implementation. Returns a 404
 func (v BaseResource) Destroy(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
diff --git a/route_info.go b/route_info.go
index cdd5b1c7..b0d7f8fe 100644
--- a/route_info.go
+++ b/route_info.go
@@ -17,14 +17,15 @@ import (
 // RouteInfo provides information about the underlying route that
 // was built.
 type RouteInfo struct {
-	Method      string     `json:"method"`
-	Path        string     `json:"path"`
-	HandlerName string     `json:"handler"`
-	PathName    string     `json:"pathName"`
-	Aliases     []string   `json:"aliases"`
-	MuxRoute    *mux.Route `json:"-"`
-	Handler     Handler    `json:"-"`
-	App         *App       `json:"-"`
+	Method       string     `json:"method"`
+	Path         string     `json:"path"`
+	HandlerName  string     `json:"handler"`
+	ResourceName string     `json:"resourceName,omitempty"`
+	PathName     string     `json:"pathName"`
+	Aliases      []string   `json:"aliases"`
+	MuxRoute     *mux.Route `json:"-"`
+	Handler      Handler    `json:"-"`
+	App          *App       `json:"-"`
 }
 
 // String returns a JSON representation of the RouteInfo
@@ -106,7 +107,7 @@ func (ri RouteInfo) ServeHTTP(res http.ResponseWriter, req *http.Request) {
 	err := a.Middleware.handler(ri)(c)
 
 	if err != nil {
-		status := 500
+		status := http.StatusInternalServerError
 		if he, ok := err.(HTTPError); ok {
 			status = he.Status
 		}
diff --git a/route_mappings.go b/route_mappings.go
index df36c985..52f66a73 100644
--- a/route_mappings.go
+++ b/route_mappings.go
@@ -102,8 +102,8 @@ func (a *App) fileServer(fs http.FileSystem) http.Handler {
 	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		f, err := fs.Open(path.Clean(r.URL.Path))
 		if os.IsNotExist(err) {
-			eh := a.ErrorHandlers.Get(404)
-			eh(404, fmt.Errorf("could not find %s", r.URL.Path), a.newContext(RouteInfo{}, w, r))
+			eh := a.ErrorHandlers.Get(http.StatusNotFound)
+			eh(http.StatusNotFound, fmt.Errorf("could not find %s", r.URL.Path), a.newContext(RouteInfo{}, w, r))
 			return
 		}
 
@@ -157,7 +157,8 @@ func (a *App) Resource(p string, r Resource) *App {
 	}
 
 	rt := rv.Type()
-	rname := fmt.Sprintf("%s.%s", rt.PkgPath(), rt.Name()) + ".%s"
+	resourceName := rt.Name()
+	handlerName := fmt.Sprintf("%s.%s", rt.PkgPath(), resourceName) + ".%s"
 
 	n := strings.TrimSuffix(rt.Name(), "Resource")
 	paramName := name.New(n).ParamID().String()
@@ -171,29 +172,34 @@ func (a *App) Resource(p string, r Resource) *App {
 	}
 
 	spath := path.Join(p, "{"+paramName+"}")
-	setFuncKey(r.List, fmt.Sprintf(rname, "List"))
-	g.GET(p, r.List)
+
+	setFuncKey(r.List, fmt.Sprintf(handlerName, "List"))
+	g.GET(p, r.List).ResourceName = resourceName
 
 	if n, ok := r.(newable); ok {
-		setFuncKey(n.New, fmt.Sprintf(rname, "New"))
-		g.GET(path.Join(p, "new"), n.New)
+		setFuncKey(n.New, fmt.Sprintf(handlerName, "New"))
+		g.GET(path.Join(p, "new"), n.New).ResourceName = resourceName
 	}
 
-	setFuncKey(r.Show, fmt.Sprintf(rname, "Show"))
-	g.GET(path.Join(spath), r.Show)
+	setFuncKey(r.Show, fmt.Sprintf(handlerName, "Show"))
+	g.GET(path.Join(spath), r.Show).ResourceName = resourceName
 
 	if n, ok := r.(editable); ok {
-		setFuncKey(n.Edit, fmt.Sprintf(rname, "Edit"))
-		g.GET(path.Join(spath, "edit"), n.Edit)
+		setFuncKey(n.Edit, fmt.Sprintf(handlerName, "Edit"))
+		g.GET(path.Join(spath, "edit"), n.Edit).ResourceName = resourceName
 	}
 
-	setFuncKey(r.Create, fmt.Sprintf(rname, "Create"))
-	g.POST(p, r.Create)
-	setFuncKey(r.Update, fmt.Sprintf(rname, "Update"))
-	g.PUT(path.Join(spath), r.Update)
-	setFuncKey(r.Destroy, fmt.Sprintf(rname, "Destroy"))
-	g.DELETE(path.Join(spath), r.Destroy)
+	setFuncKey(r.Create, fmt.Sprintf(handlerName, "Create"))
+	g.POST(p, r.Create).ResourceName = resourceName
+
+	setFuncKey(r.Update, fmt.Sprintf(handlerName, "Update"))
+	g.PUT(path.Join(spath), r.Update).ResourceName = resourceName
+
+	setFuncKey(r.Destroy, fmt.Sprintf(handlerName, "Destroy"))
+	g.DELETE(path.Join(spath), r.Destroy).ResourceName = resourceName
+
 	g.Prefix = path.Join(g.Prefix, spath)
+
 	return g
 }
 
@@ -331,8 +337,8 @@ func stripAsset(path string, h http.Handler, a *App) http.Handler {
 
 		u, err := url.Parse(up)
 		if err != nil {
-			eh := a.ErrorHandlers.Get(400)
-			eh(400, err, a.newContext(RouteInfo{}, w, r))
+			eh := a.ErrorHandlers.Get(http.StatusBadRequest)
+			eh(http.StatusBadRequest, err, a.newContext(RouteInfo{}, w, r))
 			return
 		}
 
diff --git a/runtime/build.go b/runtime/build.go
index 546c8a1d..3d82b08a 100644
--- a/runtime/build.go
+++ b/runtime/build.go
@@ -8,8 +8,8 @@ import (
 
 // BuildInfo holds information about the build
 type BuildInfo struct {
-	Version string
-	Time    time.Time
+	Version string    `json:"version"`
+	Time    time.Time `json:"-"`
 }
 
 // String implements fmt.String
diff --git a/runtime/version.go b/runtime/version.go
index 906f7420..7c6e748c 100644
--- a/runtime/version.go
+++ b/runtime/version.go
@@ -1,4 +1,4 @@
 package runtime
 
 // Version is the current version of the buffalo binary
-const Version = "v0.14.12"
+const Version = "v0.15.0"


Test patch:
diff --git a/binding/binding_custom_decoder_test.go b/binding/binding_custom_decoder_test.go
index b0b90b31..2b26b36a 100644
--- a/binding/binding_custom_decoder_test.go
+++ b/binding/binding_custom_decoder_test.go
@@ -1,6 +1,7 @@
 package binding_test
 
 import (
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/buffalo"
@@ -33,7 +34,7 @@ func Test_RegisterCustomDecoder(t *testing.T) {
 	res := w.HTML("/").Post(&U{
 		Xt: Xt{[]string{"foo"}},
 	})
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 
 	r.Equal([]string{"X"}, ux.Xt.Vals)
 }
diff --git a/binding/file_test.go b/binding/file_test.go
index 6924eefe..ca66a529 100644
--- a/binding/file_test.go
+++ b/binding/file_test.go
@@ -31,21 +31,21 @@ func App() *buffalo.App {
 		if err := c.Bind(wf); err != nil {
 			return err
 		}
-		return c.Render(201, render.String(wf.MyFile.Filename))
+		return c.Render(http.StatusCreated, render.String(wf.MyFile.Filename))
 	})
 	a.POST("/named-file", func(c buffalo.Context) error {
 		wf := &NamedFile{}
 		if err := c.Bind(wf); err != nil {
 			return err
 		}
-		return c.Render(201, render.String(wf.MyFile.Filename))
+		return c.Render(http.StatusCreated, render.String(wf.MyFile.Filename))
 	})
 	a.POST("/on-context", func(c buffalo.Context) error {
 		f, err := c.File("MyFile")
 		if err != nil {
 			return err
 		}
-		return c.Render(201, render.String(f.Filename))
+		return c.Render(http.StatusCreated, render.String(f.Filename))
 	})
 
 	return a
@@ -60,7 +60,7 @@ func Test_File_Upload_On_Struct(t *testing.T) {
 
 	App().ServeHTTP(res, req)
 
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 	r.Equal("file_test.go", res.Body.String())
 }
 
@@ -73,7 +73,7 @@ func Test_File_Upload_On_Struct_WithTag(t *testing.T) {
 
 	App().ServeHTTP(res, req)
 
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 	r.Equal("file_test.go", res.Body.String())
 }
 
@@ -86,7 +86,7 @@ func Test_File_Upload_On_Context(t *testing.T) {
 
 	App().ServeHTTP(res, req)
 
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 	r.Equal("file_test.go", res.Body.String())
 }
 
diff --git a/buffalo/cmd/filetests/generate_underscore.json b/buffalo/cmd/filetests/generate_underscore.json
index c08c2d22..830e375e 100644
--- a/buffalo/cmd/filetests/generate_underscore.json
+++ b/buffalo/cmd/filetests/generate_underscore.json
@@ -1,7 +1,7 @@
 [{
   "path": "actions/person_events.go",
   "contains": [
-    "c.Render(200, r.Auto(c, personEvents))",
-    "c.Render(200, r.Auto(c, personEvent))"
+    "c.Render(http.StatusOK, r.Auto(c, personEvents))",
+    "c.Render(http.StatusOK, r.Auto(c, personEvent))"
   ]
 }]
diff --git a/buffalo/cmd/test.go b/buffalo/cmd/test.go
index d6f09ae3..fead3e98 100644
--- a/buffalo/cmd/test.go
+++ b/buffalo/cmd/test.go
@@ -46,7 +46,9 @@ var testCmd = &cobra.Command{
 				return err
 			}
 
+			// Read and remove --force-migrations flag from args:
 			forceMigrations = strings.Contains(strings.Join(args, ""), "--force-migrations")
+			args = cutArg("--force-migrations", args)
 			if forceMigrations {
 				fm, err := pop.NewFileMigrator("./migrations", test)
 
@@ -105,13 +107,13 @@ func testRunner(args []string) error {
 	var larg string
 	for i, a := range args {
 		switch a {
-		case "-run", "-m":
+		case "-run", "-m", "-timeout":
 			query = args[i+1]
 			mFlag = true
 		case "-v":
 			cargs = append(cargs, "-v")
 		default:
-			if larg != "-run" && larg != "-m" {
+			if larg != "-run" && larg != "-m" && larg != "-timeout" {
 				pargs = append(pargs, a)
 			}
 		}
@@ -216,3 +218,13 @@ func newTestCmd(args []string) *exec.Cmd {
 	cmd.Stderr = os.Stderr
 	return cmd
 }
+
+func cutArg(arg string, args []string) []string {
+	for i, v := range args {
+		if v == arg {
+			return append(args[:i], args[i+1:]...)
+		}
+	}
+
+	return args
+}
diff --git a/buffalo/cmd/test_test.go b/buffalo/cmd/test_test.go
new file mode 100644
index 00000000..3e23b29d
--- /dev/null
+++ b/buffalo/cmd/test_test.go
@@ -0,0 +1,27 @@
+package cmd
+
+import (
+	"reflect"
+	"testing"
+)
+
+func Test_CutArg(t *testing.T) {
+	var tests = []struct {
+		arg      string
+		args     []string
+		expected []string
+	}{
+		{"b", []string{"a", "b", "c"}, []string{"a", "c"}},
+		{"--is-not-in-args", []string{"a", "b", "c"}, []string{"a", "b", "c"}},
+		{"--foo", []string{"--foo", "--bar", "--baz"}, []string{"--bar", "--baz"}},
+		{"--force-migrations", []string{"./actions/", "--force-migrations"}, []string{"./actions/"}},
+		{"--force-migrations", []string{"./actions/", "--force-migrations", "-m", "Test_HomeHandler"}, []string{"./actions/", "-m", "Test_HomeHandler"}},
+	}
+
+	for _, tt := range tests {
+		result := cutArg(tt.arg, tt.args)
+		if !reflect.DeepEqual(result, tt.expected) {
+			t.Errorf("got %s, want %s when cutting %s from %s", result, tt.expected, tt.arg, tt.args)
+		}
+	}
+}
\ No newline at end of file
diff --git a/buffalo/cmd/version_test.go b/buffalo/cmd/version_test.go
index 5436ff39..5da3c1a6 100644
--- a/buffalo/cmd/version_test.go
+++ b/buffalo/cmd/version_test.go
@@ -16,3 +16,15 @@ func Test_VersionCmd(t *testing.T) {
 	err := c.Execute()
 	r.NoError(err)
 }
+
+func Test_VersionJSONCmd(t *testing.T) {
+	r := require.New(t)
+
+	c := RootCmd
+	c.SetArgs([]string{
+		"version",
+		"--json",
+	})
+	err := c.Execute()
+	r.NoError(err)
+}
diff --git a/default_context_test.go b/default_context_test.go
index fd4db7fb..72e88920 100644
--- a/default_context_test.go
+++ b/default_context_test.go
@@ -28,7 +28,7 @@ func Test_DefaultContext_Redirect(t *testing.T) {
 	a := New(Options{})
 	u := "/foo?bar=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fcallback%2Ffacebook"
 	a.GET("/", func(c Context) error {
-		return c.Redirect(302, u)
+		return c.Redirect(http.StatusFound, u)
 	})
 
 	w := httptest.New(a)
@@ -47,23 +47,23 @@ func Test_DefaultContext_Redirect_Helper(t *testing.T) {
 		{
 			E: "/foo/baz/",
 			I: map[string]interface{}{"bar": "baz"},
-			S: 302,
+			S: http.StatusPermanentRedirect,
 		},
 		{
-			S: 500,
+			S: http.StatusInternalServerError,
 		},
 	}
 
 	for _, tt := range table {
 		a := New(Options{})
 		a.GET("/foo/{bar}", func(c Context) error {
-			return c.Render(200, render.String(c.Param("bar")))
+			return c.Render(http.StatusOK, render.String(c.Param("bar")))
 		})
 		a.GET("/", func(c Context) error {
-			return c.Redirect(302, "fooPath()", tt.I)
+			return c.Redirect(http.StatusPermanentRedirect, "fooPath()", tt.I)
 		})
 		a.GET("/nomap", func(c Context) error {
-			return c.Redirect(302, "rootPath()")
+			return c.Redirect(http.StatusPermanentRedirect, "rootPath()")
 		})
 
 		w := httptest.New(a)
@@ -72,7 +72,7 @@ func Test_DefaultContext_Redirect_Helper(t *testing.T) {
 		r.Equal(tt.E, res.Location())
 
 		res = w.HTML("/nomap").Get()
-		r.Equal(302, res.Code)
+		r.Equal(http.StatusPermanentRedirect, res.Code)
 		r.Equal("/", res.Location())
 	}
 }
@@ -103,10 +103,36 @@ func Test_DefaultContext_Param_form(t *testing.T) {
 		"name": "Mark",
 	})
 
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Equal("Mark", name)
 }
 
+func Test_DefaultContext_Param_Multiple(t *testing.T) {
+	r := require.New(t)
+
+	app := New(Options{})
+	var params ParamValues
+	var param string
+	app.POST("/{id}", func(c Context) error {
+		params = c.Params()
+		param = c.Param("id")
+		return nil
+	})
+
+	w := httptest.New(app)
+	res := w.HTML("/a?id=c&y=z&id=d").Post(map[string]string{
+		"id": "b",
+	})
+	paramsExpected := url.Values{
+		"id": []string{"a", "b", "c", "d"},
+		"y":  []string{"z"},
+	}
+
+	r.Equal(200, res.Code)
+	r.Equal(paramsExpected, params.(url.Values))
+	r.Equal("a", param)
+}
+
 func Test_DefaultContext_GetSet(t *testing.T) {
 	r := require.New(t)
 	c := basicContext()
@@ -137,10 +163,10 @@ func Test_DefaultContext_Render(t *testing.T) {
 	c.params = url.Values{"name": []string{"Mark"}}
 	c.Set("greet", "Hello")
 
-	err := c.Render(123, render.String(`<%= greet %> <%= params["name"] %>!`))
+	err := c.Render(http.StatusTeapot, render.String(`<%= greet %> <%= params["name"] %>!`))
 	r.NoError(err)
 
-	r.Equal(123, res.Code)
+	r.Equal(http.StatusTeapot, res.Code)
 	r.Equal("Hello Mark!", res.Body.String())
 }
 
@@ -157,13 +183,13 @@ func Test_DefaultContext_Bind_Default(t *testing.T) {
 		if err != nil {
 			return err
 		}
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	w := httptest.New(a)
 	uv := url.Values{"first_name": []string{"Mark"}}
 	res := w.HTML("/").Post(uv)
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 
 	r.Equal("Mark", user.FirstName)
 }
@@ -181,9 +207,9 @@ func Test_DefaultContext_Bind_No_ContentType(t *testing.T) {
 	a.POST("/", func(c Context) error {
 		err := c.Bind(&user)
 		if err != nil {
-			return c.Error(422, err)
+			return c.Error(http.StatusUnprocessableEntity, err)
 		}
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	bb := &bytes.Buffer{}
@@ -192,7 +218,7 @@ func Test_DefaultContext_Bind_No_ContentType(t *testing.T) {
 	req.Header.Del("Content-Type")
 	res := httptest.NewRecorder()
 	a.ServeHTTP(res, req)
-	r.Equal(422, res.Code)
+	r.Equal(http.StatusUnprocessableEntity, res.Code)
 	r.Contains(res.Body.String(), "blank content type")
 }
 
@@ -209,9 +235,9 @@ func Test_DefaultContext_Bind_Empty_ContentType(t *testing.T) {
 	a.POST("/", func(c Context) error {
 		err := c.Bind(&user)
 		if err != nil {
-			return c.Error(422, err)
+			return c.Error(http.StatusUnprocessableEntity, err)
 		}
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	bb := &bytes.Buffer{}
@@ -221,7 +247,7 @@ func Test_DefaultContext_Bind_Empty_ContentType(t *testing.T) {
 	req.Header.Set("Content-Type", "")
 	res := httptest.NewRecorder()
 	a.ServeHTTP(res, req)
-	r.Equal(422, res.Code)
+	r.Equal(http.StatusUnprocessableEntity, res.Code)
 	r.Contains(res.Body.String(), "blank content type")
 }
 
@@ -240,13 +266,13 @@ func Test_DefaultContext_Bind_Default_BlankFields(t *testing.T) {
 		if err != nil {
 			return err
 		}
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	w := httptest.New(a)
 	uv := url.Values{"first_name": []string{""}}
 	res := w.HTML("/").Post(uv)
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 
 	r.Equal("", user.FirstName)
 }
@@ -264,14 +290,14 @@ func Test_DefaultContext_Bind_JSON(t *testing.T) {
 		if err != nil {
 			return err
 		}
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	w := httptest.New(a)
 	res := w.JSON("/").Post(map[string]string{
 		"first_name": "Mark",
 	})
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 
 	r.Equal("Mark", user.FirstName)
 }
diff --git a/errors_test.go b/errors_test.go
index 0346009f..54b7e892 100644
--- a/errors_test.go
+++ b/errors_test.go
@@ -2,6 +2,7 @@ package buffalo
 
 import (
 	"fmt"
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/httptest"
@@ -13,12 +14,12 @@ func Test_defaultErrorHandler_SetsContentType(t *testing.T) {
 	r := require.New(t)
 	app := New(Options{})
 	app.GET("/", func(c Context) error {
-		return c.Error(401, fmt.Errorf("boom"))
+		return c.Error(http.StatusUnauthorized, fmt.Errorf("boom"))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/").Get()
-	r.Equal(401, res.Code)
+	r.Equal(http.StatusUnauthorized, res.Code)
 	ct := res.Header().Get("content-type")
 	r.Equal("text/html; charset=utf-8", ct)
 }
@@ -27,12 +28,12 @@ func Test_defaultErrorHandler_JSON(t *testing.T) {
 	r := require.New(t)
 	app := New(Options{})
 	app.GET("/", func(c Context) error {
-		return c.Error(401, fmt.Errorf("boom"))
+		return c.Error(http.StatusUnauthorized, fmt.Errorf("boom"))
 	})
 
 	w := httptest.New(app)
 	res := w.JSON("/").Get()
-	r.Equal(401, res.Code)
+	r.Equal(http.StatusUnauthorized, res.Code)
 	ct := res.Header().Get("content-type")
 	r.Equal("application/json", ct)
 	b := res.Body.String()
@@ -45,12 +46,12 @@ func Test_defaultErrorHandler_XML(t *testing.T) {
 	r := require.New(t)
 	app := New(Options{})
 	app.GET("/", func(c Context) error {
-		return c.Error(401, fmt.Errorf("boom"))
+		return c.Error(http.StatusUnauthorized, fmt.Errorf("boom"))
 	})
 
 	w := httptest.New(app)
 	res := w.XML("/").Get()
-	r.Equal(401, res.Code)
+	r.Equal(http.StatusUnauthorized, res.Code)
 	ct := res.Header().Get("content-type")
 	r.Equal("text/xml", ct)
 	b := res.Body.String()
@@ -86,7 +87,7 @@ func Test_PanicHandler(t *testing.T) {
 			r := require.New(st)
 
 			res := w.HTML(tt.path).Get()
-			r.Equal(500, res.Code)
+			r.Equal(http.StatusInternalServerError, res.Code)
 
 			body := res.Body.String()
 			r.Contains(body, tt.expected)
@@ -100,7 +101,7 @@ func Test_defaultErrorMiddleware(t *testing.T) {
 	app := New(Options{})
 	var x string
 	var ok bool
-	app.ErrorHandlers[422] = func(code int, err error, c Context) error {
+	app.ErrorHandlers[http.StatusUnprocessableEntity] = func(code int, err error, c Context) error {
 		x, ok = c.Value("T").(string)
 		c.Response().WriteHeader(code)
 		c.Response().Write([]byte(err.Error()))
@@ -109,7 +110,7 @@ func Test_defaultErrorMiddleware(t *testing.T) {
 	app.Use(func(next Handler) Handler {
 		return func(c Context) error {
 			c.Set("T", "t")
-			return c.Error(422, fmt.Errorf("boom"))
+			return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("boom"))
 		}
 	})
 	app.GET("/", func(c Context) error {
@@ -118,7 +119,7 @@ func Test_defaultErrorMiddleware(t *testing.T) {
 
 	w := httptest.New(app)
 	res := w.HTML("/").Get()
-	r.Equal(422, res.Code)
+	r.Equal(http.StatusUnprocessableEntity, res.Code)
 	r.True(ok)
 	r.Equal("t", x)
 }
@@ -128,16 +129,16 @@ func Test_SetErrorMiddleware(t *testing.T) {
 	app := New(Options{})
 	app.ErrorHandlers.Default(func(code int, err error, c Context) error {
 		res := c.Response()
-		res.WriteHeader(418)
+		res.WriteHeader(http.StatusTeapot)
 		res.Write([]byte("i'm a teapot"))
 		return nil
 	})
 	app.GET("/", func(c Context) error {
-		return c.Error(422, fmt.Errorf("boom"))
+		return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("boom"))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/").Get()
-	r.Equal(418, res.Code)
+	r.Equal(http.StatusTeapot, res.Code)
 	r.Equal("i'm a teapot", res.Body.String())
 }
diff --git a/flash_test.go b/flash_test.go
index 81d9f870..25f863f4 100644
--- a/flash_test.go
+++ b/flash_test.go
@@ -1,6 +1,7 @@
 package buffalo
 
 import (
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/buffalo/render"
@@ -34,7 +35,7 @@ func Test_FlashRender(t *testing.T) {
 		c.Flash().Add("errors", "Error AJ set")
 		c.Flash().Add("errors", "Error DAL set")
 
-		return c.Render(201, rr.String(errorsTPL))
+		return c.Render(http.StatusCreated, rr.String(errorsTPL))
 	})
 
 	w := httptest.New(a)
@@ -50,7 +51,7 @@ func Test_FlashRenderEmpty(t *testing.T) {
 	rr := render.New(render.Options{})
 
 	a.GET("/", func(c Context) error {
-		return c.Render(201, rr.String(errorsTPL))
+		return c.Render(http.StatusCreated, rr.String(errorsTPL))
 	})
 
 	w := httptest.New(a)
@@ -73,7 +74,7 @@ func Test_FlashRenderEntireFlash(t *testing.T) {
 
 	a.GET("/", func(c Context) error {
 		c.Flash().Add("something", "something to say!")
-		return c.Render(201, rr.String(keyTPL))
+		return c.Render(http.StatusCreated, rr.String(keyTPL))
 	})
 
 	w := httptest.New(a)
@@ -94,7 +95,7 @@ func Test_FlashRenderCustomKey(t *testing.T) {
 
 	a.GET("/", func(c Context) error {
 		c.Flash().Add("something", "something to say!")
-		return c.Render(201, rr.String(keyTPL))
+		return c.Render(http.StatusCreated, rr.String(keyTPL))
 	})
 
 	w := httptest.New(a)
@@ -108,7 +109,7 @@ func Test_FlashRenderCustomKeyNotDefined(t *testing.T) {
 	rr := render.New(render.Options{})
 
 	a.GET("/", func(c Context) error {
-		return c.Render(201, rr.String(customKeyTPL))
+		return c.Render(http.StatusCreated, rr.String(customKeyTPL))
 	})
 
 	w := httptest.New(a)
diff --git a/genny/actions/actions_test.go b/genny/actions/actions_test.go
index 1c45b26d..40312df6 100644
--- a/genny/actions/actions_test.go
+++ b/genny/actions/actions_test.go
@@ -60,6 +60,7 @@ func Test_New(t *testing.T) {
 		r.NoError(err)
 		f, err := res.Find(strings.TrimSuffix(s, ".tmpl"))
 		r.NoError(err)
+		fmt.Printf("\nfile %s", s)
 		r.True(compare(x, f.String()))
 	}
 }
@@ -92,6 +93,7 @@ func Test_New_Multi(t *testing.T) {
 		r.NoError(err)
 		f, err := res.Find(strings.TrimSuffix(s, ".tmpl"))
 		r.NoError(err)
+		fmt.Printf("\nfile %s", f)
 		r.True(compare(x, f.String()))
 	}
 }
diff --git a/genny/build/_fixtures/coke/actions/home_test.go b/genny/build/_fixtures/coke/actions/home_test.go
index 2c7aef4c..04d750a0 100644
--- a/genny/build/_fixtures/coke/actions/home_test.go
+++ b/genny/build/_fixtures/coke/actions/home_test.go
@@ -1,7 +1,9 @@
 package actions
 
+import "net/http"
+
 func (as *ActionSuite) Test_HomeHandler() {
 	res := as.HTML("/").Get()
-	as.Equal(200, res.Code)
+	as.Equal(http.StatusOK, res.Code)
 	as.Contains(res.Body.String(), "Welcome to Buffalo")
 }
diff --git a/genny/build/build_deps_test.go b/genny/build/build_deps_test.go
index 6a272dc9..f48cc031 100644
--- a/genny/build/build_deps_test.go
+++ b/genny/build/build_deps_test.go
@@ -33,24 +33,3 @@ func Test_buildDeps(t *testing.T) {
 	c := res.Commands[0]
 	r.Equal("go get -tags development foo ./...", strings.Join(c.Args, " "))
 }
-
-func Test_buildDeps_WithDep(t *testing.T) {
-	envy.Temp(func() {
-		envy.Set(envy.GO111MODULE, "off")
-		r := require.New(t)
-
-		opts := &Options{App: meta.New(".")}
-		opts.App.WithDep = true
-
-		run := gentest.NewRunner()
-		run.WithNew(buildDeps(opts))
-
-		r.NoError(run.Run())
-
-		res := run.Results()
-		r.Len(res.Commands, 1)
-
-		c := res.Commands[0]
-		r.Equal("dep ensure", strings.Join(c.Args, " "))
-	})
-}
diff --git a/genny/info/pkg_test.go b/genny/info/pkg_test.go
index 9e7bb3a0..ba7a8541 100644
--- a/genny/info/pkg_test.go
+++ b/genny/info/pkg_test.go
@@ -25,14 +25,10 @@ func Test_pkgChecks(t *testing.T) {
 
 	box := packd.NewMemoryBox()
 	box.AddString("go.mod", "module foo")
-	box.AddString("Gopkg.toml", "dep toml")
-	box.AddString("Gopkg.lock", "dep lock")
 	run.WithRun(pkgChecks(opts, box))
 
 	r.NoError(run.Run())
 
 	res := bb.String()
 	r.Contains(res, "Buffalo: go.mod")
-	r.Contains(res, "Buffalo: Gopkg.toml")
-	r.Contains(res, "Buffalo: Gopkg.lock")
 }
diff --git a/genny/newapp/api/api_test.go b/genny/newapp/api/api_test.go
index 6699ce9a..d47c57f5 100644
--- a/genny/newapp/api/api_test.go
+++ b/genny/newapp/api/api_test.go
@@ -60,7 +60,7 @@ func Test_New(t *testing.T) {
 
 	f, err = res.Find("actions/home.go")
 	r.NoError(err)
-	r.Contains(f.String(), `return c.Render(200, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))`)
+	r.Contains(f.String(), `return c.Render(http.StatusOK, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))`)
 
 	unexpected := []string{
 		"Dockerfile",
diff --git a/genny/newapp/api/templates/actions/home_test.go.tmpl b/genny/newapp/api/templates/actions/home_test.go.tmpl
index a40c27d6..d5cf583d 100644
--- a/genny/newapp/api/templates/actions/home_test.go.tmpl
+++ b/genny/newapp/api/templates/actions/home_test.go.tmpl
@@ -1,8 +1,10 @@
 package actions
 
+import "net/http"
+
 func (as *ActionSuite) Test_HomeHandler() {
 	res := as.JSON("/").Get()
 
-	as.Equal(200, res.Code)
+	as.Equal(http.StatusOK, res.Code)
 	as.Contains(res.Body.String(), "Welcome to Buffalo")
 }
diff --git a/genny/newapp/core/options_test.go b/genny/newapp/core/options_test.go
index 9ff526a9..a8964c82 100644
--- a/genny/newapp/core/options_test.go
+++ b/genny/newapp/core/options_test.go
@@ -33,9 +33,4 @@ func Test_Options_Validate(t *testing.T) {
 	err = opts.Validate()
 	r.NoError(err)
 
-	opts.App.WithDep = true
-	opts.App.WithModules = true
-	err = opts.Validate()
-	r.Error(err)
-	r.Equal(ErrGoModulesWithDep, err)
 }
diff --git a/genny/newapp/core/templates/actions/home_test.go.tmpl b/genny/newapp/core/templates/actions/home_test.go.tmpl
index cf5ba7d6..08065ebd 100644
--- a/genny/newapp/core/templates/actions/home_test.go.tmpl
+++ b/genny/newapp/core/templates/actions/home_test.go.tmpl
@@ -1,8 +1,10 @@
 package actions
 
+import "net/http"
+
 func (as *ActionSuite) Test_HomeHandler() {
 	res := as.HTML("/").Get()
 
-	as.Equal(200, res.Code)
+	as.Equal(http.StatusOK, res.Code)
 	as.Contains(res.Body.String(), "Welcome to Buffalo")
 }
diff --git a/genny/newapp/web/templates/actions/home_test.go.tmpl b/genny/newapp/web/templates/actions/home_test.go.tmpl
index cf5ba7d6..08065ebd 100644
--- a/genny/newapp/web/templates/actions/home_test.go.tmpl
+++ b/genny/newapp/web/templates/actions/home_test.go.tmpl
@@ -1,8 +1,10 @@
 package actions
 
+import "net/http"
+
 func (as *ActionSuite) Test_HomeHandler() {
 	res := as.HTML("/").Get()
 
-	as.Equal(200, res.Code)
+	as.Equal(http.StatusOK, res.Code)
 	as.Contains(res.Body.String(), "Welcome to Buffalo")
 }
diff --git a/mail/mail_test.go b/mail/mail_test.go
index fffd22cf..bab78231 100644
--- a/mail/mail_test.go
+++ b/mail/mail_test.go
@@ -2,6 +2,7 @@ package mail
 
 import (
 	"html/template"
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/buffalo"
@@ -26,7 +27,7 @@ func Test_New(t *testing.T) {
 	app.GET("/", func(c buffalo.Context) error {
 		c.Set("foo", "bar")
 		m = New(c)
-		return c.Render(200, render.String(""))
+		return c.Render(http.StatusOK, render.String(""))
 	})
 	w := httptest.New(app)
 	w.HTML("/").Get()
diff --git a/method_override_test.go b/method_override_test.go
index 36d7be01..95a21577 100644
--- a/method_override_test.go
+++ b/method_override_test.go
@@ -1,6 +1,7 @@
 package buffalo
 
 import (
+	"net/http"
 	"net/url"
 	"testing"
 
@@ -14,11 +15,11 @@ func Test_MethodOverride(t *testing.T) {
 
 	a := New(Options{})
 	a.PUT("/", func(c Context) error {
-		return c.Render(200, render.String("you put me!"))
+		return c.Render(http.StatusOK, render.String("you put me!"))
 	})
 
 	w := httptest.New(a)
 	res := w.HTML("/").Post(url.Values{"_method": []string{"PUT"}})
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Equal("you put me!", res.Body.String())
 }
diff --git a/middleware_test.go b/middleware_test.go
index 5decc706..9bd7aacf 100644
--- a/middleware_test.go
+++ b/middleware_test.go
@@ -1,6 +1,7 @@
 package buffalo
 
 import (
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/buffalo/render"
@@ -126,11 +127,11 @@ type carsResource struct {
 }
 
 func (ur *carsResource) Show(c Context) error {
-	return c.Render(200, render.String("show"))
+	return c.Render(http.StatusOK, render.String("show"))
 }
 
 func (ur *carsResource) List(c Context) error {
-	return c.Render(200, render.String("list"))
+	return c.Render(http.StatusOK, render.String("list"))
 }
 
 // Test_Middleware_Skip tests that middleware gets skipped
diff --git a/not_found_test.go b/not_found_test.go
index 28d98546..8caa8b6f 100644
--- a/not_found_test.go
+++ b/not_found_test.go
@@ -2,6 +2,7 @@ package buffalo
 
 import (
 	"encoding/json"
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/httptest"
@@ -21,7 +22,7 @@ func Test_App_Dev_NotFound(t *testing.T) {
 	body := res.Body.String()
 	r.Contains(body, "404 - ERROR!")
 	r.Contains(body, "/foo")
-	r.Equal(404, res.Code)
+	r.Equal(http.StatusNotFound, res.Code)
 }
 
 func Test_App_Dev_NotFound_JSON(t *testing.T) {
@@ -33,20 +34,20 @@ func Test_App_Dev_NotFound_JSON(t *testing.T) {
 
 	w := httptest.New(a)
 	res := w.JSON("/bad").Get()
-	r.Equal(404, res.Code)
+	r.Equal(http.StatusNotFound, res.Code)
 
 	jb := map[string]interface{}{}
 	err := json.NewDecoder(res.Body).Decode(&jb)
 	r.NoError(err)
-	r.Equal(float64(404), jb["code"])
+	r.Equal(float64(http.StatusNotFound), jb["code"])
 }
 
 func Test_App_Override_NotFound(t *testing.T) {
 	r := require.New(t)
 
 	a := New(Options{})
-	a.ErrorHandlers[404] = func(status int, err error, c Context) error {
-		c.Response().WriteHeader(404)
+	a.ErrorHandlers[http.StatusNotFound] = func(status int, err error, c Context) error {
+		c.Response().WriteHeader(http.StatusNotFound)
 		c.Response().Write([]byte("oops!!!"))
 		return nil
 	}
@@ -54,7 +55,7 @@ func Test_App_Override_NotFound(t *testing.T) {
 
 	w := httptest.New(a)
 	res := w.HTML("/bad").Get()
-	r.Equal(404, res.Code)
+	r.Equal(http.StatusNotFound, res.Code)
 
 	body := res.Body.String()
 	r.Equal(body, "oops!!!")
diff --git a/render/auto_test.go b/render/auto_test.go
index 8ccdc6de..d1c2b6d5 100644
--- a/render/auto_test.go
+++ b/render/auto_test.go
@@ -1,6 +1,7 @@
 package render_test
 
 import (
+	"net/http"
 	"strings"
 	"testing"
 
@@ -27,7 +28,7 @@ func Test_Auto_DefaultContentType(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
+		return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
 	})
 
 	res := httptest.NewRecorder()
@@ -43,7 +44,7 @@ func Test_Auto_JSON(t *testing.T) {
 	re := render.New(render.Options{})
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
+		return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
 	})
 
 	w := httptest.New(app)
@@ -58,7 +59,7 @@ func Test_Auto_XML(t *testing.T) {
 	re := render.New(render.Options{})
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
+		return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"}))
 	})
 
 	w := httptest.New(app)
@@ -80,7 +81,7 @@ func Test_Auto_HTML_List(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, Cars{
+		return c.Render(http.StatusOK, re.Auto(c, Cars{
 			{Name: "Ford"},
 			{Name: "Chevy"},
 		}))
@@ -111,7 +112,7 @@ func Test_Auto_HTML_List_Plural(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/people", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, People{
+		return c.Render(http.StatusOK, re.Auto(c, People{
 			Person{Name: "Ford"},
 			Person{Name: "Chevy"},
 		}))
@@ -136,7 +137,7 @@ func Test_Auto_HTML_Show(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars/{id}", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, Car{Name: "Honda"}))
+		return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"}))
 	})
 
 	w := httptest.New(app)
@@ -158,7 +159,7 @@ func Test_Auto_HTML_New(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars/new", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, Car{Name: "Honda"}))
+		return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"}))
 	})
 
 	w := httptest.New(app)
@@ -179,7 +180,7 @@ func Test_Auto_HTML_Create(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.POST("/cars", func(c buffalo.Context) error {
-		return c.Render(201, re.Auto(c, Car{Name: "Honda"}))
+		return c.Render(http.StatusCreated, re.Auto(c, Car{Name: "Honda"}))
 	})
 
 	w := httptest.New(app)
@@ -192,7 +193,7 @@ func Test_Auto_HTML_Create_Redirect(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.POST("/cars", func(c buffalo.Context) error {
-		return c.Render(201, render.Auto(c, Car{
+		return c.Render(http.StatusCreated, render.Auto(c, Car{
 			ID:   1,
 			Name: "Honda",
 		}))
@@ -201,7 +202,7 @@ func Test_Auto_HTML_Create_Redirect(t *testing.T) {
 	w := httptest.New(app)
 	res := w.HTML("/cars").Post(nil)
 	r.Equal("/cars/1", res.Location())
-	r.Equal(302, res.Code)
+	r.Equal(http.StatusFound, res.Code)
 }
 
 func Test_Auto_HTML_Create_Redirect_Error(t *testing.T) {
@@ -220,12 +221,12 @@ func Test_Auto_HTML_Create_Redirect_Error(t *testing.T) {
 		b := Car{
 			Name: "Honda",
 		}
-		return c.Render(422, re.Auto(c, b))
+		return c.Render(http.StatusUnprocessableEntity, re.Auto(c, b))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/cars").Post(nil)
-	r.Equal(422, res.Code)
+	r.Equal(http.StatusUnprocessableEntity, res.Code)
 	r.Contains(res.Body.String(), "Create: Honda")
 }
 
@@ -235,7 +236,7 @@ func Test_Auto_HTML_Create_Nested_Redirect(t *testing.T) {
 	app := buffalo.New(buffalo.Options{})
 	admin := app.Group("/admin")
 	admin.POST("/cars", func(c buffalo.Context) error {
-		return c.Render(201, render.Auto(c, Car{
+		return c.Render(http.StatusCreated, render.Auto(c, Car{
 			ID:   1,
 			Name: "Honda",
 		}))
@@ -244,7 +245,7 @@ func Test_Auto_HTML_Create_Nested_Redirect(t *testing.T) {
 	w := httptest.New(app)
 	res := w.HTML("/admin/cars").Post(nil)
 	r.Equal("/admin/cars/1", res.Location())
-	r.Equal(302, res.Code)
+	r.Equal(http.StatusFound, res.Code)
 }
 
 func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) {
@@ -253,7 +254,7 @@ func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) {
 	app := buffalo.New(buffalo.Options{})
 	admin := app.Group("/admin")
 	admin.DELETE("/cars", func(c buffalo.Context) error {
-		return c.Render(200, render.Auto(c, Car{
+		return c.Render(http.StatusOK, render.Auto(c, Car{
 			ID:   1,
 			Name: "Honda",
 		}))
@@ -262,7 +263,7 @@ func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) {
 	w := httptest.New(app)
 	res := w.HTML("/admin/cars").Delete()
 	r.Equal("/admin/cars", res.Location())
-	r.Equal(302, res.Code)
+	r.Equal(http.StatusFound, res.Code)
 }
 
 func Test_Auto_HTML_Edit(t *testing.T) {
@@ -278,7 +279,7 @@ func Test_Auto_HTML_Edit(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/cars/{id}/edit", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, Car{Name: "Honda"}))
+		return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"}))
 	})
 
 	w := httptest.New(app)
@@ -299,7 +300,7 @@ func Test_Auto_HTML_Update(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.PUT("/cars/{id}", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, Car{Name: "Honda"}))
+		return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"}))
 	})
 
 	w := httptest.New(app)
@@ -317,13 +318,13 @@ func Test_Auto_HTML_Update_Redirect(t *testing.T) {
 			ID:   1,
 			Name: "Honda",
 		}
-		return c.Render(200, render.Auto(c, b))
+		return c.Render(http.StatusOK, render.Auto(c, b))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/cars/1").Put(nil)
 	r.Equal("/cars/1", res.Location())
-	r.Equal(302, res.Code)
+	r.Equal(http.StatusFound, res.Code)
 }
 
 func Test_Auto_HTML_Update_Redirect_Error(t *testing.T) {
@@ -343,12 +344,12 @@ func Test_Auto_HTML_Update_Redirect_Error(t *testing.T) {
 			ID:   1,
 			Name: "Honda",
 		}
-		return c.Render(422, re.Auto(c, b))
+		return c.Render(http.StatusUnprocessableEntity, re.Auto(c, b))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/cars/1").Put(nil)
-	r.Equal(422, res.Code)
+	r.Equal(http.StatusUnprocessableEntity, res.Code)
 	r.Contains(res.Body.String(), "Update: Honda")
 }
 
@@ -361,13 +362,13 @@ func Test_Auto_HTML_Destroy_Redirect(t *testing.T) {
 			ID:   1,
 			Name: "Honda",
 		}
-		return c.Render(200, render.Auto(c, b))
+		return c.Render(http.StatusOK, render.Auto(c, b))
 	})
 
 	w := httptest.New(app)
 	res := w.HTML("/cars/1").Delete()
 	r.Equal("/cars/", res.Location())
-	r.Equal(302, res.Code)
+	r.Equal(http.StatusFound, res.Code)
 }
 
 func Test_Auto_HTML_List_Plural_MultiWord(t *testing.T) {
@@ -389,7 +390,7 @@ func Test_Auto_HTML_List_Plural_MultiWord(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/room_providers", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, RoomProviders{
+		return c.Render(http.StatusOK, re.Auto(c, RoomProviders{
 			RoomProvider{Name: "Ford"},
 			RoomProvider{Name: "Chevy"},
 		}))
@@ -420,7 +421,7 @@ func Test_Auto_HTML_List_Plural_MultiWord_Dashed(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/room-providers", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, RoomProviders{
+		return c.Render(http.StatusOK, re.Auto(c, RoomProviders{
 			RoomProvider{Name: "Ford"},
 			RoomProvider{Name: "Chevy"},
 		}))
@@ -450,7 +451,7 @@ func Test_Auto_HTML_Show_MultiWord_Dashed(t *testing.T) {
 
 	app := buffalo.New(buffalo.Options{})
 	app.GET("/room-providers/{id}", func(c buffalo.Context) error {
-		return c.Render(200, re.Auto(c, RoomProvider{ID: 1, Name: "Ford"}))
+		return c.Render(http.StatusOK, re.Auto(c, RoomProvider{ID: 1, Name: "Ford"}))
 	})
 
 	w := httptest.New(app)
diff --git a/route_info_test.go b/route_info_test.go
index 1ea695a2..4475c384 100644
--- a/route_info_test.go
+++ b/route_info_test.go
@@ -2,6 +2,7 @@ package buffalo
 
 import (
 	"database/sql"
+	"net/http"
 	"testing"
 
 	"github.com/gobuffalo/buffalo/render"
@@ -14,7 +15,7 @@ func Test_RouteInfo_ServeHTTP_SQL_Error(t *testing.T) {
 
 	app := New(Options{})
 	app.GET("/good", func(c Context) error {
-		return c.Render(200, render.String("hi"))
+		return c.Render(http.StatusOK, render.String("hi"))
 	})
 
 	app.GET("/bad", func(c Context) error {
@@ -24,8 +25,8 @@ func Test_RouteInfo_ServeHTTP_SQL_Error(t *testing.T) {
 	w := httptest.New(app)
 
 	res := w.HTML("/good").Get()
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 
 	res = w.HTML("/bad").Get()
-	r.Equal(404, res.Code)
+	r.Equal(http.StatusNotFound, res.Code)
 }
diff --git a/route_mappings_test.go b/route_mappings_test.go
index 940e626e..5ab171bb 100644
--- a/route_mappings_test.go
+++ b/route_mappings_test.go
@@ -109,3 +109,48 @@ func Test_App_RouteHelpers(t *testing.T) {
 	r.NoError(err)
 	r.Equal("/test/1/", string(x))
 }
+
+type resourceHandler struct{}
+
+func (r resourceHandler) List(Context) error {
+	return nil
+}
+
+func (r resourceHandler) Show(Context) error {
+	return nil
+}
+
+func (r resourceHandler) Create(Context) error {
+	return nil
+}
+
+func (r resourceHandler) Update(Context) error {
+	return nil
+}
+
+func (r resourceHandler) Destroy(Context) error {
+	return nil
+}
+
+func Test_App_Routes_Resource(t *testing.T) {
+	r := require.New(t)
+
+	a := New(Options{})
+	r.Nil(a.root)
+
+	a.GET("/foo", voidHandler)
+	a.Resource("/r", resourceHandler{})
+
+	routes := a.Routes()
+	r.Len(routes, 6)
+	route := routes[0]
+	r.Equal("GET", route.Method)
+	r.Equal("/foo/", route.Path)
+	r.NotZero(route.HandlerName)
+
+	for k, v := range routes {
+		if k > 0 {
+			r.Equal("resourceHandler", v.ResourceName)
+		}
+	}
+}
diff --git a/router_test.go b/router_test.go
index 09f4c44f..0607f1f9 100644
--- a/router_test.go
+++ b/router_test.go
@@ -19,9 +19,9 @@ import (
 
 func testApp() *App {
 	a := New(Options{})
-	a.Redirect(301, "/foo", "/bar")
+	a.Redirect(http.StatusMovedPermanently, "/foo", "/bar")
 	a.GET("/bar", func(c Context) error {
-		return c.Render(200, render.String("bar"))
+		return c.Render(http.StatusOK, render.String("bar"))
 	})
 
 	rt := a.Group("/router/tests")
@@ -29,7 +29,7 @@ func testApp() *App {
 	h := func(c Context) error {
 		x := c.Request().Method + "|"
 		x += strings.TrimSuffix(c.Value("current_path").(string), "/")
-		return c.Render(200, render.String(x))
+		return c.Render(http.StatusOK, render.String(x))
 	}
 
 	rt.GET("/", h)
@@ -39,7 +39,7 @@ func testApp() *App {
 	rt.OPTIONS("/", h)
 	rt.PATCH("/", h)
 
-	a.ErrorHandlers[405] = func(status int, err error, c Context) error {
+	a.ErrorHandlers[http.StatusMethodNotAllowed] = func(status int, err error, c Context) error {
 		res := c.Response()
 		res.WriteHeader(status)
 		res.Write([]byte("my custom 405"))
@@ -52,7 +52,7 @@ func otherTestApp() *App {
 	a := New(Options{})
 	f := func(c Context) error {
 		req := c.Request()
-		return c.Render(200, render.String(req.Method+" - "+req.URL.String()))
+		return c.Render(http.StatusOK, render.String(req.Method+" - "+req.URL.String()))
 	}
 	a.GET("/foo", f)
 	a.POST("/bar", f)
@@ -65,9 +65,9 @@ func Test_MethodNotFoundError(t *testing.T) {
 
 	a := New(Options{})
 	a.GET("/bar", func(c Context) error {
-		return c.Render(200, render.String("bar"))
+		return c.Render(http.StatusOK, render.String("bar"))
 	})
-	a.ErrorHandlers[405] = func(status int, err error, c Context) error {
+	a.ErrorHandlers[http.StatusMethodNotAllowed] = func(status int, err error, c Context) error {
 		res := c.Response()
 		res.WriteHeader(status)
 		res.Write([]byte("my custom 405"))
@@ -75,7 +75,7 @@ func Test_MethodNotFoundError(t *testing.T) {
 	}
 	w := httptest.New(a)
 	res := w.HTML("/bar").Post(nil)
-	r.Equal(405, res.Code)
+	r.Equal(http.StatusMethodNotAllowed, res.Code)
 	r.Contains(res.Body.String(), "my custom 405")
 }
 
@@ -168,13 +168,13 @@ func Test_PreHandlers(t *testing.T) {
 	a := testApp()
 	bh := func(c Context) error {
 		req := c.Request()
-		return c.Render(200, render.String(req.Method+"-"+req.URL.String()))
+		return c.Render(http.StatusOK, render.String(req.Method+"-"+req.URL.String()))
 	}
 	a.GET("/ph", bh)
 	a.POST("/ph", bh)
 	mh := func(res http.ResponseWriter, req *http.Request) {
 		if req.Method == "GET" {
-			res.WriteHeader(418)
+			res.WriteHeader(http.StatusTeapot)
 			res.Write([]byte("boo"))
 		}
 	}
@@ -188,8 +188,8 @@ func Test_PreHandlers(t *testing.T) {
 		Method string
 		Result string
 	}{
-		{Code: 418, Method: "GET", Result: "boo"},
-		{Code: 200, Method: "POST", Result: "POST-/ph/"},
+		{Code: http.StatusTeapot, Method: "GET", Result: "boo"},
+		{Code: http.StatusOK, Method: "POST", Result: "POST-/ph/"},
 	}
 
 	for _, v := range table {
@@ -209,7 +209,7 @@ func Test_PreWares(t *testing.T) {
 	a := testApp()
 	bh := func(c Context) error {
 		req := c.Request()
-		return c.Render(200, render.String(req.Method+"-"+req.URL.String()))
+		return c.Render(http.StatusOK, render.String(req.Method+"-"+req.URL.String()))
 	}
 	a.GET("/ph", bh)
 	a.POST("/ph", bh)
@@ -217,7 +217,7 @@ func Test_PreWares(t *testing.T) {
 	mh := func(h http.Handler) http.Handler {
 		return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
 			if req.Method == "GET" {
-				res.WriteHeader(418)
+				res.WriteHeader(http.StatusTeapot)
 				res.Write([]byte("boo"))
 			}
 		})
@@ -233,8 +233,8 @@ func Test_PreWares(t *testing.T) {
 		Method string
 		Result string
 	}{
-		{Code: 418, Method: "GET", Result: "boo"},
-		{Code: 200, Method: "POST", Result: "POST-/ph/"},
+		{Code: http.StatusTeapot, Method: "GET", Result: "boo"},
+		{Code: http.StatusOK, Method: "POST", Result: "POST-/ph/"},
 	}
 
 	for _, v := range table {
@@ -280,12 +280,12 @@ func Test_Router_Group(t *testing.T) {
 	a := testApp()
 	g := a.Group("/api/v1")
 	g.GET("/users", func(c Context) error {
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 
 	w := httptest.New(a)
 	res := w.HTML("/api/v1/users").Get()
-	r.Equal(201, res.Code)
+	r.Equal(http.StatusCreated, res.Code)
 }
 
 func Test_Router_Group_on_Group(t *testing.T) {
@@ -294,16 +294,16 @@ func Test_Router_Group_on_Group(t *testing.T) {
 	a := testApp()
 	g := a.Group("/api/v1")
 	g.GET("/users", func(c Context) error {
-		return c.Render(201, nil)
+		return c.Render(http.StatusCreated, nil)
 	})
 	f := g.Group("/foo")
 	f.GET("/bar", func(c Context) error {
-		return c.Render(420, nil)
+		return c.Render(http.StatusTeapot, nil)
 	})
 
 	w := httptest.New(a)
 	res := w.HTML("/api/v1/foo/bar").Get()
-	r.Equal(420, res.Code)
+	r.Equal(http.StatusTeapot, res.Code)
 }
 
 func Test_Router_Group_Middleware(t *testing.T) {
@@ -326,7 +326,7 @@ func Test_Router_Redirect(t *testing.T) {
 	r := require.New(t)
 	w := httptest.New(testApp())
 	res := w.HTML("/foo").Get()
-	r.Equal(301, res.Code)
+	r.Equal(http.StatusMovedPermanently, res.Code)
 	r.Equal("/bar", res.Location())
 }
 
@@ -341,7 +341,7 @@ func Test_Router_ServeFiles(t *testing.T) {
 	w := httptest.New(a)
 	res := w.HTML("/assets/foo.png").Get()
 
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Equal("foo", res.Body.String())
 
 	r.NotEqual(res.Header().Get("ETag"), "")
@@ -351,7 +351,7 @@ func Test_Router_ServeFiles(t *testing.T) {
 	w = httptest.New(a)
 	res = w.HTML("/assets/foo.png").Get()
 
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Equal("foo", res.Body.String())
 
 	r.NotEqual(res.Header().Get("ETag"), "")
@@ -382,12 +382,12 @@ type WebResource struct {
 
 // Edit default implementation. Returns a 404
 func (v WebResource) Edit(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 // New default implementation. Returns a 404
 func (v WebResource) New(c Context) error {
-	return c.Error(404, fmt.Errorf("resource not implemented"))
+	return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented"))
 }
 
 func Test_App_NamedRoutes(t *testing.T) {
@@ -415,7 +415,7 @@ func Test_App_NamedRoutes(t *testing.T) {
 
 	sampleHandler := func(c Context) error {
 		c.Set("opts", map[string]interface{}{})
-		return c.Render(200, rr.String(`
+		return c.Render(http.StatusOK, rr.String(`
 			1. <%= rootPath() %>
 			2. <%= userPath({user_id: 1}) %>
 			3. <%= myPeepsPath() %>
@@ -441,7 +441,7 @@ func Test_App_NamedRoutes(t *testing.T) {
 	w := httptest.New(a)
 	res := w.HTML("/").Get()
 
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Contains(res.Body.String(), "1. /")
 	r.Contains(res.Body.String(), "2. /users/1")
 	r.Contains(res.Body.String(), "3. /peeps")
@@ -468,7 +468,7 @@ func Test_App_NamedRoutes_MissingParameter(t *testing.T) {
 
 	sampleHandler := func(c Context) error {
 		c.Set("opts", map[string]interface{}{})
-		return c.Render(200, rr.String(`
+		return c.Render(http.StatusOK, rr.String(`
 			<%= userPath(opts) %>
 		`))
 	}
@@ -477,7 +477,7 @@ func Test_App_NamedRoutes_MissingParameter(t *testing.T) {
 	w := httptest.New(a)
 	res := w.HTML("/users/1").Get()
 
-	r.Equal(500, res.Code)
+	r.Equal(http.StatusInternalServerError, res.Code)
 	r.Contains(res.Body.String(), "missing parameters for /users/{user_id}")
 }
 
@@ -592,7 +592,7 @@ func (mwResource) Use() []MiddlewareFunc {
 }
 
 func (m mwResource) List(c Context) error {
-	return c.Render(200, render.String("southern harmony and the musical companion"))
+	return c.Render(http.StatusOK, render.String("southern harmony and the musical companion"))
 }
 
 func Test_Resource_MW(t *testing.T) {
@@ -603,11 +603,11 @@ func Test_Resource_MW(t *testing.T) {
 
 	w := httptest.New(a)
 	res := w.HTML("/foo?good=true").Get()
-	r.Equal(200, res.Code)
+	r.Equal(http.StatusOK, res.Code)
 	r.Contains(res.Body.String(), "southern harmony")
 
 	res = w.HTML("/foo").Get()
-	r.Equal(500, res.Code)
+	r.Equal(http.StatusInternalServerError, res.Code)
 
 	r.NotContains(res.Body.String(), "southern harmony")
 }
@@ -615,31 +615,31 @@ func Test_Resource_MW(t *testing.T) {
 type userResource struct{}
 
 func (u *userResource) List(c Context) error {
-	return c.Render(200, render.String("list"))
+	return c.Render(http.StatusOK, render.String("list"))
 }
 
 func (u *userResource) Show(c Context) error {
-	return c.Render(200, render.String(`show <%=params["user_id"] %>`))
+	return c.Render(http.StatusOK, render.String(`show <%=params["user_id"] %>`))
 }
 
 func (u *userResource) New(c Context) error {
-	return c.Render(200, render.String("new"))
+	return c.Render(http.StatusOK, render.String("new"))
 }
 
 func (u *userResource) Create(c Context) error {
-	return c.Render(200, render.String("create"))
+	return c.Render(http.StatusOK, render.String("create"))
 }
 
 func (u *userResource) Edit(c Context) error {
-	return c.Render(200, render.String(`edit <%=params["user_id"] %>`))
+	return c.Render(http.StatusOK, render.String(`edit <%=params["user_id"] %>`))
 }
 
 func (u *userResource) Update(c Context) error {
-	return c.Render(200, render.String(`update <%=params["user_id"] %>`))
+	return c.Render(http.StatusOK, render.String(`update <%=params["user_id"] %>`))
 }
 
 func (u *userResource) Destroy(c Context) error {
-	return c.Render(200, render.String(`destroy <%=params["user_id"] %>`))
+	return c.Render(http.StatusOK, render.String(`destroy <%=params["user_id"] %>`))
 }
 
 func Test_ResourceOnResource(t *testing.T) {
@@ -750,7 +750,7 @@ func Test_CatchAll_Route(t *testing.T) {
 	a := New(Options{})
 	a.GET("/{name:.+}", func(c Context) error {
 		name := c.Param("name")
-		return c.Render(200, rr.String(name))
+		return c.Render(http.StatusOK, rr.String(name))
 	})
 
 	w := httptest.New(a)
@@ -792,13 +792,13 @@ func Test_Router_Matches_Trailing_Slash(t *testing.T) {
 				},
 			})
 			app.GET(tt.mapped, func(c Context) error {
-				return c.Render(200, render.String(c.Request().URL.Path))
+				return c.Render(http.StatusOK, render.String(c.Request().URL.Path))
 			})
 
 			w := httptest.New(app)
 			res := w.HTML(tt.browser).Get()
 
-			r.Equal(200, res.Code)
+			r.Equal(http.StatusOK, res.Code)
 			r.Equal(tt.expected, res.Body.String())
 		})
 	}