From 58e004f7da58eaa8c461e34cc2fbbb9727f6fa33 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 14 Feb 2016 23:14:55 -0500 Subject: [PATCH] Remove cache avatar support and add its tests --- .bra.toml | 1 + Makefile | 10 +- README.md | 2 +- cmd/web.go | 6 - conf/app.ini | 2 - gogs.go | 2 +- models/user.go | 6 +- modules/avatar/avatar.go | 314 +--------------------------------- modules/avatar/avatar_test.go | 64 ++----- modules/base/tool.go | 18 +- modules/bindata/bindata.go | 4 +- modules/setting/setting.go | 2 - modules/ssh/ssh.go | 2 - templates/.VERSION | 2 +- 14 files changed, 45 insertions(+), 390 deletions(-) diff --git a/.bra.toml b/.bra.toml index 0a461cc597e..569f99ef009 100644 --- a/.bra.toml +++ b/.bra.toml @@ -11,6 +11,7 @@ watch_dirs = [ "$WORKDIR/routers" ] watch_exts = [".go"] +ignore_files = [".+_test.go"] build_delay = 1500 cmds = [ ["make", "build-dev"], # sqlite cert pam tidb diff --git a/Makefile b/Makefile index 4137d89d49a..8ba1aa7ae57 100644 --- a/Makefile +++ b/Makefile @@ -19,13 +19,13 @@ build: $(GENERATED) go install -v -ldflags '$(LDFLAGS)' -tags '$(TAGS)' cp '$(GOPATH)/bin/gogs' . -build-dev: $(GENERATED) - go install -v -race -tags '$(TAGS)' - cp '$(GOPATH)/bin/gogs' . - govet: go tool vet -composites=false -methods=false -structtags=false . +build-dev: $(GENERATED) govet + go install -v -race -tags '$(TAGS)' + cp '$(GOPATH)/bin/gogs' . + pack: rm -rf $(RELEASE_GOGS) mkdir -p $(RELEASE_GOGS) @@ -52,4 +52,4 @@ clean-mac: clean find . -name ".DS_Store" -print0 | xargs -0 rm test: - go test ./... + go test -cover -race ./... diff --git a/README.md b/README.md index ada97c1abf4..6c0d9c3a8e2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) -##### Current version: 0.8.35 +##### Current version: 0.8.36 | Web | UI | Preview | |:-------------:|:-------:|:-------:| diff --git a/cmd/web.go b/cmd/web.go index f5137e25e18..5bfbdb44955 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -34,7 +34,6 @@ import ( "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" - "github.com/gogits/gogs/modules/avatar" "github.com/gogits/gogs/modules/bindata" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware" @@ -245,11 +244,6 @@ func runWeb(ctx *cli.Context) { }) // ***** END: User ***** - // Gravatar service. - avt := avatar.CacheServer("public/img/avatar/", "public/img/avatar_default.jpg") - os.MkdirAll("public/img/avatar/", os.ModePerm) - m.Get("/avatar/:hash", avt.ServeHTTP) - adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true}) // ***** START: Admin ***** diff --git a/conf/app.ini b/conf/app.ini index 8b19e725e6e..277f313d52f 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -120,8 +120,6 @@ REGISTER_EMAIL_CONFIRM = false DISABLE_REGISTRATION = false ; User must sign in to view anything. REQUIRE_SIGNIN_VIEW = false -; Cache avatar as picture -ENABLE_CACHE_AVATAR = false ; Mail notification ENABLE_NOTIFY_MAIL = false ; More detail: https://github.com/gogits/gogs/issues/165 diff --git a/gogs.go b/gogs.go index 111d5fdb4ae..b079e846237 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.8.35.0214" +const APP_VER = "0.8.36.0214" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/user.go b/models/user.go index 09ad74d76d6..7a8817591cb 100644 --- a/models/user.go +++ b/models/user.go @@ -247,8 +247,6 @@ func (u *User) RelAvatarLink() string { } return "/avatars/" + com.ToStr(u.Id) - case setting.Service.EnableCacheAvatar: - return "/avatar/" + u.Avatar } return setting.GravatarSource + u.Avatar } @@ -493,7 +491,7 @@ func CreateUser(u *User) (err error) { u.LowerName = strings.ToLower(u.Name) u.AvatarEmail = u.Email - u.Avatar = avatar.HashEmail(u.AvatarEmail) + u.Avatar = base.HashEmail(u.AvatarEmail) u.Rands = GetUserSalt() u.Salt = GetUserSalt() u.EncodePasswd() @@ -628,7 +626,7 @@ func updateUser(e Engine, u *User) error { if len(u.AvatarEmail) == 0 { u.AvatarEmail = u.Email } - u.Avatar = avatar.HashEmail(u.AvatarEmail) + u.Avatar = base.HashEmail(u.AvatarEmail) } u.LowerName = strings.ToLower(u.Name) diff --git a/modules/avatar/avatar.go b/modules/avatar/avatar.go index b25b1bfe4e9..3d885eb3d43 100644 --- a/modules/avatar/avatar.go +++ b/modules/avatar/avatar.go @@ -2,74 +2,21 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -// for www.gravatar.com image cache - -/* -It is recommend to use this way - - cacheDir := "./cache" - defaultImg := "./default.jpg" - http.Handle("/avatar/", avatar.CacheServer(cacheDir, defaultImg)) -*/ package avatar import ( - "crypto/md5" - "encoding/hex" - "errors" "fmt" "image" "image/color/palette" - "image/jpeg" - "image/png" - "io" "math/rand" - "net/http" - "net/url" - "os" - "path/filepath" - "strings" - "sync" "time" "github.com/issue9/identicon" - "github.com/nfnt/resize" - - "github.com/gogits/gogs/modules/log" - "github.com/gogits/gogs/modules/setting" ) -//FIXME: remove cache module - -var gravatarSource string - -func UpdateGravatarSource() { - gravatarSource = setting.GravatarSource - if strings.HasPrefix(gravatarSource, "//") { - gravatarSource = "http:" + gravatarSource - } else if !strings.HasPrefix(gravatarSource, "http://") && - !strings.HasPrefix(gravatarSource, "https://") { - gravatarSource = "http://" + gravatarSource - } - log.Debug("avatar.UpdateGravatarSource(update gavatar source): %s", gravatarSource) -} - -// hash email to md5 string -// keep this func in order to make this package independent -func HashEmail(email string) string { - // https://en.gravatar.com/site/implement/hash/ - email = strings.TrimSpace(email) - email = strings.ToLower(email) - - h := md5.New() - h.Write([]byte(email)) - return hex.EncodeToString(h.Sum(nil)) -} - const _RANDOM_AVATAR_SIZE = 200 -// RandomImage generates and returns a random avatar image. -func RandomImage(data []byte) (image.Image, error) { +func RandomImageSize(size int, data []byte) (image.Image, error) { randExtent := len(palette.WebSafe) - 32 rand.Seed(time.Now().UnixNano()) colorIndex := rand.Intn(randExtent) @@ -78,262 +25,17 @@ func RandomImage(data []byte) (image.Image, error) { backColorIndex = randExtent - 1 } - // Size, background, forecolor - imgMaker, err := identicon.New(_RANDOM_AVATAR_SIZE, + // Define size, background, and forecolor + imgMaker, err := identicon.New(size, palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...) if err != nil { - return nil, err + return nil, fmt.Errorf("identicon.New: %v", err) } return imgMaker.Make(data), nil } -// Avatar represents the avatar object. -type Avatar struct { - Hash string - AlterImage string // image path - cacheDir string // image save dir - reqParams string - imagePath string - expireDuration time.Duration -} - -func New(hash string, cacheDir string) *Avatar { - return &Avatar{ - Hash: hash, - cacheDir: cacheDir, - expireDuration: time.Minute * 10, - reqParams: url.Values{ - "d": {"retro"}, - "size": {"290"}, - "r": {"pg"}}.Encode(), - imagePath: filepath.Join(cacheDir, hash+".image"), //maybe png or jpeg - } -} - -func (this *Avatar) HasCache() bool { - fileInfo, err := os.Stat(this.imagePath) - return err == nil && fileInfo.Mode().IsRegular() -} - -func (this *Avatar) Modtime() (modtime time.Time, err error) { - fileInfo, err := os.Stat(this.imagePath) - if err != nil { - return - } - return fileInfo.ModTime(), nil -} - -func (this *Avatar) Expired() bool { - modtime, err := this.Modtime() - return err != nil || time.Since(modtime) > this.expireDuration -} - -// default image format: jpeg -func (this *Avatar) Encode(wr io.Writer, size int) (err error) { - var img image.Image - decodeImageFile := func(file string) (img image.Image, err error) { - fd, err := os.Open(file) - if err != nil { - return - } - defer fd.Close() - - if img, err = jpeg.Decode(fd); err != nil { - fd.Seek(0, os.SEEK_SET) - img, err = png.Decode(fd) - } - return - } - imgPath := this.imagePath - if !this.HasCache() { - if this.AlterImage == "" { - return errors.New("request image failed, and no alt image offered") - } - imgPath = this.AlterImage - } - - if img, err = decodeImageFile(imgPath); err != nil { - return - } - m := resize.Resize(uint(size), 0, img, resize.Lanczos3) - return jpeg.Encode(wr, m, nil) -} - -// get image from gravatar.com -func (this *Avatar) Update() { - UpdateGravatarSource() - thunder.Fetch(gravatarSource+this.Hash+"?"+this.reqParams, - this.imagePath) -} - -func (this *Avatar) UpdateTimeout(timeout time.Duration) (err error) { - UpdateGravatarSource() - select { - case <-time.After(timeout): - err = fmt.Errorf("get gravatar image %s timeout", this.Hash) - case err = <-thunder.GoFetch(gravatarSource+this.Hash+"?"+this.reqParams, - this.imagePath): - } - return err -} - -type service struct { - cacheDir string - altImage string -} - -func (this *service) mustInt(r *http.Request, defaultValue int, keys ...string) (v int) { - for _, k := range keys { - if _, err := fmt.Sscanf(r.FormValue(k), "%d", &v); err == nil { - defaultValue = v - } - } - return defaultValue -} - -func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) { - urlPath := r.URL.Path - hash := urlPath[strings.LastIndex(urlPath, "/")+1:] - size := this.mustInt(r, 290, "s", "size") // default size = 290*290 - - avatar := New(hash, this.cacheDir) - avatar.AlterImage = this.altImage - if avatar.Expired() { - if err := avatar.UpdateTimeout(time.Millisecond * 1000); err != nil { - log.Trace("avatar update error: %v", err) - return - } - } - if modtime, err := avatar.Modtime(); err == nil { - etag := fmt.Sprintf("size(%d)", size) - if t, err := time.Parse(http.TimeFormat, r.Header.Get("If-Modified-Since")); err == nil && modtime.Before(t.Add(1*time.Second)) && etag == r.Header.Get("If-None-Match") { - h := w.Header() - delete(h, "Content-Type") - delete(h, "Content-Length") - w.WriteHeader(http.StatusNotModified) - return - } - w.Header().Set("Last-Modified", modtime.UTC().Format(http.TimeFormat)) - w.Header().Set("ETag", etag) - } - w.Header().Set("Content-Type", "image/jpeg") - - if err := avatar.Encode(w, size); err != nil { - log.Warn("avatar encode error: %v", err) - w.WriteHeader(500) - } -} - -// http.Handle("/avatar/", avatar.CacheServer("./cache")) -func CacheServer(cacheDir string, defaultImgPath string) http.Handler { - return &service{ - cacheDir: cacheDir, - altImage: defaultImgPath, - } -} - -// thunder downloader -var thunder = &Thunder{QueueSize: 10} - -type Thunder struct { - QueueSize int // download queue size - q chan *thunderTask - once sync.Once -} - -func (t *Thunder) init() { - if t.QueueSize < 1 { - t.QueueSize = 1 - } - t.q = make(chan *thunderTask, t.QueueSize) - for i := 0; i < t.QueueSize; i++ { - go func() { - for { - task := <-t.q - task.Fetch() - } - }() - } -} - -func (t *Thunder) Fetch(url string, saveFile string) error { - t.once.Do(t.init) - task := &thunderTask{ - Url: url, - SaveFile: saveFile, - } - task.Add(1) - t.q <- task - task.Wait() - return task.err -} - -func (t *Thunder) GoFetch(url, saveFile string) chan error { - c := make(chan error) - go func() { - c <- t.Fetch(url, saveFile) - }() - return c -} - -// thunder download -type thunderTask struct { - Url string - SaveFile string - sync.WaitGroup - err error -} - -func (this *thunderTask) Fetch() { - this.err = this.fetch() - this.Done() -} - -var client = &http.Client{} - -func (this *thunderTask) fetch() error { - log.Debug("avatar.fetch(fetch new avatar): %s", this.Url) - req, _ := http.NewRequest("GET", this.Url, nil) - req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/jpeg,image/png,*/*;q=0.8") - req.Header.Set("Accept-Encoding", "deflate,sdch") - req.Header.Set("Accept-Language", "zh-CN,zh;q=0.8") - req.Header.Set("Cache-Control", "no-cache") - req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36") - resp, err := client.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - if resp.StatusCode != 200 { - return fmt.Errorf("status code: %d", resp.StatusCode) - } - - /* - log.Println("headers:", resp.Header) - switch resp.Header.Get("Content-Type") { - case "image/jpeg": - this.SaveFile += ".jpeg" - case "image/png": - this.SaveFile += ".png" - } - */ - /* - imgType := resp.Header.Get("Content-Type") - if imgType != "image/jpeg" && imgType != "image/png" { - return errors.New("not png or jpeg") - } - */ - - tmpFile := this.SaveFile + ".part" // mv to destination when finished - fd, err := os.Create(tmpFile) - if err != nil { - return err - } - _, err = io.Copy(fd, resp.Body) - fd.Close() - if err != nil { - os.Remove(tmpFile) - return err - } - return os.Rename(tmpFile, this.SaveFile) +// RandomImage generates and returns a random avatar image. +// The data should normally be the []byte type of email address. +func RandomImage(data []byte) (image.Image, error) { + return RandomImageSize(_RANDOM_AVATAR_SIZE, data) } diff --git a/modules/avatar/avatar_test.go b/modules/avatar/avatar_test.go index 0cbf70fe602..fea1c2c7377 100644 --- a/modules/avatar/avatar_test.go +++ b/modules/avatar/avatar_test.go @@ -1,61 +1,23 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2016 The Gogs Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package avatar_test + +package avatar import ( - "errors" - "os" - "strconv" "testing" - "time" - "github.com/gogits/gogs/modules/avatar" - "github.com/gogits/gogs/modules/log" + . "github.com/smartystreets/goconvey/convey" ) -const TMPDIR = "test-avatar" - -func TestFetch(t *testing.T) { - os.Mkdir(TMPDIR, 0755) - defer os.RemoveAll(TMPDIR) - - hash := avatar.HashEmail("ssx205@gmail.com") - a := avatar.New(hash, TMPDIR) - a.UpdateTimeout(time.Millisecond * 200) -} - -func TestFetchMany(t *testing.T) { - os.Mkdir(TMPDIR, 0755) - defer os.RemoveAll(TMPDIR) - - t.Log("start") - var n = 5 - ch := make(chan bool, n) - for i := 0; i < n; i++ { - go func(i int) { - hash := avatar.HashEmail(strconv.Itoa(i) + "ssx205@gmail.com") - a := avatar.New(hash, TMPDIR) - a.Update() - t.Log("finish", hash) - ch <- true - }(i) - } - for i := 0; i < n; i++ { - <-ch - } - t.Log("end") -} - -// cat -// wget http://www.artsjournal.com/artfulmanager/wp/wp-content/uploads/2013/12/200x200xmirror_cat.jpg.pagespeed.ic.GOZSv6v1_H.jpg -O default.jpg -/* -func TestHttp(t *testing.T) { - http.Handle("/", avatar.CacheServer("./", "default.jpg")) - http.ListenAndServe(":8001", nil) -} -*/ +func Test_RandomImage(t *testing.T) { + Convey("Generate a random avatar from email", t, func() { + _, err := RandomImage([]byte("gogs@local")) + So(err, ShouldBeNil) -func TestLogTrace(t *testing.T) { - log.Trace("%v", errors.New("console log test")) + Convey("Try to generate an image with size zero", func() { + _, err := RandomImageSize(0, []byte("gogs@local")) + So(err, ShouldNotBeNil) + }) + }) } diff --git a/modules/base/tool.go b/modules/base/tool.go index ad39db892c9..811a76960cc 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -26,7 +26,6 @@ import ( "github.com/gogits/chardet" - "github.com/gogits/gogs/modules/avatar" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) @@ -209,17 +208,22 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string return code } -// AvatarLink returns avatar link by given e-mail. +// HashEmail hashes email address to MD5 string. +// https://en.gravatar.com/site/implement/hash/ +func HashEmail(email string) string { + email = strings.ToLower(strings.TrimSpace(email)) + h := md5.New() + h.Write([]byte(email)) + return hex.EncodeToString(h.Sum(nil)) +} + +// AvatarLink returns avatar link by given email. func AvatarLink(email string) string { if setting.DisableGravatar || setting.OfflineMode { return setting.AppSubUrl + "/img/avatar_default.jpg" } - gravatarHash := avatar.HashEmail(email) - if setting.Service.EnableCacheAvatar { - return setting.AppSubUrl + "/avatar/" + gravatarHash - } - return setting.GravatarSource + gravatarHash + return setting.GravatarSource + HashEmail(email) } // Seconds-based time units diff --git a/modules/bindata/bindata.go b/modules/bindata/bindata.go index 43688be1f7f..92839bc9775 100644 --- a/modules/bindata/bindata.go +++ b/modules/bindata/bindata.go @@ -282,7 +282,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x4b\x6f\x23\x49\x72\xbe\xd7\xaf\xc8\xd1\x78\x3d\xdd\x06\x49\xbd\x5a\xdd\x3d\xda\xd5\x7a\x28\xb2\x28\x71\x9b\xaf\xa9\xa2\xba\xa7\xa7\x21\x94\x4a\xac\x24\x99\xa3\x62\x15\xbb\xb2\x4a\x6a\x0d\x7c\xd8\x81\x0f\x06\x7c\xb5\x61\x5f\x0c\xc3\x3e\x18\x06\xd6\x0f\x78\xe1\xcb\xae\x0d\x9f\x06\xbe\xf7\xfc\x87\xc5\xac\xfd\x2f\xfc\x45\x64\x16\x59\x54\x6b\x04\x2f\x60\xcf\x43\x2c\x66\x65\x46\x66\x46\x46\x7c\xf1\x45\x24\x3f\x16\x03\xf7\xa5\xeb\x09\xfe\xd3\x1f\xb6\xbb\x9d\xd7\x62\x7c\xda\xf5\x45\xa7\xdb\x73\x9d\x8f\xc5\xa8\xe7\x36\x7d\x57\xf4\x9b\x2f\x5c\xd1\x3a\x6d\x0e\x4e\x5c\x5f\x0c\x07\xa2\x35\xf4\x3c\xd7\x1f\x0d\x07\xed\xee\xe0\x44\xb4\xce\xfc\xf1\xb0\x8f\xc6\x41\xa7\x7b\x62\x46\x3a\x3f\x16\xcd\xe5\x52\x24\xe1\x42\x8a\x7c\x1e\xe6\x42\xcf\xd3\x1b\x2d\xd2\x44\xc8\x6b\x99\xdd\x8a\x65\x38\xc3\x0b\x95\xc7\xd2\x69\x8e\x46\xc1\xa0\xd9\x77\xc5\x91\x38\x49\x67\xfa\x10\x7f\xc5\x89\xca\x85\x2f\xb3\x6b\x35\x91\x90\xd4\x9a\x87\x09\xba\xa3\x4d\x4d\xc5\x6d\x5a\x88\xac\x48\x44\x9c\x4e\xc2\x38\xbe\x75\xbc\xb3\x41\x70\xe6\x63\xf5\x47\x62\xa6\x72\xf4\x76\x55\x3e\x97\x99\xd8\x8a\xe4\xf5\x56\x4d\x6c\x2d\xb3\x34\xda\x12\x29\x1a\x72\xa9\x73\xb4\x44\x72\x1a\x16\x31\x64\x69\xd3\x87\x25\x60\xeb\xb4\x00\x7c\x77\x9c\x37\x99\x5c\xa6\x5a\xe5\x69\x76\x7b\xee\x78\xc3\xe1\x58\x1c\x39\x7e\xcb\xeb\x8e\xc6\xc1\xf8\xf5\x88\xba\x5d\x86\x7a\x8e\x99\xda\x56\x52\x73\xe0\x77\xc5\x64\x1e\x66\x5a\xe6\x0e\x7d\x09\xa0\x2a\xcf\x77\x31\x50\xa0\x5b\x27\xcd\x26\xd2\xee\x3b\x91\x37\x62\x2d\x5e\xe4\xa9\xb8\x94\x62\x99\xa9\xeb\x30\x97\x4e\x67\xe8\xb5\xdc\x60\xe4\x75\x5f\x36\xc7\x34\xcd\x34\x8c\x35\xed\xff\x24\x4e\x2f\xc3\x58\x2c\xc2\x77\x6a\x51\x2c\xc4\x24\x93\x61\xae\xa0\xca\x58\x2d\xa0\x93\x74\x5a\x95\xb8\xc4\xd6\x0b\x2d\xb3\x9a\xa8\xef\x8a\x85\x0c\x13\x2d\x92\xd4\xf4\x74\xfa\xcd\x2f\x82\x96\xe7\x36\xc7\xdd\xe1\x20\xe8\x75\xfb\x5d\x5a\x60\x7d\x17\x33\x8c\xc2\x7c\x32\x17\xa4\x20\xf1\xb6\x90\x85\x14\xb1\x4c\x66\xf9\xbc\x86\x39\xaf\x58\xf1\xa1\x16\x71\x98\xe1\x10\xf0\x80\xb9\xb4\xba\xc4\xc9\x8d\xce\x7a\xbd\xc0\x73\x3f\x3f\x73\xfd\x71\x80\xbf\x67\x6e\xd0\x73\x07\x27\xe3\x53\x88\xdd\xdd\xc1\x3f\xd0\x65\xa1\xce\x21\x7f\x50\x2c\x2e\xb1\xb0\xea\x52\x95\xd4\xc6\x32\xc2\x4c\xb2\x75\xc8\x48\xa8\x04\x16\x02\x55\xbd\x5b\xc6\x29\x5a\xc9\x48\x1c\xf7\x8b\x51\x6f\xe8\x41\x2d\xcd\x13\xd8\x5a\x30\x38\xeb\x43\xfa\xde\xce\x86\x50\xa5\x75\xf1\xc3\xe2\x58\x4c\xd7\xf7\xcf\xee\x08\xd9\xdd\x14\xb2\x52\x6f\xba\x80\xb2\xf4\x1d\x21\xe1\x24\x57\xd7\x2a\xbf\x15\x53\x29\x23\xa7\xe3\xba\xed\x80\xd5\x39\xec\x43\x8d\x56\xe0\x01\xe4\xbd\x0c\x63\xa8\x0f\xe2\x2e\x60\x85\x0b\x59\x9f\xa4\xd8\xca\x05\x4e\x22\x0f\x45\x1e\xce\x6a\x74\x38\x91\xb8\xbc\x15\xcd\x24\xca\x52\x15\x89\x9f\x62\x5c\x83\x56\xd2\x4c\x30\xd7\x75\x18\xa3\x8d\x07\xe1\xd0\xa0\xfb\xad\x04\xb3\x1b\xfb\x8d\x94\x0e\xa1\xf6\x2d\x71\xa3\xe2\x58\xcc\xc3\x6b\x72\x2d\xb9\xb2\x67\x9d\xdf\xc6\x64\x2d\x7d\x52\x9d\x4a\xa6\xe9\xa1\x98\xe7\xf9\x52\x1f\x6e\x6f\xc3\xac\x65\x9c\xc2\x34\x74\x63\x96\xa6\xb3\x58\x36\xb0\xc9\xed\x1b\x79\xb9\x5d\x2c\x23\x58\x9e\xde\xde\xdb\xd9\x7d\xb2\xbd\xbb\xbb\xed\x17\xcb\x65\x9a\xe5\xf5\x69\x9a\xd5\x2b\x1b\xa8\xab\xa4\xde\x9a\x67\x29\xbe\xef\x7f\xca\x2f\xed\xf2\x9d\xf1\xa9\xdb\x77\xa1\x06\x9c\x51\xd0\x77\xc7\xcd\x60\xdc\x3c\x81\x2a\x2e\x3e\x9e\x4e\x0f\xf6\x9f\xec\x5f\xb0\x09\x34\xc2\x68\xa1\x92\x4d\x43\x20\x23\x7d\xf8\xc8\xc8\xab\x37\x4f\xec\x60\xe7\x43\x5b\x7a\x50\x84\xe7\x8e\x86\x0f\x8a\x48\xd2\x1c\x18\xf3\xb0\x90\xc1\x70\xdc\x6d\xdd\x35\xc0\x83\x0d\x31\x69\x36\x0b\x13\xf5\xb5\x71\xcb\x87\x64\x0d\xbd\x93\x0f\xd6\xe3\xbc\x59\x84\xd9\x55\x94\xde\xb0\x86\xdc\x84\x0e\x19\xc7\x9b\x45\xb0\x00\x8c\xbb\x84\xbb\x5f\xc1\x27\x72\x99\x68\x88\x77\xdc\x41\xf3\xb8\xe7\x06\x40\x98\x36\x9c\x78\xe0\x06\xc7\x70\xe9\x17\x15\xb8\xe8\x29\xcd\xa8\x30\x29\x74\x9e\x2e\xc4\x99\xd7\xab\xfb\x13\x3a\xcb\xca\x36\x01\x9d\xbc\x36\xf2\x6b\x95\x5c\x69\x71\x33\x97\x09\x14\x9a\x44\x32\x53\xc9\x4c\xf4\xed\x8a\x20\x0e\xa7\x8d\xd9\xc3\xc5\x12\xab\x02\xc2\xd6\x16\xe1\x2c\x01\xce\x19\xd0\x0f\x20\x3d\xf0\x5b\x64\x04\x3e\x60\xd2\x79\x83\x53\x05\xd0\x9d\x3b\x23\x6f\x38\x1e\xc2\x2c\xb0\x2e\xb2\x42\xa7\x3d\xec\x37\xbb\x03\x7c\x63\xdc\x9e\xa7\x3a\x67\x68\xa5\xf1\x68\xfc\xd1\xa3\xb2\xff\x63\xb2\xd7\x1f\x3d\x32\xdd\xf1\xe5\x47\x8f\x4e\xc7\xe3\x51\x30\x1a\x7a\xe3\xc7\x7a\xdb\xe1\x2f\xcd\x76\x1b\x70\xef\xac\x5e\x40\xc0\x3e\xa1\x0d\xb6\x4e\xc2\xc5\xa3\x76\xff\xcb\xc7\xb4\x6f\x5e\x3b\x05\x15\x71\x93\x66\x57\x64\x6f\x8f\x74\x01\xa0\xc3\xae\x7d\xff\x54\x18\xe3\x7f\x0c\xdf\x86\x09\x68\xda\x36\x5c\x42\x68\x13\x77\x1a\x10\xd7\x4d\xc4\x02\x2b\x15\x93\x50\x43\x79\x14\x79\xa2\x94\x4c\x06\x30\x0e\xdd\x01\xbc\x27\x26\x32\x55\xdd\xf0\x9a\x00\x80\x06\x37\xe3\x1c\xc6\x41\x00\x9d\xc4\xb7\x36\x72\x65\x3c\xaf\xd1\x11\x04\x45\x92\xa2\x10\x09\x24\x09\x9a\x82\x25\x96\x46\xfb\xe2\x97\x0d\xa7\x37\x6c\x35\x01\xb1\x6b\x45\x91\x2e\xa1\xa0\x95\x12\xef\xea\x07\x41\xc9\xa0\x04\x4f\x34\x45\xa0\x28\x70\xda\x7c\xb8\x34\x4d\x78\x1d\xaa\x98\x5e\x3b\xed\xae\xcf\x66\x44\xdd\xd6\xa6\xf3\x6a\x2e\x39\x78\xc2\x39\xc5\x65\xa1\xe2\x1c\xb6\x5b\x59\x71\x4a\x8b\xce\x1b\x8e\x3f\x6e\x7a\x63\x1a\x1a\xc0\x45\x5f\x72\xec\x35\x12\xa8\xc9\x9e\xc8\xde\x1e\xe4\x79\x29\x26\x5d\x86\xf9\x9c\xec\x91\x04\x45\x2a\x93\x13\x0a\x54\xdc\x95\x37\x36\x6a\x72\xc0\xa8\x2c\xbd\xd5\x1e\x50\xb8\x24\x3c\x2c\xe3\xf7\x02\xea\x70\x86\x9d\x0e\x1b\xbc\x0d\xd6\x66\xca\x72\x23\xde\xf0\x6c\x0c\xbc\xe8\x0d\x4f\xaa\x91\x53\x26\x32\xc3\x19\x03\x1c\x25\x90\x10\x2d\xbf\x27\x1a\xdb\x33\xb2\x88\x89\xcc\x72\x51\x9f\x84\x47\x79\x06\xc0\xae\x47\x45\xc6\xde\x7b\xf4\xfc\xd9\xd3\x9d\xf9\xce\x62\x47\x8b\x3a\x29\xf8\x68\x71\x4b\x1f\x0d\xeb\x01\x04\x9c\xce\x8f\x21\x67\x98\x89\x29\xf0\x50\x84\xa2\xb1\x9c\xbe\x13\x53\x15\x73\xdc\x02\x76\xc2\x32\xf8\x0d\x1d\xe9\x2b\x95\x44\xc4\x7b\x68\x32\x35\x55\x13\xb3\x14\x02\xe8\x47\x51\x0a\x29\x74\x26\xb0\xd1\x99\xcc\xc9\x9a\xcc\x78\x1e\x68\x29\x81\xb8\x92\xb7\x8f\xcd\xb2\x01\xdf\x89\xd6\xb1\x58\x5e\x4d\xf4\xee\x9e\x00\x22\xb3\x54\x9e\xbd\x9e\x16\xb9\xfd\x26\x17\xa2\x9e\xa4\x18\xa6\xff\x77\xa3\xd0\xb3\x1c\x44\x2f\x34\x3d\x44\x52\x3b\x2d\x17\x27\x4c\x54\x0e\xda\x34\x40\xb2\xcd\xd1\x64\xbb\x9c\xc6\x79\xe1\xbe\xbe\xb7\x83\x95\x88\xe9\xcf\x96\xc4\x46\x62\x0a\x3e\x74\xfe\xb9\x84\x06\x69\x53\x61\x12\x41\x0b\x50\xf7\xc4\xe8\x8d\x0c\x04\xdd\x2b\xc4\x8c\x55\x40\x66\x03\xcb\x85\xb2\xd8\x85\xd1\x2c\xdf\xc9\x49\x01\x05\x93\x01\x02\x93\xab\xf6\x63\x08\x67\x4c\x2a\x66\x6a\xc4\x93\x9e\x7c\xd9\x1d\x09\x6d\x42\x5a\x89\x9b\xdc\x56\x01\x4b\x2c\x86\x3c\x9f\x09\xe9\x94\x0d\x3c\xa9\xc7\xe9\x6c\x86\x63\xe4\x10\x55\x83\xf7\x27\xc4\xd2\xb6\xe6\x08\x7f\x26\x12\x5b\x82\xb2\xe5\xf4\x9a\xcc\x80\x09\xd2\x49\x0f\xd4\x03\x18\x08\x54\x09\x41\x11\xe5\x79\x85\x8d\x2e\x6e\xf5\xdb\x98\xf9\x28\xac\x69\x96\x49\x6d\x24\xa1\x51\xe5\x72\x1f\x2f\x54\xfe\x89\x36\x10\x31\x99\xa7\xc4\x7b\xdb\xc7\x25\xdd\xe4\xb1\xce\xe9\xd0\x27\xbf\xda\xdd\x7b\xd6\xd8\xc1\xbf\xbb\x87\xfb\xfb\x3b\x4f\x1d\xcb\x9c\xc9\xa4\x1d\x4b\x83\x33\x38\x9d\x33\x6a\xfa\xfe\xab\x36\xeb\xa5\x43\x13\x55\xa6\x05\x1c\xd5\x84\x2c\x59\xb2\x25\x15\x58\x59\x26\xdf\x16\x70\x4f\xb3\x30\xb8\xbb\x9a\xde\xd6\xa7\x45\x1c\x6f\xc1\x57\x7b\x2b\x86\x6c\xfa\x97\x62\xcb\xf5\xf3\x99\x6e\xe5\x2a\xba\xdc\x62\x8a\x23\xc2\x4b\x9d\xc6\x38\xab\xd5\x31\x26\x8c\x9f\x38\xf6\x8c\xd9\xa4\x45\x59\xc7\x7a\x3f\xa9\x8c\xfd\xb2\x11\x5d\x42\x83\x96\x2f\x50\x38\x99\x14\x19\x68\xd7\xb9\xd3\x1d\xe0\xd0\xc1\x37\x01\x89\xd5\x60\xf7\xd1\x47\x26\x2d\x31\x59\xcb\x78\x28\x5e\xb8\xee\x48\xbc\x1e\x9e\x79\x82\xd5\xd1\x6e\x8e\x9b\xc2\x6f\x76\xdc\x8f\x3e\x72\x7c\x17\xec\x77\x1c\xc0\x70\x21\xe0\xa3\x8f\x3f\xeb\xb4\xdd\x57\x1e\xfe\xfb\xfd\x3f\x78\x44\xe6\x53\xe4\x29\x9d\xbc\xa2\x38\xb8\x90\x1c\xda\xa3\x10\x7e\x04\x48\xe9\x0e\xc0\x73\xfb\x6e\xff\x18\x08\xd3\x6e\xbe\x46\xa8\x13\xcf\x9c\xd6\x70\xf8\xa2\xeb\x72\xf2\x51\x39\x85\x20\xbc\x91\x9a\xec\xc0\xbe\x5e\x8d\xab\xf6\x51\x09\x48\x7c\xa4\x8c\x22\x3d\x4a\x0d\x34\xf9\x7c\xfa\xee\x56\x84\x05\x0e\x26\xc9\x4b\x43\x9e\xcb\x30\xa2\x58\x41\xb1\xc1\xb2\x26\xfe\x02\x6a\x03\xe0\xf5\x29\x5d\x18\x7e\xf1\x3a\x68\x9e\x81\x88\x0d\xe0\x13\x86\xdc\x5b\x4b\xf8\xa2\xfe\xca\x3d\xa6\x57\x75\x6a\xb0\xd1\x19\x5a\x3f\x77\x9a\xad\x71\xf7\x25\xf1\xb6\x36\x38\x3b\x3d\xf5\xbb\x03\xe0\x27\x6d\x6c\xf7\xf9\x0e\x84\x23\x7b\x09\x8c\x0d\xfd\x60\x27\x38\x38\xaf\xa6\x8c\x85\x69\x32\x55\xd9\x42\xc8\xfa\x02\x41\x86\x7d\x29\x93\x33\x70\x11\x03\xac\x90\x79\xd2\xf5\x09\xa2\x5d\x84\xf6\x5e\xc0\xd9\xa2\xd7\xaf\x1c\x65\x3b\x95\x26\x18\x32\x39\xb1\x83\x31\x01\x99\x16\x1b\x84\xc9\x7c\x88\x8b\x4f\xd2\x22\x31\x81\x75\x8d\xff\x2c\xde\xe3\xfd\x57\x84\xf2\x12\x17\xc0\x27\xa1\xd5\x8c\x23\x0a\x96\x7a\xad\x90\x86\x85\xc9\x6d\x3e\x87\xeb\x37\x1c\x4a\x61\xba\x48\x31\xfc\xee\xc9\x00\x27\xfd\xb2\xeb\xbe\xaa\x48\x68\x85\x20\x4f\x14\x39\x61\xba\x9c\xfe\xa8\x09\x05\xd5\x12\x4f\x5a\x4d\xb0\x9f\xa0\x89\x94\xad\xe9\x55\x46\xf5\x49\x07\xc4\x2e\xa7\xf6\x24\xcb\xfe\xc4\x26\x3b\xaf\x03\xd2\x41\xb5\x3b\xc5\x84\x08\x49\x82\x8a\xd7\xb4\x1d\x6c\x6b\x5e\x5c\x32\x57\x87\xd5\x20\x27\x61\x0f\xd9\x36\xd9\xce\xf6\xee\xd3\x83\x52\xe6\x43\xb6\xb0\x9a\xe4\x87\xfa\x0e\x7f\x48\x75\x96\x89\x4e\xc2\x25\x92\xc3\x50\x70\x6a\x62\x8c\xf2\x83\xb3\x5d\xe9\x62\x34\x86\x3b\x42\x06\x05\x55\xd8\x1b\xf8\xd4\x3c\x4d\xaf\x08\x08\x4f\xf1\x89\x0c\x48\x5f\x6d\x64\x98\xce\x3d\x69\x23\x67\xd6\xb1\x22\xc2\x91\xab\x85\xa4\x28\x85\x63\x03\x12\xa4\x49\xa4\x9d\xb6\x4b\xa6\xe8\x05\xe3\x6e\xdf\x45\xc8\xb7\x69\x57\x93\x4d\x46\x25\x8c\x17\xb2\x12\x6f\x69\x75\xfe\x8b\xee\x28\x18\xf7\xfc\x00\xe3\xa8\xc0\xb1\xde\xe2\x9a\xc1\xcf\x95\xe6\xfc\x99\x12\xa7\x6c\x61\xb6\x89\x59\x25\x0e\xdf\x30\xf7\xbb\xa9\x23\xb1\x76\x04\x2f\x50\x5d\xb3\xf9\x76\x45\xec\x71\x31\x9d\x72\xe4\xa3\x2d\x32\x15\x07\x4f\x4c\x64\x5c\x43\xb8\x95\x4b\x9b\x4f\x2b\x8e\x74\xb6\xa2\x11\xa5\xc9\x27\x08\xc6\x09\x36\x71\x43\x1c\x9d\x5f\x82\x68\xb9\x83\x76\x70\x7c\xd6\xe9\x10\xb3\x71\x07\x46\x41\xb4\x6e\x82\x03\x40\x31\xe2\xe9\xad\xc9\x30\xd8\xe7\x4c\x41\xc5\x3f\x3b\xfe\x99\xdb\x1a\x33\xad\x2e\x8b\x2b\x8f\x75\x69\x93\x86\xca\x11\x37\x5a\xb0\xb1\xe9\x45\xbe\x6c\xcc\xe8\x99\x0c\xed\xf0\xe0\xf9\x33\xbc\xfb\xfc\x73\xfb\xe2\xed\x5b\x6e\x35\xe9\x4e\x9a\xcb\x1a\x2d\x98\xa3\x33\x31\x15\xa4\x0b\xa0\xd6\xb0\x52\xb1\xf5\xe4\xe9\x01\x90\xdf\xef\x8f\x47\xbe\xc9\x4f\x11\x31\x29\xd5\x6d\xc0\x03\x29\xbe\x32\x65\xc4\x19\x50\x09\x88\xc7\x62\x22\xda\x3f\xe8\x20\xf2\x6d\xca\x3b\x22\xae\x5d\x78\x9d\x96\x78\xfa\x64\xe7\xd3\x86\xe8\x9a\x89\x2c\xf5\xb4\x51\x5c\xaf\x05\x41\x45\x3c\x51\x18\xdf\x00\xa5\x57\xf3\x95\x71\xb2\xc2\x27\x4f\xdd\xde\x90\x98\x90\x31\x56\x13\x8c\x88\xd4\x31\xa8\x52\x36\x14\x29\x3a\x2f\xa0\x6e\x63\x05\x27\x3c\x86\xa5\xb4\x4c\x1a\xb5\x1a\x40\xc6\xbf\x29\x71\xa3\xa6\xc4\xdc\x4f\xdf\x02\xb9\x16\x58\x0b\xfa\x05\xb4\x20\x0b\xfe\x8c\x72\x8c\x71\x26\xbe\xf2\x0e\xab\xe4\x30\xad\x6e\xba\x21\x86\x94\x3a\x50\x38\x05\x52\x69\x9e\x59\xcb\x78\x5a\x27\x28\x83\xbe\x2a\x03\xb5\x31\xf2\x95\x81\x1b\xe4\x13\x93\x58\x61\x57\xd5\x8e\x44\x12\x02\x22\x77\xdd\x0e\x01\xc4\x9a\x47\xdf\x43\xf8\x8c\x81\x3f\xc4\xf8\x6c\x8f\x35\xe5\x63\x13\x33\xc4\x38\x8a\x40\x37\x40\x9f\xe8\x44\x0f\xf6\xf7\xf6\x1a\x62\x4c\x9b\xb0\x6c\xea\x2b\x82\x64\x3c\x4a\x36\xdc\x55\x67\xec\x90\xf6\x7f\xb1\x45\x16\xbe\x25\x7e\xc2\xaf\x3f\xab\x90\xef\x9f\x5e\x08\xe3\xa0\xc2\xe9\x78\xc3\x3e\x13\x9c\x3e\xaf\x62\x1d\x1b\x39\x62\x2c\x43\xad\x91\xf5\x45\x96\x15\xad\x09\x91\xf3\x66\x42\x88\xbe\x41\xce\xe4\x02\xbe\x6f\x38\x10\xbc\x6a\x8b\xd7\x41\xad\xdc\xf3\x4e\xcd\xd0\x76\x76\x9a\x6d\xa0\x1d\x87\x59\xd3\x52\x52\x22\xfb\xde\xf2\xac\x93\x16\xbc\x13\x51\x0c\xe8\x59\x41\xb1\x0d\x89\x4f\x77\x40\x6e\x20\xe9\x65\x93\x22\xc2\xd3\x9d\x52\x90\x59\x8b\x61\x56\x95\xb5\x40\x40\x82\x1c\x8a\xc9\x01\x25\xa7\x56\x77\x18\xc5\x03\x0e\x11\x90\x73\x4a\x77\x8f\xf2\xc9\xb2\x46\x2f\x8f\x0e\x9f\xee\x3f\xfb\xb4\x56\x2a\xe4\x68\x11\x4e\xc2\x0c\x56\x1b\x5d\x1e\xed\xd4\x96\x69\x1a\x07\x5a\x7d\x2d\x8f\x80\x2c\x35\x15\xc5\x32\xb0\xa0\x7b\x64\x62\x7c\x39\xf3\xa1\xb8\x58\x53\xcf\xdd\xdd\xbd\xdd\xdd\x0b\xeb\x6a\xcc\x2b\x34\xd5\x26\xee\xd7\x29\x71\xfc\xb5\x6e\x8d\x6a\x2d\x1b\xbe\x4f\xaf\x08\x4c\x2f\xbb\xed\x4d\xc5\x8e\xb2\xf4\x5a\x11\x0f\x62\x92\x31\x83\xeb\xd1\xfe\xb5\x59\x1e\xba\x1c\xb2\x4f\x71\x49\x0c\x61\xbd\xec\x75\x2b\xa9\x1e\x4c\xd3\x03\xcd\xcc\x0a\xd7\x09\x07\x28\x70\x63\xd6\x10\x17\xcc\x3c\xed\x5b\x7d\xf1\xff\xa6\x45\xda\xf0\x21\xc8\x5f\x1d\x9f\xf5\x28\xa3\xe8\xb6\xcd\x8d\x22\xd2\x49\xb9\x60\xc4\x53\x60\x65\xb9\x32\xe2\xf1\x87\xe5\x7c\x9f\x95\x6b\x0c\x72\xc2\xb4\x8b\x95\x9a\x02\x5b\x76\xb7\x1c\xba\xdc\x09\xe6\xf4\xed\x96\x27\x88\xbc\x4a\x1a\xd6\x68\x49\xa9\x85\x23\x15\x50\x8d\x31\x30\xe4\x82\xea\x1d\x26\x18\x11\xe0\x94\xfa\x82\xcd\x32\x1d\xb1\xe6\x5c\x05\x3a\x03\x1b\x46\x20\xa8\xf5\x99\xe7\x7e\x48\x1e\x34\x32\x5b\x33\xff\xc6\x58\xa6\x07\x96\x34\x10\xd3\x34\x52\x4a\xde\xb0\x5e\x3a\xbc\x87\xf4\xb8\x72\xa1\x0d\x21\xcf\x11\x27\x76\x9c\x93\x56\x50\x7a\x0f\x73\x02\x08\x31\x2f\xd6\x52\x62\x35\x95\x2c\xe7\x9e\xe1\xbe\xeb\xfb\xa6\x1c\xde\x71\x37\xc7\x3b\x6f\x2c\xd3\x23\xab\x1e\x53\xc8\x8b\xc3\x89\x24\xfa\x68\xdb\x59\xe1\xeb\x4c\xca\x60\xb6\xb1\xef\xb7\x2a\x51\xc5\x1d\xfb\xb6\xef\x1d\x2a\x99\x74\x5b\x34\x8f\x0d\xc5\x86\x3b\x06\x67\xa3\xde\xb0\xd9\x0e\xaa\x09\x91\x21\x9d\x9a\xaf\x40\x54\x22\xb5\xb4\x55\x53\xc2\x50\x64\x89\x29\x1a\xb6\xa2\x22\xd5\xf3\x22\xdd\x42\x27\xcc\x1c\x96\x55\x3f\xcb\x57\x35\x12\xca\x09\xf6\x4d\xe7\x7c\x58\x56\x8f\x26\x49\x63\x96\x99\x0e\x4c\x2e\xcd\xe3\xb6\x73\xe2\xd9\xa5\xf8\x48\x9f\x78\x85\x65\xb7\x55\x58\x2c\xbb\xac\x4e\x1a\xb9\x5a\x9e\x03\x1f\x10\xc2\xf3\xf3\x4a\x05\x69\xdd\xaa\x39\xc4\x4a\xb6\x07\xd0\x01\x7b\x69\xa2\x49\x91\x17\x74\xdc\x17\xd6\x10\xd6\xa7\x3f\xa2\x94\x91\x82\x5d\x45\xc8\x9d\x81\x46\x3d\xeb\xd7\x17\x1b\x89\x64\xe5\x05\x95\x6a\x12\x49\xaa\x59\xa4\x95\xba\x67\x7e\xbb\x94\xda\x3a\x9a\x5a\x80\xdf\x6d\x7f\xb5\x94\xb3\x3f\x32\x8f\xcb\x64\xe6\x20\xd5\x1c\xbe\x72\xdb\x9c\x82\x53\xc2\x73\x6f\x27\x0a\x3d\xef\x04\xf9\x3d\x05\x6e\xe6\x8a\x84\x2f\x9b\x6b\xdd\xdf\xeb\x1f\xf3\xd5\x8b\xdf\xfd\x92\x36\xf9\xc4\x0e\x4b\x56\xdc\x93\xc6\x68\x73\x73\xb3\x8c\xd3\xf0\x8e\x92\xc0\x35\x69\x34\x05\x5e\x9f\xd9\xae\xf3\x86\x6c\x99\x94\xed\x2f\xe5\x04\x71\x5d\x9a\x82\x89\x8d\x8b\xa4\x38\x4a\xdb\x6f\x05\xe0\x67\x49\xe5\x12\xc1\x35\xfe\x4d\xa9\x88\xca\x00\xf1\xfd\x52\x08\xa2\x93\x65\x58\xe8\xce\x25\x4c\x73\x6c\x74\x9b\xd5\xaa\x89\xb3\x44\xbd\x6b\x87\x44\xff\xbc\xe2\xf2\xd6\x3e\x75\x5a\xcf\xf7\xf6\xca\xcf\x2f\xcd\xc3\xc1\x4e\xad\x14\xbd\x7a\x30\xaf\xf6\xf7\xf7\x3f\x5d\x3d\x0c\xc2\x24\xad\x89\x17\x0a\x89\x85\x04\x7d\xf2\x73\xc4\x77\xfb\xd1\x07\xa7\x53\xab\xe7\x49\x96\x72\x00\xe4\xaf\x34\xca\x06\xc7\x45\x79\xc9\x51\x72\xf5\xf0\x92\xf2\x84\x8a\x1a\xb4\x94\xa5\xbd\xcf\xd2\x38\x44\x9e\x97\x66\xb3\xed\xe5\xd5\x6c\x9b\xb4\xb7\xfd\x31\x9e\xea\x80\x5d\x9d\x87\x64\x25\x9d\xa1\xd7\x6f\x9a\x58\x16\xa7\x33\x73\xed\xb7\xae\x2c\x95\x31\x8d\xfa\xa7\x26\x98\x95\x41\x8d\xa2\x31\x7d\x12\x5b\xb6\xd7\x34\xb6\xfa\x73\xc7\xfd\xcb\xb1\x25\x33\x03\xeb\x0d\xe9\x20\xb4\x5c\x86\x5c\xa2\x5c\xa0\xa7\xa2\x22\x3b\xd5\x3a\x4b\xdb\x2c\x87\xd5\xd8\x48\xb6\x1c\x5b\x85\xb1\xad\xff\x97\xa9\xc6\xdd\x2c\x83\x11\xb4\xdc\xf8\x38\x03\xf4\xd1\x36\xdb\xf2\xb2\x98\xd1\x43\x17\xba\xa7\xcf\x57\x61\xc6\xfb\x77\xb3\x2c\xcd\xe8\xa1\x95\x29\x2a\x5e\xdc\x8d\xee\x46\x82\xd3\x43\xf6\x49\x2c\x87\xbf\x3a\x25\xd3\x29\x75\xc3\x5b\x37\x69\x3d\x1d\x43\xc3\xb6\x9f\x97\xc3\x56\x03\x58\x19\x77\x7b\x53\xe3\xba\xeb\x8f\x0d\xdd\x34\xb8\xa3\xa9\xac\x92\xc2\x2c\x60\xdd\xe8\x2a\xb2\x34\xc7\xf3\x23\x7d\x43\x16\xc8\x2e\x98\x12\x30\x50\xa2\x62\xa9\xc5\xe3\x0f\xe3\x55\x6f\x78\x12\x78\xc3\xb1\x21\xcd\x16\xaa\xc8\x91\xf9\x96\x66\xed\xcd\x94\xee\xe0\x14\x69\x35\x1b\x32\x58\xa7\x3b\xc6\x99\xa9\x8c\xed\x97\x7a\x66\x4d\xaf\x80\x44\xcf\xd5\x34\x7f\x48\xce\xde\x73\x7b\xaf\xbb\x2b\x7e\xf2\x13\x7c\xab\x89\xbd\x83\xa7\x15\x88\x09\xfc\xd3\x6e\x87\x2b\xf0\xcf\x39\x06\xce\x08\x07\x79\xd7\x11\x78\xf2\xed\x87\xfb\x6a\x37\xbb\xbd\xd7\x1f\xec\xcc\x7d\xb7\x54\x19\x63\x07\x92\x2b\x2c\x87\x04\xd0\x5a\x1e\x45\x32\x96\x54\x84\x99\x52\x6d\x66\x81\x65\x53\x8f\x4d\x75\x3d\xe3\xc5\xac\x0a\x65\x95\x63\x4e\xee\x3b\xe3\xa4\x7a\x6a\x9e\xb4\x04\xd7\xb0\x5b\xbe\x7d\xe2\xab\x73\xab\x8f\x05\x82\x3a\xf0\xf7\x1e\x2a\xe2\xb9\xa0\x42\x03\x64\xbe\x01\xe2\x79\xdf\xaf\xde\x03\x8c\xcd\x5d\x7b\xb6\x92\xcd\x39\x60\x85\x49\x43\x48\x8c\xe9\x1e\x92\x5a\x25\x37\xd6\x2d\xc0\x0d\xc9\xe4\x0b\xa0\xa3\xf1\xfd\x22\x5a\xde\xb1\x7b\xea\x52\xbd\x0c\xc3\x77\x2e\x86\x54\x88\xbb\xbd\xce\x5a\x95\x54\x19\x49\xee\x68\x89\x1a\xab\x5a\x7a\xa8\x00\xb0\xb9\x80\xb6\x0a\x67\x09\xa6\x53\x93\x52\x75\x36\x45\x2d\xe9\xc8\xaa\x5a\xf0\x70\xcf\x3b\xf5\x03\x4b\xfd\x7f\xd7\xe4\x8b\xcf\x57\x12\xfb\x5d\x17\xd6\xd3\x75\x7c\xb6\xa8\xf7\x66\x6b\xb7\x9a\xf3\x6d\xd5\xb6\xf6\x36\xbe\x9f\xd3\xa9\xb8\x54\x06\xf2\x2b\x8a\x5b\x01\xef\x5d\xe5\xad\xeb\xf1\x6b\x05\x6e\xd6\xe5\xc5\x46\x89\xdc\x69\x7b\x5d\xbe\xd5\x22\x7c\x0d\xe9\xbe\x1e\x16\xf2\x0e\x61\xc5\x2c\xef\x90\x2b\xec\x87\xf4\xe7\xb3\xd5\x45\x1c\x97\xe6\xfe\xd0\xfe\x08\xe4\xa8\xc8\xa7\xcf\x1d\xb2\x1b\x93\x6f\x66\x69\xf5\x6a\x37\x2b\x92\x84\x90\x86\x9a\xb9\x22\xc6\xb1\x5f\xa5\x91\xe2\x5f\xb4\x34\x2a\x05\x25\xeb\x8b\x5e\x91\x54\x7b\xb3\xf1\xf2\x9d\x08\x97\xd3\x01\xde\xf4\x13\x96\xe6\x38\xe0\xda\xc8\x9a\x9a\xd1\x0d\x4c\xc4\xa1\x45\x11\x3a\x6b\xb3\x92\x86\xb9\xf6\x0c\x6c\xe3\xb9\x43\xd7\xb7\xed\x33\x26\x60\x9f\x19\x57\xdb\x9d\x3b\x7c\x52\xab\x5f\x95\xcc\x65\x18\x23\xbc\x20\x5a\x4f\xae\xac\x14\xba\x7c\x0f\x4c\x7b\xc0\xed\xf7\x09\xda\x7b\x32\x77\xd6\x85\xba\xa7\x3b\x44\xc7\x9a\xd9\xac\x30\xbc\x90\x7c\x9b\xe3\x20\x2c\xe6\x13\xa4\x20\x62\xaa\x27\x57\x9f\x94\x91\xaf\x5e\x2f\x92\x8c\x38\x15\x2b\xad\x5e\xcf\xc3\x99\xa6\xe8\x49\x81\x9d\xc3\x7f\x9a\xac\x02\xbc\xca\xeb\x7a\xb2\x60\x32\x1b\xa5\x13\xcd\x0d\x24\x6c\x7b\xb7\xf1\xac\x71\xe0\x34\xbd\x13\x42\x22\x87\x89\x34\x96\x5a\xfd\xc1\x0c\x5f\x44\x91\xd1\x97\xea\xe1\xcd\x04\xbc\x3d\x7a\x07\x05\xdd\xd1\x2e\x1f\xca\xfd\x7b\x75\xde\x60\xe6\x73\x46\xbf\x93\xee\x38\x68\x77\x3b\x9d\x4d\xac\x7f\x78\xff\xb3\x49\x65\xf7\xe1\x8c\x8c\x51\xc3\x57\xb0\x79\x0a\x5f\xbf\xcb\xe6\x67\x13\xbb\x75\xa4\x47\xab\xdd\xbf\x51\xbb\xcf\x09\x6b\x9b\x03\x6e\x90\x49\xfd\xcc\xaf\x7d\x3d\xaf\xb7\x06\xf4\xf7\xf4\x45\x2d\x92\xf5\xb6\x5b\x9b\x66\xf5\x8e\x57\x4b\xe2\xfa\xa0\x57\x8b\xaf\xeb\xbd\x97\xb5\xac\xa8\x7b\x67\xb5\xaf\xc2\xfa\xcf\x46\x35\xa9\xeb\xae\x5f\x5b\xe6\xf5\x63\xaf\xb6\x8c\xeb\xa3\x5e\xed\x72\x56\x3f\x3e\xa9\x61\xd2\xee\x98\xaf\xa3\x48\xb6\x0b\xac\x56\x7a\x5e\xfb\xed\x3f\xff\xfc\x37\xff\xf1\x67\xbf\xf9\xd5\x3f\x7d\xff\x17\x7f\x52\xfb\xed\xaf\xbf\xf9\xef\x7f\xf8\x73\xfb\xa5\x2d\x8b\x5c\x4f\xe6\xb5\x4e\x16\x26\xdf\xfe\x7d\xa8\x74\x6d\x20\x91\xe1\x83\xa9\x45\xba\xd6\x0b\xf3\x6b\x25\xff\xf3\x6f\x8b\xda\xfb\xbf\xf9\xee\x8f\xbf\xfb\xe6\xbb\x6f\xde\xff\xdb\xfb\x5f\xbd\xff\x75\xed\xfb\xbf\xfc\xbb\xef\xff\xea\x1f\xff\xeb\x17\x7f\x5d\x73\xf5\x32\xfc\xf6\x97\x69\x5c\x1b\x81\xb4\x16\xb3\xe2\xdb\x5f\x68\xba\x9d\x3f\xce\x42\xad\xa8\x31\xd6\x57\xaa\xf6\xfe\x97\xdf\xfd\xe9\xfb\x7f\x7f\xff\xaf\xef\xff\xe5\xbb\x9f\x1b\x19\xb5\x6e\x1e\xc6\x8a\x88\xa4\x21\x62\x11\x9f\x02\x39\x04\xd1\x42\x64\x76\x57\x00\x37\x56\x14\xc1\x86\x24\xe2\x78\xee\xb0\xa6\x58\x63\x0e\xab\x0b\x8f\x5f\xcf\x1d\xd6\x19\x3f\xd6\xc7\xaf\x1c\xd6\x1d\xff\x84\xcc\x61\x05\x92\x1b\x66\x0e\x6b\x11\x8f\x49\xec\xb0\x2a\xe9\x07\x10\xd7\x0e\xeb\x93\x6e\xea\x0a\x87\x95\x8a\xc7\xaf\x42\x87\x35\x4b\xb3\x68\x87\xd5\x8b\x47\xfe\x74\x58\xcd\xf4\x2d\x76\x58\xd7\xf4\x0b\xb4\x99\xc3\x0a\xa7\xcc\x24\x77\x38\x5c\xdb\xdf\x87\x20\x10\x2c\x97\x04\x2f\x88\x77\x73\x35\x9b\xc7\xf8\x1f\x39\x78\x1c\x72\x89\x88\x8d\xab\x01\x2a\x14\x1f\x21\x45\x75\xde\xac\x7a\x34\xec\x30\xba\x74\x4b\x09\x1a\xe1\xce\xa7\xc3\x57\x41\x07\x44\x18\xb4\xf0\xd8\x33\x37\x9d\x95\x20\xe8\xcf\xc1\x20\x09\xc8\x4d\x99\xe0\x2e\x15\xe7\x4b\x76\xb2\xec\x59\xca\xb7\x2e\xcc\xcc\x53\x70\x86\x0d\xb9\x04\xe1\xe6\xd6\x81\xbd\xea\x7f\x02\x00\x00\xff\xff\xf1\x97\x7b\xdc\x8f\x28\x00\x00") +var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x4b\x6f\x23\x49\x72\xbe\xd7\xaf\xc8\xd1\x78\x3d\xdd\x06\x49\xbd\x5a\xdd\x3d\xda\xd5\x7a\x28\xb2\x28\x71\x9b\xaf\xa9\xa2\xba\xa7\xa7\x21\x94\x4a\xac\x24\x99\xa3\x62\x15\xbb\xb2\x4a\x6a\x0d\x7c\xd8\x81\x0f\x06\x7c\xb5\x61\x5f\x0c\xc3\x3e\x18\x06\xd6\x0f\x78\xe1\xcb\xae\x0d\x9f\x06\xbe\xf7\xfc\x87\xc5\xac\xfd\x2f\xfc\x45\x64\x16\x59\x54\x6b\x04\x2f\x60\xcf\x43\x2c\x66\x65\x46\x66\x46\x46\x7c\xf1\x45\x24\x3f\x16\x03\xf7\xa5\xeb\x09\xfe\xd3\x1f\xb6\xbb\x9d\xd7\x62\x7c\xda\xf5\x45\xa7\xdb\x73\x9d\x8f\xc5\xa8\xe7\x36\x7d\x57\xf4\x9b\x2f\x5c\xd1\x3a\x6d\x0e\x4e\x5c\x5f\x0c\x07\xa2\x35\xf4\x3c\xd7\x1f\x0d\x07\xed\xee\xe0\x44\xb4\xce\xfc\xf1\xb0\x8f\xc6\x41\xa7\x7b\x62\x46\x3a\x3f\x16\xcd\xe5\x52\x24\xe1\x42\x8a\x7c\x1e\xe6\x42\xcf\xd3\x1b\x2d\xd2\x44\xc8\x6b\x99\xdd\x8a\x65\x38\xc3\x0b\x95\xc7\xd2\x69\x8e\x46\xc1\xa0\xd9\x77\xc5\x91\x38\x49\x67\xfa\x10\x7f\xc5\x89\xca\x85\x2f\xb3\x6b\x35\x91\x90\xd4\x9a\x87\x09\xba\xa3\x4d\x4d\xc5\x6d\x5a\x88\xac\x48\x44\x9c\x4e\xc2\x38\xbe\x75\xbc\xb3\x41\x70\xe6\x63\xf5\x47\x62\xa6\x72\xf4\x76\x55\x3e\x97\x99\xd8\x8a\xe4\xf5\x56\x4d\x6c\x2d\xb3\x34\xda\x12\x29\x1a\x72\xa9\x73\xb4\x44\x72\x1a\x16\x31\x64\x69\xd3\x87\x25\x60\xeb\xb4\x00\x7c\x77\x9c\x37\x99\x5c\xa6\x5a\xe5\x69\x76\x7b\xee\x78\xc3\xe1\x58\x1c\x39\x7e\xcb\xeb\x8e\xc6\xc1\xf8\xf5\x88\xba\x5d\x86\x7a\x8e\x99\xda\x56\x52\x73\xe0\x77\xc5\x64\x1e\x66\x5a\xe6\x0e\x7d\x09\xa0\x2a\xcf\x77\x31\x50\xa0\x5b\x27\xcd\x26\xd2\xee\x3b\x91\x37\x62\x2d\x5e\xe4\xa9\xb8\x94\x62\x99\xa9\xeb\x30\x97\x4e\x67\xe8\xb5\xdc\x60\xe4\x75\x5f\x36\xc7\x34\xcd\x34\x8c\x35\xed\xff\x24\x4e\x2f\xc3\x58\x2c\xc2\x77\x6a\x51\x2c\xc4\x24\x93\x61\xae\xa0\xca\x58\x2d\xa0\x93\x74\x5a\x95\xb8\xc4\xd6\x0b\x2d\xb3\x9a\xa8\xef\x8a\x85\x0c\x13\x2d\x92\xd4\xf4\x74\xfa\xcd\x2f\x82\x96\xe7\x36\xc7\xdd\xe1\x20\xe8\x75\xfb\x5d\x5a\x60\x7d\x17\x33\x8c\xc2\x7c\x32\x17\xa4\x20\xf1\xb6\x90\x85\x14\xb1\x4c\x66\xf9\xbc\x86\x39\xaf\x58\xf1\xa1\x16\x71\x98\xe1\x10\xf0\x80\xb9\xb4\xba\xc4\xc9\x8d\xce\x7a\xbd\xc0\x73\x3f\x3f\x73\xfd\x71\x80\xbf\x67\x6e\xd0\x73\x07\x27\xe3\x53\x88\xdd\xdd\xc1\x3f\xd0\x65\xa1\xce\x21\x7f\x50\x2c\x2e\xb1\xb0\xea\x52\x95\xd4\xc6\x32\xc2\x4c\xb2\x75\xc8\x48\xa8\x04\x16\x02\x55\xbd\x5b\xc6\x29\x5a\xc9\x48\x1c\xf7\x8b\x51\x6f\xe8\x41\x2d\xcd\x13\xd8\x5a\x30\x38\xeb\x43\xfa\xde\xce\x86\x50\xa5\x75\xf1\xc3\xe2\x58\x4c\xd7\xf7\xcf\xee\x08\xd9\xdd\x14\xb2\x52\x6f\xba\x80\xb2\xf4\x1d\x21\xe1\x24\x57\xd7\x2a\xbf\x15\x53\x29\x23\xa7\xe3\xba\xed\x80\xd5\x39\xec\x43\x8d\x56\xe0\x01\xe4\xbd\x0c\x63\xa8\x0f\xe2\x2e\x60\x85\x0b\x59\x9f\xa4\xd8\xca\x05\x4e\x22\x0f\x45\x1e\xce\x6a\x74\x38\x91\xb8\xbc\x15\xcd\x24\xca\x52\x15\x89\x9f\x62\x5c\x83\x56\xd2\x4c\x30\xd7\x75\x18\xa3\x8d\x07\xe1\xd0\xa0\xfb\xad\x04\xb3\x1b\xfb\x8d\x94\x0e\xa1\xf6\x2d\x71\xa3\xe2\x58\xcc\xc3\x6b\x72\x2d\xb9\xb2\x67\x9d\xdf\xc6\x64\x2d\x7d\x52\x9d\x4a\xa6\xe9\xa1\x98\xe7\xf9\x52\x1f\x6e\x6f\xc3\xac\x65\x9c\xc2\x34\x74\x63\x96\xa6\xb3\x58\x36\xb0\xc9\xed\x1b\x79\xb9\x5d\x2c\x23\x58\x9e\xde\xde\xdb\xd9\x7d\xb2\xbd\xbb\xbb\xed\x17\xcb\x65\x9a\xe5\xf5\x69\x9a\xd5\x2b\x1b\xa8\xab\xa4\xde\x9a\x67\x29\xbe\xef\x7f\xca\x2f\xed\xf2\x9d\xf1\xa9\xdb\x77\xa1\x06\x9c\x51\xd0\x77\xc7\xcd\x60\xdc\x3c\x81\x2a\x2e\x3e\x9e\x4e\x0f\xf6\x9f\xec\x5f\xb0\x09\x34\xc2\x68\xa1\x92\x4d\x43\x20\x23\x7d\xf8\xc8\xc8\xab\x37\x4f\xec\x60\xe7\x43\x5b\x7a\x50\x84\xe7\x8e\x86\x0f\x8a\x48\xd2\x1c\x18\xf3\xb0\x90\xc1\x70\xdc\x6d\xdd\x35\xc0\x83\x0d\x31\x69\x36\x0b\x13\xf5\xb5\x71\xcb\x87\x64\x0d\xbd\x93\x0f\xd6\xe3\xbc\x59\x84\xd9\x55\x94\xde\xb0\x86\xdc\x84\x0e\x19\xc7\x9b\x45\xb0\x00\x8c\xbb\x84\xbb\x5f\xc1\x27\x72\x99\x68\x88\x77\xdc\x41\xf3\xb8\xe7\x06\x40\x98\x36\x9c\x78\xe0\x06\xc7\x70\xe9\x17\x15\xb8\xe8\x29\xcd\xa8\x30\x29\x74\x9e\x2e\xc4\x99\xd7\xab\xfb\x13\x3a\xcb\xca\x36\x01\x9d\xbc\x36\xf2\x6b\x95\x5c\x69\x71\x33\x97\x09\x14\x9a\x44\x32\x53\xc9\x4c\xf4\xed\x8a\x20\x0e\xa7\x8d\xd9\xc3\xc5\x12\xab\x02\xc2\xd6\x16\xe1\x2c\x01\xce\x19\xd0\x0f\x20\x3d\xf0\x5b\x64\x04\x3e\x60\xd2\x79\x83\x53\x05\xd0\x9d\x3b\x23\x6f\x38\x1e\xc2\x2c\xb0\x2e\xb2\x42\xa7\x3d\xec\x37\xbb\x03\x7c\x63\xdc\x9e\xa7\x3a\x67\x68\xa5\xf1\x68\xfc\xd1\xa3\xb2\xff\x63\xb2\xd7\x1f\x3d\x32\xdd\xf1\xe5\x47\x8f\x4e\xc7\xe3\x51\x30\x1a\x7a\xe3\xc7\x7a\xdb\xe1\x2f\xcd\x76\x1b\x70\xef\xac\x5e\x40\xc0\x3e\xa1\x0d\xb6\x4e\xc2\xc5\xa3\x76\xff\xcb\xc7\xb4\x6f\x5e\x3b\x05\x15\x71\x93\x66\x57\x64\x6f\x8f\x74\x01\xa0\xc3\xae\x7d\xff\x54\x18\xe3\x7f\x0c\xdf\x86\x09\x68\xda\x36\x5c\x42\x68\x13\x77\x1a\x10\xd7\x4d\xc4\x02\x2b\x15\x93\x50\x43\x79\x14\x79\xa2\x94\x4c\x06\x30\x0e\xdd\x01\xbc\x27\x26\x32\x55\xdd\xf0\x9a\x00\x80\x06\x37\xe3\x1c\xc6\x41\x00\x9d\xc4\xb7\x36\x72\x65\x3c\xaf\xd1\x11\x04\x45\x92\xa2\x10\x09\x24\x09\x9a\x82\x25\x96\x46\xfb\xe2\x97\x0d\xa7\x37\x6c\x35\x01\xb1\x6b\x45\x91\x2e\xa1\xa0\x95\x12\xef\xea\x07\x41\xc9\xa0\x04\x4f\x34\x45\xa0\x28\x70\xda\x7c\xb8\x34\x4d\x78\x1d\xaa\x98\x5e\x3b\xed\xae\xcf\x66\x44\xdd\xd6\xa6\xf3\x6a\x2e\x39\x78\xc2\x39\xc5\x65\xa1\xe2\x1c\xb6\x5b\x59\x71\x4a\x8b\xce\x1b\x8e\x3f\x6e\x7a\x63\x1a\x1a\xc0\x45\x5f\x72\xec\x35\x12\xa8\xc9\x9e\xc8\xde\x1e\xe4\x79\x29\x26\x5d\x86\xf9\x9c\xec\x91\x04\x45\x2a\x93\x13\x0a\x54\xdc\x95\x37\x36\x6a\x72\xc0\xa8\x2c\xbd\xd5\x1e\x50\xb8\x24\x3c\x2c\xe3\xf7\x02\xea\x70\x86\x9d\x0e\x1b\xbc\x0d\xd6\x66\xca\x72\x23\xde\xf0\x6c\x0c\xbc\xe8\x0d\x4f\xaa\x91\x53\x26\x32\xc3\x19\x03\x1c\x25\x90\x10\x2d\xbf\x27\x1a\xdb\x33\xb2\x88\x89\xcc\x72\x51\x9f\x84\x47\x79\x06\xc0\xae\x47\x45\xc6\xde\x7b\xf4\xfc\xd9\xd3\x9d\xf9\xce\x62\x47\x8b\x3a\x29\xf8\x68\x71\x4b\x1f\x0d\xeb\x01\x04\x9c\xce\x8f\x21\x67\x98\x89\x29\xf0\x50\x84\xa2\xb1\x9c\xbe\x13\x53\x15\x73\xdc\x02\x76\xc2\x32\xf8\x0d\x1d\xe9\x2b\x95\x44\xc4\x7b\x68\x32\x35\x55\x13\xb3\x14\x02\xe8\x47\x51\x0a\x29\x74\x26\xb0\xd1\x99\xcc\xc9\x9a\xcc\x78\x1e\x68\x29\x81\xb8\x92\xb7\x8f\xcd\xb2\x01\xdf\x89\xd6\xb1\x58\x5e\x4d\xf4\xee\x9e\x00\x22\xb3\x54\x9e\xbd\x9e\x16\xb9\xfd\x26\x17\xa2\x9e\xa4\x18\xa6\xff\x77\xa3\xd0\xb3\x1c\x44\x2f\x34\x3d\x44\x52\x3b\x2d\x17\x27\x4c\x54\x0e\xda\x34\x40\xb2\xcd\xd1\x64\xbb\x9c\xc6\x79\xe1\xbe\xbe\xb7\x83\x95\x88\xe9\xcf\x96\xc4\x46\x62\x0a\x3e\x74\xfe\xb9\x84\x06\x69\x53\x61\x12\x41\x0b\x50\xf7\xc4\xe8\x8d\x0c\x04\xdd\x2b\xc4\x8c\x55\x40\x66\x03\xcb\x85\xb2\xd8\x85\xd1\x2c\xdf\xc9\x49\x01\x05\x93\x01\x02\x93\xab\xf6\x63\x08\x67\x4c\x2a\x66\x6a\xc4\x93\x9e\x7c\xd9\x1d\x09\x6d\x42\x5a\x89\x9b\xdc\x56\x01\x4b\x2c\x86\x3c\x9f\x09\xe9\x94\x0d\x3c\xa9\xc7\xe9\x6c\x86\x63\xe4\x10\x55\x83\xf7\x27\xc4\xd2\xb6\xe6\x08\x7f\x26\x12\x5b\x82\xb2\xe5\xf4\x9a\xcc\x80\x09\xd2\x49\x0f\xd4\x03\x18\x08\x54\x09\x41\x11\xe5\x79\x85\x8d\x2e\x6e\xf5\xdb\x98\xf9\x28\xac\x69\x96\x49\x6d\x24\xa1\x51\xe5\x72\x1f\x2f\x54\xfe\x89\x36\x10\x31\x99\xa7\xc4\x7b\xdb\xc7\x25\xdd\xe4\xb1\xce\xe9\xd0\x27\xbf\xda\xdd\x7b\xd6\xd8\xc1\xbf\xbb\x87\xfb\xfb\x3b\x4f\x1d\xcb\x9c\xc9\xa4\x1d\x4b\x83\x33\x38\x9d\x33\x6a\xfa\xfe\xab\x36\xeb\xa5\x43\x13\x55\xa6\x05\x1c\xd5\x84\x2c\x59\xb2\x25\x15\x58\x59\x26\xdf\x16\x70\x4f\xb3\x30\xb8\xbb\x9a\xde\xd6\xa7\x45\x1c\x6f\xc1\x57\x7b\x2b\x86\x6c\xfa\x97\x62\xcb\xf5\xf3\x99\x6e\xe5\x2a\xba\xdc\x62\x8a\x23\xc2\x4b\x9d\xc6\x38\xab\xd5\x31\x26\x8c\x9f\x38\xf6\x8c\xd9\xa4\x45\x59\xc7\x7a\x3f\xa9\x8c\xfd\xb2\x11\x5d\x42\x83\x96\x2f\x50\x38\x99\x14\x19\x68\xd7\xb9\xd3\x1d\xe0\xd0\xc1\x37\x01\x89\xd5\x60\xf7\xd1\x47\x26\x2d\x31\x59\xcb\x78\x28\x5e\xb8\xee\x48\xbc\x1e\x9e\x79\x82\xd5\xd1\x6e\x8e\x9b\xc2\x6f\x76\xdc\x8f\x3e\x72\x7c\x17\xec\x77\x1c\xc0\x70\x21\xe0\xa3\x8f\x3f\xeb\xb4\xdd\x57\x1e\xfe\xfb\xfd\x3f\x78\x44\xe6\x53\xe4\x29\x9d\xbc\xa2\x38\xb8\x90\x1c\xda\xa3\x10\x7e\x04\x48\xe9\x0e\xc0\x73\xfb\x6e\xff\x18\x08\xd3\x6e\xbe\x46\xa8\x13\xcf\x9c\xd6\x70\xf8\xa2\xeb\x72\xf2\x51\x39\x85\x20\xbc\x91\x9a\xec\xc0\xbe\x5e\x8d\xab\xf6\x51\x09\x48\x7c\xa4\x8c\x22\x3d\x4a\x0d\x34\xf9\x7c\xfa\xee\x56\x84\x05\x0e\x26\xc9\x4b\x43\x9e\xcb\x30\xa2\x58\x41\xb1\xc1\xb2\x26\xfe\x02\x6a\x03\xe0\xf5\x29\x5d\x18\x7e\xf1\x3a\x68\x9e\x81\x88\x0d\xe0\x13\x86\xdc\x5b\x4b\xf8\xa2\xfe\xca\x3d\xa6\x57\x75\x6a\xb0\xd1\x19\x5a\x3f\x77\x9a\xad\x71\xf7\x25\xf1\xb6\x36\x38\x3b\x3d\xf5\xbb\x03\xe0\x27\x6d\x6c\xf7\xf9\x0e\x84\x23\x7b\x09\x8c\x0d\xfd\x60\x27\x38\x38\xaf\xa6\x8c\x85\x69\x32\x55\xd9\x42\xc8\xfa\x02\x41\x86\x7d\x29\x93\x33\x70\x11\x03\xac\x90\x79\xd2\xf5\x09\xa2\x5d\x84\xf6\x5e\xc0\xd9\xa2\xd7\xaf\x1c\x65\x3b\x95\x26\x18\x32\x39\xb1\x83\x31\x01\x99\x16\x1b\x84\xc9\x7c\x88\x8b\x4f\xd2\x22\x31\x81\x75\x8d\xff\x2c\xde\xe3\xfd\x57\x84\xf2\x12\x17\xc0\x27\xa1\xd5\x8c\x23\x0a\x96\x7a\xad\x90\x86\x85\xc9\x6d\x3e\x87\xeb\x37\x1c\x4a\x61\xba\x48\x31\xfc\xee\xc9\x00\x27\xfd\xb2\xeb\xbe\xaa\x48\xe8\xd3\x6e\x88\x27\x4e\xed\x99\x94\x48\x42\xbc\xb0\xf3\x3a\xa0\xdd\x54\xbb\x13\xba\x47\xa0\xfb\x2a\x5e\x13\x70\xf0\xa6\x79\x71\xc9\xac\x1b\xe7\x8f\xec\x82\x6d\x7d\xdb\xe4\x2d\xdb\xbb\x4f\x0f\x4a\x99\x0f\x9d\xea\x6a\x92\x1f\xea\x3b\xfc\x21\x25\x58\x4e\x39\x09\x97\x48\xf3\x42\xc1\x49\x86\x31\xaf\x0f\x4e\xc9\xca\x6e\x35\x47\x63\x38\x16\x64\x50\x78\x84\xe5\x80\x19\xcd\xd3\xf4\x8a\x20\xed\x14\x9f\xc8\x65\xf4\xd5\x46\xae\xe8\xdc\x93\x00\x72\x8e\x1c\x2b\xa2\x0e\xb9\x5a\x48\x8a\x37\x38\x00\xf8\x74\x9a\x44\xda\x69\xbb\x64\x54\x5e\x30\xee\xf6\x5d\x04\x6f\x9b\x40\x35\xf9\xf0\x55\xc2\x9e\x2f\x2b\x91\x93\x56\xe7\xbf\xe8\x8e\x82\x71\xcf\x0f\x30\x8e\x4a\x15\xeb\x2d\xae\xb9\xf8\x5c\x69\xce\x84\x29\x05\xca\x16\x66\x9b\x98\x55\x86\x20\x7e\xcc\xc1\xef\x26\x81\xc4\xbf\x11\x86\x40\x5a\xcd\xe6\xdb\x15\xb1\xc7\xc5\x74\xca\x31\x8c\xb6\xc8\xa4\x1a\x8c\x2f\x91\x71\x0d\x81\x53\x2e\x6d\x66\xac\x38\x66\xd9\xda\x44\x94\x26\x9f\x20\xac\x26\xd8\xc4\x0d\xb1\x6d\x7e\x09\xca\xe4\x0e\xda\xc1\xf1\x59\xa7\x43\x1c\xc5\x1d\x18\x05\xd1\xba\xc9\xb1\x01\xaa\x88\x8c\xb7\x26\x57\x60\xef\x31\xa5\x11\xff\xec\xf8\x67\x6e\x6b\xcc\x04\xb9\x2c\x93\x3c\xd6\xa5\x4d\x1a\x52\x46\x2c\x67\xc1\xc6\xa6\x17\xf9\xb2\x31\xa3\x67\x32\xb4\xc3\x83\xe7\xcf\xf0\xee\xf3\xcf\xed\x8b\xb7\x6f\xb9\xd5\x24\x2e\x69\x2e\x6b\xb4\x60\x8e\xb3\xc4\x39\x40\xfc\x41\x92\x61\xa5\x62\xeb\xc9\xd3\x03\x60\xb8\xdf\x1f\x8f\x7c\x93\x69\x22\xf6\x51\xd2\xda\x80\x2f\x51\xa4\x64\xf2\x87\x33\xa0\x62\x0e\x8f\xc5\x44\xb4\x7f\x10\x3b\x64\xce\x94\x41\x44\x5c\x85\xf0\x3a\x2d\xf1\xf4\xc9\xce\xa7\x0d\xd1\x35\x13\x59\x12\x69\xe3\xb1\x5e\x0b\x82\x8a\x78\xa2\x30\xbe\x01\xde\xae\xe6\x2b\x23\x5e\x85\x19\x9e\xba\xbd\x21\x71\x1a\x63\xac\x26\xac\x10\x3d\x63\x78\xa4\xbc\x26\x52\x74\x5e\xc0\xcf\xc6\x0a\x18\x78\x0c\x4b\x69\x99\x84\x68\x35\x80\x8c\x7f\x53\xe2\x46\x75\x88\x59\x9c\xbe\x05\x06\x2d\xb0\x16\xf4\x0b\x68\x41\x16\xc6\x19\xaf\x18\xad\x4c\xa4\xe4\x1d\x56\x69\x5e\x5a\xdd\x74\x43\x0c\x29\x09\xa0\xc0\x08\xcc\xd1\x3c\xb3\x96\xf1\xb4\x4e\xa0\x04\x7d\x55\x06\x6a\x63\xe4\x2b\x03\x37\x18\x26\x26\xb1\xc2\xae\xaa\x1d\x29\xdc\x07\x44\xd3\xba\x1d\x02\x88\x35\x23\xbe\x87\xba\x19\x03\x7f\x88\xbb\xd9\x1e\x6b\xf2\xc6\x26\x66\x28\x6e\x14\x81\x38\x80\x08\xd1\x89\x1e\xec\xef\xed\x35\xc4\x98\x36\x61\x79\xd1\x57\x04\xae\x78\x94\x6c\xb8\xab\xce\xd8\x21\xed\xff\x62\x8b\x2c\x7c\x4b\xfc\x84\x5f\x7f\x56\xa1\xd1\x3f\xbd\x10\xc6\x41\x85\xd3\xf1\x86\x7d\xa6\x2a\x7d\x5e\xc5\x3a\xca\x31\xf6\x2f\x43\xad\x91\xbf\x45\x96\xdf\xac\xa9\x8d\xf3\x66\x02\xa7\xde\xa4\x59\x72\x01\xdf\x37\x6c\x06\x5e\xb5\xc5\xeb\xa0\x56\xee\x79\xa7\xfa\x67\x3b\x3b\xcd\x36\xd0\x8e\x03\xa6\x69\x29\xc9\x8d\x7d\x6f\x19\xd3\x49\x0b\xde\x89\x78\x04\xf4\xac\xa0\xd8\x86\xc4\xa7\x3b\xa0\x29\x90\xf4\xb2\x49\x11\xe1\xe9\x4e\x29\xc8\xac\xc5\x70\xa4\xca\x5a\x20\x20\x41\x36\xc4\x61\x9e\xd2\x4c\xab\x3b\x8c\xe2\x01\x87\x08\xad\x39\x25\xae\x47\xf9\x64\x59\xa3\x97\x47\x87\x4f\xf7\x9f\x7d\x5a\x2b\x15\x72\xb4\x08\x27\x61\x06\xab\x8d\x2e\x8f\x76\x6a\xcb\x34\x8d\x03\xad\xbe\x96\x47\x40\x96\x9a\x8a\x62\x19\x58\xd0\x3d\x32\xd1\xba\x9c\xf9\x50\x5c\xac\x49\xe4\xee\xee\xde\xee\xee\x85\x75\x35\x66\x08\x9a\xaa\x0c\xf7\xeb\x94\xd8\xfa\x5a\xb7\x46\xb5\x96\xd7\xde\xa7\x57\x04\xa6\x97\xdd\xf6\xa6\x62\x47\x59\x7a\xad\x88\xd1\x30\x5d\x98\xc1\xf5\x68\xff\xda\x2c\x0f\x5d\x0e\xd9\xa7\xb8\xb8\x85\x00\x5d\xf6\xba\x95\x54\xd9\xa5\xe9\x81\x66\x66\x85\xeb\xd4\x01\x64\xb6\x31\x6b\x88\x0b\xe6\x90\xf6\xad\xbe\xf8\x7f\xd3\x22\x6d\xf8\x10\x34\xae\x8e\xcf\x7a\x94\x51\x74\xdb\xe6\x46\x11\xe9\xa4\x5c\x30\xe2\x29\xb0\xb2\x5c\x19\x31\xf2\xc3\x72\xbe\xcf\xca\x35\x06\x39\x61\xda\xc5\x4a\x4d\x81\x2d\xa0\x5b\x36\x5c\xee\x04\x73\xfa\x76\xcb\x13\x44\x5e\x25\x0d\xff\xb3\xf4\xd2\xc2\x91\x0a\xa8\x5a\x18\x18\x72\x41\x95\x0b\x13\x8c\x08\x70\x4a\x7d\xc1\x66\x99\x8e\x58\x73\xae\x02\x9d\x81\x0d\x23\x10\x24\xf9\xcc\x73\x3f\x24\x0f\x1a\x39\xaa\x99\x7f\x63\x2c\xd3\x03\x4b\x1a\x88\x33\x1a\x29\x25\x6f\x58\x2f\x1d\xde\x43\x7a\x5c\xb9\xd0\x86\x90\xe7\x88\x13\x3b\xce\x49\x2b\x28\xbd\x87\x39\x01\x84\x98\x17\x6b\x29\xb1\x9a\x4a\x96\x73\xcf\x70\xdf\xf5\x7d\x53\xd8\xee\xb8\x9b\xe3\x9d\x37\x4b\x35\xa1\x42\x08\x59\xf5\x98\x42\x5e\x1c\x4e\x24\x11\x41\xdb\xce\x0a\x5f\xe7\x44\x06\xb3\x8d\x7d\xbf\x55\x89\x2a\xee\xd8\xb7\x7d\xef\x50\xf1\xa3\xdb\xa2\x79\x6c\x28\x6e\xbe\x44\xb6\xe1\x05\x67\xa3\xde\xb0\xd9\x0e\xaa\xa9\x4d\x88\x6c\x3e\xcc\x34\x5f\x66\xa8\x44\x6a\x69\xeb\x9f\x84\xa1\xc8\xf7\x52\x34\x6c\x45\x45\xaa\xe7\x45\xba\x85\x4e\x98\x39\x2c\xeb\x77\x66\xa8\xd0\x48\x0d\x27\xd8\x37\x9d\xf3\x61\x59\x07\x9a\x24\x8d\x59\x66\x3a\x30\xb9\x34\x8f\xdb\xce\x89\x67\x97\xe2\x23\x11\xe2\x15\x96\xdd\x56\x61\xb1\xec\xb2\x3a\x69\x64\x5d\x79\x0e\x7c\x40\x08\xcf\xcf\x2b\xb5\xa0\x75\xab\xe6\x10\x2b\xd9\x1e\x40\x07\xec\xf5\x87\x26\x45\x5e\xd0\x71\x5f\x58\x43\x58\x9f\xfe\x88\x92\x3f\x0a\x76\x15\x21\x77\x06\x1a\xf5\xac\x5f\x5f\x6c\xa4\x84\x95\x17\x54\x74\x49\x24\xa9\x66\x91\x56\x2a\x98\xf9\xed\x52\x6a\xeb\x68\x6a\x01\x7e\xb7\xfd\xd5\x52\xce\xfe\xc8\x3c\x2e\x93\x99\x83\xa4\x71\xf8\xca\x6d\x73\x32\x4d\xa9\xcb\xbd\x9d\x28\xf4\xbc\x13\xe4\xf7\x14\xb8\x99\x2b\x12\xbe\x6c\xae\x75\x7f\xaf\x7f\xcc\x97\x28\x7e\xf7\x4b\xda\xe4\x13\x3b\x2c\x59\x71\x4f\x1a\xa3\xcd\x1d\xcc\x32\x4e\xc3\x3b\x4a\x02\xd7\xa4\xd1\x14\x78\x7d\x66\xbb\xce\x1b\xb2\x65\x52\xb6\xbf\x94\x13\xc4\x75\x69\x4a\x1f\x36\x2e\x92\xe2\x28\x01\xbf\x15\x80\x9f\x25\x15\x3e\x04\x57\xeb\x37\xa5\x22\x2a\x03\xc4\xf7\x4b\x21\x88\x4e\x96\x61\xa1\x3b\x17\x23\xcd\xb1\xd1\xbd\x54\xab\x26\xce\x12\xf5\xae\x1d\x12\xfd\xf3\x8a\xcb\x5b\xfb\xd4\x69\x3d\xdf\xdb\x2b\x3f\xbf\x34\x0f\x07\x3b\xb5\x52\xf4\xea\xc1\xbc\xda\xdf\xdf\xff\x74\xf5\x30\x08\x93\xb4\x26\x5e\x28\x24\x16\x12\xf4\xc9\xcf\x11\xdf\xed\x47\x1f\x9c\x4e\xad\x9e\x27\x59\xca\x01\x90\xbf\xd2\x28\x1b\x1c\x17\xe5\x75\x45\xc9\xd5\xc3\x4b\xca\x13\x2a\x6a\xd0\x52\x96\xf6\x3e\x4b\xe3\x10\x19\x5b\x9a\xcd\xb6\x97\x57\xb3\x6d\xd2\xde\xf6\xc7\x78\xaa\x03\x76\x75\x1e\x92\x95\x74\x86\x5e\xbf\x69\x62\x19\x92\x79\x73\x81\xb7\xae\x11\x95\x31\x8d\xfa\xa7\x26\x98\x95\x41\x8d\xa2\x31\x7d\x12\x5b\xb6\x17\x2e\xb6\x8e\x73\xc7\xfd\xcb\xb1\x25\x33\x03\xeb\x0d\xe9\x20\xb4\x5c\x86\x5c\x6c\x5c\xa0\xa7\xa2\x72\x39\x55\x2d\x4b\xdb\x2c\x87\xd5\xd8\x48\xb6\x1c\x5b\x4f\xb1\xad\xff\x97\xa9\xc6\xdd\x2c\x83\x11\xb4\xdc\xf8\x38\x03\xf4\xd1\x36\xdb\xf2\xb2\x98\xd1\x43\x17\xba\xa7\xcf\x57\x61\xc6\xfb\x77\xb3\x2c\xcd\xe8\xa1\x95\x29\x2a\x43\xdc\x8d\xee\x46\x82\xd3\x43\xf6\x49\x2c\x87\xbf\x3a\x25\xd3\x29\x75\xc3\x5b\x37\x09\x3a\x1d\x43\xc3\xb6\x9f\x97\xc3\x56\x03\x58\x19\x77\x7b\x53\xe3\xba\xeb\x8f\x0d\xdd\x34\xb8\xa3\xa9\x40\x92\xc2\x2c\x60\xdd\xe8\x2a\xb2\x34\xc7\xf3\x23\x7d\x43\x16\xc8\x2e\x98\x12\x30\x50\xa2\x62\xa9\xc5\xe3\x0f\xe3\x55\x6f\x78\x12\x78\xc3\xb1\x21\xcd\x16\xaa\xc8\x91\xf9\xbe\x65\xed\xcd\x94\xee\xe0\x14\x69\x35\x1b\x32\x58\xa7\x3b\xc6\x99\xa9\x20\xed\x97\x7a\x66\x4d\xaf\x80\x44\xcf\xd5\x34\x7f\x48\xce\xde\x73\x7b\x43\xbb\x2b\x7e\xf2\x13\x7c\xab\x89\xbd\x83\xa7\x15\x88\x09\xfc\xd3\x6e\x87\x6b\xe9\xcf\x39\x06\xce\x08\x07\x79\xd7\x11\x78\xf2\xed\x87\xfb\x6a\x37\xbb\xbd\xd7\x1f\xec\xcc\x7d\xb7\x54\x19\x63\x07\x92\x2b\x2c\x87\x04\xd0\x5a\x1e\x45\x32\x96\x54\x4e\x99\x52\x95\x65\x81\x65\x53\x8f\x4d\x75\x3d\xe3\xc5\xac\x4a\x5e\x95\x63\x4e\xee\x3b\xe3\xa4\x7a\x6a\x9e\xb4\x04\xd7\xb0\x5b\xbe\x47\xe2\x4b\x70\xab\x8f\x05\x82\x3a\xf0\xf7\x1e\x2a\xe2\xb9\xa0\x42\x03\x64\xbe\x01\xe2\x79\xdf\xaf\x56\xf4\xc7\xe6\xd6\x3c\x5b\xc9\xe6\x1c\xb0\xc2\xa4\x21\x24\xc6\x74\x0f\x49\xad\x92\x1b\xeb\x16\xe0\x86\x64\xf2\x05\xd0\xd1\xf8\x7e\x11\x2d\xef\xd8\x3d\x75\xa9\x5e\x6b\xe1\x3b\x17\x43\x2a\xc4\xdd\x5e\x4c\xad\x8a\xa3\x8c\x24\x77\xb4\x44\x8d\x55\x2d\x3d\x54\x00\xd8\x5c\x40\x5b\x85\xb3\x04\xd3\xa9\x49\xa9\x3a\x9b\xa2\x96\x74\x64\x55\x2d\x78\xb8\xe7\x9d\xfa\x81\xa5\xfe\xbf\x6b\xf2\xc5\xe7\x2b\x89\xfd\xae\x4b\xe4\xe9\x3a\x3e\x5b\xd4\x7b\xb3\xb5\x5b\xcd\xf9\xb6\x6a\x5b\x7b\x1b\xdf\xcf\xe9\x54\x5c\x2a\x03\xf9\x15\xc5\xad\x80\xf7\xae\xf2\xd6\x95\xf5\xb5\x02\x37\x2b\xec\x62\xa3\xd8\xed\xb4\xbd\x2e\xdf\x4f\x11\xbe\x86\x74\xf3\x0e\x0b\x79\x87\xb0\x62\x96\x77\xc8\xb5\xf2\x43\xfa\xf3\xd9\xea\x4a\x8d\x4b\x73\x7f\x68\x7f\xce\x71\x54\xe4\xd3\xe7\x0e\xd9\x8d\xc9\x37\xb3\xb4\x7a\x49\x9b\x15\x49\x42\x48\x43\xcd\x5c\x11\xe3\xd8\xaf\xd2\x48\xf1\x6f\x53\x1a\x95\x82\x92\xf5\x45\xaf\x48\xaa\xbd\xd9\x78\xf9\x76\x83\x0b\xe3\x00\x6f\xfa\x31\x4a\x73\x1c\x70\x6d\x64\x4d\xcd\xe8\x2e\x25\xe2\xd0\xa2\x08\x9d\xb5\x59\x49\xc3\x5c\x60\x06\xb6\xf1\xdc\xa1\x8b\xd8\xf6\x19\x13\xb0\xcf\x8c\xab\xed\xce\x1d\x3e\xa9\xd5\xef\x43\xe6\x32\x8c\x11\x5e\x10\xad\x27\x57\x56\x0a\x5d\xa3\x07\xa6\x3d\xe0\xf6\xfb\x04\xed\x3d\x99\x3b\xeb\x42\xdd\xd3\x1d\xa2\x63\xcd\x6c\x56\x18\x5e\x48\xbe\xcd\x71\x10\x16\xf3\x09\x52\x10\x31\xd5\x93\xab\x4f\xca\xc8\x57\xaf\x17\x49\x46\x9c\x8a\x95\x56\xaf\xe7\xe1\x4c\x53\xf4\xa4\xc0\xce\xe1\x3f\x4d\x56\x01\x5e\xe5\x75\x3d\x59\x30\x99\x8d\xd2\x89\xe6\x06\x12\xb6\xbd\xdb\x78\xd6\x38\x70\x9a\xde\x09\x21\x91\xc3\x44\x1a\x4b\xad\xfe\xf4\x85\xaf\x94\xc8\xe8\x4b\xf5\xf0\x66\x02\xde\x1e\xbd\x83\x82\xee\x68\x97\x0f\xe5\xfe\xbd\x3a\x6f\x30\xf3\x39\xa3\xdf\x49\x77\x1c\xb4\xbb\x9d\xce\x26\xd6\x3f\xbc\xff\xd9\xa4\xb2\xfb\x70\x46\xc6\xa8\xe1\x2b\xd8\x3c\x85\xaf\xdf\x65\xf3\xb3\x89\xdd\x3a\xd2\xa3\xd5\xee\xdf\xa8\xdd\xe7\x84\xb5\xcd\x01\x37\xc8\xa4\x7e\xe6\xd7\xbe\x9e\xd7\x5b\x03\xfa\x7b\xfa\xa2\x16\xc9\x7a\xdb\xad\x4d\xb3\x7a\xc7\xab\x25\x71\x7d\xd0\xab\xc5\xd7\xf5\xde\xcb\x5a\x56\xd4\xbd\xb3\xda\x57\x61\xfd\x67\xa3\x9a\xd4\x75\xd7\xaf\x2d\xf3\xfa\xb1\x57\x5b\xc6\xf5\x51\xaf\x76\x39\xab\x1f\x9f\xd4\x30\x69\x77\xcc\x17\x4b\x24\xdb\x05\x56\x2b\x3d\xaf\xfd\xf6\x9f\x7f\xfe\x9b\xff\xf8\xb3\xdf\xfc\xea\x9f\xbe\xff\x8b\x3f\xa9\xfd\xf6\xd7\xdf\xfc\xf7\x3f\xfc\xb9\xfd\xd2\x96\x45\xae\x27\xf3\x5a\x27\x0b\x93\x6f\xff\x3e\x54\xba\x36\x90\xc8\xf0\xc1\xd4\x22\x5d\xeb\x85\xf9\xb5\x92\xff\xf9\xb7\x45\xed\xfd\xdf\x7c\xf7\xc7\xdf\x7d\xf3\xdd\x37\xef\xff\xed\xfd\xaf\xde\xff\xba\xf6\xfd\x5f\xfe\xdd\xf7\x7f\xf5\x8f\xff\xf5\x8b\xbf\xae\xb9\x7a\x19\x7e\xfb\xcb\x34\xae\x8d\x40\x5a\x8b\x59\xf1\xed\x2f\x34\xdd\xb3\x1f\x67\xa1\x56\xd4\x18\xeb\x2b\x55\x7b\xff\xcb\xef\xfe\xf4\xfd\xbf\xbf\xff\xd7\xf7\xff\xf2\xdd\xcf\x8d\x8c\x5a\x37\x0f\x63\x45\x44\xd2\x10\xb1\x88\x4f\x81\x1c\x82\x68\x21\x32\xbb\x2b\x80\x1b\x2b\x8a\x60\x43\x12\x71\x3c\x77\x58\x53\xac\x31\x87\xd5\x85\xc7\xaf\xe7\x0e\xeb\x8c\x1f\xeb\xe3\x57\x0e\xeb\x8e\x7f\x0c\xe6\xb0\x02\xc9\x0d\x33\x87\xb5\x88\xc7\x24\x76\x58\x95\xf4\x53\x86\x6b\x87\xf5\x49\x77\x6e\x85\xc3\x4a\xc5\xe3\x57\xa1\xc3\x9a\xa5\x59\xb4\xc3\xea\xc5\x23\x7f\x3a\xac\x66\xfa\x16\x3b\xac\x6b\xfa\x2d\xd9\xcc\x61\x85\x53\x66\x92\x3b\x1c\xae\xed\x2f\x3d\x10\x08\x96\x4b\x82\x17\xc4\xbb\xb9\x9a\xcd\x63\xfc\x8f\x1c\x3c\x0e\xb9\x44\xc4\xc6\xd5\x00\x15\x8a\x8f\x90\xa2\x3a\x6f\x56\x3d\x1a\x76\x18\x5d\x9f\xa5\x04\x8d\x70\xe7\xd3\xe1\xab\xa0\x03\x22\x0c\x5a\x78\xec\x99\x3b\xcb\x4a\x10\xf4\xe7\x60\x90\x04\xe4\xa6\x4c\x70\x97\x8a\xf3\x75\x39\x59\xf6\x2c\xe5\xfb\x13\x66\xe6\x29\x38\xc3\x86\x5c\x82\x70\x73\xeb\xc0\x5e\xf5\x3f\x01\x00\x00\xff\xff\x41\x0f\x5e\x56\x59\x28\x00\x00") func confAppIniBytes() ([]byte, error) { return bindataRead( @@ -297,7 +297,7 @@ func confAppIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/app.ini", size: 10383, mode: os.FileMode(420), modTime: time.Unix(1454961797, 0)} + info := bindataFileInfo{name: "conf/app.ini", size: 10329, mode: os.FileMode(420), modTime: time.Unix(1455507054, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 00dae6f6212..d82f16dbc29 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -455,7 +455,6 @@ var Service struct { DisableRegistration bool ShowRegistrationButton bool RequireSignInView bool - EnableCacheAvatar bool EnableNotifyMail bool EnableReverseProxyAuth bool EnableReverseProxyAutoRegister bool @@ -469,7 +468,6 @@ func newService() { Service.DisableRegistration = sec.Key("DISABLE_REGISTRATION").MustBool() Service.ShowRegistrationButton = sec.Key("SHOW_REGISTRATION_BUTTON").MustBool(!Service.DisableRegistration) Service.RequireSignInView = sec.Key("REQUIRE_SIGNIN_VIEW").MustBool() - Service.EnableCacheAvatar = sec.Key("ENABLE_CACHE_AVATAR").MustBool() Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool() Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool() Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool() diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index 5328d66cec8..18313d1ef8e 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -145,8 +145,6 @@ func listen(config *ssh.ServerConfig, port int) { go handleServerConn(sConn.Permissions.Extensions["key-id"], chans) }() } - - panic("SSH: Unexpected exit of listen loop") } // Listen starts a SSH server listens on given port. diff --git a/templates/.VERSION b/templates/.VERSION index f6fb13cff4f..e0b14a90f2b 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.8.35.0214 \ No newline at end of file +0.8.36.0214 \ No newline at end of file