diff options
| author | Christine Dodrill <me@christine.website> | 2018-07-01 13:36:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-01 13:36:38 -0700 |
| commit | b0e0b108231f9b71eebe68d8e9b99ca2846b4534 (patch) | |
| tree | ed26794d6eca41f004531e1a007d2a308635640e | |
| parent | 7d8c210f1499bce3558f107402f2c7ccf8417e7d (diff) | |
| parent | 920c0d303f9bce6207e221726bbacaa2022b540a (diff) | |
| download | xesite-b0e0b108231f9b71eebe68d8e9b99ca2846b4534.tar.xz xesite-b0e0b108231f9b71eebe68d8e9b99ca2846b4534.zip | |
Merge pull request #7 from Xe/rip-out-mage
Rip out mage
| -rw-r--r-- | Dockerfile | 14 | ||||
| -rw-r--r-- | box.rb | 36 | ||||
| -rw-r--r-- | cmd/site/gopreload.go (renamed from gopreload.go) | 0 | ||||
| -rw-r--r-- | cmd/site/gops.go (renamed from gops.go) | 0 | ||||
| -rw-r--r-- | cmd/site/hash.go (renamed from hash.go) | 0 | ||||
| -rw-r--r-- | cmd/site/html.go (renamed from html.go) | 0 | ||||
| -rw-r--r-- | cmd/site/main.go (renamed from main.go) | 14 | ||||
| -rw-r--r-- | cmd/site/rss.go (renamed from rss.go) | 0 | ||||
| -rw-r--r-- | mage.go | 80 | ||||
| -rw-r--r-- | mage_helpers.go | 75 | ||||
| -rw-r--r-- | rice-box.go | 365 | ||||
| -rwxr-xr-x | scripts/deploy.sh | 7 | ||||
| -rwxr-xr-x | scripts/setupremote.sh | 6 | ||||
| -rw-r--r-- | static2/favicon/android-icon-144x144.png (renamed from static/favicon/android-icon-144x144.png) | bin | 13978 -> 13978 bytes | |||
| -rw-r--r-- | static2/favicon/android-icon-192x192.png (renamed from static/favicon/android-icon-192x192.png) | bin | 17669 -> 17669 bytes | |||
| -rw-r--r-- | static2/favicon/android-icon-36x36.png (renamed from static/favicon/android-icon-36x36.png) | bin | 3074 -> 3074 bytes | |||
| -rw-r--r-- | static2/favicon/android-icon-48x48.png (renamed from static/favicon/android-icon-48x48.png) | bin | 4151 -> 4151 bytes | |||
| -rw-r--r-- | static2/favicon/android-icon-72x72.png (renamed from static/favicon/android-icon-72x72.png) | bin | 6252 -> 6252 bytes | |||
| -rw-r--r-- | static2/favicon/android-icon-96x96.png (renamed from static/favicon/android-icon-96x96.png) | bin | 8678 -> 8678 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-114x114.png (renamed from static/favicon/apple-icon-114x114.png) | bin | 10504 -> 10504 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-120x120.png (renamed from static/favicon/apple-icon-120x120.png) | bin | 11213 -> 11213 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-144x144.png (renamed from static/favicon/apple-icon-144x144.png) | bin | 13978 -> 13978 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-152x152.png (renamed from static/favicon/apple-icon-152x152.png) | bin | 14834 -> 14834 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-180x180.png (renamed from static/favicon/apple-icon-180x180.png) | bin | 18377 -> 18377 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-57x57.png (renamed from static/favicon/apple-icon-57x57.png) | bin | 4905 -> 4905 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-60x60.png (renamed from static/favicon/apple-icon-60x60.png) | bin | 5164 -> 5164 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-72x72.png (renamed from static/favicon/apple-icon-72x72.png) | bin | 6252 -> 6252 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-76x76.png (renamed from static/favicon/apple-icon-76x76.png) | bin | 6653 -> 6653 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon-precomposed.png (renamed from static/favicon/apple-icon-precomposed.png) | bin | 18245 -> 18245 bytes | |||
| -rw-r--r-- | static2/favicon/apple-icon.png (renamed from static/favicon/apple-icon.png) | bin | 18245 -> 18245 bytes | |||
| -rw-r--r-- | static2/favicon/browserconfig.xml (renamed from static/favicon/browserconfig.xml) | 0 | ||||
| -rw-r--r-- | static2/favicon/favicon-16x16.png (renamed from static/favicon/favicon-16x16.png) | bin | 1729 -> 1729 bytes | |||
| -rw-r--r-- | static2/favicon/favicon-32x32.png (renamed from static/favicon/favicon-32x32.png) | bin | 2768 -> 2768 bytes | |||
| -rw-r--r-- | static2/favicon/favicon-96x96.png (renamed from static/favicon/favicon-96x96.png) | bin | 8678 -> 8678 bytes | |||
| -rw-r--r-- | static2/favicon/favicon.ico (renamed from static/favicon/favicon.ico) | bin | 1150 -> 1150 bytes | |||
| -rw-r--r-- | static2/favicon/manifest.json (renamed from static/favicon/manifest.json) | 0 | ||||
| -rw-r--r-- | static2/favicon/ms-icon-144x144.png (renamed from static/favicon/ms-icon-144x144.png) | bin | 13978 -> 13978 bytes | |||
| -rw-r--r-- | static2/favicon/ms-icon-150x150.png (renamed from static/favicon/ms-icon-150x150.png) | bin | 14670 -> 14670 bytes | |||
| -rw-r--r-- | static2/favicon/ms-icon-310x310.png (renamed from static/favicon/ms-icon-310x310.png) | bin | 40648 -> 40648 bytes | |||
| -rw-r--r-- | static2/favicon/ms-icon-70x70.png (renamed from static/favicon/ms-icon-70x70.png) | bin | 6092 -> 6092 bytes | |||
| -rw-r--r-- | static2/geekcode.txt (renamed from static/geekcode.txt) | 0 | ||||
| -rw-r--r-- | static2/gpg.pub (renamed from static/gpg.pub) | 0 | ||||
| -rw-r--r-- | static2/img/about/tower.jpg (renamed from static/img/about/tower.jpg) | bin | 147510 -> 147510 bytes | |||
| -rw-r--r-- | static2/img/avatar.png (renamed from static/img/avatar.png) | bin | 91262 -> 91262 bytes | |||
| -rw-r--r-- | static2/img/lokahi.dot (renamed from static/img/lokahi.dot) | 0 | ||||
| -rw-r--r-- | static2/img/lokahi.png (renamed from static/img/lokahi.png) | bin | 42338 -> 42338 bytes | |||
| -rw-r--r-- | static2/keybase.txt (renamed from static/keybase.txt) | 0 | ||||
| -rw-r--r-- | static2/resume/resume.md (renamed from static/resume/resume.md) | 0 |
48 files changed, 30 insertions, 567 deletions
@@ -1,4 +1,16 @@ -FROM xena/christine.website:1.1-47-g3228e3b +FROM xena/go:1.10 AS build +COPY . /root/go/src/github.com/Xe/site +RUN CGO_ENABLED=0 GOBIN=/root go install github.com/Xe/site/cmd/site + +FROM xena/alpine EXPOSE 5000 RUN apk add --no-cache bash +COPY --from=build /root/site /site/site +COPY ./static2 /site/static +COPY ./templates /site/templates +COPY ./blog /site/blog +COPY ./css /site/css +COPY ./run.sh /site/run.sh + +HEALTHCHECK CMD curl --fail http://127.0.0.1:5000 || exit 1 CMD /site/run.sh @@ -1,36 +0,0 @@ -from "xena/go:1.10" - -### Copy files -run "mkdir -p /site" - -def put(file) - copy "./#{file}", "/site/#{file}" -end - -files = [ - "gops.go", - "hash.go", - "html.go", - "main.go", - "rss.go", - "run.sh", - "templates", - "blog", - "rice-box.go" -] - -files.each { |x| put x } - -copy "vendor/", "/root/go/src/" - -### Build -run "cd /site && go build -v" - -### Cleanup -run %q[ rm -rf /root/go /site/backend /root/sdk /site/*.go ] -run %q[ rm -rf /usr/local/bin/go* ] - -cmd "/site/run.sh" - -flatten -tag "xena/christine.website" diff --git a/gopreload.go b/cmd/site/gopreload.go index 6829ae5..6829ae5 100644 --- a/gopreload.go +++ b/cmd/site/gopreload.go diff --git a/gops.go b/cmd/site/gops.go index 184b656..184b656 100644 --- a/gops.go +++ b/cmd/site/gops.go diff --git a/hash.go b/cmd/site/hash.go index ed6112c..ed6112c 100644 --- a/hash.go +++ b/cmd/site/hash.go diff --git a/html.go b/cmd/site/html.go index ba304c5..ba304c5 100644 --- a/html.go +++ b/cmd/site/html.go diff --git a/main.go b/cmd/site/main.go index e0cc20d..bad297e 100644 --- a/main.go +++ b/cmd/site/main.go @@ -12,7 +12,6 @@ import ( "sync" "time" - "github.com/GeertJohan/go.rice" "github.com/Xe/jsonfeed" "github.com/Xe/ln" "github.com/gorilla/feeds" @@ -135,17 +134,12 @@ func Build() (*Site, error) { sort.Sort(sort.Reverse(s.Posts)) - cb, err := rice.FindBox("css") + resumeData, err := ioutil.ReadFile("./static/resume/resume.md") if err != nil { return nil, err } - sb, err := rice.FindBox("static") - if err != nil { - return nil, err - } - - s.Resume = template.HTML(blackfriday.Run(sb.MustBytes("resume/resume.md"))) + s.Resume = template.HTML(blackfriday.Run(resumeData)) for _, item := range s.Posts { itime, _ := time.Parse("2006-01-02", item.Date) @@ -174,8 +168,8 @@ func Build() (*Site, error) { s.mux.HandleFunc("/blog.atom", s.createAtom) s.mux.HandleFunc("/blog.json", s.createJsonFeed) s.mux.HandleFunc("/blog/", s.showPost) - s.mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(sb.HTTPBox()))) - s.mux.Handle("/css/", http.StripPrefix("/css/", http.FileServer(cb.HTTPBox()))) + s.mux.Handle("/css/", http.FileServer(http.Dir("."))) + s.mux.Handle("/static/", http.FileServer(http.Dir("."))) return s, nil } diff --git a/mage.go b/mage.go deleted file mode 100644 index ee31edd..0000000 --- a/mage.go +++ /dev/null @@ -1,80 +0,0 @@ -// +build mage - -package main - -import ( - "context" - "fmt" - "os" - - "github.com/magefile/mage/mg" -) - -func do(cmd string, args ...string) { - shouldWork(context.Background(), nil, wd, cmd, args...) -} - -// Setup installs the tools that other parts of the build process depend on. -func Setup(ctx context.Context) { - // go tools - do("go", "get", "-u", "-v", "github.com/GeertJohan/go.rice/rice") - - do("git", "remote", "add", "dokku", "dokku@minipaas.xeserv.us") -} - -// Generate runs all of the code generation. -func Generate(ctx context.Context) { - shouldWork(ctx, nil, wd, "rice", "embed-go") -} - -// Docker creates the docker image xena/christine.website using box(1). -func Docker() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - mg.Deps(Generate) - - shouldWork(ctx, nil, wd, "box", "box.rb") -} - -// Deploy does the work needed to deploy this image to the dokku server. -func Deploy(ctx context.Context) error { - mg.Deps(Docker) - - tag, err := gitTag() - if err != nil { - return err - } - - do("docker", "tag", "xena/christine.website", "xena/christine.website:"+tag) - do("docker", "push", "xena/christine.website:"+tag) - - const dockerfileTemplate = `FROM xena/christine.website:${VERSION} -EXPOSE 5000 -RUN apk add --no-cache bash -CMD /site/run.sh` - data := os.Expand(dockerfileTemplate, func(inp string) string { - switch inp { - case "VERSION": - return tag - default: - return "<unknown arg " + inp + ">" - } - }) - - os.Remove("Dockerfile") - fout, err := os.Create("Dockerfile") - if err != nil { - return err - } - - fmt.Fprintln(fout, data) - fout.Close() - - do("git", "add", "Dockerfile") - do("git", "commit", "-m", "Dockerfile: update for deployment of version "+tag) - do("git", "push", "dokku", "master") - do("git", "push") - - return nil -} diff --git a/mage_helpers.go b/mage_helpers.go deleted file mode 100644 index 08c4526..0000000 --- a/mage_helpers.go +++ /dev/null @@ -1,75 +0,0 @@ -// +build mage - -package main - -import ( - "context" - "log" - "os" - "os/exec" - "strings" - - "github.com/jtolds/qod" - "github.com/pkg/errors" -) - -var wd string - -func init() { - lwd, err := os.Getwd() - qod.ANE(err) - - wd = lwd -} - -// must end in a slash -const pkgBase = "github.com/Xe/site/" - -func output(cmd string, args ...string) (string, error) { - c := exec.Command(cmd, args...) - c.Env = os.Environ() - c.Stderr = os.Stderr - b, err := c.Output() - if err != nil { - return "", errors.Wrapf(err, `failed to run %v %q`, cmd, args) - } - return string(b), nil -} - -func gitTag() (string, error) { - s, err := output("git", "describe", "--tags") - if err != nil { - ee, ok := errors.Cause(err).(*exec.ExitError) - if ok && ee.Exited() { - // probably no git tag - return "dev", nil - } - return "", err - } - - return strings.TrimSuffix(s, "\n"), nil -} - -func shouldWork(ctx context.Context, env []string, dir string, cmdName string, args ...string) { - loc, err := exec.LookPath(cmdName) - qod.ANE(err) - - cmd := exec.CommandContext(ctx, loc, args...) - cmd.Dir = dir - cmd.Env = append(env, os.Environ()...) - - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - - log.Printf("starting process, env: %v, pwd: %s, cmd: %s, args: %v", env, dir, loc, args) - err = cmd.Run() - qod.ANE(err) -} - -func goBuild(ctx context.Context, env []string, dir string, pkgname string) { - shouldWork(ctx, env, dir, "go", "build", "-v", pkgBase+pkgname) -} - -func goInstall(ctx context.Context, env []string, pkgname string) { - shouldWork(ctx, nil, wd, "go", "install", pkgBase+pkgname) -} diff --git a/rice-box.go b/rice-box.go deleted file mode 100644 index 3be82fc..0000000 --- a/rice-box.go +++ /dev/null @@ -1,365 +0,0 @@ -package main - -import ( - "github.com/GeertJohan/go.rice/embedded" - "time" -) - -func init() { - - // define files - file2 := &embedded.EmbeddedFile{ - Filename: "hack.css", - FileModTime: time.Unix(1517162200, 0), - Content: string("html{font-size:12px}*{box-sizing:border-box;text-rendering:geometricPrecision}body{font-size:1rem;line-height:1.5rem;margin:0;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;word-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.3em}fieldset{border:none;padding:0;margin:0}pre{padding:2rem;margin:1.75rem 0;background-color:#fff;border:1px solid #ccc;overflow:auto}code[class*=language-],pre[class*=language-],pre code{font-weight:100;text-shadow:none;margin:1.75rem 0}a{cursor:pointer;color:#ff2e88;text-decoration:none;border-bottom:1px solid #ff2e88}a:hover{background-color:#ff2e88;color:#fff}.grid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid.\\-top{-ms-flex-align:start;align-items:flex-start}.grid.\\-middle{-ms-flex-align:center;align-items:center}.grid.\\-bottom{-ms-flex-align:end;align-items:flex-end}.grid.\\-stretch{-ms-flex-align:stretch;align-items:stretch}.grid.\\-baseline{-ms-flex-align:baseline;align-items:baseline}.grid.\\-left{-ms-flex-pack:start;justify-content:flex-start}.grid.\\-center{-ms-flex-pack:center;justify-content:center}.grid.\\-right{-ms-flex-pack:end;justify-content:flex-end}.grid.\\-between{-ms-flex-pack:justify;justify-content:space-between}.grid.\\-around{-ms-flex-pack:distribute;justify-content:space-around}.cell{-ms-flex:1;flex:1;box-sizing:border-box}@media screen and (min-width:768px){.cell.\\-1of12{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.cell.\\-2of12{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}.cell.\\-3of12{-ms-flex:0 0 25%;flex:0 0 25%}.cell.\\-4of12{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}.cell.\\-5of12{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%}.cell.\\-6of12{-ms-flex:0 0 50%;flex:0 0 50%}.cell.\\-7of12{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%}.cell.\\-8of12{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%}.cell.\\-9of12{-ms-flex:0 0 75%;flex:0 0 75%}.cell.\\-10of12{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%}.cell.\\-11of12{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%}}@media screen and (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.cell{-ms-flex:0 0 auto;flex:0 0 auto}}.hack,.hack blockquote,.hack code,.hack em,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack strong{font-size:1rem;font-style:normal;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.hack blockquote,.hack code,.hack em,.hack strong{line-height:20px}.hack blockquote,.hack code,.hack footer,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack header,.hack li,.hack ol,.hack p,.hack section,.hack ul{float:none;margin:0;padding:0}.hack blockquote,.hack h1,.hack ol,.hack p,.hack ul{margin-top:20px;margin-bottom:20px}.hack h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 30px;margin:0;overflow:hidden}.hack h1:after{content:\"====================================================================================================\";position:absolute;bottom:10px;left:0}.hack h1+*{margin-top:0}.hack h2,.hack h3,.hack h4,.hack h5,.hack h6{position:relative;margin-bottom:1.75rem}.hack h2:before,.hack h3:before,.hack h4:before,.hack h5:before,.hack h6:before{display:inline}.hack h2:before{content:\"## \"}.hack h3:before{content:\"### \"}.hack h4:before{content:\"#### \"}.hack h5:before{content:\"##### \"}.hack h6:before{content:\"###### \"}.hack li{position:relative;display:block;padding-left:20px}.hack li:after{position:absolute;top:0;left:0}.hack ul>li:after{content:\"-\"}.hack ol{counter-reset:a}.hack ol>li:after{content:counter(a) \".\";counter-increment:a}.hack blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.hack blockquote:after{content:\">\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\\A>\";white-space:pre;position:absolute;top:0;left:0;line-height:20px}.hack em:after,.hack em:before{content:\"*\";display:inline}.hack pre code:after,.hack pre code:before{content:\"\"}.hack code{font-weight:700}.hack code:after,.hack code:before{content:\"`\";display:inline}.hack hr{position:relative;height:20px;overflow:hidden;border:0;margin:20px 0}.hack hr:after{content:\"----------------------------------------------------------------------------------------------------\";position:absolute;top:0;left:0;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.hack h1{display:block}}.hack-ones ol>li:after{content:\"1.\"}p{margin:0 0 1.75rem}.container{max-width:70rem}.container,.container-fluid{margin:0 auto;padding:0 1rem}.inner{padding:1rem}.inner2x{padding:2rem}.pull-left{float:left}.pull-right{float:right}.progress-bar{height:8px;opacity:.8;background-color:#ccc;margin-top:12px}.progress-bar.progress-bar-show-percent{margin-top:38px}.progress-bar-filled{background-color:gray;height:100%;transition:width .3s ease;position:relative;width:0}.progress-bar-filled:before{content:\"\";border:6px solid transparent;border-top-color:gray;position:absolute;top:-12px;right:-6px}.progress-bar-filled:after{color:gray;content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-38px;right:0;-ms-transform:translateX(50%);transform:translateX(50%)}table{width:100%;border-collapse:collapse;margin:1.75rem 0;color:#778087}table td,table th{vertical-align:top;border:1px solid #ccc;line-height:15px;padding:10px}table thead th{font-size:10px}table tbody td:first-child{font-weight:700;color:#333}.form{width:30rem}.form-group{margin-bottom:1.75rem;overflow:auto}.form-group label{border-bottom:2px solid #ccc;color:#333;width:10rem;display:inline-block;height:38px;line-height:38px;padding:0;float:left;position:relative}.form-group.form-success label{color:#4caf50!important;border-color:#4caf50!important}.form-group.form-warning label{color:#ff9800!important;border-color:#ff9800!important}.form-group.form-error label{color:#f44336!important;border-color:#f44336!important}.form-control{outline:none;border:none;border-bottom:2px solid #ccc;padding:.5rem 0;width:20rem;height:38px;background-color:transparent}.form-control:focus{border-color:#555}.form-group.form-textarea label:after{position:absolute;content:\"\";width:2px;background-color:#fff;right:-2px;top:0;bottom:0}textarea.form-control{height:auto;resize:none;padding:1rem 0;border-bottom:2px solid #ccc;border-left:2px solid #ccc;padding:.5rem}select.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}.help-block{color:#999;margin-top:.5rem}.form-actions{margin-bottom:1.75rem}.btn{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;outline:none;padding:.65rem 2rem;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.btn:active{box-shadow:inset 0 1px 3px rgba(0,0,0,.12)}.btn.btn-ghost{border-color:#757575;color:#757575;background-color:transparent}.btn.btn-ghost:focus,.btn.btn-ghost:hover{border-color:#424242;color:#424242;z-index:2}.btn.btn-ghost:hover{background-color:transparent}.btn-block{width:100%;display:-ms-flexbox;display:flex}.btn-default{color:#fff;background-color:#e0e0e0;border:1px solid #e0e0e0;color:#333}.btn-default:focus:not(.btn-ghost),.btn-default:hover{background-color:#dcdcdc;border-color:#dcdcdc}.btn-success{color:#fff;background-color:#4caf50;border:1px solid #4caf50}.btn-success:focus:not(.btn-ghost),.btn-success:hover{background-color:#43a047;border-color:#43a047}.btn-success.btn-ghost{border-color:#4caf50;color:#4caf50}.btn-success.btn-ghost:focus,.btn-success.btn-ghost:hover{border-color:#388e3c;color:#388e3c;z-index:2}.btn-error{color:#fff;background-color:#f44336;border:1px solid #f44336}.btn-error:focus:not(.btn-ghost),.btn-error:hover{background-color:#e53935;border-color:#e53935}.btn-error.btn-ghost{border-color:#f44336;color:#f44336}.btn-error.btn-ghost:focus,.btn-error.btn-ghost:hover{border-color:#d32f2f;color:#d32f2f;z-index:2}.btn-warning{color:#fff;background-color:#ff9800;border:1px solid #ff9800}.btn-warning:focus:not(.btn-ghost),.btn-warning:hover{background-color:#fb8c00;border-color:#fb8c00}.btn-warning.btn-ghost{border-color:#ff9800;color:#ff9800}.btn-warning.btn-ghost:focus,.btn-warning.btn-ghost:hover{border-color:#f57c00;color:#f57c00;z-index:2}.btn-info{color:#fff;background-color:#00bcd4;border:1px solid #00bcd4}.btn-info:focus:not(.btn-ghost),.btn-info:hover{background-color:#00acc1;border-color:#00acc1}.btn-info.btn-ghost{border-color:#00bcd4;color:#00bcd4}.btn-info.btn-ghost:focus,.btn-info.btn-ghost:hover{border-color:#0097a7;color:#0097a7;z-index:2}.btn-primary{color:#fff;background-color:#2196f3;border:1px solid #2196f3}.btn-primary:focus:not(.btn-ghost),.btn-primary:hover{background-color:#1e88e5;border-color:#1e88e5}.btn-primary.btn-ghost{border-color:#2196f3;color:#2196f3}.btn-primary.btn-ghost:focus,.btn-primary.btn-ghost:hover{border-color:#1976d2;color:#1976d2;z-index:2}.btn-group{overflow:auto}.btn-group .btn{float:left}.btn-group .btn-ghost:not(:first-child){margin-left:-1px}.card{border:1px solid #ccc}.card .card-header{color:#333;text-align:center;background-color:#ddd;padding:.5rem 0}.alert{color:#ccc;padding:1rem;border:1px solid #ccc;margin-bottom:1.75rem}.alert-success{color:#4caf50;border-color:#4caf50}.alert-error{color:#f44336;border-color:#f44336}.alert-info{color:#00bcd4;border-color:#00bcd4}.alert-warning{color:#ff9800;border-color:#ff9800}.media:not(:last-child){margin-bottom:1.25rem}.media-left{padding-right:1rem}.media-left,.media-right{display:table-cell;vertical-align:top}.media-right{padding-left:1rem}.media-body{display:table-cell;vertical-align:top}.media-heading{font-size:1.16667rem;font-weight:700}.media-content{margin-top:.3rem}.avatarholder,.placeholder{background-color:#f0f0f0;text-align:center;color:#b9b9b9;font-size:1rem;border:1px solid #f0f0f0}.avatarholder{width:48px;height:48px;line-height:46px;font-size:2rem;background-size:cover;background-position:50%;background-repeat:no-repeat}.avatarholder.rounded{border-radius:33px}.loading{display:inline-block;content:\" \";height:20px;width:20px;margin:0 .5rem;animation:a .6s infinite linear;border:2px solid #e91e63;border-right-color:transparent;border-radius:50%}.btn .loading{margin-bottom:0;width:14px;height:14px}.btn div.loading{float:left}.alert .loading{margin-bottom:-5px}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.menu{width:100%}.menu .menu-item{display:block;color:#616161;border-color:#616161}.menu .menu-item.active,.menu .menu-item:hover{color:#000;border-color:#000;background-color:transparent}@media screen and (max-width:768px){.form-group label{display:block;border-bottom:none;width:100%}.form-group.form-textarea label:after{display:none}.form-control{width:100%}textarea.form-control{border-left:none;padding:.5rem 0}pre::-webkit-scrollbar{height:3px}}@media screen and (max-width:480px){.form{width:100%}}"), - } - file3 := &embedded.EmbeddedFile{ - Filename: "solarized-dark.css", - FileModTime: time.Unix(1517162200, 0), - Content: string(".solarized-dark{background-color:#073642;color:#78909c}.solarized-dark h1,.solarized-dark h2,.solarized-dark h3,.solarized-dark h4,.solarized-dark h5,.solarized-dark h6{color:#1e88e5}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a,.solarized-dark h6 a{color:#1e88e5;border-bottom-color:#1e88e5}.solarized-dark h1 a:hover,.solarized-dark h2 a:hover,.solarized-dark h3 a:hover,.solarized-dark h4 a:hover,.solarized-dark h5 a:hover,.solarized-dark h6 a:hover{background-color:#1e88e5;color:#fff}.solarized-dark pre{background-color:#073642;padding:0;border:none}.solarized-dark pre code{color:#009688}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a{color:#78909c}.solarized-dark code,.solarized-dark strong{color:#90a4ae}.solarized-dark code{font-weight:100}.solarized-dark .progress-bar-filled{background-color:#558b2f}.solarized-dark .progress-bar-filled:after,.solarized-dark .progress-bar-filled:before{color:#90a4ae}.solarized-dark table{color:#78909c}.solarized-dark table td,.solarized-dark table th{border-color:#b0bec5}.solarized-dark table tbody td:first-child{color:#b0bec5}.solarized-dark .form-group label{color:#78909c;border-color:#90a4ae}.solarized-dark .form-group.form-textarea label:after{background-color:#073642}.solarized-dark .form-control{color:#78909c;border-color:#90a4ae}.solarized-dark .form-control:focus{border-color:#cfd8dc;color:#cfd8dc}.solarized-dark textarea.form-control{color:#78909c}.solarized-dark .card{border-color:#90a4ae}.solarized-dark .card .card-header{background-color:transparent;color:#78909c;border-bottom:1px solid #90a4ae}.solarized-dark .btn.btn-ghost.btn-default{border-color:#607d8b;color:#607d8b}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#90a4ae;color:#90a4ae;z-index:1}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.solarized-dark .btn.btn-ghost.btn-primary:focus,.solarized-dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.solarized-dark .btn.btn-ghost.btn-success:focus,.solarized-dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.solarized-dark .btn.btn-ghost.btn-info:focus,.solarized-dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.solarized-dark .btn.btn-ghost.btn-error:focus,.solarized-dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.solarized-dark .btn.btn-ghost.btn-warning:focus,.solarized-dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.solarized-dark .avatarholder,.solarized-dark .placeholder{background-color:transparent;border-color:#90a4ae}.solarized-dark .menu .menu-item{color:#78909c;border-color:#90a4ae}.solarized-dark .menu .menu-item.active,.solarized-dark .menu .menu-item:hover{color:#fff;border-color:#78909c}"), - } - - // define dirs - dir1 := &embedded.EmbeddedDir{ - Filename: "", - DirModTime: time.Unix(1517162200, 0), - ChildFiles: []*embedded.EmbeddedFile{ - file2, // "hack.css" - file3, // "solarized-dark.css" - - }, - } - - // link ChildDirs - dir1.ChildDirs = []*embedded.EmbeddedDir{} - - // register embeddedBox - embedded.RegisterEmbeddedBox(`css`, &embedded.EmbeddedBox{ - Name: `css`, - Time: time.Unix(1517162200, 0), - Dirs: map[string]*embedded.EmbeddedDir{ - "": dir1, - }, - Files: map[string]*embedded.EmbeddedFile{ - "hack.css": file2, - "solarized-dark.css": file3, - }, - }) -} - -func init() { - - // define files - file6 := &embedded.EmbeddedFile{ - Filename: "favicon/android-icon-144x144.png", - FileModTime: time.Unix(1517162200, 0), - Content: string("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x90\x00\x00\x00\x90\b\x06\x00\x00\x00\xe7F\xe2\xb8\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\v\xfca\x05\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x00\tpHYs\x00\x00n\xba\x00\x00n\xba\x01\xd6ޱ\x17\x00\x004\rIDATx\xda\xed\x9dy|\\G\x95\xef\xbfuoo\xdaWK\xb2-\xefv\xbc/\xb1\x1d'\x8e\xe3x\xc9\x06I\x9c\x05\xb2\x91\x84!\x84\xc7d\x1e\x03\f\f\xcc0\xf3f\x06\x06>\xccJ\x12\xde\xc0\xc0\x9b\x85\x00\x81\f!\v\xb1\x9d\xe0,\x10'!vb'\xde\xe4}\xdf$Y\xb6dYR\xab\xd5{ߪ\xf7G\xf5\x95Z\xb2\x96^%H\xfc\xfb|\xfac\xab\xfbֽu\xeb\xfe\xee9\xa7\xce9uJ0\xc2X8e\x01\xc0x\xe0G\xc0\r\xc01\xe0\xc1\x9d\xc7\xeb\xde\x1b\xe9\xbe}P\x11\x1f\xf3\xc9\xc0\xf7\x81\x9b\xed\xef\xa5%\x99s\xf9\\\xfe\xe9\xff\xfe3\xb5\xe3k\x01xꉟ\xf3\xef\x8f~\x9fH$\x82\x10b\x0f\xf0\xc0\xce\xe3u\xfb\xec6\xc6H\xdf\f \x80\xab\x80\xcb\xe3\u007f\xe7\x01%\U0005bf04,#>\xaee\xc0\xff\x06\x96\xf7\xfaQ\x80\xdfׅ\xd7\xeb\x05 \x1a\x89\xd0v\xa1\x8dX,f\x1fq\x008\x9b\xd8\xe4\xf7\x81@\xc5\xc0\x1d@e\xfc\xef\x02\xa0z\xa4;\xf5AD\x9c<y\xc0\xc3\xc0\xff\x02\x8a\x12\u007f\x17Bp\xeel3\xdb\xde}\x9f\x80?@c}#{v\xee&\x16\x8b!\x84\b\x01;\x80\xf6\xc46\x8e߃\x1bZ\x02\xacL\xf8:\x1f\x18\x83&\xb7\x1c\xc9\xfe}\x90\x10\x1fk\ap'\xf0%\xa0\xb4\xef1B\bB\xc1 \xcf=\xf5,\xc7\x0e\x1f\xa5\xedB\x1b\a\xf6\x1e\xc00\f\x80f4\x81z=\x93\x11%P\xfc\xfa+\x80Q\t\xdf9\x81\x1a\xc0\x05\x84F\xb8\u007f\x1f\b\xc4\xc9#\x80\xab\x81\xaf\x00\xb5\x03\x1d+\x84\xe0l\xd3Y\x9a\xd65\x01`\x18\x06B\b\x80\x13\xc0\x91\x9d\xc7\xebz\x1d?b*,~S\x93\xd0\x04J$\xb2@\xab\xb0\xfc\x91\xea\xdb\a\x14s\x80\xaf\x03\v\x94R\x18\x86\x81i\x9a(\xa5.:P\b\x81a\x18\xb6\xe4\x01\xb0\xd0ҧ\xa5\xef\xb1#)\x81\f\xb4ꚧ\x94¾\xa98\xaaжP\xdb\b\xf6\xef\x03\x81\xf8\x8bZ\t\xfc\x19\xb0B)e\x94\x94\x96p˝\xb7RRR\u0086u\x1b\xa8?uږ2\x03!\f\xec\x05\xa2}\u007f\x18\x11\x02\xc5oj\x14\xf0\x11\xa0\xb8\xa8\xb8\x88\x82\xc2B.\xb4\xb6\x12\x8b\xc6\x00ʁ\u0091\xe8\xdb\a\t\xf1q.\x06\x1e\x01>\x0e8\f\xc3`Ս\xaby\xe4\v\x8f\xe0\xc9ϣ\xa0\xb0\x80\x1f<\xf6\xef\x84B\x83Z\v\x1dh\x15v\x11Fr\x16\xb6H)uuYE9\xff\xfb˟\xe3ۏ\xfd\x03\xabnX\x8d0\x04h\x02\x95]\x9aʧ\x8f\xf8ؙ\xc0]\xc0\x17\x80R\xa5\x14\x9e<\x0fW.\xbb\x92\xa2\x92b\x9cN'W\\\xbd\x84\xf2Q\x15\xfd\xaa\xb2\x04\x1c\x01\x8e\xf6\xb5\u007f`\xe4T\x98\x1b\xb8\x01E\xf5\x95W_ɚ\x8f\xddFAa\x01\x86!سk7\xe7\x9a\xce\x15\v!*3\xbeʇ\x1b\x02X\x04|\x9e\x04\xb7\x88i\x9ax\xf2\xf2\xba\x0fr\xbb\xdd8\x9d\xce\xc1Σ\x80\xedh)t\x11\x86]\x02\xc5ߌj\xe0*a\b1z\xech\xdcn7\x00\xe3'M`\xcc\xd81(\xa5\xf2\xd131\x91\xf6\x85>\xa4X8e\x81=Ɨ\x01\u007f\v̳\u007f\xd3\xd3\xf4\x10'\x8e\x9e\xc0\xb2,\x00\xeaO\xd5\xd3\xd1\xde1\xd8);\x81m@\xa4\xbf\x1fGJ\x02]\t̴\x8d\xe7D\x9a\xc4E\xa9\vM \x13\x88\xa5s\x81\x0f9ʀ\xcf\x017\xa1ǰ\x1b\xd1h\x94\xd7_\xfe\rs\x17̥\xb4\xac\x94\x17\x9f_Og{\xc7`Ft\x03p\x10-\x89.\xc2H\x10\xa8\x18\xb8\x15(F\xc1铧\xf1w\xf9))-\xe1\xf0\x81\xc3464\"\xf4\u074c\x89\xf7\xef\x12\x81\x92\xc4\xc2)\x97\x03\xca\t\xdc\x03|\x02\xfd\"\xf6\x82\x10\x82\xc3\a\x0f\xf3Ϳ\xfa\x06.\xb7\x9b3\xf5\x8dH\xa5\x06#\xd0~\xa0\xa9?\xfb\a\x86\x99@q\xd1:\x13-\x81\x04\x02\xb6o\xdd\xc6\xff\xfc\xf8)\xa6N\x9f\xca\xfa\xe7\xd6s\xe1\xfc\x05\xfbfFsə\x984\xf4\xd8\n\x01\xeaZ\xe0\xcb\xf4v\xce\xf6\x82R\x8a3\rg\x00M\xa8A\xc8\x13\x06\xea\x18\xc0\xfe\x81\xe1\x97@N\xb4\xe3p\xbc\xdd\xf9No'O=\xf1s\xdc\x1e7]\xbe\xae\xc4\xd9@\r:V\xd39\xcc}\xfc\x03\x86\x9c\x0e\xfc%pY⬪?\x82\f\xe1\xf7\xb1ц\xf6\xffX\x03\x1d0\xdc\x04\xaa\x04\xaeE\a\xf4\xbao$\x14\n\x11\f\x06\x13\x1d\x89\xa0ߠ\n\xe0\xcc0\xf7\xb1\x1b\x91-\xa7\x11خ|\x85D\xe1\xbaj\xfcHug@\xc4%{\t\xf0Y\xf4\v*&N\x9eȂE\x97s\xec\xf0Q\x0e\xec;0\xd44} \xb4\x03\x8d\x03\xa9/\x18F\x02\xc5or\x1czv\xd0\v\x03\x88\xd1\x12r\x1c\x95\xb7\xb64\fyL<r(\x94\x10ʔ\x83\xb71\x97\x8e\xcbew\xfbE|\\]\xc0\xbd\xc0\x03RJwyE9\x0f\xfd\xc9\xc3\xdct\xcbM\xecٵ\x9b\u007f\xf9\xfb\u007f\xe6\xf8\xd1\xe3}_\xd0dp\x9a>\xe9\x1b}1\x9c\x12\xc8D\xdb>\xe3\xa0{\xb65\x98(u\xa3%PV1\x00\x01\x9c\xe8\xd8[)Zu\x8eFK\xc0R\x03\xf2P\xca\x14\n\t\x04\xd0\xf6@3Z2\x9e\x8b\xff\x1d\x04d\u2e47\x99L\xcb\xd0A\xd2j\xa5\x14\xa3kǰ`\xf1\x02\xdc\x1e7s\xe6\xcfe\xe1\x92E\x9c8v\"\xd5s\xc6\xd0\xf6υ\xc1\x0e\x1aN\x02\x15\x03\xab\x00\x0f\x02\xf2\xf2\xf2\x89\x84\xc3X\x965\x10\x89\f\xa0x\xe1\x94\x05\f&B\x93E\x1f\xe2x\xd0\x04\xa9DK\xc49\xc0ltp\xb7\n\x1dFq\xa2I/\xe2\x1f\x15\xffXh\x9fH'Є\x9e\xe2\xee\x00v\xd2C\xaa\xb0\xb5\xa5!\xe7$\x8aK\x9fZtr\xd84\xd03\x93\x82\x82\x02\xf2\xf3t,\xda\xe5rQZV\x8a0\f\x94\x94\xc9\xda>\xa0_\x96]\be\rvа\x10(~\xa33\x80ņap\xd5\U000a5b3eq5;\xde\xdb\xc1\xc6\xd7^'\x1c\n\xf7wcN`\x02i\xe6\x05\xf5#i\x1ch\xe9\xb7\x10\x9d\x01\xb9\x00\x18\x1b\xff\x14\x91\x9a\xd32\x0f\xadbǡ\xa5\xea'\xd0d:\x05l\x06~\v\xd4Y[\x1a|v\x83l\x93)!\xce\xf5\xa7\xe8\xb4T\x01\xa0Ptz;\xf1\xf9|TVU\x12\f\x06i9\u05cc\xb4\xacTUX\x13\xb0\x0f9x\x9b\xe1\x92@\x02\xb8ZJY5n\xc28\x1ez\xe4\xd3,Z\xb2\x88\x05\x8b\x16\xd0X\xdf\xc0\ue77b\xfb#\x90\x03-\x11\xf2\x81\xaed/ԇ8\x0e49\xe6\x03ס\r\xf8\x19hɓM/\xbc;\xde\xd7Ihu\xf2\t`#\xf0\v`\x17\xe0\xd3\xfd\x12\x98KkӾ\x88\x8dES\x16\xa0t\xff\xd7\x00\x0f\xa13\x17\x000\x84\xe0\\\xd3Y\xea\xb6\uf8aa\xa6\x8a=\xbbv\xb3k{]:\x979\x044\xed<\xb1kЃ\x86\x8b@\x15\xc0\xb5J)\xf7e3.cʴ)\x00\x8c\x9f8\x819\xf3簷n\xef@\xed\xc6\xc7\xdb\x0eI\xa0>\xc4)D\xfb\x9b\xae\a\x96\xa2\xa5N\x15Z\xaa\xe5\x1a.`*:i\xfd\xa3\xf4\x10i\v(\u007f6T\x9b\x04\x84V\xbb_@\xdbl\xdd\x10\x86A\xa7\xb7\x93'~\xf8#6\xbf\xb5\x99\x86S\xf54\xd67\xa4*}\xec\xfc\x1f\xffP\a\xe6\x9c@qQ;\x05\x98)\x10\xb8=nLS{\xd7\r\xc3\xc0\xe3\xf1 \x84\x18h\x9aY\x03\x8cY8e\xc1\xe9\xfe\xec\xa0~\xd4T):Ev\r\xb0\x1a\xfd ]\x8c\f\f\xf4\v\xf0\x10zj\xfdK\xe0'\xc01\xbb\xdf\xe9\x10)!\x15\xe6\v\xe8`i\xbfhjl\xe2LÙ\xa1\x1c\x85\x03\xc1\x8b\xf6\xff\f\x19\x05\x18.\t4\t\xa8P(\x1a\xeb\x1biok\xa7\xa8\xb8\b\xaf\xd7˩\x93\xa7\x91\x96\xb4\xd38\xfa\xa2\x1cM\xbe-\x89_\xf6\xa3\xa6j\xd1\x0f\xe9&\xb4\xc4\x19\xcf\xefǂ\x01\xd0\xea{2\xf0\xe7\xe8\a\xfe$\xb0\x01\xe8LU\x1a%$\xc5\u007f\x8ax~π\x17M\x8f86\xea\xd1˫\x86\xc4p\x10ȍ6XK\f\xc3\xe0\xf0\xc1#\xac{v-7\xdfq\v[7oa\u05f6\x9d\x83\x99\xaf\xc5\xc0,\xb4\x14\x89@/\xf28\xd1ļ5>\x98s\xe9\xb3\xca\xe0\xf7\f\x1e4\xc1\x17\xa1#\xe4\xff\x0f\xa8OC\xa5-A\xaf\xa8(\xcba_\xcf\x00\x17\x92\x99\xfd\xe6\x94@\t\xe9\x94\v\x00S\bA8\x14\u2e67\x9eeӛ\x9bh=\xdfJg\x87w\xb07\xc5\x04f+T\xb9\xf5ޙsH\tڨ\x9e\x8b6\x8aoF\xaf'\xfbCʟ\xae\x04\xbe\x88\x96\xac\xff\x06l\xb5\xb64X0\xb8J\x8b\x8f\xe5\x04\xb4Ꚗ\xc3\xfe)t\x04\xbe_\xbb\xf3\xf9\xb9\x8fa(\x15\u007f\xe7հH\xa0I\xe8\x99O7\xfc~?G\x0f\x1dI\xcc\xf8\x1f\x10Rʙ\xd1Xl<\x86ю\x94\v\x81\xfb\x80\x1b\x81\x89\xe8\xb7\xfa\x0f\x11\xf9h\xa99\x05\xf86Z\xa5E\x06:8N\x9eB\xe0O\xd0/M.\xd5s\x10\xd8G\x82\x01\xfd\x8b9\xdf\"ώ>)I\x88\x12<\xf8L\x04\xae\\\x13\xc8@\x8b\xeb\xde3\x05!\xba\r\xe9\x81`\x1b\xd5%Eŵ\x1f\xb9z\xc5\xfdX\xd6}h\xe3x\x12}r\\\xfe@a\xa0g\x87\x8f\xc5\xc7\xe7)kK\x83o\x00)d\xa0g\x94\x0f\x92\x10G\xcc\x11.\xa0\xa7\xf0j\xfd\xfcǑR\x02\n\xa9$\x06\x86\x13py\xf0\x16\x82(E\xa9\xe2\\\x13\xc8\x03,F\xdbAI\xc1&NqA!\x8bg\xcfg\xd5\xe2\xa5y\x8bg\xcd{\x04\xa5l\xcf\xf0\a\r\x93\xd0\xcbm*\x80\x1fZ[\x1aڠG\x9d%8a\xff\x14\xed\xf4\xcc5\x1a\x80\x13\u007f\x93w?\xae\xfc|B]]&\x90o`\x14\xa3\x9d\xa7\x05\x80\a\x94\t\xb97\xa2\xcb\xd1!\x02@\x93Þ\xb2'\xaa.\x05()1\f\x83\xe2\xc2\".\x9f>\x8b\x1b\xae\xba\x96+fϧ\xb2\xb4\f\x01\x1e\x99^4\xf9\x0f\x055\xc0W\xd1/\xdcw\x89ǟ\x16L\x9a\az\"\xf1'ģ\xec9\xee\x87\x02\x8e\x8e6\xca[]\u0091\x17\xf2\xf9J\xd0\xc6zQ\xbcof\xc2q@\xee\t4\x15m\xab\xe0p8X\xbc\xf4\njkDze\xf3\x16\x1a\xeb\x1b\x11B \xe3\xc4\x19S]Õs.\xe7\x9a˯`\xde\xd4\x19\x94\x97\x94\"\x00\xa9\x14\x1fh\xea\xf4\xa0\x04\x9d\x00\xef\x04\xbe\xab\xf6v\x9c[x\xfb\n\x03m+=\xc0\xf08A\xa3\x15F\xf1\x99Ϻo\xae\x8d)\xab\x10\xad.\rz\xc7\x02{!g\x04\x8a\x8b\xde\xe9@\xb1R\x8aYsg\xf3\x95\xbf\xf9*\xb5\xe3jY\xf7\xdcZ\xfe\xed_\xfe\x8dp0ȸ\x9a1,\x9b\xbf\x98\x15\x8b\xafb\xee\xd4\xe9:\b\x18ϕ\xfe\x90\x10'\x11%\xe8\xc0\xa8\x03!\xfeA*9\xd6\x14\xe6gВ<\xe700B\x13\x8d\xea6\aFU\x14+Q\xda\r\xf8(r'\x81\x94\x10\b5\x1a0M\xd3d\xe9\xf2\xa5L\x984\x01\xd34Y\xbe\xe2\x1a\x0e\xbd\xb7\x87\nW!W\xcd]ȌIS)\xc8\xcbӤ\x91\x1f\xfaz\nEB\x88\xcf47\x9c\xa2\xaa\xacbTkG\xfb\x92\f\x1c\x82)\xc1\x89y~\xac\xa8l\x92)\xbc\xba\xb9#\x90Py\xc0$\xa5\x94\x03\x01e\x95e\x18\x12\xe8\nQ\x15\xf1\xf0\xa5\xbb\x1f\"\xcft\xe1t8Q\xa8\xb8\xb5\u007f\t\x00B\x88\x92s\xad\xe7?\x9f\xe7\xc9\x13J\xb59\x87\x8b@n\xe1\xac\x1fkVtHT\xd2\x17̺?\xc1\xdaҀz\xef\fQ+V!\xa5\x9c\xe4t8Ą\x9aZʤ\auڋ<ގ8\x1f\xa4ȕ\x87i\x9aH%\xd3M\xb7\xfc@B\b\ |
