From 7ca75347ec71c815e7edfff42a53cbe4b57bc7dd Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 7 May 2021 21:56:45 -0700 Subject: [PATCH 01/40] minor --- weed/server/volume_grpc_copy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weed/server/volume_grpc_copy.go b/weed/server/volume_grpc_copy.go index cf9f9f777..086591e97 100644 --- a/weed/server/volume_grpc_copy.go +++ b/weed/server/volume_grpc_copy.go @@ -151,7 +151,7 @@ todo: maybe should check the received count and deleted count of the volume func checkCopyFiles(originFileInf *volume_server_pb.ReadVolumeFileStatusResponse, idxFileName, datFileName string) error { stat, err := os.Stat(idxFileName) if err != nil { - return fmt.Errorf("stat idx file %s failed, %v", idxFileName, err) + return fmt.Errorf("stat idx file %s failed: %v", idxFileName, err) } if originFileInf.IdxFileSize != uint64(stat.Size()) { return fmt.Errorf("idx file %s size [%v] is not same as origin file size [%v]", From 957e1a1bc115d26c626ffeaa207936b1fae5362f Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 00:32:21 -0700 Subject: [PATCH 02/40] fuse: important: if filer -filer.path is not root, directory listing will fail --- weed/util/bounded_tree/bounded_tree.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weed/util/bounded_tree/bounded_tree.go b/weed/util/bounded_tree/bounded_tree.go index 137f690b8..ba7f1dcc4 100644 --- a/weed/util/bounded_tree/bounded_tree.go +++ b/weed/util/bounded_tree/bounded_tree.go @@ -41,7 +41,7 @@ func (t *BoundedTree) EnsureVisited(p util.FullPath, visitFn VisitNodeFunc) (vis if t.root == nil { return } - components := p.Split() + components := util.FullPath(p[len(t.baseDir):]).Split() // fmt.Printf("components %v %d\n", components, len(components)) canDelete, err := t.ensureVisited(t.root, t.baseDir, components, 0, visitFn) if err != nil { From 3942e3b2efefe674dbb5562022c8a34494cd92d9 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 01:42:19 -0700 Subject: [PATCH 03/40] a better fix --- weed/util/bounded_tree/bounded_tree.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weed/util/bounded_tree/bounded_tree.go b/weed/util/bounded_tree/bounded_tree.go index ba7f1dcc4..58911df75 100644 --- a/weed/util/bounded_tree/bounded_tree.go +++ b/weed/util/bounded_tree/bounded_tree.go @@ -41,9 +41,9 @@ func (t *BoundedTree) EnsureVisited(p util.FullPath, visitFn VisitNodeFunc) (vis if t.root == nil { return } - components := util.FullPath(p[len(t.baseDir):]).Split() + components := p.Split() // fmt.Printf("components %v %d\n", components, len(components)) - canDelete, err := t.ensureVisited(t.root, t.baseDir, components, 0, visitFn) + canDelete, err := t.ensureVisited(t.root, util.FullPath("/"), components, 0, visitFn) if err != nil { return err } From 93e84a12f25ecc9575d72424ea819d00d9b31475 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 15:15:18 -0700 Subject: [PATCH 04/40] refactor --- weed/filesys/dirty_page.go | 11 +++++++++++ weed/filesys/filehandle.go | 8 ++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go index 1719d68e6..0332629ad 100644 --- a/weed/filesys/dirty_page.go +++ b/weed/filesys/dirty_page.go @@ -2,6 +2,7 @@ package filesys import ( "bytes" + "fmt" "io" "sync" "time" @@ -58,6 +59,16 @@ func (pages *ContinuousDirtyPages) flushAndSave(offset int64, data []byte) { return } +func (pages *ContinuousDirtyPages) FlushData() error { + + pages.saveExistingPagesToStorage() + pages.writeWaitGroup.Wait() + if pages.lastErr != nil { + return fmt.Errorf("flush data: %v", pages.lastErr) + } + return nil +} + func (pages *ContinuousDirtyPages) saveExistingPagesToStorage() { for pages.saveExistingLargestPageToStorage() { } diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 8cbaf6fd2..e66e340b3 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -239,12 +239,8 @@ func (fh *FileHandle) doFlush(ctx context.Context, header fuse.Header) error { // send the data to the OS glog.V(4).Infof("doFlush %s fh %d", fh.f.fullpath(), fh.handle) - fh.dirtyPages.saveExistingPagesToStorage() - - fh.dirtyPages.writeWaitGroup.Wait() - - if fh.dirtyPages.lastErr != nil { - glog.Errorf("%v doFlush last err: %v", fh.f.fullpath(), fh.dirtyPages.lastErr) + if err := fh.dirtyPages.FlushData(); err != nil { + glog.Errorf("%v doFlush: %v", fh.f.fullpath(), err) return fuse.EIO } From 735e65be17c7d4664462b13bfce0e660c8f6e65d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 15:22:38 -0700 Subject: [PATCH 05/40] refactor --- weed/filesys/dirty_page.go | 7 ++++--- weed/filesys/filehandle.go | 5 ++--- weed/filesys/wfs.go | 3 +-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go index 0332629ad..ab191a07a 100644 --- a/weed/filesys/dirty_page.go +++ b/weed/filesys/dirty_page.go @@ -14,7 +14,7 @@ import ( type ContinuousDirtyPages struct { intervals *ContinuousIntervals f *File - fh *FileHandle + writeOnly bool writeWaitGroup sync.WaitGroup chunkAddLock sync.Mutex lastErr error @@ -22,10 +22,11 @@ type ContinuousDirtyPages struct { replication string } -func newDirtyPages(file *File) *ContinuousDirtyPages { +func newDirtyPages(file *File, writeOnly bool) *ContinuousDirtyPages { dirtyPages := &ContinuousDirtyPages{ intervals: &ContinuousIntervals{}, f: file, + writeOnly: writeOnly, } return dirtyPages } @@ -106,7 +107,7 @@ func (pages *ContinuousDirtyPages) saveToStorage(reader io.Reader, offset int64, defer pages.writeWaitGroup.Done() reader = io.LimitReader(reader, size) - chunk, collection, replication, err := pages.f.wfs.saveDataAsChunk(pages.f.fullpath(), pages.fh.writeOnly)(reader, pages.f.Name, offset) + chunk, collection, replication, err := pages.f.wfs.saveDataAsChunk(pages.f.fullpath(), pages.writeOnly)(reader, pages.f.Name, offset) if err != nil { glog.V(0).Infof("%s saveToStorage [%d,%d): %v", pages.f.fullpath(), offset, offset+size, err) pages.lastErr = err diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index e66e340b3..3e0567dee 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -35,14 +35,13 @@ type FileHandle struct { writeOnly bool } -func newFileHandle(file *File, uid, gid uint32) *FileHandle { +func newFileHandle(file *File, uid, gid uint32, writeOnly bool) *FileHandle { fh := &FileHandle{ f: file, - dirtyPages: newDirtyPages(file), + dirtyPages: newDirtyPages(file, writeOnly), Uid: uid, Gid: gid, } - fh.dirtyPages.fh = fh entry := fh.f.getEntry() if entry != nil { entry.Attributes.FileSize = filer.FileSize(entry) diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go index fcce7d9cc..c71931b02 100644 --- a/weed/filesys/wfs.go +++ b/weed/filesys/wfs.go @@ -159,8 +159,7 @@ func (wfs *WFS) AcquireHandle(file *File, uid, gid uint32, writeOnly bool) (file entry, _ := file.maybeLoadEntry(context.Background()) file.entry = entry - fileHandle = newFileHandle(file, uid, gid) - fileHandle.writeOnly = writeOnly + fileHandle = newFileHandle(file, uid, gid, writeOnly) file.isOpen++ wfs.handlesLock.Lock() From 55e060cf619d07f47c0fa1f6e7bf74f94130edec Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 15:28:54 -0700 Subject: [PATCH 06/40] refactor --- weed/filesys/dirty_page.go | 4 ++++ weed/filesys/filehandle.go | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go index ab191a07a..25f1d31c2 100644 --- a/weed/filesys/dirty_page.go +++ b/weed/filesys/dirty_page.go @@ -144,3 +144,7 @@ func min(x, y int64) int64 { func (pages *ContinuousDirtyPages) ReadDirtyDataAt(data []byte, startOffset int64) (maxStop int64) { return pages.intervals.ReadDataAt(data, startOffset) } + +func (pages *ContinuousDirtyPages) GetStorageOptions() (collection, replication string) { + return pages.collection, pages.replication +} diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 3e0567dee..3ccd996ae 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -267,8 +267,7 @@ func (fh *FileHandle) doFlush(ctx context.Context, header fuse.Header) error { } entry.Attributes.Mtime = time.Now().Unix() entry.Attributes.FileMode = uint32(os.FileMode(entry.Attributes.FileMode) &^ fh.f.wfs.option.Umask) - entry.Attributes.Collection = fh.dirtyPages.collection - entry.Attributes.Replication = fh.dirtyPages.replication + entry.Attributes.Collection, entry.Attributes.Replication = fh.dirtyPages.GetStorageOptions() } request := &filer_pb.CreateEntryRequest{ From 50be19d23e4f8019822115ab0abd9adbb4fbeda2 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 15:33:01 -0700 Subject: [PATCH 07/40] refactor --- weed/filesys/dirty_pages.go | 8 ++++++++ weed/filesys/{dirty_page.go => dirty_pages_continuous.go} | 2 +- weed/filesys/filehandle.go | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 weed/filesys/dirty_pages.go rename weed/filesys/{dirty_page.go => dirty_pages_continuous.go} (97%) diff --git a/weed/filesys/dirty_pages.go b/weed/filesys/dirty_pages.go new file mode 100644 index 000000000..c056a09ba --- /dev/null +++ b/weed/filesys/dirty_pages.go @@ -0,0 +1,8 @@ +package filesys + +type DirtyPages interface { + AddPage(offset int64, data []byte) + FlushData() error + ReadDirtyDataAt(data []byte, startOffset int64) (maxStop int64) + GetStorageOptions() (collection, replication string) +} diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_pages_continuous.go similarity index 97% rename from weed/filesys/dirty_page.go rename to weed/filesys/dirty_pages_continuous.go index 25f1d31c2..b4ec88c21 100644 --- a/weed/filesys/dirty_page.go +++ b/weed/filesys/dirty_pages_continuous.go @@ -22,7 +22,7 @@ type ContinuousDirtyPages struct { replication string } -func newDirtyPages(file *File, writeOnly bool) *ContinuousDirtyPages { +func newContinuousDirtyPages(file *File, writeOnly bool) *ContinuousDirtyPages { dirtyPages := &ContinuousDirtyPages{ intervals: &ContinuousIntervals{}, f: file, diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 3ccd996ae..b23063e28 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -20,7 +20,7 @@ import ( type FileHandle struct { // cache file has been written to - dirtyPages *ContinuousDirtyPages + dirtyPages DirtyPages entryViewCache []filer.VisibleInterval reader io.ReaderAt contentType string @@ -38,7 +38,7 @@ type FileHandle struct { func newFileHandle(file *File, uid, gid uint32, writeOnly bool) *FileHandle { fh := &FileHandle{ f: file, - dirtyPages: newDirtyPages(file, writeOnly), + dirtyPages: newContinuousDirtyPages(file, writeOnly), Uid: uid, Gid: gid, } From 59ace549252f61ffad86deab01b8ecfdf03db5e2 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 17:22:30 -0700 Subject: [PATCH 08/40] refactor --- weed/filesys/dirty_pages.go | 2 ++ weed/filesys/dirty_pages_continuous.go | 10 ++++++++++ weed/filesys/filehandle.go | 2 +- weed/filesys/wfs.go | 4 +--- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/weed/filesys/dirty_pages.go b/weed/filesys/dirty_pages.go index c056a09ba..8505323ef 100644 --- a/weed/filesys/dirty_pages.go +++ b/weed/filesys/dirty_pages.go @@ -5,4 +5,6 @@ type DirtyPages interface { FlushData() error ReadDirtyDataAt(data []byte, startOffset int64) (maxStop int64) GetStorageOptions() (collection, replication string) + SetWriteOnly(writeOnly bool) + GetWriteOnly() (writeOnly bool) } diff --git a/weed/filesys/dirty_pages_continuous.go b/weed/filesys/dirty_pages_continuous.go index b4ec88c21..b7514a2eb 100644 --- a/weed/filesys/dirty_pages_continuous.go +++ b/weed/filesys/dirty_pages_continuous.go @@ -148,3 +148,13 @@ func (pages *ContinuousDirtyPages) ReadDirtyDataAt(data []byte, startOffset int6 func (pages *ContinuousDirtyPages) GetStorageOptions() (collection, replication string) { return pages.collection, pages.replication } + +func (pages *ContinuousDirtyPages) SetWriteOnly(writeOnly bool) { + if pages.writeOnly { + pages.writeOnly = writeOnly + } +} + +func (pages *ContinuousDirtyPages) GetWriteOnly() (writeOnly bool) { + return pages.writeOnly +} diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index b23063e28..7a939e87a 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -284,7 +284,7 @@ func (fh *FileHandle) doFlush(ctx context.Context, header fuse.Header) error { manifestChunks, nonManifestChunks := filer.SeparateManifestChunks(entry.Chunks) chunks, _ := filer.CompactFileChunks(fh.f.wfs.LookupFn(), nonManifestChunks) - chunks, manifestErr := filer.MaybeManifestize(fh.f.wfs.saveDataAsChunk(fh.f.fullpath(), fh.writeOnly), chunks) + chunks, manifestErr := filer.MaybeManifestize(fh.f.wfs.saveDataAsChunk(fh.f.fullpath(), fh.dirtyPages.GetWriteOnly()), chunks) if manifestErr != nil { // not good, but should be ok glog.V(0).Infof("MaybeManifestize: %v", manifestErr) diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go index c71931b02..4096d3595 100644 --- a/weed/filesys/wfs.go +++ b/weed/filesys/wfs.go @@ -150,9 +150,7 @@ func (wfs *WFS) AcquireHandle(file *File, uid, gid uint32, writeOnly bool) (file wfs.handlesLock.Unlock() if found && existingHandle != nil { existingHandle.f.isOpen++ - if existingHandle.writeOnly { - existingHandle.writeOnly = writeOnly - } + existingHandle.dirtyPages.SetWriteOnly(writeOnly) glog.V(4).Infof("Acquired Handle %s open %d", fullpath, existingHandle.f.isOpen) return existingHandle } From 74052064b6ebfe5f0508914d0c74627734548c3e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 17:25:42 -0700 Subject: [PATCH 09/40] add one missing optimization --- weed/filesys/dirty_page_interval.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/weed/filesys/dirty_page_interval.go b/weed/filesys/dirty_page_interval.go index 1404bf78c..304793340 100644 --- a/weed/filesys/dirty_page_interval.go +++ b/weed/filesys/dirty_page_interval.go @@ -1,7 +1,6 @@ package filesys import ( - "bytes" "io" "github.com/chrislusf/seaweedfs/weed/util" @@ -214,7 +213,7 @@ func (l *IntervalLinkedList) ToReader() io.Reader { readers = append(readers, util.NewBytesReader(t.Data)) for t.Next != nil { t = t.Next - readers = append(readers, bytes.NewReader(t.Data)) + readers = append(readers, util.NewBytesReader(t.Data)) } if len(readers) == 1 { return readers[0] From 280e7cf289b084ef06fe41ebdbb95a03bbfbe0c0 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 22:55:30 -0700 Subject: [PATCH 10/40] mount: in case the set attribute is called before persisting the file --- weed/filesys/file.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 122aeeef4..2b1eb5a44 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -336,20 +336,20 @@ func (file *File) saveEntry(entry *filer_pb.Entry) error { file.wfs.mapPbIdFromLocalToFiler(entry) defer file.wfs.mapPbIdFromFilerToLocal(entry) - request := &filer_pb.UpdateEntryRequest{ + request := &filer_pb.CreateEntryRequest{ Directory: file.dir.FullPath(), Entry: entry, Signatures: []int32{file.wfs.signature}, } glog.V(4).Infof("save file entry: %v", request) - _, err := client.UpdateEntry(context.Background(), request) + _, err := client.CreateEntry(context.Background(), request) if err != nil { glog.Errorf("UpdateEntry file %s/%s: %v", file.dir.FullPath(), file.Name, err) return fuse.EIO } - file.wfs.metaCache.UpdateEntry(context.Background(), filer.FromPbEntry(request.Directory, request.Entry)) + file.wfs.metaCache.InsertEntry(context.Background(), filer.FromPbEntry(request.Directory, request.Entry)) return nil }) From f4cf30b497cc50f3b7536568263ec2882714c7f4 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 22:56:10 -0700 Subject: [PATCH 11/40] mount: write to tmp file before uploading --- weed/filesys/dirty_pages_temp_file.go | 154 +++++++++++++ weed/filesys/dirty_pages_temp_interval.go | 266 ++++++++++++++++++++++ weed/filesys/filehandle.go | 3 +- 3 files changed, 422 insertions(+), 1 deletion(-) create mode 100644 weed/filesys/dirty_pages_temp_file.go create mode 100644 weed/filesys/dirty_pages_temp_interval.go diff --git a/weed/filesys/dirty_pages_temp_file.go b/weed/filesys/dirty_pages_temp_file.go new file mode 100644 index 000000000..a04efb6aa --- /dev/null +++ b/weed/filesys/dirty_pages_temp_file.go @@ -0,0 +1,154 @@ +package filesys + +import ( + "fmt" + "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "io" + "os" + "sync" + "time" +) + +type TempFileDirtyPages struct { + f *File + tf *os.File + writtenIntervals *WrittenContinuousIntervals + writeOnly bool + writeWaitGroup sync.WaitGroup + pageAddLock sync.Mutex + chunkAddLock sync.Mutex + lastErr error + collection string + replication string +} + +var ( + tmpDir = os.TempDir() + "sw" +) + +func init() { + os.Mkdir(tmpDir, 0755) +} + +func newTempFileDirtyPages(file *File, writeOnly bool) *TempFileDirtyPages { + + tempFile := &TempFileDirtyPages{ + f: file, + writeOnly: writeOnly, + writtenIntervals: &WrittenContinuousIntervals{}, + } + + return tempFile +} + +func (pages *TempFileDirtyPages) AddPage(offset int64, data []byte) { + + pages.pageAddLock.Lock() + defer pages.pageAddLock.Unlock() + + if pages.tf == nil { + tf, err := os.CreateTemp(tmpDir, "") + if err != nil { + glog.Errorf("create temp file: %v", err) + pages.lastErr = err + return + } + pages.tf = tf + pages.writtenIntervals.tempFile = tf + } + + writtenOffset := pages.writtenIntervals.TotalSize() + + glog.V(4).Infof("%s AddPage %v at %d [%d,%d)", pages.f.fullpath(), pages.tf.Name(), writtenOffset, offset, offset+int64(len(data))) + + if _, err := pages.tf.WriteAt(data, writtenOffset); err != nil { + pages.lastErr = err + } else { + pages.writtenIntervals.AddInterval(writtenOffset, len(data), offset) + } + + return +} + +func (pages *TempFileDirtyPages) FlushData() error { + + pages.saveExistingPagesToStorage() + pages.writeWaitGroup.Wait() + if pages.lastErr != nil { + return fmt.Errorf("flush data: %v", pages.lastErr) + } + pages.pageAddLock.Lock() + defer pages.pageAddLock.Unlock() + if pages.tf != nil { + os.Remove(pages.tf.Name()) + pages.tf = nil + } + return nil +} + +func (pages *TempFileDirtyPages) saveExistingPagesToStorage() { + + pageSize := pages.f.wfs.option.ChunkSizeLimit + + uploadedSize := int64(0) + for _, list := range pages.writtenIntervals.lists { + for { + start, stop := max(list.Offset(), uploadedSize), min(list.Offset()+list.Size(), uploadedSize+pageSize) + if start >= stop { + break + } + uploadedSize = stop + glog.V(4).Infof("uploading %v [%d,%d)", pages.f.Name, start, stop) + pages.saveToStorage(list.ToReader(start, stop), start, stop-start) + } + } + +} + +func (pages *TempFileDirtyPages) saveToStorage(reader io.Reader, offset int64, size int64) { + + mtime := time.Now().UnixNano() + pages.writeWaitGroup.Add(1) + writer := func() { + defer pages.writeWaitGroup.Done() + + reader = io.LimitReader(reader, size) + chunk, collection, replication, err := pages.f.wfs.saveDataAsChunk(pages.f.fullpath(), pages.writeOnly)(reader, pages.f.Name, offset) + if err != nil { + glog.V(0).Infof("%s saveToStorage [%d,%d): %v", pages.f.fullpath(), offset, offset+size, err) + pages.lastErr = err + return + } + chunk.Mtime = mtime + pages.collection, pages.replication = collection, replication + pages.chunkAddLock.Lock() + defer pages.chunkAddLock.Unlock() + pages.f.addChunks([]*filer_pb.FileChunk{chunk}) + glog.V(3).Infof("%s saveToStorage %s [%d,%d)", pages.f.fullpath(), chunk.FileId, offset, offset+size) + } + + if pages.f.wfs.concurrentWriters != nil { + pages.f.wfs.concurrentWriters.Execute(writer) + } else { + go writer() + } +} + +func (pages *TempFileDirtyPages) ReadDirtyDataAt(data []byte, startOffset int64) (maxStop int64) { + return pages.writtenIntervals.ReadDataAt(data, startOffset) +} + +func (pages *TempFileDirtyPages) GetStorageOptions() (collection, replication string) { + return pages.collection, pages.replication +} + +func (pages *TempFileDirtyPages) SetWriteOnly(writeOnly bool) { + if pages.writeOnly { + pages.writeOnly = writeOnly + } +} + +func (pages *TempFileDirtyPages) GetWriteOnly() (writeOnly bool) { + return pages.writeOnly +} diff --git a/weed/filesys/dirty_pages_temp_interval.go b/weed/filesys/dirty_pages_temp_interval.go new file mode 100644 index 000000000..a7252a808 --- /dev/null +++ b/weed/filesys/dirty_pages_temp_interval.go @@ -0,0 +1,266 @@ +package filesys + +import ( + "github.com/chrislusf/seaweedfs/weed/glog" + "io" + "os" +) + +type WrittenIntervalNode struct { + DataOffset int64 + TempOffset int64 + Size int64 + Next *WrittenIntervalNode +} + +type WrittenIntervalLinkedList struct { + tempFile *os.File + Head *WrittenIntervalNode + Tail *WrittenIntervalNode +} + +type WrittenContinuousIntervals struct { + tempFile *os.File + lists []*WrittenIntervalLinkedList +} + +func (list *WrittenIntervalLinkedList) Offset() int64 { + return list.Head.DataOffset +} +func (list *WrittenIntervalLinkedList) Size() int64 { + return list.Tail.DataOffset + list.Tail.Size - list.Head.DataOffset +} +func (list *WrittenIntervalLinkedList) addNodeToTail(node *WrittenIntervalNode) { + // glog.V(4).Infof("add to tail [%d,%d) + [%d,%d) => [%d,%d)", list.Head.Offset, list.Tail.Offset+list.Tail.Size, node.Offset, node.Offset+node.Size, list.Head.Offset, node.Offset+node.Size) + if list.Tail.TempOffset+list.Tail.Size == node.TempOffset { + // already connected + list.Tail.Size += node.Size + } else { + list.Tail.Next = node + list.Tail = node + } +} +func (list *WrittenIntervalLinkedList) addNodeToHead(node *WrittenIntervalNode) { + // glog.V(4).Infof("add to head [%d,%d) + [%d,%d) => [%d,%d)", node.Offset, node.Offset+node.Size, list.Head.Offset, list.Tail.Offset+list.Tail.Size, node.Offset, list.Tail.Offset+list.Tail.Size) + node.Next = list.Head + list.Head = node +} + +func (list *WrittenIntervalLinkedList) ReadData(buf []byte, start, stop int64) { + t := list.Head + for { + + nodeStart, nodeStop := max(start, t.DataOffset), min(stop, t.DataOffset+t.Size) + if nodeStart < nodeStop { + // glog.V(0).Infof("copying start=%d stop=%d t=[%d,%d) t.data=%d => bufSize=%d nodeStart=%d, nodeStop=%d", start, stop, t.Offset, t.Offset+t.Size, len(t.Data), len(buf), nodeStart, nodeStop) + list.tempFile.ReadAt(buf[nodeStart-start:nodeStop-start], nodeStart-t.TempOffset) + } + + if t.Next == nil { + break + } + t = t.Next + } +} + +func (c *WrittenContinuousIntervals) TotalSize() (total int64) { + for _, list := range c.lists { + total += list.Size() + } + return +} + +func (list *WrittenIntervalLinkedList) subList(start, stop int64) *WrittenIntervalLinkedList { + var nodes []*WrittenIntervalNode + for t := list.Head; t != nil; t = t.Next { + nodeStart, nodeStop := max(start, t.DataOffset), min(stop, t.DataOffset+t.Size) + if nodeStart >= nodeStop { + // skip non overlapping WrittenIntervalNode + continue + } + nodes = append(nodes, &WrittenIntervalNode{ + TempOffset: t.TempOffset + nodeStart - t.DataOffset, + DataOffset: nodeStart, + Size: nodeStop - nodeStart, + Next: nil, + }) + } + for i := 1; i < len(nodes); i++ { + nodes[i-1].Next = nodes[i] + } + return &WrittenIntervalLinkedList{ + tempFile: list.tempFile, + Head: nodes[0], + Tail: nodes[len(nodes)-1], + } +} + +func (c *WrittenContinuousIntervals) AddInterval(tempOffset int64, dataSize int, dataOffset int64) { + + interval := &WrittenIntervalNode{DataOffset: dataOffset, TempOffset: tempOffset, Size: int64(dataSize)} + + // append to the tail and return + if len(c.lists) == 1 { + lastSpan := c.lists[0] + if lastSpan.Tail.DataOffset+lastSpan.Tail.Size == dataOffset { + lastSpan.addNodeToTail(interval) + return + } + } + + var newLists []*WrittenIntervalLinkedList + for _, list := range c.lists { + // if list is to the left of new interval, add to the new list + if list.Tail.DataOffset+list.Tail.Size <= interval.DataOffset { + newLists = append(newLists, list) + } + // if list is to the right of new interval, add to the new list + if interval.DataOffset+interval.Size <= list.Head.DataOffset { + newLists = append(newLists, list) + } + // if new interval overwrite the right part of the list + if list.Head.DataOffset < interval.DataOffset && interval.DataOffset < list.Tail.DataOffset+list.Tail.Size { + // create a new list of the left part of existing list + newLists = append(newLists, list.subList(list.Offset(), interval.DataOffset)) + } + // if new interval overwrite the left part of the list + if list.Head.DataOffset < interval.DataOffset+interval.Size && interval.DataOffset+interval.Size < list.Tail.DataOffset+list.Tail.Size { + // create a new list of the right part of existing list + newLists = append(newLists, list.subList(interval.DataOffset+interval.Size, list.Tail.DataOffset+list.Tail.Size)) + } + // skip anything that is fully overwritten by the new interval + } + + c.lists = newLists + // add the new interval to the lists, connecting neighbor lists + var prevList, nextList *WrittenIntervalLinkedList + + for _, list := range c.lists { + if list.Head.DataOffset == interval.DataOffset+interval.Size { + nextList = list + break + } + } + + for _, list := range c.lists { + if list.Head.DataOffset+list.Size() == dataOffset { + list.addNodeToTail(interval) + prevList = list + break + } + } + + if prevList != nil && nextList != nil { + // glog.V(4).Infof("connecting [%d,%d) + [%d,%d) => [%d,%d)", prevList.Head.Offset, prevList.Tail.Offset+prevList.Tail.Size, nextList.Head.Offset, nextList.Tail.Offset+nextList.Tail.Size, prevList.Head.Offset, nextList.Tail.Offset+nextList.Tail.Size) + prevList.Tail.Next = nextList.Head + prevList.Tail = nextList.Tail + c.removeList(nextList) + } else if nextList != nil { + // add to head was not done when checking + nextList.addNodeToHead(interval) + } + if prevList == nil && nextList == nil { + c.lists = append(c.lists, &WrittenIntervalLinkedList{ + tempFile: c.tempFile, + Head: interval, + Tail: interval, + }) + } + + return +} + +func (c *WrittenContinuousIntervals) RemoveLargestIntervalLinkedList() *WrittenIntervalLinkedList { + var maxSize int64 + maxIndex := -1 + for k, list := range c.lists { + if maxSize <= list.Size() { + maxSize = list.Size() + maxIndex = k + } + } + if maxSize <= 0 { + return nil + } + + t := c.lists[maxIndex] + t.tempFile = c.tempFile + c.lists = append(c.lists[0:maxIndex], c.lists[maxIndex+1:]...) + return t + +} + +func (c *WrittenContinuousIntervals) removeList(target *WrittenIntervalLinkedList) { + index := -1 + for k, list := range c.lists { + if list.Offset() == target.Offset() { + index = k + } + } + if index < 0 { + return + } + + c.lists = append(c.lists[0:index], c.lists[index+1:]...) + +} + +func (c *WrittenContinuousIntervals) ReadDataAt(data []byte, startOffset int64) (maxStop int64) { + for _, list := range c.lists { + start := max(startOffset, list.Offset()) + stop := min(startOffset+int64(len(data)), list.Offset()+list.Size()) + if start < stop { + list.ReadData(data[start-startOffset:], start, stop) + maxStop = max(maxStop, stop) + } + } + return +} + +func (l *WrittenIntervalLinkedList) ToReader(start int64, stop int64) io.Reader { + // TODO: optimize this to avoid another loop + var readers []io.Reader + for t := l.Head; ; t = t.Next { + startOffset, stopOffset := max(t.DataOffset, start), min(t.DataOffset+t.Size, stop) + if startOffset < stopOffset { + readers = append(readers, newFileSectionReader(l.tempFile, startOffset-t.DataOffset+t.TempOffset, startOffset, stopOffset-startOffset)) + } + if t.Next == nil { + break + } + } + if len(readers) == 1 { + return readers[0] + } + return io.MultiReader(readers...) +} + +type FileSectionReader struct { + file *os.File + Offset int64 + dataStart int64 + dataStop int64 +} + +var _ = io.Reader(&FileSectionReader{}) + +func newFileSectionReader(tempfile *os.File, offset int64, dataOffset int64, size int64) *FileSectionReader { + return &FileSectionReader{ + file: tempfile, + Offset: offset, + dataStart: dataOffset, + dataStop: dataOffset + size, + } +} + +func (f *FileSectionReader) Read(p []byte) (n int, err error) { + dataLen := min(f.dataStop-f.Offset, int64(len(p))) + glog.V(4).Infof("reading %v [%d,%d)", f.file.Name(), f.Offset, f.Offset+dataLen) + n, err = f.file.ReadAt(p[:dataLen], f.Offset) + if n > 0 { + f.Offset += int64(n) + } else { + err = io.EOF + } + return +} diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 7a939e87a..abdab2b5e 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -38,7 +38,8 @@ type FileHandle struct { func newFileHandle(file *File, uid, gid uint32, writeOnly bool) *FileHandle { fh := &FileHandle{ f: file, - dirtyPages: newContinuousDirtyPages(file, writeOnly), + // dirtyPages: newContinuousDirtyPages(file, writeOnly), + dirtyPages: newTempFileDirtyPages(file, writeOnly), Uid: uid, Gid: gid, } From ba778333438114c2986e7942f138792731dc8081 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 23:04:24 -0700 Subject: [PATCH 12/40] EOF handling --- weed/filesys/dirty_pages_temp_interval.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/weed/filesys/dirty_pages_temp_interval.go b/weed/filesys/dirty_pages_temp_interval.go index a7252a808..f423b0e85 100644 --- a/weed/filesys/dirty_pages_temp_interval.go +++ b/weed/filesys/dirty_pages_temp_interval.go @@ -255,6 +255,9 @@ func newFileSectionReader(tempfile *os.File, offset int64, dataOffset int64, siz func (f *FileSectionReader) Read(p []byte) (n int, err error) { dataLen := min(f.dataStop-f.Offset, int64(len(p))) + if dataLen < 0 { + return 0, io.EOF + } glog.V(4).Infof("reading %v [%d,%d)", f.file.Name(), f.Offset, f.Offset+dataLen) n, err = f.file.ReadAt(p[:dataLen], f.Offset) if n > 0 { From aa6949ef25f8c84ba15cd1b46244cbe029860883 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 May 2021 23:28:48 -0700 Subject: [PATCH 13/40] 2.44 --- k8s/seaweedfs/Chart.yaml | 4 ++-- k8s/seaweedfs/values.yaml | 2 +- weed/util/constants.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/k8s/seaweedfs/Chart.yaml b/k8s/seaweedfs/Chart.yaml index c4f6bcc3b..ffdfe7b75 100644 --- a/k8s/seaweedfs/Chart.yaml +++ b/k8s/seaweedfs/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 description: SeaweedFS name: seaweedfs -appVersion: "2.43" -version: 2.43 +appVersion: "2.44" +version: 2.44 diff --git a/k8s/seaweedfs/values.yaml b/k8s/seaweedfs/values.yaml index c75bb869c..0a6be919d 100644 --- a/k8s/seaweedfs/values.yaml +++ b/k8s/seaweedfs/values.yaml @@ -4,7 +4,7 @@ global: registry: "" repository: "" imageName: chrislusf/seaweedfs - # imageTag: "2.43" - started using {.Chart.appVersion} + # imageTag: "2.44" - started using {.Chart.appVersion} imagePullPolicy: IfNotPresent imagePullSecrets: imagepullsecret restartPolicy: Always diff --git a/weed/util/constants.go b/weed/util/constants.go index ef2159c2c..ca554a9de 100644 --- a/weed/util/constants.go +++ b/weed/util/constants.go @@ -5,7 +5,7 @@ import ( ) var ( - VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 43) + VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 44) COMMIT = "" ) From 40945a60cfddde46ccf2c6f7c6f9170d61fde959 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 00:13:36 -0700 Subject: [PATCH 14/40] use go 1.16.4 to build docker image --- docker/Dockerfile.go_build | 6 +++--- docker/Dockerfile.go_build_large | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/Dockerfile.go_build b/docker/Dockerfile.go_build index 1adf0f5ef..01334280d 100644 --- a/docker/Dockerfile.go_build +++ b/docker/Dockerfile.go_build @@ -1,5 +1,5 @@ -FROM frolvlad/alpine-glibc as builder -RUN apk add git go g++ fuse +FROM amd64/golang:1.16-alpine as builder +RUN apk add git g++ fuse RUN mkdir -p /go/src/github.com/chrislusf/ RUN git clone https://github.com/chrislusf/seaweedfs /go/src/github.com/chrislusf/seaweedfs ARG BRANCH=${BRANCH:-master} @@ -10,7 +10,7 @@ RUN cd /go/src/github.com/chrislusf/seaweedfs/weed \ FROM alpine AS final LABEL author="Chris Lu" -COPY --from=builder /root/go/bin/weed /usr/bin/ +COPY --from=builder /go/bin/weed /usr/bin/ RUN mkdir -p /etc/seaweedfs COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/filer.toml /etc/seaweedfs/filer.toml COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/entrypoint.sh /entrypoint.sh diff --git a/docker/Dockerfile.go_build_large b/docker/Dockerfile.go_build_large index 48af3381d..2d67a1924 100644 --- a/docker/Dockerfile.go_build_large +++ b/docker/Dockerfile.go_build_large @@ -1,5 +1,5 @@ -FROM frolvlad/alpine-glibc as builder -RUN apk add git go g++ fuse +FROM amd64/golang:1.16-alpine as builder +RUN apk add git g++ fuse RUN mkdir -p /go/src/github.com/chrislusf/ RUN git clone https://github.com/chrislusf/seaweedfs /go/src/github.com/chrislusf/seaweedfs ARG BRANCH=${BRANCH:-master} @@ -10,7 +10,7 @@ RUN cd /go/src/github.com/chrislusf/seaweedfs/weed \ FROM alpine AS final LABEL author="Chris Lu" -COPY --from=builder /root/go/bin/weed /usr/bin/ +COPY --from=builder /go/bin/weed /usr/bin/ RUN mkdir -p /etc/seaweedfs COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/filer.toml /etc/seaweedfs/filer.toml COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/entrypoint.sh /entrypoint.sh From da0a4e775bcb7cbef3ea4fd5592d0a8cee436d92 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 00:13:55 -0700 Subject: [PATCH 15/40] Revert "Revert "Merge pull request #2027 from bingoohuang/master"" This reverts commit d74cdf011553ae073d524a080f65f418c76ccaa7. --- go.mod | 4 +--- weed/server/common.go | 16 +++++++--------- weed/statik/statik.go | 13 ------------- weed/weed.go | 13 ++++++++++--- 4 files changed, 18 insertions(+), 28 deletions(-) delete mode 100644 weed/statik/statik.go diff --git a/go.mod b/go.mod index f54c82994..6b2af25d7 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/chrislusf/seaweedfs -go 1.12 +go 1.16 require ( cloud.google.com/go v0.58.0 // indirect @@ -60,7 +60,6 @@ require ( github.com/peterh/liner v1.1.0 github.com/pierrec/lz4 v2.2.7+incompatible // indirect github.com/prometheus/client_golang v1.3.0 - github.com/rakyll/statik v0.1.7 github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 // indirect github.com/seaweedfs/fuse v1.1.6 github.com/seaweedfs/goexif v1.0.2 @@ -76,7 +75,6 @@ require ( github.com/tidwall/match v1.0.1 github.com/tsuna/gohbase v0.0.0-20201125011725-348991136365 github.com/valyala/bytebufferpool v1.0.0 - github.com/valyala/fasthttp v1.20.0 github.com/viant/assertly v0.5.4 // indirect github.com/viant/ptrie v0.3.0 github.com/viant/toolbox v0.33.2 // indirect diff --git a/weed/server/common.go b/weed/server/common.go index 9001a3b33..7882109e5 100644 --- a/weed/server/common.go +++ b/weed/server/common.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "io/fs" "mime/multipart" "net/http" "path/filepath" @@ -21,19 +22,14 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" "github.com/gorilla/mux" - statik "github.com/rakyll/statik/fs" - - _ "github.com/chrislusf/seaweedfs/weed/statik" ) var serverStats *stats.ServerStats var startTime = time.Now() -var statikFS http.FileSystem func init() { serverStats = stats.NewServerStats() go serverStats.Start() - statikFS, _ = statik.New() } func writeJson(w http.ResponseWriter, r *http.Request, httpStatus int, obj interface{}) (err error) { @@ -212,14 +208,16 @@ func statsMemoryHandler(w http.ResponseWriter, r *http.Request) { writeJsonQuiet(w, r, http.StatusOK, m) } +var StaticFS fs.FS + func handleStaticResources(defaultMux *http.ServeMux) { - defaultMux.Handle("/favicon.ico", http.FileServer(statikFS)) - defaultMux.Handle("/seaweedfsstatic/", http.StripPrefix("/seaweedfsstatic", http.FileServer(statikFS))) + defaultMux.Handle("/favicon.ico", http.FileServer(http.FS(StaticFS))) + defaultMux.Handle("/seaweedfsstatic/", http.StripPrefix("/seaweedfsstatic", http.FileServer(http.FS(StaticFS)))) } func handleStaticResources2(r *mux.Router) { - r.Handle("/favicon.ico", http.FileServer(statikFS)) - r.PathPrefix("/seaweedfsstatic/").Handler(http.StripPrefix("/seaweedfsstatic", http.FileServer(statikFS))) + r.Handle("/favicon.ico", http.FileServer(http.FS(StaticFS))) + r.PathPrefix("/seaweedfsstatic/").Handler(http.StripPrefix("/seaweedfsstatic", http.FileServer(http.FS(StaticFS)))) } func adjustHeaderContentDisposition(w http.ResponseWriter, r *http.Request, filename string) { diff --git a/weed/statik/statik.go b/weed/statik/statik.go deleted file mode 100644 index e3be3b214..000000000 --- a/weed/statik/statik.go +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by statik. DO NOT EDIT. - -// Package statik contains static assets. -package statik - -import ( - "github.com/rakyll/statik/fs" -) - -func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00;/TL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x00 \x00bootstrap/3.3.1/css/bootstrap.min.cssUT\x05\x00\x01\xe3\xb8\x8bZ\xec\xbd\xeb\x93\xe3\xb8\xb1'\xfa\xfd\xfe\x15rOtL\xb7[d\x93z\x96\xa4p]\x9f\xeb\xdd\xd8\xe3\x88\xf5\xf9\xb2\xfe\xb0\x11\xe3\xb97 \x12\x92\xe8\xa1H\x1e\x92\xaa\xaa\x1e\xad\xf6o\xbfA<\x13@\x82\xa4\xd4\xe5\xc7F\xf8t\x1cO \xf8!\x91\xc8L \x93x~\xfd\xedo\xfe\xaf\xc9o'\xffOY\xb6M[\x93j\xf22\x0f\xe7a<\xf9tj\xdbj\xfb\xf5\xeb\x91\xb6{\x99\x17&\xe5\xf9s\x87\xfeCY}\xab\xb3\xe3\xa9\x9d\xcc\xa28\x0efQ\xbc\x98\xfc\xf95k[ZO'\x7f,\x92\xb0\x03\xfd\xf7,\xa1EC\xd3\xc9\xa5Hi=\xf9\xd3\x1f\xff\xcc\x896\x1d\xd5\xac=]\xf6\x1d\xbd\xaf\xed\xeb\xbe\xf9\xaa\xaa\xf8\xba\xcf\xcb\xfd\xd73iZZ\x7f\xfd\xef\x7f\xfc\xc3\x7f\xfd\x8f\xff\xf1_\xbb*\xbf~\xfd\xedo&EY\x9fI\x9e\xfdJ\xc3\xa4i:F\xa3p6\xf9_\x8c\xb2\xa8l\xf2\xbf&\xc7\xac\x0d\xb3\xf2\xab\xc2N~\xfb\xf5\xd4\x9e\xf3\xeb\xa1,\xda\xe0@\xceY\xfem\xdb\x90\xa2 \x1aZg\x87]\xf0J\xf7\xbfdm\xd0\xd2\xb76h\xb2_i@\xd2\xbf^\x9av\x1bG\xd1\xc7]pn\xf0\x9c\xdb\xbeL\xbf]\xcf\xa4>f\xc56\xba\x91\xba\xcd\x92\x9cNI\x93\xa5t\x9a\xd2\x96dy3=d\xc7\x84TmV\x16\xdd\x9f\x97\x9aN\x0fe\xd9\xc9\xe8DI\xda\xfd\xe7X\x97\x97jz&Y1=\xd3\xe22-\xc8\xcb\xb4\xa1 +\xd1\\\xcegR\x7f\xbb\xa6YS\xe5\xe4\xdbv\x9f\x97\xc9/7rI\xb3r\x9a\x90\xe2\x854\xd3\xaa.\x8f5m\x9a\xe9K\x96\xd2R!\xb3\"\xcf\n\x1a\xb0\x02\xbb\x17\xda\xb1F\xf2\x80\xe4\xd9\xb1\xd8\xeeIC\xbb\\Nh[\x94\xed\xa7\x9f\x92\xb2h\xeb2o~\xfe\xacH\x14eAw'\xda\xa9x\x1b\xdd~:eiJ\x8b\x9f\xa7-=W9i\xa9\x81\xbb\x91\xeb\x9e$\xbftm)\xd2 )\xf3\xb2\xde\xb65)\x9a\x8a\xd4\xb4hodK\x926{\xa1S\xb2=\x95/\xb4\xbe\x96\x97\xb6c\xa1\x13\xdb~_\xff\xd4fmN\x7f\xbe\xee\xcb:\xa5u\xb0/\xdb\xb6\xa7\xe9\xcf\xb0Z\x95x\x15\x85Rz \x97\\\xb6m\xbbe*;\x94\xc9\xa5 \xb2\xa2\xa05\xe7\xc4M\xbfV$M;\xe5E;eO\x0cz\x85\x86\xcaG\xca\x1bhMr\xa2\xc9/\xfb\xf2\xcdl4I\xb3R\xb7\x10\x98\x86\xea\xb9\xae1\x81,|\xfe\x00\xfd\xb1\x17\xcd\xb2\x05\x9c\x11\xfe\x7f\x7f\xf7\xe1\x87\x0f\x02?UI\x7f%/\xa4I\xea\xacj\xb7\x1f\x1cb\x1f:\x172e\x01\xca\x7f^\xcaV\x9a\x000\xb5\x1f6\x9b\xcd\xae\"G\x1a\xeckJ~ \xb2\xa2\x8b\xac\xb6\xe4\xa5\xcc\xd2[\xdb\xc5O*\x06aF\x14\xf0\x90*`vvk\xebi\xe7D}\xe5\xbb\xbc3y\x0b^\xb3\xb4=\xb1p\x0e\xc8\xb4\x9a\x9ef\xd3\xd3\xfcZ\xd6\xd5\x89\x14\xcdv\xbe{\xcd\xd2\xf2\xb5\xd9\xceo<\x03Pe\xcd\x12D\x85g1\xc3\x89\x03 \x1c\x16\xe4eOj3v\n\xf7m\xf1\x1c&\xa4\xa6\xed4L\xeb\xb2\xbaT\xcf M\xf6\x8d\xb6\xac\x02\xcc\xf2naN\xf64G\xe4\x17E\xd1-4\xfa\x97\xd3\x9d \x19\x86\x9c\xb4\xe9T\xfeur\x83:\xbb=\\\xf0\x9c:M'\xedi\xea$\xa5\x08gi\x9a\x02*\xb7\xdf\x8bH!\xa1F\xcc\xf0\xe3\x7f\xcb\xbfU\xa7,)\x8bf\xf2\xef$?\xe4Yql~\xdc5u\xb2\xbd\xd4\xf9\xa70\xfc\xda\xa1\x9b\xafG\x05\x0bN\x12\x16\xd4\xf4x\xc9I\x1d\xd2\xb2\xfd|\x7f\x91\xff\xfb\x87\x8c\x1e\xb2\xb7\xcf\x93.6 \xed\xa7\x1f\xe9yO\xd3\x94\xa6AY\xd1\xa2\x1b\x86\x7f\xfc<\x1dO\xf1\xb5<\x1c4\xad\xee\xd7]\xc5\xdb\x16\x94n\xeb\x0b\xbd\x9b\x81\xe6\xe5\xf8\x83\x06\xfc\x7f\n \xf25\xf5\xe6\xe5\xf8\xe3\xe7[\xa8\xb0H\xbc\xdb\xc5\xadq\xf5\xb6C\xbf5F\xe8\x0f\xc4\xeb<\xee\xd8A\x9f\xb0\x88\"#\x86\x8e\xd5\xe8\xc8\xcb\x9d\xcb\xb2=uC?)\xda\x8c\xe4\x19ih\xca\xdds\xd9\xbc\xd9\x98cM\xbe5 \xc9)hQ\xc0F\xfd\xac\xf9E\x8c\xeazH\xfa\xcb\x8c|\x80\xc0*\xbf4\x08ho\x80\xe8\xa5.\xa5\x7f0\x93\x91\xa2\x11I\x8c\xc2\xe7\xac@\xab\x98\xc53\x03\x97\xe4\xe5%Ep\xab(6\x99)^h^V\x14\x81\xae\xa3\x8d\xd98Z$Y\x8e\x02\x0f\x06\xf0\x98\x93\x06\xe1\x91FV\xdd\xe7K\x93%(\xcel\x0b\x8fVP\xe0\xdc\x00\x9e(\xa9[\x14\xb74 \xb6\x04\x915\x8d\xa2\x95\x03\x0b\xe8\xb9j\xbf\xa1\xe0\xb5\x01\xbe4\x14\xa7\xf9d\xc0\x0eY~Fa\xa6\xac\xdbS\x90\x93\xfa\x88\xa8\x85FqdAQP\xec\xd0\xcb\x1aT6\x96\xe1\x94\x88\x95\xd3(6\x05]\xd3s\xf9\x823\xb70\x80\xbf\x96\xe59\xc8\n\x14\xb9t\x91\xe5\x05g\xd1\xd4Ky8\xa0(S!Mv,\x08b\xae4\x8aM\x95$\xe5\x11EY\x1a\xa9I\x83Jzf\xaa\xe3T\x9eQ\xc1\xccb\xdb\x0ep\x98\xa9\x8d6\xf3P\xb3\xf4Q\x12\xa4\xb3\xd3hfj#-_\x8b\xbc$i@rT\xce\xb3%\nG\xa1\xa6J.\x95\x17hj%+\xf6\xe5\x1b\x8a3\x95\xd2\xf9\x89 \xc9\xea\xc4#\xa6\x8de\x8f\x15%h\x93\xe6\x91\x05<\xd4\x14\xd7\xe3\xdcTP\xd7]|r\x9a\x9bJ\xea\xdc\x18\n3\x95t\xc8 jh\xf3\x85=\x88\xa5\xd5\xa9,(:\x84\xceM\x15\xbd\x94\xf9\xe5L}=b\xbe\xc2\xc0\x9dZQ\xf4\x1aC_*\x14kj\xeb?\xeb\xa4LQE\xcdME\xed\x89\x17\xb9\xb0\x865\\X\x8b\xd8F\xa1bZ\x98\x1a\xda\x97\xf8\xb0\xb6\x98;\xb03\xa9q\xa8\xa9%\xf6\xa1\x87\xe2L\x05%\xe4Lk\x82\x02M\xe5\xb0\xd9)\x0c\xb6\xb6X\xcc\xd1n\xb60\x15\xc2\xa75Q\xa05\xacu\x1f\x80\"pB\xd0\xcb\xc8E\xf3\x0f \x0cl\xea\x86M`\x069=\xe0\x94g\x088\xa1E\x8b\xbb\xd1\xe5\x1c\x81\xd7^\xb6\x17\x08\xfa\xaf\x97\xa6\xcd\x0e\xa8/_.\x9d\xbe\x8f\xc2V\xd6X\x96\xd2\xa2\xf5\xb7\xd0\x1e\xf9\x18\xda\xcf\xb3\x15(\x90\x84v\xa3\x7f\xc0\xa6\xe9\xd1\x02Vx\x96%\xed\xa5F\xbb\xd6\xca\xd4\xe2\x99TAg\xe6\xb8\xa4W\x96b\xf8\xf2\x05\x064U\xd2z:\xc4\xca\xd4\x05M3\x1cf\x85h'\xe2i\x8b\xa9\x036\xeb\x88\xe2L\xe9\xfb\xe2\x95\x95)\xf5\xa6\xa5U\xd0}\xc3\xbe\x92\x1a\xedg\xab\x8d\xa5\xa5\xa6\xed\xc5\xaf#k\xfc\xeb\x81\x9a\xdd\x87\xaf\xdf 0S?\x15\xb94h\xcb\xd6s\xabe%:\x92\xaf\x17\xd60T{\xf9[\xbaM\xef\x83\xdb\xc14\xadz\xe1\xa6\xbe\xe8_i\x82\xda\xc9\xfa\xc9\xd6\xffK]\xfa\x87\x99\xf5\x06\x85{{\xe1Sd)\xe1\xd2\xb0H\x12\xc5Z\x9f3\xdd\xa7\x99\x1fl\xaa\x8dG\xd0~\xb4\xa9\xbc\xf2\x17?\xd2\xd4\xdf\x7f^h\xd3}|\xfb\xf1KkT:\x94~\xac\xa5\xc2\xa4\xa6\xb4hN%.\xb95\xd6@\x7f\x08\xf7\xf4d7\xb1\x07kG\x11E\x0fxc\xaa\x90\xd4u\xf9\xea\xb5\x8fM\x8c\x80\xbd\xd6\xb1\x99!hS\xd4\x01\xc7\xd6T\xc0\x99\x1c\x0b\x8a\x03g\xe8X\x89\xdawl\xcd\x08H\xb0\xc7\xc2ck^\xa0\xa6\xed+\xf5pa\x07\x02eUuJH\xf0\xb9\x9d8\xb6\xe3\xe8\x9c\xcd[\xfbTl\xcd\x12\x08\xb8\xcfx\xac\xa9\x02\xd1}\xe4\x1a=Z\xc2\xfe2e%Ne\x9d\xfdZ\x16-^\xc6\x9eBH1\x0f\x19[3\x08\xfbK\x9e\x9f\xca\x1ae\xdb\x9aE\xd8S\xb4\xb7\xc7\xd6,B\xd25\xeb\x90%\xa4E%gM&\xb4\xa7\xcby\xdfx\xac\xc3\x9aI\x10X\x9fqX\x93 'R\xa4\xde18\xb6&\x14\x18\xd83\xba\xc7\xd6\xa4\x02\xc3z\x18\xde\xb8H\x1f\xbb\xd6\x9c\x02\xf7D\x03\xae#\xb6\xa6\x17\x8cB>\xf6\xady\x06\xa3\x0c\xde\x0ck\xca\xc1(\xe1m\x8e\xa9\xd7c^\xeeQ\xfd[S\x0f\xaf5-\xd0Y\xd9\xd8\x9avhI\xf3\x0b\xf6\x91\x1e[\x13\x0e\x87,\xc7?\xfebk\xb6a_g\xf4\x90\x10\xbc\x7f[\x13\x0e\x9d_\xe4q\x0b\x06\xb6\xe6\x1cR\xd2\x9c\xf6%\x1e\xa0\xc6\xd6\xccCE*Z'y\x86\xaa\xc1\x9a~`\xf3\xd2\xde\x99\xe4\xd8\x9a\x85\xc8\xb3\x02\xfb\xa2\x89\xed\x19\x88S\x89{\x1bk\x06\xa2\xba4\xa7\n\x9d\x82\x8d\xad)\x88K\x837\xdc\x94\xfeq\x8f7\xd9\x94{S\xe2\xa3\xb55\xa1\xd0\xc1\x82\xfd\xb7\x80\xe4\xd5\x89\xecq\x87`M+\xd8E~)\xaa\xb4\xa5\x1d\xc8U\xa4\xc0\x81\xf6d8_\xe6\xf5\x8e\x16\xd6\xac\x83\xc2\xe3\xe3\x915\xf3\x90\x97G|5 ^Y\xd3\xe39>\xdb\x1e\xaf\xec\xa9\xd7\xa3g\xd1 \xb6\xa6'\n\xfa\x1a\xbcfEZ\xbe\xa2`;\xa8\xd5\xbf.{\xb6\x11 \xe7\xc0\x9a d{X\x9a\x96\xd6\x1e\xd2\xb6\xbf\xbb\xb0\x881\xdf\xa3\xba\xdd\xd8n\xafC/\x83\x18\xc5\xda\xfe\xae\xc3\xae\xa8\xc0wFG\x95\xdeJ\xda\x92*8e\xc7S\xce\x14\xcdwd\xd5\xc7=\xf9\x14M\xd9\xbf\xcf\xfcH\x02\xdc\x83\xf3\xe1\xdfi\xfeB\xbb\xef\xdb\xc9\x7f\xd0\x0b\xfd0U\xbf\xa7\xffVg$\x9f\x82s\x10\xa0\xd6E\xf5f\xee\xc2 \x17\xb3\xa7\xe5:^\xcc\xc5^\xeb\x1f\xe6\xf3\xf9\x0e\xdd\x1e\xc6\xf7\xb6N\x8d\xcd\xd6z\xff6\xe4M\xee\xde\xd6\xf5\xca\x14X\xb5\xdc\xd5M\xae\xaa\xe65\xd9\xafw\xf6fG~\x0e\x81\x9f/\x98\x92-\xdb\x03-\x8b\xcc\xe6\xcb\xd9:q\x8a\x80\xfd\x91\x02/\xcf%\xb4\xa7\xac\x10\x87\x0fv2mY\xbdM\xc8\xa5-'zCRri\x82\x9aMgt\xf5HdP\x1e\x0e\x0dm\xb7\xc1\xacz\xb3v\xe7Gl\xe3\xa1u*\xe0\x9c\xa5iNoav>\x065m\xaa\xb2h\xb2\x17:\x0d\xd9wvA\xb2\xfc9;\x1f\xc1\xcf \xe1 \xa9\xcbKCs\xbe7\xfa9\xccZz\xee\xc9a\xa5\xcc\xb3$;s\x0b\xe4\x0en\x92\xe6\xect\xca\xa5r\x0b_P\x934\xbb4\xdbU\xf5\xc6\xb3\x15K\xf8\xc1\x13?u\xb5\xe9\xbb\xc7\xd0P\xebrw$\xff\x90\xa6\xe9\xce\xe4o\x01\xfbL\xe7\xcd\xf9\x0e6\x92\xe7\x93p\xd6L(ih\x90\x15]\xa8\xb9\x0b\xca!D\x7f6\x97\x03\xff2\xb7\xa4\xb4\x8c>\xdeN\xb5\xd0|\xd0\x96\xd5v\xd6uf\xf1[\x9c\xf7`Ir\xf3\xf4No\xf5\x84\x0d\xa4\x94\xde\xc2\xa6\x0e\xca\"\xff\xa6\xf7\xe3\x91}S\xe6\x97\x96\xee\x84\x84\xab7)\xe0\xeeO\xbd3[X^\xd0\xa5ZGGv\xec\x8b\xb7\xa6I\xabF\x10\xbd\x91[\xd6\xc8\xcd\x9c\xecs*\x0f\xf1 9\xbc\xf7(\xde\xba\xc0 K\x04gL\xdfP\xf7\xea\x0c\x87}B\x83\xf3\xc3\xac\xef\x14\xf3=\xb8\xd3\xd3bzZNO\xabix\x8a\xa7\xe1i6\x0dO\xf3ixZL\xc3\xd3r\x1a\x9eV\xfe\x11El(\\\xda\x1b\n\xc3\xd8:/r\x8a'l\n}z\x9a\xc9?\xe6\xf2\x8f\x85\xfcc)\xffX\x89?BU,T\xe5BU0T%CU4TeO\xf1$TU\x86\xaa\xcePU\x1a\xaaZCUm\xa8\xeb\x0du\xc5\xa1\xae9\xd4U\x87\xba\xeePW\x1e\x82\x83M\xde\xed\x96\xa2\xaf\xad\xd7\xeb\x1b\x938SD\xc8\x95\x11\x9e\xe6\x03\xf6\x1c\xb3\xa3G\xb1## \"G\xc8Zj\xb0i\x88\x88BLZ\xba\xe5\xc0m\xae\x96\x1fo\xccF\x98\xf5\x84\xd2\x82V\x90\xfb\xd8\xc7\xfd\xc2\xd1!P!b\x07\xab\x89\xad\xb7\x10Sa\x88ks\xe5r\xbf\xee\xb8g\xb2\x07\x89\xf3n\xd4\xe5\xaa\x80\xa9\x8cc\xae\x19p\xc8m\xc1\xda\xd1\xf1\x01c\x89\xa7.\x95\x89\xe3j\xfa\xfa\x9b\x90\x0eH\xed|W\xa5\xdc\xd6$\x9a0\xd9\x849%\xe9\x15\x19\xc2@\xc9\x95\xfc)Ll\xeet\xc0\xc5M\x1c\xb0\xf8t\xce\n\xe1!\xd6\xab\xa7\xea\xed\xf3\x95W\x00Z\x12Wo\xb7\x9b\x90\x95-\xa7\xa7\xe5Gv\x96o\x1a\xb2\x13}\xeaP\xcb\x8c\x9e1\xef\x91\x1c\x9e\xe8\xfc\x16\xb2( \xa7\x07q\x04\x8c\xfb\xe0\xee\xb7\xc8ba4\xccc \"\x93\xefi\x81\xb9\x18gE\xc6\x8e\xbc4g\xe0\x037\xd1\xc7\x9d\xd7\x03\x80\xe3u\xd29vf9\x01\x81\x1b\xf3\xed\xb6\x0b_\x87Km\xffR\xe3\xd0\xfa5\xe1I\xb5\xcdI\xd3\x06\xc9)\xcbSp\x9eor\xc9=\x19%\xccpz\x02\x00\x8a\x9b\x12@\n\x8f\x03@\x82\x08 \xcc\x8fZ\x10 D\x1f\x07\xa61:\xc1:U\xca\x19\x1e\xbbf$=\x84\x19j\xee\xe9\xc7\xbf\xb0\xfb0\xfe\x12E\xff\x16\xfdx\x0b5>\xa8\xe9\x0b\xad\x1bH\"\xac.y.\x82\x0e\xb3\xdb\xc5N\xbf\x8b\\\xa3\x95\xdf\x9c\xb2\xa3\x02-\x19\n\x8c06\xbc\xed\x05LY\x18\x8c\x8aG8\x90\x88\x01\xc1h\x84#\x88x\x84\x8dJX\xb2\xcd\xcf\xa4\xf6\xb6\x8cC\xfc\x0d\xeb#\x01\x11=\xcd\xea#\x01!\xc0\x82:\xdb\x990;\xfa\xf1F\xd2\xb4\xee\x9c\xbe7\xf0\x86\xa7\xe9<\xe3m\xff\xfd\x0c\x7f\xa2E^N\xffT\x16$)\xa7\x7f(\x8b\xa6\xccI3\xfd\xf0\x87\xf2Rg\xb4\x9e\xfc\x07}\xfd\xa0on`\xb4\xd4\x882\xab\xde&\x0bc\xfc\xe8\xc6$\x19h\xacg\xcb\x05\xc5\xa2\xf1\xcdavX\xb8\x137\xb7_\xf6\xe98\xd2\xbe\xb0jn\x11\x9d\x83\xd9 p\x8e:+\x1a\xdaN\xa2I\x103\x8f\x0f\xe6Q\xc3\xd9\xf2\xf3n4\xb2cx\x02\x99\x86\xb7\x8d\xb0y/\xcb\xcd\xf9\x8e{\xdb\x87\xbc\xd9\x1d\x1b\xe6\xc8&\xab\xd8\xb0\xf1\xd9\xfa8\x83\xd5\xceG\xcd\xdf\xbe\x96u\xca\x8f1o\xc5a\xe6<\xe7\x89\x9d\x97\x13i\xddoL\x7f\xcb\xee\x1f2\x1d\x97$ \xa2\xd5\xaa\xa6\x13\xc3j\"d\xda\xd7\x98\x961\xfcnUS\xc6\x93\xcb\x088QoU\x1b\xdd\xc2\xaeX\x93\xd4e\x9e\xb3S\xd0g\xf2&\x052_\xc0\xe8 \xf8\xb6\xe5\xb0[\xd8u@\x92\x81\x9b3\xbc\x83q\xacu 0`v\x8bC\xd8T\x96?\x88\xd1u\x89\xf4%\x0b\x1c\xdc\x02\x9b\xcd\x0c-\xb0Y{\n\xc4\xb3(BK\xc41/\xa23\x82C~\xc9\xd2wkmX\x97\xafW\x03\x17\xc0\xa2<.\xedR:\x16\xf2\xe0\xad \xe2)\xfb\xab9\xcb\xbf\xce\xa9\xfc+?\xca\xbf\xde\x9a`\xa6p3\x85\x9b)\xdcL\xe1\xe6\n7W\xb8\xb9\xc2\xcd\x15n\xa1p\x0b\x85[(\xdcB\xe1\x96\n\xb7T\xb8\xa5\xc2-\x15n\xa5p+\x85[)\xdcJ\xe1\xd6\n\xb7V\xb8\xb5\xc2\xad\x15\xeeI\xe1\x9e\x14\xeeI\xe1\x9e\x14n\xa3p\x1b\x85\xdb(\xdcF\xe1\xe2H\x01\xe5\x9f\x9d\xa4#\x05\x95\x7fvX\xa0\x14\xa0\x15\xa0\x16\xad\x97X+&\xd6\x9a\x89\xb5j\xe2\x19r\x8a\xbc\xb3Uw\xbe\xba\xd7\xfcl\x8b\xd16\xa1\xb5\xae\xf5\xaa5\xa7u\xa3\xa5\xaf\xe5\xab%\x08d\x04D\xc0Z\x08>/n U/n\xe8\xd4X\xf6\xcd8\\\xf1\xff[\x83\xdcH\xe4>\xcd\xc3\xb9\xf8?\x9d\xbbQ\xe3\x80N{\x12i\xab\x15Bn-2\x97O\x08\xb5\x95\xcc\x04\xdc-E\xda\x02cn!2\xe7\x18os\x919\x03\xbc)\x01`\xbcI9`\xac\xb1\xe8'\x9e]\x85\xb6\xa1\xfcxV,\xb2P!rH$ \xa8$\x19d#\x10P\x9c,\xe3Id\xa02e\x88\xb5@\xa0\x82e\x88\x95D\xd8\xbc/E\x06*b\x86X\x08\x04*g\x86\x98\x0b\xc4\xcc\xe6\\\x89\xcc\xcb\xb9\x94\x9c\x97q)7>Z\xab\x9c\xe6\xd4)\x84\xf75S\x1f]N\xccs<\xea\xe8\x10\x11Gx\xb4\xd1\x9c\x82\x0d\x07\x98\xcahN\xc1\x13O\xf7\xe8\xa29\x05k\x0e\xf0\xa8\xa29\x05+\x01\xb0\xb9^\xf2t\x8f\"\x9aS\xb0\xe0\x00\x8f\x1e\x9aS0\xe7\x80\x99\xcd\xb3\x14\x94\x97g!//\xcbBZ\x86\x0e\xf8\xaaq\xa7\x05c2\x01*CBb\x03\x82jEB#\x03\x8a\xaaG@7\x06\x12\xeaI\x00\x9e\x0c\x00\xaa0\x81\\\x1bHTs\x02\xb92\x91n[\x97\x06\x00\xd5\xa5@.\x0c$\xaaT\x81\x9c\x1b\xc8\x99\xdbRK\x05=-55\xd1\xd3\xd0h\xf4\xd4Vb\x04C:\xdc\xd1\x01\x8d\x0eYtP\xa2\xc3\x0e\x1dX\xe8\xd0A\x07\x07\xc0\xfb\x03\xe7\xce|\xb7\xe3\xe4x\xaa\xed\xe4X1\xaf\x93c\xf4\xbdN\xae\xe3\xc3vr\x1d\x97^'\xd75\xc6\xeb\xe4\xba6\xdbN\xae\x93\x88\xd7\xc9u\x82\xf3:\xb9N\xbe\xb6\x93\xeb\xa4\xefur]S}N\xae9{\x9d\x9c\xca\xf2;9\x05\xf1;9 q\x9c\x9c\xcc\xf0;9\x89\xf0;9\x89p\x9c\x9c\xcc\xf0;9\x89\xf0;9\x89p\x9c\x9c\xcc\xf0;9%\x17\x9f\x93\x93\x00\xd7\xc9\xb1\x1c\xd4\xc9\xa9\x1c\xaf\x93S\x08\xaf\x93\x93\x08\xdb\xc9\xc9t\xaf\x93\x93\x00\xaf\x93\x93\x00\xdb\xc9\xc9t\xaf\x93\x93\x00\xaf\x93\x93\x00\xdb\xc9\xc9t\xaf\x93S\xe2\xf089\x99\xef8\xb9\xe6<\xe8\xe4\x00d\xc8\xc9\x01\xe8\x90\x93\xd3P\x8f\x93\xd3\x80!'\xa7\x91CNN#=NN\x03\x86\x9c\x9cF\x0e99\x8d\xf489\x0d\x18rr@\xbe\xfdNN\x03m'\xd7;\x95\x01?\xf4\xf5\xa7\xbc\xfeX\xd7\x9f\xe3\xfa\x83[\x7fR\xeb\x8ff\xfdY\xac?|\xc1\x87-\xf8ne\x9f\xa5\x8e\x97\xe3\xa9\xb6\x97c\xc5\xbc^\x8e\xd1\xf7z\xb9\x8e\x0f\xdb\xcbu\\z\xbd\\\xd7\x18\xaf\x97\xeb\xdal{\xb9N\"^/\xd7 \xce\xeb\xe5:\xf9\xda^\xae\x93\xbe\xd7\xcbuM\xf5y\xb9s\xea\xf5r*\xcb\xef\xe5\x14\xc4\xef\xe5$\xc4\xf1r2\xc3\xef\xe5$\xc2\xef\xe5$\xc2\xf1r2\xc3\xef\xe5$\xc2\xef\xe5$\xc2\xf1r2\xc3\xef\xe5\x94\\|^N\x02\\/\xc7rP/\xa7r\xbc^N!\xbc^N\"l/'\xd3\xbd^N\x02\xbc^N\x02l/'\xd3\xbd^N\x02\xbc^N\x02l/'\xd3\xbd^N\x89\xc3\xe3\xe5d\xbe\xe3\xe5\xce\xe9\xa0\x97\x03\x90!/\x07\xa0C^NC=^N\x03\x86\xbc\x9cF\x0ey9\x8d\xf4x9\x0d\x18\xf2r\x1a9\xe4\xe54\xd2\xe3\xe54`\xc8\xcb\x01\xf9\xf6{9\x0d\x1c\xe1\xe5\xc0\xfc;\x9c\xc5\xd6\xf3\xd4z&Z\xcf5\xeb\xd9d=_\xacg\x84\xf5\x9c\xaf\x9e\xd5\x05\x93\xb6`N\x96O\xb9\xdan\x8e\xa7\xdan\x8e\x15\xf3\xba9F\xdf\xeb\xe6:>l7\xd7q\xe9us]c\xbcn\xaek\xb3\xed\xe6:\x89x\xdd\\'8\xaf\x9b\xeb\xe4k\xbb\xb9N\xfa^7\xd75\xd5\xe7\xe6\xf2\xa3\xd7\xcd\xa9,\xbf\x9bS\x10\xbf\x9b\x93\x10\xc7\xcd\xc9\x0c\xbf\x9b\x93\x08\xbf\x9b\x93\x08\xc7\xcd\xc9\x0c\xbf\x9b\x93\x08\xbf\x9b\x93\x08\xc7\xcd\xc9\x0c\xbf\x9bSr\xf1\xb99 p\xdd\x1c\xcbA\xdd\x9c\xca\xf1\xba9\x85\xf0\xba9\x89\xb0\xdd\x9cL\xf7\xba9 \xf0\xba9 \xb0\xdd\x9cL\xf7\xba9 \xf0\xba9 \xb0\xdd\x9cL\xf7\xba9%\x0e\x8f\x9b\x93\xf9\x8e\x9b\xcb\x8f\x83n\x0e@\x86\xdc\x1c\x80\x0e\xb99\x0d\xf5\xb89\x0d\x18rs\x1a9\xe4\xe64\xd2\xe3\xe64`\xc8\xcdi\xe4\x90\x9b\xd3H\x8f\x9b\xd3\x80!7\x07\xe4\xdb\xef\xe64\xd0qs\xe2*\xf1\xbe\x87^\xc4[7j5\xb9-\xab\xed\x13X\xcb\x13;W\xba$\xbd\x01kg\xef\xc3nO\xc8\xd6lV\xb9v_\xf6\xe1\"\xc1+\xdc~\xc8\xcb<\xb3\xab\xe2\x9f\xdb\xfaY\xddN\xfe\xdc\xee\xcb\xf4\x9b\x95t(\xcb\xd6JR\x05S\xb7`\xea\x16\xd4[@\x9e\xfc\xdb/\xac\xb3_mYyN\xfd\xa4i\x8a\xb4\xc0>;\xc6\xdbk\xed\x1c\x9c\xa1T\x84n\xbeHj\xdbCV\xcbmx\xa0\xd5I\x99\xb3\x1b\xf4\x87p,\xdb\xcc\xf3\x92\xec\xad9\x1dYs:\xbe\xe6\x14\\\x9a\xbf\x8dnPy_\xd8\xff\xc2|TZ\x93\xd0c\xed\xec\x88\xa3\xb8\xe4>)\x8b\x94\xbdo\x85\xd8\x18\xcct\xac\x0df:v\x87\x92M\xfb\xc8b\x99\x88U.U\x9fP\xd7\xf3\xe3w\xf3\xdb(\xacy:\xcfm\x9d\xces\x1b\x87\xd0L{h\"y\xa0e\xef\xc0\xbd\xe6\xc2|~J\x8c-3-\xb3\xa6\xad\xb3\n0\xb7-\xda\x137\xb8Oe\x9a~\xc6Le\xd3\xfd\x93\xe5\xd9\x06u]\xda\xbb\xfd\x9dm\xac\xe2\x83\xed$)\xf3\x9f\x92\x9c4\xcdo\x7f\xd7\x0d\xce?;G\xec\xcc\x170\x922\xbf\x9c\x8b\x1d\x0f\xfd\xd9\x1e2N\xa6M\x0d*S\x91z\xba\x8b6\xcdsH\xd9\x1d$Cy>\x10t7\x9b\xa2\xec\xa7\x845\x8a>u\xff0+\x11gS03\xb1\xb3\x80\x9d\xd8Y\xc0P\xbc\x04\xdd,`*\x1e\x822\x1d3\x16$K\xea\x17\xc9r\x08\xba\xf6\x82d9\x041\xe1\x8a\xa3>^\x8b1\x8e\xff\xf8Mf\x04\xcc\xc4\x0c\x1a\x8d)\xd4\x01Zh\xcb\"\xbaIV\x98\xd9d\xc5\xa1\xc4l\xc6H\x07\x06c\xa4\x03k\xc1\xe9\x9c_\x01\xfd\x94\xb4\xd4\xf0\x1amv6\x13:\x04{J-/\x13\x92\x1bY\xe7\xb2hO?\x1b\x17\xcetC\xd4\xcd\xa6\x1fr\x9d4g\xa7\"4\xc7\xaa\x11\xc5\xf0\xaaU\x96\xc9C\xe4\xe7!?\xfax0sp\x1eL\x8c\xc1C~4xX\xac\xd8\xa9o\xa6b\xb6\xc8zu?Go!sg\xd3Pz/\xe4\xd8\xae}}\xa8\xf6\xdc\x9e\xdb\xf48\xcd \x8bc4e\xfe\x1b~s\xb3 \xca8\xf2\x8b\xdc.\x189OE\x0b{\xaf\xca\x8c\xdf\xc2\xc6ks\xe3\x10\x9e!\xae=\xc2\xf2\x15g\x98\x17\xd7\xd9\x08\x05\x1d\xd7\xb8ws\x02\x01-xh\x03\xf7T\x043-\xa1/\xb6\xf0\xbfh5\x00*\x81\xd6\x93`\xc5\xe1\xad\xffF\xa7\xf1\xa2Eo\xa9\xc5\x05.j\xfe\xd2\xcf\xd8\x17\x87S\xd00\xf3\xe6\xaa\xd8\xea2\\K`\x80\xc4\xe4\x8fg\xf3\xa2\xa1\xccCK\xea\\d\x80u\x8d\xa5\x1f\xa4\xed\xc1\x1d\x8cMy\xe9jm\xc9\xf42dJ\x19\x03\xd8r\xf62\xa2\xea\xb1;\xa8\x9d\xe1e\xa3'\xdf\xea\xec\x18\x13\xd0\xe5\x04|\xd9\xf9j\x07\xb1\xd6\xde\xa1\xb5k\xba(\x1d=D\xf6\xe46g\xeb\xe2\x8b\xc8\xbap\xe9\xa6G{0x\x06\xcdy\x82\xba\xcb9\x18\xc5X`o_\xcc2s\"\xe2\xa5{]\x8d\xf8D\xd1U\x8b\xdfc\x19p\x9c\x8fr\xf1\x8a\xa2\xe9\xf4q\x9aS\xfbK\xc9f\x08\xe4\x8c`M\xdc*mj\x85\x17\xc9\x8fx\x91\xcek\xed\x8c\x9b\xcb\xf4\xed\xa2\xeaJSK\x9e\xce\xfd?+[\xa0\xf9\x11\x11h/\x0b\x8e'\xb5\x04\x9a\x1fQ\x81\xda4}\x02U\x0c\xe1\x02\xf5\xb1\xc6\x05z\"Mp\xa04\xed\xc2<\xd7a\x9b\xf9\x16\x1d\xd3\xf4\x17\xb3\x909\x17\xa3\xb7\xb8\x94\x95o\xe3\xa3\xb6\xec6\xbf\xb2'q\xdf\xb6\xb3\x1d\xf6\xd5\xc8\xbe\x14\xe1W\xa3\x1d\xa3\xed\x9c\x1bUw\xc2\xc5\x04\xf4\x85\x16m#6\x9dH\x81}\xf1\xb0)6\x8b\xaftu\xb8\x02\x95)\xf7\x13b\xdd\xa9\xb7k1\xf9\x8a\x85\xedIx\xa2y\xc5\x1d\xee\xd4\xcc\x90\xf4\xc50k\xe4 \xc7o\xe2\xc5\xd8\x89A\x95\x7fEK`\xb9f\x10\x063\xcc1\x1a)$\x03\x9e\x9e\xb2\x06\xc4\xba\xe6\xd5\xe4\xd1\xb0>\xf3c\x92\xe3\x1f\xf9\x84\xbc\xe7+\xb1\x87\x1f\xf4\x13\x97\xdfD\xfb\x08W\xec{tU\xbdM~X\xad\xf7\xf1\xea\xe9\x1e.\xed\xb2\x16\xd7\xdct\xf9\xd8@\xd2\xb4,L\x99#\x1f||\xbf\xc8\x0e\x93x\x8fDtg@J\x88\x05Y\xd7\xe4U\x06b\xf2*\x0f\x98\xbc\xc6\x1b&oB\x0d\xa3vJ`\xb9\xae\xc9\xcb\x0c\xcc\xe4\x8dB\x88\xc9\xdbeQ\x93\x177\x0c\x9b<\xf6\x98<\xc7?b\\\xf7\x18S\x0f?\x9eY\x9de\xfc\xbd&\x9fD$^\xed\xef\xe1\xd2.kq\xed5y!C\xdf>\x87\x1d&\xf1\x1e\x898&\x0fK\xd0\xba.k\xd7\xe0E2b\xee\"\x07\x18\xbb\xc4\x1a\xa6\x0ea\x86)[h7\xcf5r\x9e\x8c\x998(\x80\x18\xb8Y\x0e5oq\x056\xe4\xac\xc7\xb89\xfa\x113\xba\xc7l\xbc\xdc\xa0\xa6\xcd\xaf\xe8~\x84'`\x9e\xf4i\xf14\xbf\x87G\xbb\xac\xc1\xb3\xd7\xb0\x85\xfc|\xbb2v\x98\xb4\xbd\xd2p\xcc\x1a\xe2Up\xc8\xb4\xfd\xbf=\x05\xd9N\xf9\xa5\x0cx\xcc2\xf2A\x90\xbe\xb2\xd1\x0dt\x1c\xe7\x15\x1a5\x0d\xb0Dg\x91\xd4a\x91y\xf7\xaf\xe7\xee\x1cV\xbf0^\x10B\xfb\x16\xd0\xcc \x10\xcf\xb3<.Mi\xf1(U\xce\x10\xbb\x1c\xf1^\x82\xf2\x0b\x18\xa3k\x15\x03vc\xc3\xd9r\xe9\xa8\xba\x01\x11\xc4\x12\xa7#\xc1\xfb\xb6\x17jHL\x0b\xc7\xcf\xca3V\x84\x1f*3\x8a\x18\x03\xae\xbd\xbbeT\xfb\xc5\xc0lR\x95\x93n}&\x83\xddx~G\x95r\xe0E+\x16\x83\xae=\x0d\x81PAf1q\x8a\xfd\x93\x95\xfaJF\xe3\xb8\x97I\xeb\xe4\xfd\x8a\xb4\xbb\xb9(\x08\xaeG7\xe4\x0c\xd3\xb5\x1b\xc4\x8b(\x87\xe7-)'\xb8\xec9\xa3>==\xc0\xa01Q\xbdV\x1f\xc9\x10\n\x06\x1bQ\x1f\xff2\xf6\xdd~:0\x86\x19\\\x18\x86\xeei\xaa\xb2B\xfb\x86pL!c\xb4)\x8e\xed\xde\xc9\xab\x16\x03\x9b\xb6\xf0\xb3\x1e/\xc29~w\xed\x18\xda\xcd\xb9\x8f6_\xeb\xd8\xb7E\xefT\xb8^\xb1Fg\xc2\xf5\n\xb6=1\x9e\xe3+\xda\xee\x0c\x86\xbb\x07\xcd3\xa9\x1e\x9c\x9b\xa0-/\xc9) \xeb\x93gRd\xd5%g\xcf\xd4\xed\xfc9\xe6d\xbc\nl.\x0d\xad\x03>\xa3\xc4W\xcd\xd9z'\x92\xda\xb8\x89N\xc2\xc8ux\xff=\xcc\x8b\xae\xbf\xec\xdbB\xec\x92`\x7f\x8a\xf3#:%tS\x1cx\xe8\xc0\xc3\xbf\xd5\xee\nV\xab\xd8\xb2j\xb2\x1e\x1a\x0f\x0b\xce\xe7s\xfc!B\xc06d\xf8\x8aKs\xd4\x12\xfa\xbcz\x9b,\xad\xf82\xf6\\U\xee\xc32\xbe\xc0\xb2\xc3\xbe-\xc0\xaa 6\x89\xdf\xf5\"d&n\x87,4\x8b'\xdf\xd9S\xde\x9f\xc4\xfa\xf2\xefV`\xb3\xc4\xbe\xff\xc2s\xb5&\x1d\xae\x96\x8c\xd1 \xa5\x07r\xc9[(m\xcff\x11#\x1af\x1b|Ay\xa0I\x95\xa45*\x93B7 jP\xc1dZY\xd1\xe29L\xeb\xb2J\xcb\xd7\xce\xd7\x1c\x8f9\x1d\xcf6]u\xff\xec8>\xed\xfe\xdd\xde\x91\x07\xd4\xe0\x8c\nLs\x90\xa9\xc3f!\x91S\x94\x18\"s]^d\x0e\x10FHh\xf2\xae\xb2\x00y\x9e9D\x1e1\x01\x89DlAS G\x91GHh\xee\x11\x9d\x02\xf6E\xee\x10\xff\x98a\xa8\x06\xf4\xd6\x10\x8e\xab\x01\x19\xb4F\xf7\xb9I\xb8'\xe9\x91\x0e\xbd\x815\xe7\x85\xeex1\xcb\xaawFW)Y\x18T\xa0\xdd\xc8$\xa0\x0c\x91\x14\xbaI\x86D%l\xb8\xab\x8db\x9e?\xe1e3\x1f-\xd2\xb5\xc5\xfc\xf7\xf1\xd0\xd3\xdd%1\xb3\xbb\x8b\xd4\x11\xdd] \xa7(1D\xe6\xa3\xbb\xbb_mhww\xc9\xf7\xf7\xc7\x1e\x13\xc0\xba\xbbC~\xa0\xbb\xfb\xcd \xef\xee.\xfb\x03\x9d\xb1\xcf0\xd0\xee\xee\xb6`\\\x0d\xfe\xee>\xb6\xe7Y\x9d^\x16\xc3\xefP\xe8\xca\x89u\x87\xfe\xae\xb3L\xf6O\xcb\xc4\xaa}\x91\x10\xbaH\x0c*\xd0\x80d\x12\xd0\x8a\\\xb6r\x93\x0c\xd1J\xd8p\x9f\x1b\xc5\xfcb\xb1I\x17\x0b{\xe9e\xf3\xb4\x98on\xef\xc8CO\xbf\x97\xc4\xcc~/RG\xf4{u\xa6\x17#\x86\xc8|t\xbf\xf7\xab\x0d\xed\xf7.\xf9\xfe\x8e\xd9c\x02X\xbfw\xc8\x0f\xf4{\xbf9\xe1\xfd\xdee\x7f\xa0W\xf6\x19\x06\xda\xef\xdd\x16\x8c\xab\xc1\xdf\xef\xc7\xf6<\xab\xdf\xcbb\xfe~\x0f\x1f\xf5\xf4t\xfa}\x129\xd3\xdc\x8b\xd5\xfe)%\x9a\x044\x1d\xf6\x1b(\xa3\xfb\x1dZ\xbf\x0dY2\xc0p\x0f\x1bfu\x1e\xef\xa3ti\x8f\x8e\xab\x0d\xd9'\xb7\xef\xaf\xba\xa7g32f\xb7\xee\x92F\xf4i~:\xdb\xa1a\xcbstW\xc6\x94\x81vb\x8bj\x7f\x17CU\x8a\xf5]\x93\xea@\xc7\xc5\x0c\x03\xef\xb2\x16\xb3\x03\xbd \xd72\xdaS-~G\x10\xee\xe9\xa3c:\x8a\xddAE\x19\x7f\x07\x15\xab\xa3\xfd\x86\x7f\x88H\xba\xb0\xab\xa6\x94\xcc\xe6+\x83\n\xb4\x0c\x99\x04\x14 \x17\xd7\xdd$C\x9c\x126\xdcoF1O\x93\xcd:\xb6\xbfb\xd2\xe5\xd32\x9e\xdd\xde\x91\x87\x9e\xee+\x89\x99=X\xa4\x8e\xe8\xc4\xea\xc4n\xd3\x1e\x9ab\xf3\x18\x8fg\x82\xcdf|\xa0\xf7\xf9\xed\x00\xed\xdd\x0e\xef\xa3\xc8\xfb\xfb\xf6\xc8\xeeeumY\xca\xdf\xb5\xf3\xac\xf8\xe5\xea\x9c\x9f\x11!\xac\xf1\x81_\xab\x074e\xb9\xa9\xfa\xcb\x10K\x97\x10\xda #\xac\x99\xb1\xe2\xb0\n\x97\x90F.\x19\xa0\x1c\x02sf\xbf\x81\x99\x80\x16\x98{\x83\xe0%\xa6\x03\x94\xa4\xc4g\xf3\xe5l\x9d8\xcb?\x97\"\xa5u\x9e\x15\xc80\x8bV2\xba\xb3b\x1c\x8d\xee\x8d.\xfb\xea\xe2Ul\xe9\x8am\xd0\xef\xfe{\x14K\xb9\xcf![\x08z\x87\xad\xf8\x8cls\x86\xe4\x9b\xb3I\xfe\xf1\x83\x13\x8c\xe8[\x03\x89\xbf5\x16\xef|i\xecA\xda\xd8\xf6%\xb8CEa\xbe\x00\xb8\xb9\xbf\xc98Ny\xd9\x9f\xb3\xf6g\x8d5N.\xd1\x86\xfa\xf2\xf6\x97\xb6-\x0b\x90i\xee\x93!)\xbd\xca\xd5\xb4\x08;\xac,2\xd9Q\xdfI\xd7vR[\xc7\x8f1D\x7f6\xaf7\xcc\x8a+8C\x9b\x94yN\xaaF\x9fJc\xdd\xf8%k\xb2}\x96w\x18~\xf1\x8d\x06v\xe5M\xf9\x020\xfb3\xa7\xb7\xb6F\xf1\xe2\xee\x88\xf2\xf5\xc6n\x97\xe8\xc7p\xfbP\x15w\xc1\xba\xbb'FXD\xa4\xae\xeaQ\x17\xf582\x0d\xda\xec\x9c\x15\xc7\xe0p)\xf8R=%\x0d5\x85\x8aC\x86\xf2\x91\xaa\xd2\x8b\xe8\xb1\xe1\xdc>7n\xe5\xf9\x0b\xb9T\xab\xba\xach\xdd\xe9\x84\xb5z\xaa\x05oU\xd1\x03\x1c\x85\xba\x85 \xa9i\xdb\xb7\x81.\xd2\xa2\x87\x9bg\xba\xae\x8a\xef\xa1\x10\x1dV\x1e\xb5d\xbb\x12T/\xe6\xfe\xaeo\xb3\x02\xbf\xac\x1bC\xdcT\xc0\x87\x1d\xaf\xb1\x82A1\xc6\xaa\x05}\x008\xd3\xe2\xe29F\xc3.U\xe0\xfb\xae\xd4A\x9a8\x8a\xa2\x9d\xd1i\xf4\x8b\x0e;\xf0\xd2\xc4\xca>r\xa6\xae6\x99\x89\xfb5\xac\xed,\xd6\xd5\xda\xbb\x9d\xf7\xb6\xeb\xcd\xb37\x8c\x80\x8b\x1b@\xaa\xb1a\x81\xedm\xb0\xb6\x92`\x91\x01\xdf^\xdb\x0d\xe3fyk3q\x0f\xccR\x13x\x9e\xff*\x0f8\x81\xeb\xef\x0d\xec$L\xb3\x97,\xa5\xb5<\x96\x15\xeb\xa7\xd97L\x1d\xf6\xd0\x81\xccE\xf0\xcb^L\xc2\xcfy\xf6L<\x0f\xc0\xcf\xab\xb7 ;\xc4\x9b\xe4\x94\xd4\xdb}\xd9\x9e\xc6nSR\x11\xdf\x1c\xd9\x9f\x84\xb1 c\x0e$\xc7\x8c\x87V\xdd?4\xa6\xf0\xbe\x1fo\xd7'\x82\xc9gbW\xa72pnt\xb6\xc1Rg\xb8#\xf9\x11\x11\xb0\xaf\xe3>\xab\xd8\x1f\xe1Mgy\xb8\x03\x00;\x06\xeb\xa9g,1\xb4\x85c.\x820\x86A\xec\xcbUn\xe9\xa9\xea\xf2\x98\xa5\xdb\xff\xf2?\xff\xd8e\xfd\xb9+v(\xebs\xf8\xa7,\xa9\xcb\xa6<\xb4\xe1\xb1\xeb\xa1\xb4h?\xd1\x821\xf7\xbb\x03\xc9\x1b\xfa\xf9f\x7f2\xb3A\xd0\xbc\xba\x87C\x88w\xcc\x1c\xd9\x0f\xd9\x08\x0e^\n\xd9\xc9}\xac\nu\xa2\xa4\xeb\xa6\x03=\xaa7.\xb4{Q\x17D\xf7\xf6\xa2N\xac\xdd\x0f=\xf0\x1f\xb27\x9aZ\x87'\xd5\xceC\xcb\x07l6\xd1\x0d\x8cE\xb6\x1c=\"\xb9T\x13\xee_\xa7aA^\xf6\xa4\x0eX\x9db\x7f\xe3D\x11\x11\xa8kR\x16--\xda\xed\x87\x0f\xd0\x89\xdawS)\xdf\xa8+1\xb8\x19\xac\xcc\xe4\xbd\xab\x82\xa9Im\xf3w\xafH\xec\xddz*jc2\xb0\x89#\x82\xe9\x81\xfb,\xe7\xa6\xbf\"\xe0\x07\x85\x0c?zn\xc70\xe2\x19\xcf\xb6pE\x90}\x9e`\x15\x88\xef\x16\xa7\x16\xf8\xb2\x93I\x05~\x1e\"\xb4\x9cl\x9e\n\xbe\x8f\xb1Bv6O\x85_\xfdX)'\x9f%\x87\x03\xc5\xe4\xac\x88:M\x0cZ\xc8>d\xbfX\xc2\xd2\x89\x8e\xa2&\xfaO\xb4\x14\xc827n\x8b]\xda\xf2\x93\xaf-\xcb|Oj3wi\xe5Nl\x16T:<\xa9akN\x80\x80\x05\xc0\x14\x84\xdc\xb3A\x0er\xa4\x18\x02:*\xca\xf6\x13\xbcz\xf13O\xd1\xf7\xe6\xf1\x04;\x86\xfd|E\xe7\x81\xa0\xc5\x80\xeb\x1c\xadS\x03~\xe4\x9d\x95\xb7e\xc5{\xabb\xc3\x1c\x90\xacL\xa7f]\x91+\x07\xc3,\xed\x08\xdeAC\x8e\xbaf\xfa\x182\xf2l~<\x16`\x03F\xe8\x8c\x0f\x0b\x03*\x12\xd4\xe0\xab(\x96T\xec\xae\x89\x95\xb0D\xf3N\xaa\x115\x81\xeb\x1b\x1d\xa3\xfaN\x89O\x1c\xa5:\xe3\x0e\x8b:\x1c\x1c\x0cBL\xa6\xbf8P\xf3\xf6\x84'\xfb\xfa\xa2'\xb7C\xb2{\x0b\xfa\xc9\xb0\x98\xc3\xa0\x13\xcf\x0cB\x1e\xbe\xff\x1e\xfb\xc6\xfb\x18\xe0\xcd\xcb\x8a_0N\xbc3\xb72\x02A\xc6\x10vz\x84e\n\x95\x8b\xa7\x01\x05\x83\xb6%\x88I\x03\x1d\x9b\xf4\xd0\x88&\x82\nh\x95\xe9\x86\xbc\xfe \x0e\xc9\xdel\xdeA\xcd0S?\x9c\xb2\xf3\xbea\xe5e\x07\x92\x85/\xb0x\xe0\xb6\xb7CrG\xb5\xa3\x9f\x0e\xc0\x88\xb1\x0d^S\x15[\x87\x9e\"/\xb7#F\xbc\x9e\xc1\xce\x8eUz\xdc\x8dw\xf4ZTo\xbd\xe3\xd7\xc8A\xc7b\xa5\xcf\xff\x0c\x8eo\x83#,,\xb5\xe8\xb1\xe4w\xf3*(\xd9>q\xf7\xf8\x9b\x07hy<\xd1\xfb\xe9\xcbqJ\xae\xcc\xeewS\xae\x1aa\xfd\x7f\xbd4mv\xc8hj\xceM\xc3\x01\x82OV\xe7\xe4[yi\xc5\x97\xa3 -\xa7\xb6\xb7\x0d\xadHMZ\x8aRvF33Gt\xdc\xde\x87\x9e$;\x1f\xfd\x15\xf0D6\xe6^\xf1\xe1\x0c\xc7\x9b\x1fm\xfac\xed\xa7\x94\xb4DhZ\xact4?\xb3\x92\xc8\x99W?\x18\x0c\x9bw\x95\xc3\xaf\x00\xbc\xbb\x1e\xe4\xa8\xad\x9a\xf4e\xd3\xa35MZ\xe1d\xa3\xcf}\xd7\x1dq-\xf9?7\xb9\xd9\xf8\x0d\x03P1_\xfc\x02Z\x1ew\x0d\x9aP\x9cq@\xdb\xe5K\xdf\x05\x05\xa6\xac\xbdWU\x9b\xc4\xd9Z#\xa4?ur\x91\x93\xea}\x90}[\xf0\xc1\xedoz\xa9\x98\x87y\x0f\xc6m\xc2\x08 \xda\x90|\xe0j2\x0f_^\x94\xcb\xd9(\xa8\xe4\xcdw\xc5Y\xafxz\xd0>A\x8d,b\x8b\x0c\xdeA\xc7\x11\xcd\xb9\xcf\xdc\xba\xdc\x01s\xb3!v\x95\x7f\x8b+\x01=\xac{0\xa3\x8cmT3\xf2\x81\x8b\x05=|yQ#\x8d\xcd\xc7[\xbf-x\xc4\xd3\x83\xbe\xd3\xd8\x86D\xe6\x1a\x1bb>\xcc?\x83\x04\xcf\x15#\xda5#\x14G\x84wN\xa5\xf7\x96\xb1\xae\xd7\x19.\xed\xc6\x92\xc3\x92\x90\xd1\xc3\xc7\xd1G\xe7\x11\xaa\xd7\xa1\x1b\xe9{\x17\xca\xe0\xc5\xf4\xee\x89~d\xe9\x8e\x8e\xbe\x94\x1e\xe1U\xa4\xe8kH\xbd#\x84;\"x\xa9\xe5\xc7\xe1\x8d:\xae7s\xc9a\x17\x8c\xf4\x82t\xc4\x03\xef\xdf\xe8\x89\x1d\xcc\x17e\\\xbb\xf6f[\x81\xb8\x08s\x87\x10m\x96\x82/c+\x87\xfa\xdd\xb3\x81\x00uu\x92\x14\xd8\x84`\xecepr\xcd\x1a\xfb6B\xe0\x1b5\xee\xdc\xc6\xc08\x98\x88\x1d\x05S\xf8\x030\xa2\x928\x0b}>\xdd\xdc\x1d\"\xa8\x17\xe4%x\xbf=?R\x17\xcf\xd9\xf9x\xd5\x13\xc2\xca8\x82\x96\xec\x1b\xebu\xab\xd8z\xf2O\xc2:C\x82\xbb\xc4\x0c\xdbS&*\xa1\xcf\xc4\xec\x1c=\xdb\x1d\x9c\x08\xa7\xf7\xba\x9f\x89x\xd9\xc9\xaa\x8d\xab\xc0\xba\x93\x91R:\xe1\xffc\xb7\x04\xec\x05\xc2R\x81B\xdd<\xc3\xb8\xbaPN\xd8\x91\xb8\x9c\xa2\xf7\x16\x19K\xba\xd68\x8e\x9b\x1c\xe3\x80\xfd\xa1'\xf5\xc0\x84\x87\xa9\xbd\xc8WD\xab\xcf\xd4\xbe\x83\xd2\x9a\x13$\x97\xd8\x0d\xda^\x02\xc3\x9b2\xf4\\\\\xef\x06\x0cO\x1b\x90\xf9D=\x898\xbeQ\xd1m\x14Zo\xa2q\xe2m_\xfb]\xcb\xf2!l+\xf3\xe2\xc4X\x82Y\xd0#2|&\xbd]~L\x9f\xfb;7\xda\xec \xec\xd8 \xe7\xa5\xca\xf2\xdc\x1a\x99\xcc\x0c\xddV[w\x12\xf1%\xcf\xae\xd6.`\x13`5\xceI\x86-r3\x9d=\x83\xbe\xed\x81\xbc\xd2\xa6%\xc9/xo\xd5Y\x80evu\xaa\xbb\x1eVxF\x8b\x9b\xdb\xa1\xecj\x1e\x1d\x0b\xfe\x16C\xc0}=\x7ft\x87\x07\xa2\xf1\x8e\x9e\x8f\x0f\x08\xfd\xfdbL\x9f\x18\xec\x0f\xf7\x0f\x02\xef=\x00\xfc\x1d\x1a\x89v\xfa\x96\xec\x03\xb1\xa7\x90=\xde\x19T\xa4\x18>\xffa\x94\x12\xdf\x03\x83\xe7@\x14\xa7\xb6\x19\xdbk\xd1C_i\xd8J\x1d\xdf2\x88]\x94\xaao\x03]\xba/)\xb1]\xa4}\x01\xd3\xe0\xa6Fd8\x1c,#w\xb7\x82AV\xb6@- \xd9{M\x96\xce^\x13\xe3Q\xea7)f\xb5\xe7^e\xf1G\xa8\xbb\xaf\x0cv9%\x90\xa2'F\x1c\xb8s;\xe2;Nf\xcb\xe5T\xfe\x7f\x18{o\x02\xc7\xd1Ns\xd9I$\xfd\xc2\xf6\xf0Xf\xc8J_U\x0c[\x87\xde\xd0\x88\xefo\xb1\xb9qNB1\xab\xfeMv\xae\xca\xba%E\xbb\x03\xd3\xc6 U\x1f\xa2\x10_\x90\xea\xd3Bh\x07`\xdd\x1e\xa23\x87\xc4\x03\xbb\x94\xde\xc6\xdb\x96\xd5\xc4.\xa8v\xfa\xf2\xeb\xaa\xfb1\xe6n\xe0~\x83tV\x1d\xefa\xa6\xbf\xa2\xee\xc3J.\\,\"\xb8\xb1\x98\xbc\xc9W \xb9\xc6\x17OQ\xf5\xf6\x99?]X\xd6\x19-Z\xfe9\x9a\x93\"m\x12RQm+\xef\xc9\xd5,\x8a\xd8\xad\xb5\xdd\x10H\xb2\x82\xd6\xcff\xc7\x9e\xea\x9c\xe0\x90_\xb2\xd4\x9f\xff\xecr\xe3+\x0b81fI\xee\xbd\xb3\xf8\x9f\x81\xeb\xc8\n\xb0n\xae\x99^\x8d\xc3U\xa2[\xcbMall\x19\x1e \x005s\x98\xc6\xcc\x15\xb5\x03\xfb,\x80\xb1[\x1d\x1e\x00\x9bG\xc3\xec\x0cT5\xcc\xe2\xd5\xd8\xeco\n\xc3CR\x0cD\xf6\xd4\x96A\"\x06\xd1HGb_\x93\"\x85\x93\x13\xd0\x81\xaa)\xab\xa5\x98\xb2\xea[\x8d\xe7\x8f&B\xb2 l\xd1i\xfe\xa9-\xb30\x9bw1\xe7\xda\x86\x84\xfe\xac-sb\xd0\x9a\xba\x00n\xba&\xec\xeav-\xc5\x93\xdc\x15\xea\xd9\xf5\xcflE\xc9k#\x17\x8b@\xb8\xf3\xa4\x7f\x027o\xea\x8a\xad\x00\xdd\x7f\x1a\xe8\xbeY \xabI\xee\xc9H#{\x12fIY\x04]\xf4\x83\x9d\xae\x9e\xcd\xf4C\\\xeerX\xec\xd4\xa6\xc9}\xd1\x84\x81\x94\x16c\xba\xba\xd0\x05\x8c\\\xb5\xa2\n\xf2\"\x1f2_\x87\x9d\xdd\x06j\xaeUd\x8b\xe9Zx\xe9y\xe4\xbeg\x18\xdb\x0b\xeb3\xdb=I\xde\xd6\x9075\x8fiG\xbe\xcar\xf8@\xe5\xee\xe4b!\x0d\\\xa0\x1b0\x05\xae\xf4\xfb\x03\x1f\x1f\x87L,\xd3!\x14\xf8)\"[c\x85T\xee\x03\x9eY2\xf7\xd7x\xf5\x8e!\xbd\xc5\xac\xb1\xa5\x1f\xebL(\x83K`\x86\xcd\xad\xb3(g\xf6\x16t\x14\xb1R`M\xa3\xf8\x8dm\x89\x18\x9b1\xd6\x1c\xca\xfa|u\x96\x0bz\x07\x93\xc03\x9a8#\xda\xf0'\x81\xef\xf3\xf6\xbb?\x1b\xa6\xef\xf7M\xd1KjX\xa3\x9d\x80\xdf\xed\x1d\x1a\x97\xa6\xbdI\xe4\xcewh\xbc\x04\xfb\xdf\xa11\x8a\x81\x95\xb2\xbb\xde\xa1\xf1\x11A\xdf\xa1\x19\x07f+w~\xa8!1-\x1c?+=\xef\xd0\x18E\x92G\xde\xa11(\xd4\xfc\xf9\x11\x93\xea\xbb\xbfC\xe3V)\xdf\xa1A+\xf6\xbcC\x83Pa23\xb7\x89\xe0\x14\x01\xf0\x8ewh\x0cZc^.\x11\xef\xd0\x0c\xbaP\xa7w:\xf3\xa8X\x1faP\xb8Z\xef\xcca\x8e\x1a\x16\xe0\xfc\x02\x1c\xb5#\xf7\x83\xbf\xef+\xe7~\xf7l;\x0d\xff\xc4Y\xf4\x1d\xb3f\xf8\x87/^\xa5\xa7\x96\x859m\xf7\x8eG6\x047`_\x83\xe5\xeb\xb4c\x83`\xb6\xf4\xdf\x9ca\x19\xef\xab\xf7V\xa9\xb7\xc6(\xb5pK\x19\x013}k\x0d<\xf2*Z\xff\xf78$\xe4.\x08\xbb\xdf\x05j\xf6o\x84\xf5vX@\x14\x99ab\xf4\xaf\xe0\x83\x05LQ\xb9\xd1\x84Y\xec\x7f\x9bDL\xdb\xd7\xc6\x8b\x18$\xe4\x9eM\x81g\x91{E\x8eY\xc16^\xf4\xbe\xc4m\x9e\x95b\x8d\x9f\xa0\xdbw5=\xb7UVn\xd7_\xcd\x84\xa6\"\xfd\xb7)z\x1f\x06W'\xbc\x06\xef\xd4ew\xc8\x8epI\xf5\x88\xd0\xcd\xef\x13\xe1\xbcW\x84s\xb4n\xaf\x08\x9d\xec^\x11\xbaU\xdb\xd9\xacn\xbd\xef w\x92\xee\x15\x15\xce\x01cFe\x82\xfbK\x96!\xda\xc1\xfffL\xf79k\xae\xa6\x05\xb6\x83p\xf8\x10\xa5\xdc\xaf\xb7T\xcd\x9bX\xc3\xbcL\xe1\xfdy\xa4+e'\x93y\xe1\xb0\xa0o\xadn\x11\xff\xc9\x1a\x05\xd6#\x15\xb8\xaa\xe9KV^\x1aP@%\x81B|\xb3\x95\x00XC\x95\x99d\xb6\xc4\x19\xa0\xdc\x0cV\xcb\x03\xc3\xd6-\xe4\xfb3LU)%\x853z\x9e\x84\xab\xee\x7f\xe6\xf4\x0cz\xd4z\xf9\xd1\xb8\x00e\xed\xbb\x00E\xdd\x9doX\xd7\xf0\xbd,{\xd2P\xc6\x8a\xa9\xf2p\xb6\xa4\xe7\x1b\xe1\\\x0b)\xc9_\xce\xf7[\xdfQpqO\x9ah\xff\x96\x9e\xab\xf6\x9b\xb9E3d7\x8b\x8a\xed+N\xbc'\x8f\x04 \x02r\xc6\x15\xf9\xf0g!\xac\x01\xfa\xe9T\xd3\x83\xfc\xd2@\xb3|SF|\x05X\x92C^k\xb7\x1c\xaf\x81\xc3\xaa5\xb3|\xd5\xf2W\xe7%9\xe4\xb1h\xc9\x1e{\xb1\xd7\xc2a\xd5\x9aY\xbej\xf9\xa3\xd7\x92\x9c\xfd\x8c\xad\xac\x93=B\nAX\x85 \xdd;\x1d\xc7\xde\xdf\x95\x84\x90\x877\xa5e\xb1\xd7\x0f-\x1cV\xa7\x99\xe5\xab\x96? \xaa,\xc4y\x00P\x06\x14\xeca6\x13\x86\xda\x11\xcc\xf1\xd5\xc9\xdf0\xbc\x89\xa7\xdf\xf0\xada\xfai\x18\xb8\xb5~^\xbdM\xd6\xee\xb5B\x7f\xa7\xa1\x00\xeb[\xb6O`\xfbfX\xc3\xfc\x9d\x9a\xb7\xbb\xafS\xf3\xdd6\x12i\xec\xa8\x92O\x7f\xdd\x88\xa8F\x8eB\xfc\xd7\x83\xa3P\xe7n\x8fl\x03b\xd6\xd2\xb3\x0c\xcb9M6\xb5 \x0e\x1c\xab`\xfe\xf9\x9eG\xf2-\xf2\xb2\xac\xe1\xcbp\xcc\x17\x015v\xd0,\xed\x83\xd3\x9a\x1d\xf8\xdd\xc8\xa2\x8f\xbf^\xce\xfb\xb2\xad\xc1\x85Zs{\x8b\xb0\x98\xad`w\xc3q\xae\xb3\xe2D\xeb\x0c\xfb\xce`>Z\xd1\x9c\x9c\xe2)\xf8\x15\x9e\xe2\xabA\x00B\xed\x8dy\xd6\x01\x91Yl\xd9\xf1,\x8a@\xf1\xe7S\x0d\x830\xd9+\x97\xdd\xbf\x1b<\xc8\xa1J8\x07\x8f@\x9eu\xa0fe\x08j\xa2\x0b^\xad\xab\x9d\xc5\x04x\x93\xd4\x94\x16\xfcp\x99\xbb\xc1\xca\x95\xf8\xe2\xa9\x8b\xf2\x1e`\xd3\xda\x00o\x14y8x\x84\x8f@\xe9\xd7\xc6\xb6\x1c4 g\xcd\x84\x92\x86\x06Y\x11\x94\x97\xd6z\xd4\xce\x03\x1aD\x80\xd6?g\xe7\xe3T\xff\x9c\xc8\x8b[@/\x83',ru\x8c\x9e\xe8Bj\xe4\xd1)<<\x04)r>\x0d\xff0\xd7\xf5\x87 \xa9:\xce\xaf\xe0P\x10x\xe4\xe9\x16\x92\x9c\xd6\xed\x15\x1e\xb1\xc2\xd4\xe4H~\xe0l\x0f\xa3:9-\xcc\x0d\xa3V\x1f\xe6 \xfe\x1f>Cl\xf9\x1b\x01y\xae\xa6\xe2\x8f\x8b\xb3\x83ZA\xbe\x187\x8c/\x15\x13A\x9a5\xe7\xaca\xf1\xf4\xd4L\xca\xf6\xce\x05\xfbs\xbc\xe0$L\xf2\xb2\xc1\xca\x8b\x1c\x9f\xd3\xe9\x9c\xa8\xd8\xcc\xc8\x06\"L\x02*\xf0\x92jI\xd6\xab9\x16\xd7\xa7\x87C\x94\xda{\x17\xd3\x15\xdd$+\x8b\xd4\x04\x1d\xd5\x92\x0d\x9d\xed\xe76\x14\xca_\xc6\x85\xfb\xe5\xa2\x8b#x\x0e\x0b\xd0T0\xb5\x8e\x9e\xf0W\x9fiz\xb0\xe7\x89\xf6 }:\xc4\x90\x0e\xce\x18Y\xd1\x98\x1a\xf5\xa1\\-\x96\xb3\xd5F\xa2\xacW\xdc\x9f\xc8*\x9d\xef\xb1q#9<\xd1\xb9\xc5\xd8\x81\xd0}\x92X\xa4p\xde\x0ek\x1a\xef\x976\x14ao\xb5Z\xc6Zh\xe6\x93\xd3d\xb3X,f\x18w\xb3\x94:\xcf\xf3w\xbc\xa5\xb1I g\x8e.\xf6\x9b$\xb2\x90\x08oO\x8b\xf9r\xbe\xb8\xfd^\x0e\x8c\xbf\xd0o\x87\x9a\x9ci3\xa9\xea\xf2X\xd3\xa6 \xf6\xec\xf0j\x9dU\xb4\xb9\x1e\xea\xf2\x0c\xc3Ke\xdc\x0b6\xadpkK47\x9aD\xb7\xdb\xef\x83\xf2oJ\xfeoH;\x94\x14\xaf\xe0\x1c\x186\x1a\x96\x83\xd7w\xf9\x96^\x86\x8e,9\xaf\x0fzO$\xb9H\xcd?\xdbY\xe0\\\xae\xad\xde\xccd\x97N\xf5\\1<\xd3\x01\x9b'\xb8\xf7\xce\x13\xf74/\x00G\xa5\x8c'\x1c\xc7\"\x11\xaf\xce\x1a6 W\xdc\x1b[\xde\xdc\xca\xf4\xe6\x00\xb9q+J'\x86$\xa7!bi\xa9{\x8eO\xf2\x97\xb3\xe7n\x03\xf5\xe6\xddb\x99\xd2\xe3\x149\"\xb6\xfc<\x99-?N\x81+u~/\xa3\x8f\x9e\x92\xfe\x9c\xb5E\xc3\xfa\xfdy\xe7r^\xfe\x1f\xc8\xf4?=\xc7\xc8\x9b\xa8\xac\xbf\xb1\x91h\x11\x99S\xa4f\x8e6I\x11\xe7\xf5Y\xa4\x0c\x05e}\xa4\xc8\xce\xfc\x93\x14\x1b!'3\xf9 \xf3$+\x0eY\x91\xb5\xac\xdf\xdc_\xe8\xee\x127\xab\x1f\x0dN7\xf5wK\x8c\xc0\xbf:\xe2?\x80\xe9\x7fv\x8e-\xbb\x1b\x98o\x1c0:\xbb\xf4\xbf,\xee\x1f\xc0\xf4?;\xc7\x96\xc5\x0d\xcf9\x0f\x18\x1dB\xe0_v\xf7\x0f`\xfa\x9f\x9dc\xcb\xee\x06\x17\x1d\x06\xcc\xce-\xff/\xab\xfb\x070\xfd\xcf\xce\xf1-d\xb3\xd7\xf6\x91d\x91l\xbc&\x00g\x03E>\x9fx\x9b\xf2\x1f\xcf\xf0i}cF\x9a\xaf\xff\xf0\x12]\x82Y\x80\x1d:6g\xf2<\x05\x8c\xea\x82}\x99~\xc3n%\xb5V\xaa\xda\xb2\x92\xa4\xf8u W\xcf%\n\x92j\xdb\x96g\x1b\xc3S%\xe6DI\xc7\xac9?jN5,A\x03\xb2\xa6\xb5wz8;9\xf4BO\xff-\xf3\xfcv\x1bkY\xe8\xfe{\xe3-\xaa\xfc\x1eM\xd7\xc3\xf9\xb71Z\x1c\x8cy:o\xe0\xd0\xbfK\xd3\x7f\x11\xc3\xc0^\xc3\x81\xfd\x8f\xc4\x91\x9f\x0c#\x97K7sb'(\xf5\x83\x99x\xa7\x94\xde\x06a\x0b\xaa\xb4\xce \x8e\xdc\x07\xc3'\xa5\xdcEI\xb9\xdbd\xea\xcdQk\xd1\xbe\xfc\xc7\xf6\xd7\xb1E?\x1fM\xaf\xd0\x86\xd8|\xa4 \xe3\x7fHMj\xda~<\xcb\x9df\xee\xe7w\xa0\x94\x87Y\xe7*\x00|\xf1\xd9%\xcc\xd3}:\x16\xb9=\x9bH\xbd\xb3\x81\xf8\xe2\x14^\xc1\x1dZ\x83\xfc\xde_\xac_\xd5\xbeb\xde\x02\xcf\xcd\x99\xe4\xf9\x83L\x0e\x14\xeeg\xb5\xbf\xb0\xbfX\xf8]\x1c\x0f\x94\x1e`\x99\x97\x1e\xeaO\xbe\x16\xe0\xfd\xa2\x9f\xef\xde2#zR\xb2NS\xean\xb5\xb8s\xd1\xce\x1d\xddq\x02~\xdc\xd8\xc1\xc9K\xc0\xe7NT\xbe1\x86\xfb\xdb\x13\xb1\xf5F/\x199\xca\x0c\x01\x86\xd81\xc7\x9d\xfe\xd1F\xf0j\x8e6\\\x9e\x0e\xf9;V3\x91F\xba\xa5=\xa0\xc7\xd5\xd5\x95\xf6\n\x87e\x9a\x8a\xf2\xb5!Y\xd0\xf9\x01 +\x18\x0d\xbf\x96@n/\x17\xf7\xe8G\xb0h\xea\x87K\xcf\xa1}\xdf\xba.\xd2<\x94\x80\x1f\xf7\xb8\xa2\x04\x01\xaf\x94d\xbe!!\x7f{\xc8a\x96$\xfej\xfc\x1a3\x01C\xec\xdc\xa17\xc9\xab\xa17!O\x87\xfc]\x0b\xdeH3\xb1\xf2^\xd8\xe3J\xe3\xe5\xbdB\x12\xd9\x86p\xbcm\xa1\xfb$AU\xc6\xa9\xf85f\xe4\x0f\xf0r\x87\xbe$\xa3\x86\xbe\x84$\xbd\x02\x1b\xfa\x00\xb5\xcb\xc1\xdb\xc7\xd4\xb7\x94\xb9\x8bk~\x0b+R8\xb7\x1d\xce\xa2\xf1_\x88`~a\xdc\":_\x14\x8f\xadE\xf1\xc8\\`\xf6\x82\x04\xc3|>\x00\xee\x85\x92\x19RZ\xeeW\xb0\xf1\x9d\xd8\xdf\x82\x9e\xf3%\xd8\x01\x10\xabn\xf4Q\x16q\xc1\x81i\xf5\xa2\\\x9b\xb59\xed\xd3o\x047\x01\xac\xdc\xddI\x80\x8c:\xabne\x1e\xca\xb2\x05\x97\xef\x02\xb1x\xbe>A\x83\xfb_\xd2\x1a8\x0e\x83\x9c\xc4)h\xfe\x0c\xccu*\x938\xa7\xf2\xea\x04\x08q7\x939T\x9c\x91f\x04Y\xa7\x8c\x9c\xce\x00w\x9f[V\x8dU\x0d'D\x1c\x92\xe6\xe3\xa7\x83,\x8d\xa6\x05f^\xfc\xe7C\xc7\x19\xaeQ\xbf\x9e\x88q\xab\x87o\x83\x0e\xb7d\x1c%\xfbY\xa0\xf7\xb0.\xd9\x13\xbf\xf4\xe9\xda7\x8d%\xf6\xe0\xc0\x01\xf5\x8b\xd9\x890\xb0\x10G\xcbw/\xc2_AM\x9b\xaa,\x1a\xb6\x9d\xdc\xcc\xb7\x85\xc7r\xbd\xb6\xcer'b\x9b\xe8P\x1d\x0e\x0e\xadkbm:\x85WJ\x9a\xb3\xbaK`-\xac(j\xd763\xe6c\x9eN\xb9\x11\xe7\xf9z\xcd\xd6!\xf8\xdcv\x9a7S\xea\xf7\xe0\xf4N\xc2&\xb0sV\xa3\x8b\xde\xc3\xd3\x00\xe1\xbf\xbfx'm\xfa>-\xfb\x9ez\xee\x92\xd1\xbbq\xfc=\xf5\xdc\xd9\xf6\xd3\xfbp\xfc=\xf5\xdc\xd9\xf6w\xe2\xf8\xbezz\xcc\xff;M\x1c\xf1\x83w\xb7\xe5;\xaa\xb9S(\xef\xc3\xefwTsg\xc3O\xef\xc2\xefwTsg\xc3\xdf\x87\xdf\xbb\xaa\xe9;\x8en\xd9\xf6\x18\xde\xe0\xbb\xd8v\xa9\xeb;\xc4c.U\xd1^\x98P\x7f7\xabw\x115`]`7\xb2\xdcxfz\x89\xfeC\xc4:\xda\xd9}\x87\x94\xfb\x1d\xddh\xf9\xbc\x13\xab\x8f\xd7qO\x8bG\xba\xb7\xef\x92j\x9f3\xbe\xa3\xc5\xef\xc2\xea=u\\\xfff\x96\xac\x7f=\xda\x8e\x87\xab\xb8G\x1a\xef\xc1\xe8\xc3U\xdc\xd3\xdcq~\xec\xbb$\xda\xe3s\xefh\xee{0zG\x15\x03C\xb52a\xf6\x1f63\xf9\x85W8\xf5\xe6\x00>\xcd\x06|\x01Xo\xd3 \xe8\xea\x9d\xa63\xbb\xd6\x98\x00czo s\x12\xca\xac0\xe0Y\xd4\xaf!\x1b(\x88y \xf1\x98\xee\xb9\xad\x9fG\x8eb\x0f\x12\xd0\xf0N\x00\x83\xf0\xbe\xfaF\x11\xd0\xf0\xce(\x07\xe1}\xf5\x8d\"\x80\x88c\x9c\xaf}\x90\x00\"\x8eG\xeb\x1bE\x00\x11\xc7\xa3\xf5\xe1\x04\xa4\xd5\xe7\xe2e\xa3!\xe9\x8e\x1a\xaf\x1e+\x8f\x9a\xdaC\xb5\x8d)\x8f\x1a\xdaC\xb5\x8d)\x8f\x9a\xd9C\xb5\x8d)\x8f\x1a\xd9C\xb5\x8d)\x8f\x9a\xd8C\xb5\xa1\xe5\xd5\xf5\x16\x19\x7fog@\xb0\xe6 \x7fO\xed\xa3\x088\xa2y\xbc\xbeQ\x04\x06\xd8;\xddQ\xdf(\x02\x03\xec\xddS\x1fN\xc0^#\xf1\xeaS\x16\x87\x81\xcd#\xe2\xed+\xef\x98\xde\xc3\xb5\x8d)\xdf\xcf\xdb#\xa2\xed+\xdf\xcf\xdb=\xb5\xa1\xe5\x07\xf4\xa8\xe9y\xf6@\xab\x12\xe8\xaa(\xdf.\x0e\xf2'\xfc\x87oC5\xdc\x8e\xed\x96\xfab\x16Vwu\xb8H\xb5\xe6\x8e\xb7\x0e\xc5\xca\x10V\xafG\xf1\xdf \xee\x1dY\x0e,\x12\x8b\xfa\xbd\xa1\xb0I\xd1Y\xcc\xf3p\xccqv\xc5\x13\xc0\xb0\xd5p\xbcnu?\x1d\xc7\xca\xfdk\x0e\xe0\xd9\x12\xaa\xdc\x85\x85=\xd3c-\xd5\x8f\xa5\xd9'|\xe4\xee\x8aAz\x13\xf3&,\xc9\x14\xb2\xd9x\xee!\x84\xcb\x18\xe3K|\x84\xb9\xac\xa9\xbb\xf8\x0cY\xe8\x0bp\x01\xc6#\xe2\x07vH\xf7\x91\x1d\xd3\x1a \xe51$'\xf7\\9\x86\x12zT\xd0&w\xea@\xb7iw\xe2\x82\x1b\x03\xe33\xe7\x87\xae\xce\xe9\xa3<\xa6M\xd0\xa8G\x90\xb4\xc4-Y\xf3lk\xf5\xd0zT\xe2&\x83\xfc4\xb3!\x14yg\x8f\x06\xf8d\xfd\xd0U@^\xb2c\x9a\x02\x04=H\xcf\x96\xb2`\xca\xb39\x15#\xf4\xa8\x88M\xd6\xd4\xd9]C\x1c\xf2\x02\"\x03\xe3\x11\xf4cW\x1b\xf5Q\x1e\xd3&x\x05\xd2\x08\x92\xf6`-X\xf3\xec)\xf5\xd0zT\xe2&\x83\xf2\xd8\xaa!\x16y\xa7\x12\x84x\xe4\xfd\xd8eM=\x84\xc74\x08^\xea4L\xd1\x96\xb6`\xcc\xb3#\x14'\xf5\xa8\xb0%{\xf4\xbc\xa7)\x0c.\x87N\x10\x8a\xfd\xa1\xfa\xc2\xcd\xc8\xbeH\xc9%:qR\xc4&<\x07\x98\xb1[\xa1\x90\x0c\x96\x80\xa4\x97\xfb\xbf\xd2\xa4E2^\xb2\x94\x96\xba5d\xdf\x94\xf9\xa5\xe5\x17\xbauQ\xae\xdc\xf3\xca\xcfV\xea[\x1c\x8d\xeb\x95tdm\xd3w[\x14\xaf\xf6\xdf6W\xeba\xe7\xe5*\x9c-?\x8e)\xbe\xd8\x7f\x9b\xdb\xa5\xd7]\xd1W\x9a\xe7\xd7sV\x18\xf7:\xa9\xad\x9a\x1b\xcfM\x7f\xfd\xd1 \x0cC\xe9\xbc\xfb7n\x7f.\xbc\xbaj`\x97\xee\x00\x94\xb7k\xc2l\xea?/e\x8b\x96\xe5\x83\\o\xe6\x9d\x81\xf3\x9e5\xb8\xb9\x93\xe1\x9a\xb3qu\xa2 c\xf3\xf4\xfc\x02@p\xe7j\xdf\xed\xa3\xde[t\xa3H\\\xd7n\xecU\x8e&,~l\xcb2o3\xac\xbfj_\xba\x8e\xac\xc0\x9e\xc57\x07r\xce\xf2o\xdb\x0f\xffN\xf3\x17\xdaf \x99\xfc\x07\xbd\xd0\x0fS\xf5{\xfaouF\xf2iC\x8a&hh\x9d\x1d\xfa\x1e\x1bX\xd8aR\xb8\xd8\xbddM\xb6\xcf\xf2\xae\x9b\xb2?s\x8a\x87*\xe6 Z\xe4\xed\xfd\x1b\xd8\xfb7\x1a\xdf\x96\x95\xf1\xf4\x902nfB,\xf0\x93P\xe3\xba\x1a\xf1.\x1e\xb4P\x03\xcc\xfb\x8a\x9f\xb4\x01\x86\xf7\xda \x84\x0d6\x82\xac0o\x96\x9fE\xf6\x0b\x0fOC\xf7\xba\x8e\xbcH\xa4\x8b$\x9d\xa8_3B\xea\xba|EL\xc8\xba\x8662\xc3t\xe4\xc0\x1c\xbf\xdd\x86\x0dE\x86b&VUf\xdc\xb7\x8c>\x9aR\x02\xe3\xb4\xe8\xf3\xfc\xa5\x87\x89q\xc0 :\x1cP\x17\xa3aW\xa8\x9eK\xd8\xd9C\x9f\xf8\xfd\x9du2\xfa\x03\xadto\xe0y\xbcN\xb4>\xb66\x13}\xdc\x99\x97\x081\xf3\xf7\xd6d\xd4\xc6\xb74a\xf5a2\x95\xd5\xc9\x90`\xb0\xbeH\xd6(\xb3\xd8&@\xac:. \xac\xc2\xd1&\xe3TfN\x8a \xd5\xa1\x86\x03\xa3\x1e\xa0A\xbc\x91\x0f\xd4\xe9U\xa4k5\x8f\xd7Y\x95U\xe7$\xbdA\x9d\xf3\xf5\xb5\xb2\xbe\xbe\xc0\x18\xb5^\xc1\x88Jz\x81\xefs&\x8bag\"\xdf\x99\x00C`\xcen\xca6^\xad\xa9\xcf$\xff\xbb\x85\xf0I\x92<\x10\xc2\xfbC\x89\xc8\x8a\x12fX(\xe1\x82\x94z\x99\x07\x84\xb6\xc2\xbfxd.wz\xb0\xd3\x98\xf9\xc2\xcf\x01\x02f>smf\xf0\x07\xf3E0,-\xe3I\xbe*\xa7\xa2cK\xdf\x88\x96\xd6\xdd\xbf\x9e\x00}\xdf\xfd\xb3D\xaa\xc6\xb0\x89\xb6s\xfdy\xa7\xe7\x81\x183\n\xf1\x1c\xb2\x8e6\xb5~o\xc9\xa1E\xbb\x89\x19>}\x9f[4\xab\xbc\x1a\x9d9\x8e]&\x05S\xea\xb1\xde\x0ff\xff7\x95\xd4\x96\x95&\xcc\x9dL\xcc\x1e\xbaE\x07M\x96\xe5z\x1a\xfdm\nR\x0d\xa3[~\xb6F\x1b}\xfe\xd5aD\xf0\xaf\xf5\xb9s\x8cH\xbfD<\xf9\x80\xf0\x03^\xf5\xf4U\xc7\x8c[\xb6\xdc\xf0\x83\xbc\x91F\xb7\x00\xad6<\x1eh7L\xf7\xb4\x9c9\xaf^F\xcc\x96\xf3\x96\xf2\x8e\x877\xd9`\x064\x1a\xaf\x89\x93\x85m\xbeG\xd5\xd2\x86Q\xa7\x01\x04adX\x92\xf0\xf0\"\x9a->L\xc7k\xbb\x97%\xbe\x94\x0d\x86\"[\xd9\xdcE\x8f\xd1\xb6U\x0f\x0cB@\xc3A\xb2\xb7\xd9\x80\x0f\xd1hqnZ\xc7\x99\xde\x16\x0f\xf2\xc2Z\x9c\x90\xba\xbc4\xd8\xc3\x87:O|G\xf8\xe6\xc0\xd8\xea\x8639k\x16~\x0e\xb3\xfe+%Y\x14\x80L\x97\xca'\x19\xc4\xbbJ\x13\xe6\x93\xcdIR\x142\x90\x8f\xf3\xc7\x9fjBs\xf8\xabMF\xcc \xbf\xa5I\x9e\xf3\x07\xba\xd4\x04d0O?O?93\x9d]\xf2\x15\x17\xcc\xb8\x89\xe2U\xdfSU\xe6\\\xf1\xca\xfb`U\x0f=\x10\xc1\x1cHB\x03\xf0}\x0d\xde5\xf1d\xc9\xd2\x15\xad\x9b\x8a\xf2+j\xe2\xee\xbb\xd0N\xc0e\xcf\x1e^\xc5\x85/.\xbc\x11\x01\x86\x88%{\xe6\x91\xe7\xe9\xa7\xce&\xa7\xbeYa\x98\xefa\xa6\xaa\xe9K?3,Z\x19\xc5K0\xc4L0\xc4M'\x1aV\xa1\x87\xa5\x8e[.\x9d^\x9e\xc7\xb1\x1b\xf5\xb1\xca3o.\x9f\xf2&I;\x1d\xd7j\xc7\xb0\xf9*\x9c\x8f\xa2\xe0\xd9\xcd\xee!\xec\xfb\n\xd1\xc3\x15N\xee*\x82V,\x9f\x11\x96.\xc6G\xc0\xa3#\xad\x1eok\x1c\xa3\xf2\xd4\xe2\xf6\x04\x0b\xd79\x82\xba\xcc\xef]\xac^\xc2\xe7\x7f\x86_\xfbq\x97%\xed\xc7\x87V\x9fG\xad\x1a:\x8cs\x11\x80\xd8\xbd\xff\x82q&ps\xe6s\x12\x19 Q\x14\xc5\x9f'\x9d\x94\xc6\xdd\xfe\xfd\xbd\x14\x05\xa3\x9a\x1e\xa3?\xed\xc8N\xda\xb2\x9a\xf2\xef\xf1\xee\xafC]\x9e?\x995}\x9e\xb6\xe5'\xa7\xae\xcf#\xae\x00o\xcb \x1f\x00F\xb3.\xd4S\xd5\xe51K\xb7\xff\xe5\x7f\xfe\xb1\xa3\xfbg\xd9\xeb\xc3?eI]6\xe5\xa1\x0dU\x1dMK\xea\xf6\x0f\x9d]4m\xfd\xbb\x1f\x7fx\x8a\xf8\xff\xfd8\x9d\xd0\"\x05\x19\x91\xce\xf8o\xa2\xf0\x9f\xbfU\xf4w\xb1\xd1\x90\x9aV\x94\xb4[\xfe\x9f\xe0\x0d\xb1\x05n\xe6\xc6\x8a\x10[p{\xdc<\xb8\x00\"[J\xdfa\x1ewR\xfc\x0e\xf3\xe0\xb6`[\xc8\xf2q\xf3\xe8e\xfd\xfb\xcd#\xf2\x99\xc7\xd3\xfb\x98\x87\xda\xd8`\xa7\x8f{\x98\xd7?\xf7\xaf\xd6@\xe1*\x80]\xcb$\xcc\x92\xb2\x08\xac@\xc1\xcc\xb4|\x94\xca<\xe6\xdf\xaa\x13C$'\xfaR\x97\xfc\xe3e\x1cR,-\xa0\xc3{\xf7\x99\"\xe7\xd8\x96;\xec\xb5\xe7\xbb\xdb\x81\xb3\xca]\x8f\xfb\x0d\xc8\xa6\n\xbe[\x18\xb0\xdb\x83:\xe4\x07X_%\x83\xea\xb8\xca\x95\x10\xbd\xc6\x07\xdf\xf4S\xd3Z\xc6\xac#\x9bO\xec\xads\xbb\xa7\x87\xb2\xa6j\x12\xe5\xc7\xbf\xcc\xa2\xf9\xe6\xc7^a\xa0e\xc8\x8f\x86\xd3O\xb3\x84\xb4e\xdd \n\x97\xf3\x1d\x11\xfc$W3\xac\xcb\x9d\\~\xfc\xb8\xc3\xef\xfe\xe7*\x9bG\x1f\x11\xff\xce\xce:\xc0\x97\x04\x10\x96&y\x86?(\xae\xa7\x8d\xf4\xfe7=O\x17\xcb\xa5\xe6\x8e\xd1\xa2ek\xaf]\xb8\xe1\xdb\x0f\x04\xe6\x99'\x7f\xd9\xb8\x19`\xf0\x8a>#\x93\xa8`\x9aC\xcc\xe8Y\x06\x04Z$cN\xd1\x82\x19h\xc1\x0c\xce4\xa2\x13\xc0P\xd7\xf2\xb23Gi\xe2\xf3}\xf9q\x07w\xd8\xf1@n \xd4\xa7\xb6D2\x8b\x84\xdb\xf4\x8c\xady\xdf\x1d\xa4\xb9L\xb3\xf5\xf5+,\xcb,`\xd4{\xd4c:\xf7\x9d#\x9d\xb73\x8f\xed\xe9s`\x87s\xa7\xa7\x9b/\x83\xcf=C\xcb\xf8V(\xd6\xac\x89\xec\xe5X\xc2\xfd\x8d.\xc0U\xabr8\xb4H\x0b\xd3\xab\xc5\xd0&&)g`\x18\x10\x064\xf7u\x83+\xb0\xb0\xeeK/\xa7\xa4>dob\xb8\x9a\xea\x046#5\x0d\xd3<8\x95u\xf6kY\xb4$\x9f\xa4\xa9\x02:\x19\xa2@\"\x9f!\xd7$U\x8a\x0d\xe1/\x95\xbb@\x91.\xe0u\xf9\xaa j\xael\x1a\xb2I\x17\xc0\x02O`\xfbM\x14\xbc\x0f#\xc8\xec\xdb\xce\\\xca|O4\xc70\x0d\xc0X\xb9@\xbe\xf3\xf2\xac\xd3\x8c\x82~\x94 U\x90\x17U\xa0\xfb['C\x1e\xc4O#S\xec+\xb202\xd5\x84\xca\x1d\xde6X\xa5\x0bxE\x8e\x80\"\xff\xa5\xb2\xe4\xd6p\x90\xaf\x92\x04\x08n\xdfQ0#\x91\xcfm\x1a\xcf\xee\xc0)\xcd\xdb\xb0\xcd9\xa6\xe51$`0#\x8c\x041\x80Q\xca\x06j4U\x87\xea\xca\xa3\x15C\xfa\xae\xbc1\xe1r92am\xf7e{\xba\x85\xdc\x17\x88MR\xe6*\x931\x8e\xe0O\xd0\xc3\xc7\x97\xc0v\xe6\xdfd\xe7\xaa\xac[R\xb47\xf0\xda\x92~^\x18\xe6\x9f\xb2\x94^\xe1,/\xcclN\xe5\xab\xc9\x15\xcc\xcd\n\xb1\xab\xe7\xea\xcc6\xdeB\xe6\xa1\x18\xf1n\xfc\xdeF_\xa3 \xd9\xb9\x0bd\xb6#s}\xb7\xbb\x9c\xb6\x8d\x18\xdb)-<\x8c\xef\x1c~ \xdb\xe4p\xc8\xde\xacm\xc9\xb7\xdf\x07\xe7&x\xc9\xe8k\x07\x13\xae)\xa5/YB\xb9\x0f\xbd\x85\xa2\xad\xc1[3U\x7f7g\xfd\xf79\xd5\x7f\xe7G\xafH5\x19\xae\xf4)L\xe1q\x1a\x92dc\x9b3\x92b\x97VI6\xf6\x9c\")vi\x95dc\xf3#\x92b\x97VI\x96i[\xe2P\xdb\xdd\xd4\xfe\x82\xf5j\xcdb\x15-\x02\xaf\x01\xb2q\x08\x03\xb2\x8c[[{\xf3\x82\xba|\x85\x84NP\xbbm\xea/\x97\xd0<\x07\x05G\xf1\x8fu\xee\xbbipaZ\x01\xfd\x83T,\x86`\"J\xd1\x8a#Et\xa9\xea\xd9lb\xa3\x9e\xe6\x98\xa8\x82c\xc3'6b\xbc\xb3\x11\xc2\xf9]xs\xf3\x08\xc2\x81E\xbc\xed9\n\xcf\x8b{\x98\xb7=C4\x1aE4\x12\x81\xebq7F\x9a7\xc1\xd1w\x12\xef\xee\xb7\xc1=t\x17\xe1\x1f~L\xdf9\x8e\xefn;\x84\xf6=\x18m\xdd\x82\x97\xe7vb\xb4u+\xacm\x0dX\xb0\x0f\xe3\xd5\xc5}\x98\xbc\xb4\x1fK\xf3\x1e\xd8\xba\x9b`=\xbb\x033\xfd\xa7\x11 \x87\xe0s\n\x08\xf9\xbd\x08.\xccb\xa4e3\xec\xbd-\x18\xef\xd8\x0b\x0d\x0d\x8d?\x8d\x9aZyU\x9dG\xcbdeQ\x15\xa5\x16\x9e\xe7\xf9x\xfd_%\x8d\x91\xd8Pn\xa2\x15f\xb3\xd9,m.\x06PR\x9a\x9c\xcf0\x16\x00\xc8)\x14\xd7\x06\x83\xc1\x90G\xf3\xb9\x84\x8b\xff\x0c\xcd\x8d\xd7\x84\x10\x92I\xb3\xb2sV\xfe\x1b\x19z\x16r\x18\x1d~\x1b\xf5\xf1\x8cm\x90\xe7\xac^\xb6A\x96\xb3\xd63\xdb\xe1y\xde\x8f/OoIY*f\xac\x98\xaf\x8b\x8e1)\x03\xa7\xae\x1c\x90\xf2\xd2;\xf1\x10\x91\xe5\x10\x9c\x03\xed\x98\x13\x061vj\x1b\x02\xb33R\xb6~\x1a\xbc\x0c\xff\xc7I)7C\xdf\xbeJ\x99*f\xe7r0\x00G_+&:\x1b\xf1\xe1A\x97\x94\xd1\xf6\xdef\xb8\x87z\xe1{/\xe0\xf3\xa3\xebx}\xed\x10\x82\xbe9\xd8n\x1c\x86s\xa0\x03SW\x0fb\xc9\xeb\x82\xebI\x0f\xa6o\x1f\x93\xf2\\\xb8\xb0;\xddQ544\xfe&6\xf0\xaa\xba~\xbdY\xc5\xea\xd7\x11\xa2\xe2\x99L\xa2\xe6\xff\xa7b\x92\xd7\x15&P\xe8\xda\\\xb2\x9a\xd5\xba\x86(Q\xcc\xf3\xd5\xea\x1e\xc6*\xb1k\xc9N\xa0\xf4(\xadT}~\xf1\x1dW\x96\xcaW\x98\x92K\x13\x97\xc2\xb3e\xe5\xc9u\xbe)\x85'DW\xba\xb6-\xf7\xa4\xd0\xb8\xa6\x9d\xbc\xc8\"\xf1\\\xc5%J\xaf\xbc\xaf\x82_x\xce\xa8\xea\xf3\xf2\x15\xf3\xc9\x8b\xcc!\x84\xe4\x1a\x90\x16\x96\x10\x9a\x95^\x83%\x99\x8c\x8a\x86.C\xaf\xa6\xa1:\xfc\xef\xf23\x00\x00\xff\xffPK\x07\x08>\xd4\x17\xe7u\x02\x00\x006\x0e\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x94\x91O \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00images/folder.gifUT\x05\x00\x01\x98w#1r\xf7t\xb3\xb0L\x14a\x10gh`\x00\x81\xff\xff\xff+\xfedad``d\xd0\x01\xf1A2\x0cL\xea=\xfd+O\xbf\xe5_<'\xa4\xb1\xfb=sO\xf9\xf4V9\xd5i\xcf,2\xa7z-\x12\x9a\xbdK\xf0\xcf)\x01\xdb\xdb\xb7O2\xb32X\x03\x02\x00\x00\xff\xffPK\x07\x08\xa9\x03\xb9JR\x00\x00\x00P\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00!z\x92E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00 \x00javascript/jquery-2.1.3.min.jsUT\x05\x00\x01\xef\xef\x92T\xcc\xfd\x7f\x93\xa36\xb68\x8c\xff\xffy\x156;\x97\xa0\xb6\xec\xb6'\xc9~\xef\xe2QS\x93L\xb2\xc9f&\xc9ff7\xd9\x8b\x99- \x04\xa6\x1b\x83\x1b\xe3\xee\x9e\x18\xf2\xda\xbf\xa5# \x04\xc6\x93\xec\xfd\xd3\x9f\xbf.\x8eyD\xab\xb4\xc8\xf1\xe4\xdb<\\L\xea\xc9\xed\xbd\xf8\xb2(\xca\xe4:KC\x9e\x1f\xf8\xe4\xea\xfa\xffL\xe3c\x1e\x8a|\x0e\xc5\x0c\x9d\xac\x82\xdd\xf2\xb0\xb2\x08\xa9>\xecy\x11OvEt\xcc\xb8m_\xf8\xb0\xe0O\xfb\xa2\xac\x0e^\xff\x95\xd0ET\x84\xc7\x1d\xcf+\x8f9\x14O\x97\xc8\xed\x1aB\xa74v\xa6]\x16Tm\xcb\xe2q\x92\xf3\xc7\xc9WeY\x94\x8e\xa5FQ\xf2\xfbcZ\xf2\xc3\x84N\x1e\xd3<*\x1e'\x8fi\xb5\x9d\xd0\x89.i\xa1u\xc9\xabc\x99O\x98CQ\xe3\xc2_\xc7:\xe6\x11\x8f\xd3\x9cG\xd6TwW\x96\xf7\xe4\x8f[m\xd3\x03\xee\x8f\xfc\x81\x96\x93\x90\xf8\x01\x8eH\xb88\x88\x19\xc2\x9c\x84\x8b\xb0\xc8CZ\xe1\x98\x84\x8b\xfd\xf1\xb0\xc5 \x17i\x1e\xf1\xa7\x1fb\xbc%\xa7\x06\xa7d\xbb\xa8\x8a\xb7U\x99\xe6 \xbe%\xdb\xc5\x96\x1e~x\xcc\x7f,\x8b=/\xab\x0f\xf8Nd\xca\x8c \xc1;b\xc1\xe2Y8'\xfd>\xa8\xb1\x88\x89\xc8\x17q\xbeH\xf3\xb4\x82/\x0d.\xc8\xf5{\x7fs\xd8\x1c\xbf\xfe\xea\xeb\xaf7O/\x97\xc1\xac\x1e\xbc?\xbbN\xf0\x9e\\\xbf\x9f\xef\x0e\xf3k|O\xae\xe7\x8e\xbf\x89\xe8\xfc\xd7\x00]').\xc7\x1bc\x8b\xaa\xf8\xc7~\xcf\xcb/\xe9\x81;\xa8Y\x8b\x96I\xbe\xd8\x97EU\x88\xc9#' 9\xee\x0e\x87E~\xa8\xcacX\x15\xa5\x9b\xe3\x03\xcf8\xa8\x1e\x95 \xc0\xdfAT\x10\xa7\xe5\xa1\xbaT\x01\xbfw\x96\xa8\xc1\x19\xfdh\x96\xf9\n5\x98\xdf\x8fL\xb9\xb1b8$3:s\xc4r2w\xd9\xce\xf7\xa0\x9f\xe1\x0dY\xda6\xbb =\x1f\x168\x0c\x02\xd7\x0fD\xf5ytq\x94\xed\x82\xd5\xf5\xd9\xda\n0Rp\xe1\xc6\xf8P\x94\x95\x1b.\xc4\x0f>\xeca\xea\xc2\x85|hp\xbe\xe0O\x15\xcf#\x02;N=\x1bm\x8a!Q,\xe6>\xc2\x1c\xc78!\xedD\xfa\xcb\xa0\xaeO\x0d\xde\x92\x15N\xbbd=\xf4[2]\xadc\x81\xceXQd\x9c\xe6\x1d\xf2Ll\xdb\xb9%I\xaf\xb2\xad\xaal6C\xf8\x0c\xdb&u\x9d/\xd2\xc3\xd7\xba_ \xaak'!\xa7\x06\xe1-!$\xb5m'\x91\x80\xbb\x9d\xcf\xd1:\xbd\xd9\xaeEEi\xec\xc8\x1d\xe5\xd0^K\x08\x89~\xb1I\x9aO(\nI\xe23\x81\xf7\xa8\xf8I\xa6\x84D\xa2{\xb6-~D\xab?f4\xcd\xe5\\;\x91h\x98\x13\x91\x0c\x1b\xdd\x89\x10B\x9e\xc3=\x87\x93\xe9J\xe0I\xdb\xee>\x86\xc8\x0b\xc5J\xbam\xbaY\x17|=5X4O\xf4\xdc;\xb78\xc6\x11B\xeeC\x91F\x93\xa5\xea\x0dd\x89P\x0b@I\xb7p\xce\x89?\xedi\x1e\x15\xae\"\x1b\xd6\xcc\xd9\xcd\xde\xd0j\xbb(E\xf2\xceAhQ\xf2}FC\xee\\o^]'\xd8\xb2\x10N\x0f?q\x1a}p\xa7K\xcc\x05\xd1\xe9\xc1\xf1\x90 Q\xd4\xe0\xbc(\xf6&06\xb8[\x8f\x91Mn\xe9$\x8b\x10\x92/\xc4:B5jj\\\xf8\xab'\n\xa7\x87\x9f%e\xba\x8c\x13m\x9b\x12B\xe8B\x920Q\xd1\xf7\xc7\x1d/\xd3p\xa4\xcc\xb4[\x02\x8al\x9b\xce\xf7\xb4<\xf0\xaf\xb3\x82V\x0eE\xb3\xd5\x0dY\x8a\n\x8c\xc5\x18\x1b\x81\x02\xc2\xa9\xd1\xff\xba\xa6\x8b\xbc\x88\xf8\xbb\x0f{.AR\xf6\xdb\xa1\xc8\x9b\xae\\j\xeeB\xdb\x9e\xdeJ\xcc\xd5K\xee(\x0b\xb6\xd2\xc3\x8f\xfa\xe5\x87\xd8\x82*\xa6\xd0\xb3\xafv\xfb\xea\xc3H\xcf\x00\xc1\xac\x0d\xe0U\xe3])\xc0\x10\xa5Em\x97\xe6\x91\x10\xea\xd1\x99e\xb9g;\x8c\xd6\xb5\xb9d:\xd5\xdb\xfa\xa9\x1a\x04\n\xeaZ\x17s\xf5\xf7\x06'Y\xc1h\xf6\xd5\x03\xcd\xce{\x8aC\xc2\x1fh\xb6\xa6b\x06\xcbt\xe7P\x84\xa9m;+XI\xc5G8\xd6\xf1\xc0'\x87\xaaL\xc3\xcaB\x9e\xc3H\xb6\x08KN+\xfeU\xc6\xc5\x8eu\xacCX\xa6\xfb\xcaB\x98-\x80&Q\x9c-\xb6\x9c\x02~\xe7y\xf4\xe56\xcd\"\x87\xa1\xc5\x9e\x96<\xaf\xbe/\"\xbe(\xf9\xaex\xe0\xfa\x0brC\x87\n\xc4\x1f\xd2\x1d\xcf\x04\xa9\x1f\x9b!\xda\xee\x93=\xb6v\x87\xb9\xd5m\x9c{\\\xc2\x1e\x88\xf8\xf7t\xc7\xc7\xe9\x9f\x04\x0d\xf1\xdd\xb6\xbb\xe7EU\xbc.\x1e5\x7fA\x08a\xfd\x94\x11\x8a*h\x9f\x98\xbf\x08s\xb2\xc41\xa1\x1a\xa5&\xe4\xe0P\xb4Nc'\x04&2A'\x01\x0b\xeb\xf8\x86\xaf\xb9\xc4w\x11a\x8a\xeaQ\x9f\x078D8\"\x84LW\x88\x95\x9c\xde5<;\xf0\x89(\xc3%\xfc\xfc\xc1\x12\x97\xdb\x92\xb0!\nr,~\xfeX{\x1f/\xa5\xb1\x1cm\xb0\x80\x9a\x8f\x01\xb3e\xb9\x8e\x00\xe8n\xa5\n\x81\xde\x04\xebq\xc7\x07\xac\x98\xc1\xe7\xb2\xba\xf6\x83\xf5\x10\xc18\x07G\xa1f\x8a\x90\xa79\xa7\x10[\x07`o\xcdm!\x980\x8a\xdcX\x8e$\xc4\x14!\x1c68\xcd\xcf\xdb48\x19\xd9k\xe6\xcdWn\xa2\x99\x1a\x8aC\xd1]\xd1\xd4\xa0\xabb\xdadwgLC@D\x96\x98\xb7\x00\xb1\x0eo\xa2u4\x9b!\xea\xf3\xd9, \xcc\x8f\xdaQ\xe9<\x84c\xb1KK\xbe?\xeb\x95n@\xc0\x99\x1f\xe0\x98,\x05E\xd6Mm\xc94\\'7\xf1:\x9e\xcdPD\xa6\xcc\xa1~\x1c\xe0\x18\xe1hJ\xc8\xd6\xb69\xb00\x90\xda\x12&>d\xfaLh>k@@3N\x89\x1f\x08\x90\xde\x02Q6Z\xd4\x0d\n\x90\x94k\x14\xd9v*\x1b\x8d\xd0\xba\x05\xadX\x82\xd6\xef\x16\xd0]T\xd0\xee\x078\x15\x9c\xf81\x8d\xdc\x15\xde\x97\xc5\xd3(\xac\x08\xaeG\x15=\x83\x03f\xdbN(\xf9\x06F(\xa6D4l\xf2)T\xf0\x06Dq\xeb-\x07\x82\x9f#\x1c\x93s\xc6\x8e\xaa\x9e1\xc9\xd2a\xae\xc4/gX\x01\x02\x1ev!\xbaN\xa8\xf9#h\x92\xf8\x9d\xcdp\xacY\x08\x81\xb6\x1e\xddW\xb4\xe2\x8b\xbcx\xc4\x87\xe3^\xc8\xa8\xee]#\xfa\n\x1c\xbb\xf5\x85d\xd0&\xdf\x1fw\x8c\x97\x13)\xcdM\xf4(&\x00\xd3\x13Q\xc3\xe4'\x9e|\xf5\xb4\x9f\xc8m\"\xb9\x03\x0bx\xc9\xca\xb1&\x16\x1a\x08\x95[\xdf\xf2%\xc5\x98X36\xb3\x02+8C\x7fh\xad\xcbL\x0e\x1d\x0fM;\x06\xba%\xbe\xeb\x11\xce\"\x1c\xa1\xc2\x92\xbah2m\xdb\xcc\x9b.]\x8b\x8aA\xa8\"K\x81\x86\xeb\xda\xcaa\xbc\xbd\xf5d7\x82\x15\x9f\xaf\x00\xa6\x1a\xd1\x99\x8a\x8c\xd05\xcd\x0d\xe3-N\xf1-\xbe\xc3\x19\xde\xe1\x1c\x17x\x8f\xefq\x89\x0f\xb8\xc2Gb\x1d\xd2_\x7f\xcd\xb85[] ^JL ~0E\xe1G\xb2\xc4Od\x89?\x90-s\x10\xfeU\xfe\xbc\x94?_\x8c\x0b\xac\x82\x0b\x12p\x97\x91\xe9\x12\xe1e\x83\xbf$\xab\x17/>]\xe1W\xe4\xd4\x0c\xa5\xef\xaf\xc4\xbe\xfe\x9a|\xb5\xd8\x17{\xfcW\xf1+\x84\xf8o\xf4\xc3\xb7\xe4+%\xeb\xff\x8d\\\xc2=K\xc1\x19k|\x13\xdd\x84\xebP\"\x7f\xea\x87\x81\xe8\x8abA&\xa1Z\x9e\xf9\xaa\xc1\xdf\x11+\xdc\xf2\xf0\x8eG\xb5\x94\x92yT\xd3\xc3\x87<\xac\xe9\xb1*\xe2\"<\x1e\xe0i\x9f\xd1\x0f\xb5\x90-\xcb\";\xd4\x11\x8fyYG\xe9\x81\xb2\x8cG\xf56\x8d\"\x9e\xd7\xe9aG\xf7uV\x14\xfbzw\xcc\xaat\x9f\xf1\xba\xd8\xf3\xbc.9\x8d\x8a<\xfbP+5IT\x1f\xc2b\xcf#\x0b\xbf&\x96\xbf\xd9<=_n6\xd5fSn6\xf9f\x13\x07\x16~C,\xc7s7\x9b\xcdfQ\xfb\x9b\xcd\xe3<\xa8\xfd\xf7\x9b\xcd\xd3r9\xdfl\x9e\xe82@3\x0b\x7fO\xde\xb4\xb4\xc4z\xb4\xb0\xf5\xf8'\x0b\xe1\x1f\x88\xb5\xd9\xf8\xd6\xec\xf5\xcc\xbar\xac\xd9\x9b\x99\x85\x1c\xcfU\xef\xfe\xd5\xfbg\xf5\xf4\xb7\xc0#H\xa5x\xee'N\xd7\xd4{\xf1\xfbI\x80\xae\xd0'\xf5\xc6\x1a~\xd8X\xe2\xcb\xc6\xaa\x1dk\xf6\xfd\xccB\xa8V\xb5l6\x81\x85\x7f$\x96\xdb5\xb8\xd98\x8e\xf3\x9fW\x8d\xea\xe1\x17\x07\xf9\x9bM\x10\xd4\xd6\xec\x87\x99\x85\xaeP\xbd\xb8B\x9b\x8dh\x1a\xff\x9d\x08`\x95\x1b\xddy=\xb3f\x16\xb6\x12\x0b\xe1\x9f\xcct\xeb=\xf4q\x06\x15\xbfW\x95\x06H\xb7\x82\xae\xe4\x18f\xcfT\xe1\xb7#\x85\xaf\xb0\xfc\xb1\x10~7\xf6\xd9\xf1of\xbf\x89.\xbe\x9eY\xa8\xcd\xfa\x8f^V\xa2\xb3\xbe\xdfl\x82O6Vp\xe5\x99\xb3\x07m\xff\xd3,\xf1#\xc2?\x0f\x1b\xfb~f=\xb3\x10\xfe\x85\x9c\xbe}\xe5\xf6\xbe\xfdIM\xbd\x85\xf0\x97\xaf_\xbe}\xdb\xff\xba\xd9,\xba\xef\xef^\xfe\xb5\xffU|\x1a@\xd2\x95\x85d\xe6\x97\xef\xde\xfd\xe4\x0ez\xf1\x03\xc2?\xbe\xfd\xea\x1f\xaf~\x18~\xf8\x11\xe1/\xbf\xf9\xf6\xf5\xa0k\xae\x03\xc0\x0f\x9a\x8c:\xa3\x87\xaa\xce\xab\xad\xf8?\x17/h\xee\x84\x82\xf7\xad\x8bx.\x90\x9b\x02\x1e5[\xfc\x81\xe7u\x11E\xb5\xe3\xf8\xb3yP#g\xb3\x89\xaeP^w\xf0\xab>\xa8\xf7\xcd&\x9a\xa1\x1a\xb5S\x0b\x80b\xa5\x82#/\x8al0n\xb1/\xbe\x9bY\xe8\x99\xca\x92s\x1e\x1d\xbe\x94\x1a\xa4\xe1\xd8Dur\x99\xdd\xaeW\xfc\xbeN\xaa:\x93#\xea\x06\xd8\x1f\x83\xe3\xb9\xf3\xcd&B\x1et\xdd\xe8\x98\xe3\x11\xff\xfd<\xa8\x9f\xa9.6\xf8_\xe4Z\xf4*\xcd\xf7\xc7J!\xa4Zt\x86\x96\x9c\xd6\xecXUE\x8e\x9e]\xa7\xf8\x7f\xc8\xf5\xfb\xed&\x12\x8f\xcf\xc8\xf5{\xff\xfd)\x98mN\x9b\xc3\xd5\xc6\xcfi\x95>\xf0\xc9\xe6\xf1\x1a\xff[\xd6\xf6'\xc7\x17\x18d\x86jg\xf38C\xf5f\xa1\x13\xd0\xb3kL\x19\xb9\xf6g\xbf\x05\xd7\x981r\xfdI\xbd\xd9\\'8d=\xc8\x83}\xe8o6\x11\x9d\xc7\xc1i\x85\xff\xdc\xc0(\xbcZ\x0e\x11\xd5\x0b\x18\x81\x00\xe1\x88\x91Q\x96\x8aX\xcb'k\xc6\xe6\x7f\xfe\xfc\xf3O\xff\xac\x19\x1c\xc1\x9eEu\x1dz\xcc]\xdeD\x9e\xa4\xe6\x8b\xb8,v_ni\xf9e\x11q'\x9aA \xe4\x8e~\xbc\xb9Y-\xeb\xcf?\x7f\xfe\x97?\xe3\xd5\xf2\xf9\xa7vT\x7f\xfe\xe7O\x9f/\x85\xa8\xc2L\xb6e\xe7\xa0f]\x95\x1fN\xdf(\xc6\xe5+\xf2\xad\xe4T\x1e\x16\x00}B\x12; \xdc\x7f\xfb\xca7\xdf\xb5j\xb3\xa5\xd7MH\xabp\xeb\xc4\x0c\x9d\xbe!'\xa8\xd7\xfdJ\xe5\xf2\xfaD\xea\xafZn\xc1\xaaY\x86P3\xca\xefS\x83\x7f^?n\xd3\x8c\x0b\xfa\xa5X\xe6\xd9,@\xeb\x96]\x0e\xe7\xab\xa6iZ\x9e$a0\xe1\x11\xe6\xb2\xae\x18o\x15\xbd/\x80\xce?\xe2'\xc1\xbc:\xccc\x8b\xe21\xe7\xe5+E\xdc\xeb\x9a\xb9\x0fhJHn\xdb;\x87!\xcc\x04\xcb\x91\xe3H\xac\x8d\x1f\xe0;\xc2\xda1\xb7\x12\xc6\xd4\x10\xc7\xa7\xb4\xaeWSB\xeel\xfb/\xf2g\x05\xaf\x9a\xe0F\xa2\xdd)\xb7\xed=\xc8\x82+\x95\xd7\x89\xc9\xbf\x17\xfc\x89\x83\xc0+\x08\xf5-\x89\xfdU\x00y\xfeBDy\xf1\xb4%l\x91\xf0JI\xd8_|\xf86rn\x11\x9en\xebz\xba5\xc4\xe8^[\xdbE*\xa4\xb4\xdb6Qr\xd6[\x84\xa3VJ\x1cL\x82mCK\xbd\xb4\xf3v\x91mW\x0e\xc3[d\xdb\xbf\xd7\x86\xe8{\xec?\x0f\xf4w\x0dy\x116\xc7s\xf8\xe2\xc3;\x9a\x08\xe9[L\x02\x86\xde\xc3<|\x1a \xdb\x0e\xfb9\xbf\xcc\xe8\xe1 \xf2\xfen\x9dmN\xd1g\x1c5B\x0e_\xdc\x1f\x84\xe48\xbd\xaf\xeb\xe9\xfd\xa2\xe2\x07\x10\x1ea\x8e\x0f\xa4$G\xfcH\x18~\"jq(\x16\xcc\xe9]w\x9e4%\n\x0c\xceU\x05\xe8T\x90D\x08HN)\x17\xebeU\x95);V\xdc\xb1\xd2\xc8B\xc8;\x90\xb2%0\x8cak\xb3yf[\xc8e\x8b\xc303> | \x96\x9fF\xe4\x13kv\x98Y\x9f\x04\x13\x0bg\xa4\xd0\x8c\x9d\xdc\x13\xd9|\x8e\n?\x0b\xc8aV2G<\xa1\xf5#\xa1L\x8f\xcb\xb6\xf7\xcca&|\xd4\xb5\x18]\xb1\xb8-\xd2\xdc\xb1\xb0\x85\xc4\xa4\x9c\xca\xbafJ\x853\x18u\xd34\xaa\xe2\xd4\xe9\xf45?a\xeb\xd9JP#\xd8\xa8\xdd\xee\x15\x8c\xb4Ta\x0b!\xb3MfN(\xf6s+v\x01\x8c\x853!\xc1\xdc\x08Y+\xdc\xf2\xd70/\xb6\x1d\xf1\x8cW|\xc2|\xba8l\xd3\xb8rP\x80\x99\x0fy\x03\xc2u_X\xd7d\xcaL\x8d\x92\x7f\x0c\xc8t\x89i\xf7\xfd\x96\x99\x873\x03EW\x94>Xh\xdd\xcd\xdetJ\x1d\x86\xd4\x04\xb5z\x84\xe9\xaa\x9d(s1l\x9b]\xd6\x80aF\x84Hl`\xb6;\xd6\xc7\x90J\x8a\xab-dj\x18$`\xf0\xf9\x1cE\x0bZU\xe574\x8f2\xee\x87>\x0f\x02b\x0c;\xeb\xd5\xc6\x04\xa8G$\xb4\xed\xa10\xb6\"\xc4@|\xb6\xed\xfc\xc6\x16\x87\xe2X\x86\xfc\xdb<\xe2Ou\xfd%\x9a;\xbf\xd1a\x9a\xd8\xc1Q\x0f\x1b\x85Hv-$\xe1\"\xe7O\xd5\xdb\x94ei\x9e\x08\x8c\x17\x1ar\xc9|\xd5*D\xbc\x95;_u=\xde\x99\x0b\xd5\x12\x8dn\x08\x17\xb6\xa5\x96B\x81\x9b\x00yR\xcc;\x9c\x14\x12B\x8d\xf9\xcd\xff\xaf\xeaw\x8c\x06\xea\xda\x92\\\n\xbc\xa1\x0b\xed\x15f{)s\xcc&5\x98\x92\x19\xc3\xe6\xa7\x10G\xb2?\x1c\xc7\x84:~\x80CM)\x19\xc2 \x89\xfb`\x90\xcc\xe7(\xf49\x89\xfd$\x08l\xdb\x11P@\xa6N$~\xc43B\x8d\xf8\xd7vi\xdf\xdb\x0b\xb6=v2MG\xf1\xb6m\xd3&$ [(u\x05958\x16\xef\xe9\xe1\x977\xaf\xcf%rP\xdf\xd1!\x05\xa6\xa8\x95\xb5U\x0b\xed\x89\xa7g}\xf3\xee\xcd\xeb>\xfeu\xa7\xab\x06\xef\xa0U^\xe9ZF\xa4\x7f\x8e\x13B\xbd\xf3\xd6\xdc\x87\xf6|F\xd2}Ao\x13\x03\xd8\x93aw<'' .\xc8\xd9\x07\xccE\x1a\x8f\xe91\xab\xfe\x99\xf2G\xccm\x9bO \x11\xc0\xb2\xb7m\x87/h\x14}\xf5\xc0\xf3\xeauz\xa8x\xceK\xef<\xc9\xb1\x8eyV\xd0\xc8\xc2\x9c\xe1\xe9\n\xb9\\la\x1an!\x97m\xf7^\x1d\xab\xc8\xbb\xec\x08\xe1=\x99\xc6N\x82p\x08\xfb\x1eP\xf0\x81\xdc\x1a\xc0c*\xceCM\x1a\x89\x95ZxJ\x07\xf4\xaa\xfdl\xa1F\xd48\xb6\xe4\x17\xeb6\x95\xfc\x89\xc2\x98_\x16;\x891-\x84Ts\xe7\xb4_\xc8\x8b\n\x80\xcf[m\x899y&\xc9[r\x89-\x90%\x05\xafr\xa1\x8bE\xaf\x8b\x14 \x1e\xe6\x88\xa7\x83\nE]u=\x96\xea\x1c\x87\xdd\x14\x8dyN\xb4\x88\xd3\xce\xacOn^\\\xd3\x9b\x17Ra\xd0%\xcf7q\xf0\xc9dw\xa0YV<\x86t_\x1dKN>\xf9\xe4\xe6E\xb1\x07\xa2\xa75\x9e\x90v-\x13o^\\\xcb\xe4\x1b\x0b\xd3\xf3\xd5\xb3\xfc~u\xef\xc9'\x9f\x04-\xee\xb2\xed{9\xdd\x96\x7f\xf5\xfeY@:\x1d\xe3'\xf5\xc6\xda\x80Bi\xb4R\xdd\x93\xae\xaa\xba\xd6Uu\xdaL\xcf\x05\xe8\xae\xa5\xd2\xe6R]i\xf4\x1b\x91\xc3\x1f\xab\xed7r\xa1\x9c\xab\xf4\xc0#e\xbaO\xa3%\xe9\x9f\xa0\xb9\xd9\xd5H\xd1\xc5\x9f\x163\x7f\xf6[\x00\xd4d\xb0\xba\x12O$C\xceZrSh=\x14\x8e\xc4N\xb4\xb0%\x95\xcd\xd0\x95\xc1\x99r?{.h\x18\xb6^]\x9a&\xf1\x9dDck\x07%\xa5\xbe\xabU\x17_\x9a4\x9e\x83\n|l\xd2\xf4'l\xb9ZS~\xa1\x96+\xec>Y\x08\xeb\x92xq\xe5\x8a\xf9Bb\xcf\xec\x84@\xc1\x0f:\xbf\xde?\x07R\xe8Ou],\x1e9\xbbK\xab7\xfd\xbc\xe2\xc3\xae\xf8u$\xb5\x18\xcby\x18$\x8a\x0d9X\xb1p\x11\xa5\x87\xb0\xc8s\x00V\xc8O\x0e\xea\xc4\x0bK\x91\x08w\xef\xfea*v\x07\x8c\xadTc\x9b\x12\x0b\xff(`\xe1\x9e\xdc\xb7\x13o\xa8\xda\xee\x95|Z\x0bn\xa1$\xe5X\x9e\xd2\xcc\xc3\xf4\x8c\x14\x8b\xb0\xd8 \xea\xa8\xd9\xbc\x1f\x8bC*:\x8epEX]\x1b\xd9\xf2\x8a\xa6\xf9\x01yc\xfa\xa7\xbf\xf4\xa4 \x8f\x0e\xd9=WHK\xac/\xc0\xb5r\x0b\x01u\xde\xd4\x99FR!\x14\x19&(S'l\x9b\xf6\xbaG'B`\x8c2\xdau\xdb^\xfd\xd9\xbe\xf8\x15,\x9a\x86T$\x8d\x1d\xa6\xe4-Fz\n\x00\xf1\x05H\x86\x12M\x97\xebVF\xc5_\x10\xe6\x9d\xd5C\xcdC\xa3L\x08\xc7\xcb\xb5\xd4eN/\xf6i>e\x97>\xb5\x04\xc8\x8b\\'\"c2\x00!d\xa8\x97\xaak\x86\xbc\xcbS\xc0\x90\xbb\xc2+[\xcc\xba\xb4\x9b{\xc5\x05\x9f\xcc#\xb1B\x97\nAC\x91'\xc6\x97\xd4\xf5\xa0\x1f\x84\x90\x07\xdb\xae\x9c\x07L\x917_\xb9L\xe6b\x97r1\xe4\xad\xdc;\xefo\xce\x1d\xa6h.~\x18r\x97\xeegv$J\xaf\xc6\x16\xe8\xd2\xc4\x86\xad\xd1@\xb7l\xc0\x07\x18\xaf[\xe2\xd3\x00\xa7\xc4g\x81\xd4*\xd6\xf54F\x06\x00&m\xa7\xbd\x95\xcb\xc5K<\xd6AQX\xf0ImY\xa5\x16X\x87\x84\xae;y\xdd\x80\x9f\xed\xe2\x98K\xc5J(r\xb1\xf1\\\xa9\x99K\xe6\xd8\xfaQ@\x08I\xfd(@\xd1l\xd6\xc1A\xc6\xe0\x1b\x86/\xae\xca\xf6 \xba\x9c\xea\xe7\x95\xbblp\x82\xdc\xbc\xc1 \xd3\x18o\xfc\xb8\x15\xf4\xbf\xf91\xcb\xe4\x1f\x86\xcc\"-\xfe<[\x8c18\xd4\xba`\n\xba\xe0\x96\x91\xfd\x07\xb6\xc8'\xcfV\x82\xe0\xe3\xa93=C\xceu=\xdd\xd7ui\xdb\xa5\xc45\x0c\xd5\xf5\xbd\xa0+\xea\x0d\x81\xb6Mn\xa1\x16M2\xa91\xa9\xeb\x11\xe4*\x803j\x15\xb4\xa07\xee\x12Z\xdc\xd2*[\x94\xf6\x89\xa3S\xd3\xcd \xc3\xb9\x9c\x10\x9f\x06\x9aJ\xdd,an4\x0e\x1a\x9d\xcf\xdf\x99\x17m\xee\x9d0\x10:\x07U|\xbc0\x00;'=5\xd5\xc0\xd8 \xc01\xe1\xb6\xfdJ\xce\x92\x99\x13\x0fr\"\x8f\x83\xde\x7f\xba\xd7\\\xa7\x06\xb0\xd6.3\xf6b\xd7\x94\x8d\xc5:y\x03Y\x87!\xd7\x89\xc9\x88\x88\xc1\x04\x1d\x8c\x17\x87=\x0f\xd38\xe5\x91\x17K\x19\xc3\x05%\x9d\x18?Xe\xf6$\xa037\x81\xb7\x1f\xf2\x8a>M '\x9e\x1c\xf3\x92\x87E\x92\xa7\xbf\xf2h\xc2\x9f\xf6%?\x1c\xd2\"w'\xd6\x8c\xca)=\xe6\xe9\xfd\x91\xbf-\xca1\xa5\x86!\"\xc06\xce\xc84\\D\xbc\xe2a\xf5\xea\xb8\xcf\xd2\x90V\xfc\x80\xef\x88\xc2\x88o+\xc1{\x08\xf1 \x0c\x08\x9c\xa5`B\xc4\x07\xe7\x0b\x843-@0B\xfdX\x08\x10@#\xfc8\xb0m\xb0\x87\x01\xb2\x1d#d\xa8\x17\xa92I\x06m\x12^!\x0dlw\xa0\xb7\xc4\xb4\xc1\x9c$ \x1c\xbc\xe3O\xa36\x19\xc4\xb2\x00\xd5\xc5\x06\xa9\x15#\x89\xe5\xf9\x88@Ku\xfd\x17\xf9\xb3\x82W)J\x9fYw\x81\x91!\x1cX\xe6U\x8b\x04\xcdD\xb0\xc0\xa4\x84.\xe0p\x12X\xc55]\x8b\x04S\x13\x19\xce\x08\xd8\xbc\xea\xb3\x91Oe\xd3\x9f\x99\xf8Q\xf6\xf4\x9fb\xe9e\xben\xde\xe0\\\n\xea\xe8\xc4\xdc\xb0\xc1\x91\xd4OI\xdcp 'C[\xed~\xbe\xc4\x92\xed\xfd\xf1\xc0\x8fQ\xe1\xa6\x0c\x032q\x7f\xc1\x1d\xa8\xbb\xa7\x06\x0b\x01M\xfc\x96<\x83\x83M\xf7d\xddX\xee)JK\xd7\xea\xd0\xae\xa5\xec\xe4\xa7\xcb\x06[\x93\x91\xef\x0d\xb6fmr\xc9\x1f\xd2\xe2xP\xa3\xef\x95\xfd\xedR\xa6\xa6\xc1\xfb\x92\x7f\x0d\x02\xbf{\x82S\xf11\x05\x82\xbf\n\x88\xf83\x10\xfe1\xf5?\x0d\x88#\xfe\xd65\xf5?\x83\xbf\x9f\x07um\xda\x03\xaa\xacBD\x01\x18|.`\x10\nZbg\xf8\x9f\x06\xa0\xf7\xc7- \xe3\xcfP\xa3\x0e\xdc?\xda\x97\x1e\xbe\xc0V^me\x03\xab\xa0\xad\xe9S\xe4\xa9\xde\xe9\x0d\xedP\x7f\x19\x88\x8e\x7f\x16\x90\x99#~<\xd1e\xf1\xf8\xe7\xa0\xaeW\xc8}~\xe5X\xfc\x81\xe7\xb2\xb2O\xc1\xe86\x8a\xf4\x1b\x12e?\x97e\xff\x7f\xc1\x8c\xfa\xff}\x96\xc1\x15?\xb6=l\xb1\xd1\xd6\x05c;g*\x9a\xb7m1;\x1a\xd4~Y\xc0\x1c\xa8\xa3\x1fQ\x87'6\xa2\x0b\x03\xf2DN\xd2\x9fr7\xb4\xed\x7f\xca\xec\xa1\x90\xba\x19I\x9c\x10O\x97H\xbe\x84\x9d\xbd/\xb2Z5\xf3\x9c\xa1\xb9~F\xb00KQ\xef\xb2\x9bCX\xe6\xe7\x81\xf6J\x82\x14s\xb5>E\xa8\x11\x00-A\xe8\xdd\xcb\xbf\x8exd\x0c\xb5F\xe3\x1a}\xa9\xfb\xe88\xd6\xf6\xb8\xa5\xa7T\xf9\x8f\xcd}\x9bF\xd9\x8e\x9c\xf7\xeb\x83O\xe1 \xa9\xd5J\xd7\xb5\xd3\xb7\x11p\xde\xb7\xf6/tfI\xc3\x80\xfa\x19\xb2\xc4\xa4~p(\x1e\xe9\x97:\xad\x1bAka\xa7|1^\xea\xfa\xf7UeC5\x99\xd2\xe8Z\x08\xf6Z\x83\x1a<\xd8\xbb=\xb3\xd76Y\x1f6\x10E\xdf\x9d\xc8pB\x92\xc6\xb1\xdc\x13\xd2\x9c\x987\x97y\x0e\x9f \xa4n\xc9\x04Op\x96\xa1\xab\xbf{|\n\xaf\xef\xd5kh\xdbKB\x08o\xe1,D\xaeu\xd5}4?\xdc\xccW\xae\xf5\xcc\xfc&\xc1\xa9\x83E\xd9\xd4o*\x8b#p\x05o\xa1\xe8\xef\x02\x1d\"\xc0\x1b\xc3Jk\xb3\xafu\xcd[8\xd55\xcfVP\xf7\xcc\x9a[\xeet\x85\x04\x82\x90ij\xdb\xd3\xad\xa0\xda\xf7@\x9cc\xcdI\xec\xd1)k\xa5\x83\x8cd\xfe>\x10\xb2\xe7\xd6\xcb.o\xbd\x12LA\xb3!K;]\xad\x0b\xb2'V\x91g`\x10Jm{Z\xd8vo$M\xbb\xf5\xd3\xd8)\x88\x9fx\xf7\x06\xb1w\xef\x17b\xe6\xe19\xc0\x89m\x1f\xd0\xe9\x8e\xdc\xfb\xc7\xa0\xae\x1d\xf1\x03\x9eI\xb7\xe4\xce\xa7\x01\x18{\xe4\xe4V 6B\x1em\xfb\xd6_\x05x\xd7Kx\x1e\xe0L\xb0\xb1\xf7\x86a\x8c\x9f\x07\xedhg\xb3\xdc\xb63\xdb\x16\xa3\xaekgGr\xb2Du],\xf6\xc5\xde\x01#\x8f\xfe@m{6\xdb\xd9v\x06\x12\xe1I\xf4\x82\xf8\x8f8\xc7\xbb`-\xcd\xf2[\x9e\xe4\x00\x9eX\x0e\x93]g\xaa\xebHp\xf5\xa2c\xb2\x8bH\xf4v\x15\xac\x0d\x06\xe5\x8f\xf4\xe9?\\\x1c\xd5i\xe8\x92\x93\xc9\x0eeF\x87\xc4\x10v\x01\xc2rT}O\x81\xdd\x9cp\xbc\x93\x8a\x92\xdd\x7fE\x84\x90\xa5m\xef\xae\xa3\x1b\xb2l\x9a\x11\xcagXw\x0bn\x14\xb8\xa5\x03,V\xb48\xf0J2$\x07\x9f\x0e\xc4\x07\x83\x8e[\xc7\\\x1dM\xf2h\"+\x90\x9cvkf\xee\x1f\x03\x0f$\x00\xae\xe5\xa3\x95\xe7\x84\xc4\xa7\x98b\xcb\xc2,\xc0f[\x03\xcb]\x87\x0e\xe5\x11\xf3\xd8\x96\x9a6\xf5 \xa8\\8\xac\x8d\xc8\xdf\x04\x91\xf0\x13\xe09\xa2\x80L\x9dP\xfc@J\x83\xc6\xc8\x9a\xa8n\x89C\xf1\x95\x0b\xf6L\xce\x8d{\xca\x8b\xcaM\xc7T\xad~\x80\x95\xe3\xf0\xf6\xdc\"\xa3; \x10\xd3\xd1\x1f\x83\xc0,\xadUUB\"-hs\xec\x07\x02\x8d\x0dl\x10\xb6\xf39rb\x92\xf8\xdb@r\n[1\x1c&~b\xd4\x1f\x0c\xe68\xee\xe8!\xb0\x148\x122\xab\xa8\x1e\xdc\x03 \x11^\xa7\xa1\x84\xd8\xa6AxK\x0f\xc31\x0eI\xd8@3\xc0\x0c\xe1\xb7AX\xcb\xbe\x17j\xa1g\x9c\x08>\xaf\xd8a\xa6\xa8Q\xd7L\x9eO\x08\xa9\xa7\xaeArli\x0e\x154G\xb4\x9b\xd1<\xb9\xd0\xe6\xcf\x8a\x83\x03J} \x80\xa1<\x80/>\xef\xe3\x00I\x9b=\x86=\xb4\x8e\x8a X]\xec=\xb6\x80\x9a\x86\xe6JO\xbb\xcc\x15\x1fD\x07\x86\xdfdzkEN\xc2As\xa1\xc0\xd0\xd2d\xbfc!\xa9 \x9fZz\x1c\xaa$\x87F&\xa8SI6\x08W\xb4\xec9_\x9b6\x82E\x081\x03\x04\xb7\xa3\x9f\xc5\xbe\xdc\xf6\xce\x02%\xa5]IW\xae4jpY\x14\xa3\xce\xdc\x94\x10R4\x18\xcc\xdd/}\xcf\x174\x14\x02\x98\xd2\x03\xdb\xb63\x85&\xbf\x06\x1b\xf9\xba{v\x04\xc77\x9d\n\xbc\x00\x8a_\xba\xd8\x96<\xae\xeb\xdf\xe8\xa2\xa2\x0c\xecd\xc0a\x18N\x04\xc6\xd9U}^\x00\x9eV\x0d\xd6\xaf\xbf\x9fy\xd9`uV3\xca[\xffA;\x19&\xfaO\x17\xda1\xa0\xb6\xe4\xd1\x98\xf1I\x9fW5X?\x8d\xf7\xcd4y2\xdf\xda\n`:pW\xa1\x1a\x04\xdf\xed\xab\x0f\xbd*\xff\x90\x1c\x9f\xc6N\xa7Px\xf1\xe71\x9fK\xd9\x87\x91\xdeN[\xea\xb2\x80\xd6\xc1\x07v\xcbi\xc4\xcb\xb1\xb1\xfd\x8f\xda\xac\xed\x9c\xa2\x06\xc3\x04\x8ee\xfe\xd7Hfi'\xf4\x7f\xb9L\x86\xb5\x91\x067#\x895\x18,\xb9\xcf\xda8\xab\xeaR\x9b\xb6m\x89\x1a\xba\xfam\xdb\x91\xdc\xbf\xc3\xc8P\xd0\x00F\x16 AC\x97\x19\xaa\xea\xb4;\x7fa\xe0?=I\xfe2\x00\xf48\xf8lh$}6_\x89<\xfc~\x98\xa3\x93`\xfc\xe5M\xe8\x853\xe6\x86\x90\xf3\x81\xe7\xe7\xb5\x19\x1e3k\x06n2\xe49\xa2\xc3sr\xda \\D\xd1\xc7\x8a\xaf~\xa7xv6\x94\x9e/\x1fi\xfb\xba\x9e\xcf\x05\x03\xb4\xd6\xd5D\xbdj\x92?\\\xcdl\x16\xbd`\xe3\xb5\x80\x99\x88\x06\xf0\xbc\xda\x12\x03\xdc\xef[?\xe5SI\xa3\xb4p\xa7K\x89FX\xf1$\x9e\xe34\xe3\xe2wO\x0f\x87\xc7\xa2\x8c\xc4s\xba\xa3\x89HlP\xc7\x95\xb1\x80\xec\x98\xc3PW\xdd\xe1\xc8vi%\xf2\x97\xfc\xc0\xab\xf3\xfc\xb9\xcc\xaf\xc66\xb9g\x0e:5\xf7\xcc\x08\xea\xa1\xadL\x0e]\x8f{\xec\x18\x08\xe1\xf7\x0c'BT\xad\x8a;\x9e\xa7\xbf\xf2\x81:\xfaA\xbb\x07vn`\xe4W-\xd1\xa7\xb1\xd3Zj3o\xe9\xde\xb5z\xd2\xf5\x96Ppz\xc4\xb7\xa2q\xad\xfe\xd2\\\x0e:9\xd3\x10\x82\x0c\xbc\x95f\xdc[\x04\x1a\x14\x0e\xb6\xd4[U\x0d\xf7\x97\x81\x16U\xebz\x8b\xb0rs\x8c\x89\x1f A4\xa7+\xecp\xf2\xae\xad\x02<\x15\xb9\xb6a\xc5\xb1\xcc~\x92J\xe7P:\x8dC\xa5\x06\x037\x81\xf3\xf5\xae\xd1V8\x96k\x91L\xd2|\xa2'\x12M\x1dN~\xf1\x93\xa0m\xb1\xaeo\xfd$\xb0m\xf1A<9\\\xa4\xfd~/\x12\xac\x0e@\\~\xa9\xf54v\xa6\xa1\xf20n\xe7x\xab\xbe\xbb[\xaf\xd3}!\xf7W\x87\xe2\x14\xb5\xb3\xdft`Q2M\x02$\x8a\\\xe2\x9e\xa3\x80e\xad\xc3\x1b\xb6f\xb3\x19\x8af\xe0\xe4)U\xf4\x9d\xc9K[\xd3\x819=\xaf\x0c\xb6\x88\xd2\x12s\x12\xda\xb6\xa9.\x15\xf2 \x8e\xc9SwZ\xc5$\xe5\xe9\xe4q\xc1\x13\xc7\x9d\xf6\x9c\xf9Q\xa0\xc5;f\x1c\xfb\xb6\xa73T\x95\x18\x08\xec\x89\xec @\xa5\x90\x9bb\x00\xc8\xe4\xbc\xe2\x91\x9am\x9b\xaa:\xda3\xdd\xbej\xfar\xa7\x84\xc4\x9e\x92\x810\x89\x9d\xad<\xa5\xb3\xedm+\xf3n\xfdU`\xea\xc1\x85\x0cL\xb6\xfes\xe8'\x9c\xd3\xddbH;\xef\x8ba\xf2Z\xf5\xecK;1\xab7\x17\xad\xd2i\xc4\xa6\x19\x021\xf9 Z\x88S\xb0\x1aX\xe2;r\xb8 \x16\x03W\xb9\xc5\xd3%\xc2\xd9\x85L\x7fs\x18\x96\xf2\xae\xca\xb8#\xbeA\x8f\x8d}>M\x04\xec\xd6u8%\xe4V\x90\x1c\x87\x91\x10u\x90v\xa7\xb2\xbb\x99z\xe8\xe2`I\x95\x00o\x82u|\x93\xaeS\xe9\xe9\x1c\xf6\xc7\x9a\xaa\xb1\xa2\x1d\xf1\x0f\xcc\xa9\x98\xb3C8DR=vR\xf9%Q4r\xabi\x96g\x99\"U\x119\x84C\xff\x18\xc8\x99\xe6d6K{\x016\xccv\xb9n\xb7\xa7\xf9zdNz\xb3\xb2m\xd9\x0dx\x14t\xad\xd5\x13\xa7\xf3\x15\xd2a\x04\x14\x9d\xb5&\xf2\xb0(\x9d?\x97Uz\xd6\x95\xe5ZVc\x04\n\xd2\x0e5!\xe67\xa9m?uU\xa6\x02\xd1\xe0\xf8\x86\xcb\xd4V\xf5\xdc\xa6\x02YE\xcdN\xf3\xae\x9aBC\x0f;\x00\xfb\xd0w\x18i\xd5(\x86\xf3\xc9\xcd\xd2\x0c\x93\xa0\xd9\xac;Y&\xc3;PC/\xf1=\xb1\x96\x16.Il\xdb~\x80\x0fbgU\xe4\x16\x1f\x05\xaa\x01[Um\xae\xeb\x08\x94s\x87\xf0\x03y\x9c\x11)pT\xde\xca\xed\xc5J\xaa\xeb\xc5\n?\x91\xa3\xde\x93b]\xeed\xb8*ij\x90\xa0\xf5\xfd\x94\x90'\xdbV\xa1\xa52r\xf4\xef\x03\xb4\xbe\x9f\xcd$^\xb0\xed\x0c\x9dv\xad\xa3aA\xa8\xbf\x9b\xcd\x80d\x16\x8e\xd8x[\x84N\x8a_\xcb\x90\xd2\xc8\x8a6\x1e\xc9\x03jBP\x7f\x92i!\xaa\xb1\xed\xfd|\x8ec\xdb.uv\xc0D\xfb\x19\xb9\xc7\xa1m\x8b\x8e\xec\xfbm1\xd9V\xe1\x94\xf8\x00Mu'\xe0\xfb\x9b\xa5\xb2\xe1\xba\x9f\xcfQ\xe9\xdf\x07u}\x80\xbf\x8e\xf8!_K\xb3\x88\x14\xa1\xf5A \x92\x03j4vH\xf1\x01\xe1;\xdb\x16H\xf9\xd0\xae\x8em\xef\xdb\xc8$\x02\xf0z&\x06N\xda\x1d\xe1\xcb\xb1\xe1[R!\\6-9\x04} rc\x9doK\x12i^\x95f\xe3\xbc\xb6\xb2Q\x80X%/\x0dN{\x1a\xa3\x93<;K\xc0\xe1\xaf\x83'mN4\x9f\xa3\x98<1\x87\xf9a\x80p\xec\x1f\x03\xaf\xb5Bp\xb9~Z\xc7\xe4\xa5C\xf1\x07A\xe1\x04\xdd\x8b\xdb\x83vB\x0d\x03\xe7\xb4;\x82\xef\xbb\xe5\x02\x1d\x15]5bB\x90\xb1\xb0J\xb6MqA\xc4l&\x0e%y\xdb\x8c\xa0-\xd2\x86\x8a\xc3\xb9\x81`\xb1\xb4\x8f\x1e\xac\xe1-)\x04\x0fU\x18'\xa4\x08kzv\xf3\xdc\xb6\xado_\x89\xdd\xed\xdc\xc1\x01\x03R\xe2u\xebT }RL\x07\xac\xbd\xd8!-\x9a\xb9\x85\x93m@3`\xf4G:'\x04\xe7N\xe3,SLPjL\x86D\x7f\x91\xbf\x0c\xf0\xb45B\xe3\xeb\x1c\x8e~{\xda9\xdc\xa1\x8c[-\x08H\xc6Z\x8f\xb3I\xc9/\x0b\xd3i\\\xbb\x1fzKw@\xba\xd3\xf9\x1c\xfa)F\x9b\x06\xd8\x18HF\xeez\xe8R\xf0\xba;\"\x07\xe3g@Yc\xb2\xfb\xe8\x98\xb4\xdf\xe3\xad&o\xe3\xfe\x8f\xca\xdb\xf3V\x13\xdc\x14\xaf\xc4 \xb56\x1e\x10\xe2-\xc2S:\xf4/\x15\xd0\x82\xb9>\x91Q\xf0\xe5\xe4u\xbdu(.\x10rb0@\xc2\x1c\xff\x8e\x07&\xc2\xbc\xc1\xa6Y\x0e9jo>\x0bi\xa3\x1ce\xde\n\xae\x17G|n\xdaC\xa6\xd3\x0c\xef\x1c\x84\xfb\x16\x8f\x17\\^V\x1f1 \x1d\xf7j\x1c1\xd5n\x19\xf7\xbe\x01\xfe\xb6\xe41\xf9\xe4O\xd2\xfc\xde\xc2\xd6\x9f\xa4\xa2\xa8\xd3\xd1\x0d4D\"\xbf\x90T\xeb\xfa\x8eI}Q\x0d\xba\xd1-O\x93mU?\xa6Q\xb5\xb5\xf0\xb8fg\x12z\xd2\xa0\xcb\x1dZna\xab=B\xed\xeb\x9b\xbc\x95\xfb\\z1u\xb6_g6\xcd\xa3C\x03\xc5\xd85\xb8\x00\x18\x83\xe9\x1b\x98\xc3N\xb0 D\x9f\xf5;\xe3\x96Y\xdb\x81\xab\x92\x97\xc6Y\xd7J17\xbd\xac\x98\xeb\xe6B\xbb\x9e\x81a\xd2\xa5\x85SA\xb8\x06\xdd\xea\xcc\xd2U\xcf\xbe;\xeb\x13\xc8M\xeb\xb3\x15\xf0Y\x00\x9aZo0\xe3\xae\x13]\xb4\xa1\x8b\x0c\x1b\xba\xc8\xb4\xa1C8a\x8dC\xd1:\x87=O*\x88\x98\xb8/I\xd5YO\xa9$\xdfr-\x19\x81q_\xb6\xda\xa0\\\xd12R\x19D\x0d\xe72\x00]\xa5\xed\xd0 \xdc\xd3/o^\xbf*BR\xc9G\x9cw&\x90U\xfb\x08\xd6\x89G\xdd\x08 \x9d\x1e\x8e\xc3\x0f\xe4\xfa\xfd\x0b\x08%\xb19\\m\xae\xbd\x1b\xc7s_l\xae7\xab\x9b\x1a=\xbb\xc6\x8f\xe4\xfa\xfd\xc2\x7f\xef\xfei\xe3o\x168\xb8zv\xdd)2\x9e\xf4\xbc\xa6\xb1\xd3\x0b?\xc5\xdas\x95|\x91\x94|\xdf3\x18\x11\x0c\xb3\x12s\xa7:\"\x1b\x8e0\x98T\x86\x0d\x90!vf\x0d:RO\x9f\x8d\xef\n\x9fG\xcb\x82\x0e>\xb6v\xabm\x95\x92YV\xb1\xd0\xd6\x8c\x98)-\x13\xf1\xb1\x96\xbb`j\xe8\x86,e\x17\x1a]\xcb\x85\xc8\x19\xcc_\x06\xc6\xb9\x8eC\x89\xe5\xe6E\xe5\x80\xa1\x0d\xb2\x10\x96\xea\x0d\x8d\xc4\xc1|\xa2\x93!$P\x0dMu\xc1\x9e\xc5\xf3\xa3\xc0\xf5\x03\xb7\x9f\xc5\xa1X\x8d\x80\x8d\x8d\xa0\xef&\x0dAn\x8d\x80\xac\xce \x0c\xf6\xccrJ*\xeb\x05\x9bU\xec\x91H2\x17\xa0\xb3\xe9\xd1S>\x0c\xc0\xebP\xa4\xa7\xbcmC\x8a$\x8c,[-\x18@W\xeba\xc0}\x16`\x08@\xdc\xa9f\x94b\xd0,$g\xc1\xa1\x18\xf2w\xca\xe3\x88\x9c\x05\xc1]yz\xcf9\x11r#\x04\nY\xc5~Af\xfd\xe6\xf5\xdef`\xc7\xe7R\x1c\xb5f`#\x13\xf5|)\xd4\xc2\xe9z\xe0\xfe\xaa\x83\x8f\xe0iX\xd7\xd3\xd0\x17\xd95K8eu\xcd\x162\xa0\xb6\xe7\xb0\xba\xfe\x80\x14| \xf7,\x8a1k\xbf\x81vG\x071a\x84M\xd2\xfcP\xd1<\x14]\xce=\xb1\x93]\x86\xcdH\xd78_@\xc8WAx\xa1$f\xda\xec\x08\xb6\xefH\xac\x96\x0cV\x13?(\x0bF\xd1\xday\xc8^&#\x07\x87\x934\x9f0\xd4\xc3\xb5*r3\xf2\xd4\x83\x145\xe4\xa8\xc0\xd6-\xc4\x90\xb26\xd6\xa0i7C6t\xd0\x0d\xfd\xe7\x01\xc2\x11\xb8Z\x1a\xc7\x9d\x8e\xb1\xdf\xc9\n\xf6\x9f\x90\x07\"\x84+#N7\xc9po\x8b\x10\x8a\xcd\xe6\x0cO$\xa7WLW'\xb3\xf7\x9bA\xee0\xb2\xe1\x98\xd9\xe0\x87E\xc9i\xf4\xc1S\xbf\x00\xddN\x8e\\\xa75\x9b\xa7m\xaf\xf4h\xba^\xb6\x8f\xfd\xd1P\xfd\x84\xc4\"\xeb\xc0\x9e\x0eU\xe8\xa7Y\xbf4Nv\xc4F\xc0\x1fH.Dk\x01\xfc_\xc8-$'\xf1P\xefK\xfe\xe0x\xee?\xf2*\xcdjp\x10\xbd\xc6_\x92\x13\xd8]\x95<\x87C*iyq\x10\xcf9\x7f\x82\x83&Q\xcc\x9d.\x9bu\x87\x92\xa3\xb4<3x\x94\xa4\x05\xb0p;\xe0P\x9b)P8D@2\x9cO\xb7\x06Z\x95n\xa4(5\x02\xe0\xe5\xf4\xe0\x84\xda\xdaI\x89\xac\x1dQ\x8c\x1a|\x90\xa7\xd4\x03\xe3\xa6\xee8\xd1\x0fF\x8e\xb4\x87Q9\xe8\x14\x0e~C]\x7f\xa7\xb1\x86(\x91\x06!\xda\xd2\xc3\xc8\xe9r\xae\x17\xc3\x14\xbdM\x04:N]\x1e 2\x8b \x16tM\xcf(\x0cld\xe6\xd3\xc0\xa40\x0d\x0e\xb3\xe2\xc0\xcd\xd0\xec\xfd\x01+o'\x03\x80q,V$!-\xd6\xad\xebs\xd2\xe8A=],u\x007w\xd9\xea\xf3a\xdb\xcb\x0d\x12\x05\xeb\xd0\xb6C1e\xeb\xa1\x9fR\xectn\xd2/V+\xdbv\x12/\x91f+\xcaBt\xe8J}\x81\x93\x80\x90\xb2\xe8\x14\xb7'\xc0\xbd\xd3\xae\x01Q\x8a\xbb\xa3\x8f\x96\x84\xc6\xc8\x8d\xc1z \xe2O\xa3f\x14\xdeHX[\xc5H\xe5\xe0\x8b#\x91\x01\xd2\xa1j%\xdd\xd3\xc8[\xd0\x06Wam \x13\xea\xc1\x0c%\xa0V\xbe<\x08\x11_\xec\xa0\x97Y\xe6h\"\xe7\xceW\x0d\xa6Q4X\xc7\x0b\x1c\x8a\x1eU\xef:\x83\x84W\x0e\xc2\xb2 \x84D\xa5Q\xf4\xc5\xf0\x1a\x04\xb3B\x1aE\x8e\x8e\x1c\\\xf5\xa3\xe8\xbb\x83w\x0d\xb1\x14\xa1\xc6\x8cQ\xfaJvs\xb8\xa5W\xfd-\xdd\x1d\x91\xab\x10\xab\xa7\x11\x0b\x11m\x98q\xee\xf2\xc9\x94[\x96I\xb1\x94g\x90\xc2ccC\xcc\x17QZ:\x14\x9bG\x8e\xa8-\x01\x18\xef\x0ca}\xa4(\xc4%\xce\x87\x96\x1e\xaa\x80\x98\x86\x9e\xc1,j$\x8e\xbc\x94wh\x18\xac\xea~\x99e\x1f\x1d\xcaH\x13\xbfW\xe4BK\x7fl\xfcf{0\x01\xa2\xb6?V\xf4\xcc\xf4Y\x14W\xd8\xf9\xc2z\xa9\xaf\x8ec\x02A]\x9f\x1adH\xfdB\x06\xc2-}\xfah=\xa6\xb2@\x14\xd2\x84ll\xfb/\xd4\xd7\x8e\x07\xd2{\xcb\x0f05#\xf65\xcd \xac\xaf \x08>\x0d:N\xd38|1.\xf3`\xdd\xd1\xa7\x05S\xd8\xb3T\xff\x1c\xc1 c\x08L\xce\x19*\x8a\xe0\xa8\xb1\x15\x04\xe1t\xd3dJn\x04j\xfd\x12,v[\xdc\xc0\x11\xfe\xa2\xd3\x93\xf1E\xc9\x1fx \x16Bx\x80N8\xd2,\xf6W\xe4z\xf3vv\x9d\xe0\xaf\xc9\xc90\x0d\xf8k\xb7?\xbf\x16#=\xb5Jk\xb5\x9f\xa9D\xd8\xceW\xa0\xf74\xe7'D'\xc1\xe7\x11A\xac0k\xf2\xc5\x974\xcb\x18\x0d\xef\x0e=\x9f5JF\xd0\xef\xd70 \xd1\xb8\xdbQ\xdc\x06+\xdf\xc6^\xd8aA\xd2R2\xa5\x8b\"\x0f9\x1c|\xdcv\xf5gZx\xa3\x8b\x1d\xdf\x15\xe5\x07\xdb\xcepH\xa6K\x9c\x10^\xd7K\xe5\xe7\xb7\xed\x04\xc7\xe9r\xbd\xb5\xed\xf8&Y'\x92\x0eo\xfdD\x9fYe\xfe2\xc0\x99`\x88\xc1r\x10|\xfe\xaab\xffC\xfe5\xcd\x0e\x1c\x9d\x18\x99\xae\x14y\x8a\xc8t\x85\xb7\xb6\xed\xa4^\xda\x8a\xce\xb7N\xaa\x15\xbd\xc8e\x9e\xe8\xba{\xa7\x0d\x0c\xc1~\xeb\x8e\x9cz\x94@\x86(\xd4gC\xba\x9b\xeb\xf6\xb2\xa6I\xe2\x00\x18\xc2R\xb0\xc1\xad1\x92\x07SQ\xa3C\xb4\xee\xc5\x8b\x8e<\xaa\xc0\xc5\xb6\xef\x16[*\x98\xab\xba\xdej*\xeb\x82\x85\xa7\xeex\xc7%\x90\xc8\xb6\x13'D\x0dj\x8c(\xdc8\xf2\xbaIt\x19\x80l\x88o!\x0c\xa5\xc9\xe5c\x19\x8a\xcd\x1c\x9f\xfa\xbc\x15\xf4_\x02T\x1b\x1c\xbc\xbf\xd7`\n4\x07\x19\x12!\xe3I\xee\x97\xe1-\x0e\x91`)\xd0V\xab\x9eC\xbc\x82\xed\xe4\xc47$\xb4\xedx>\xc7 <%\xf39j\xe46h\xf0\x90\x85k\x19\x82\xaer\x8a\xb7\xc0\xacL\x1d\x15\x12R\xab\xe6\x876\x94\xddHt\x04y\xd9\x86Z\xdd\xd1\x8c)a\x8a;\xeeg\x1e\xb9\xebf\xbampV\x98\x14\xbd\xad'\xd5u\xb0\xba6\xa0IU)\n\x8dV\x98\x82\xb5 \xff9\xad\xc6o1\x12\xe3\x0dm{\x9a\xc2q\x12\xdc\x13\x80\x19\xf1)f\x12qy\xea\xd7A.\x0bp\xe4\xa9s<\x86\\Xw\xd5\xbchb\xa4\xcfw\x0b\xdd\xf6\xf0N\"\xa3\xdcX\xaf\xa7a\xd3b\xa0;\xf3\xee\x97W<\xe6e9j\x98\xeb\xfbV\xc9\x0fE\xf6\xc0-lEE\xce-l #\xc7\x12\x88c\"\xd1\x83\x85\xb0\xce\x1bY\x01\x16\x05!:%\xb6b\x9af\xbfW\xee\x16ll\xa1\\^Ti\xfc\xc1\x12\xc4\xb0HJ~8\x0c\xca\xeabA\x80Cb\xedy\x1e\x01\xa5\x8c\xc8\xe9P\xd1jl\xca\xc2\x06\xd3\xec\x91~8\x8c|\xe3\x0b1,cC.Dw\x9d\xb3Y\xad\xb6&\xe1\x94\xf3c\\\x08\xd4\xa1v=\x9bF\x80\xbcq4\xa3\x8e\xf9\x12\xd2\x97\x89%/(~\xd6\xdc\x8f\xfdU\x108g\xcd&\xb6\x9d\x8c\xdfK\xb5\xa6R\xe1\xd0\xd5'\xc4\xda]z\xe0\xc8k\x1f\x1d$\x07\x1d.\xd4\x82\xa9A\x8bw\xb1\x10\x82\xd1\x96S\x0f\x92\x88X\x0e\xe4\x86~\xec/\x83\x99% \xcf\n\xa0]\xc0\x85aW\xab\xbc\x13.\x91\x17[\xb4]j\x04\xd6\xa02r$\xea2\x0b\xb6\x08\x1eG\xd9\x11u\x87Y\x0b\xa4\x14G\xc8\x8d\x9a\x06s\x83\x8eF\x8b}\nv\x98bq\xf0\xf9\x1c\xd3n\x8ec\xffy\x80\xb7\x10\xbdu\x1d\xc9i%\x89\xe0\xe5\x05\xa5\x81\x07s\x96C\xb2m0\xf3W\xefi\xe0?\x0f4b\xc0\xcc\x7f\x0e\xef\x021 \xccaB\x82\x91;\x18\xf8\xe8Tq/r\xc7wl??I\xda\x1d\x0e\x81\xc2\xf4\x8cq\xb8\xf7F]d\xc61\x87\x13\xbb\xc7-\x1f\xb3\xd4^\xe2\xf0\xec\xc6\x08\x04\x97\xf1\xb5\xe2\xac\x90\x0dx]\x7f\x04^\xb8+h=8\xb9{\xd45 \x1b\x89\x994\xf0\xde\x98\x9b\xa6\xa0\xe9\x82\xeb\x81\x11\x87\xe2ix\xb9\xd7\xcd\xca;\xeb\xa2\xcb\xc1W#\xf5\x12\x05w\x80\xe7D\x03\xee|\x1e\xd7u\xa2!\xb6Mo\x1ai5\x0b'\xde7+\x90\xb1S\xb0\xbc\x95T\x88#|\xdb\x7f\xbd\xeb\xbd\xae\xb9R2\x87>\x0b\x06s!\x92\xba\xe90\xdf\xf4\x0e\x12}\xb8\x13$Tn\xa0\xe4|\x03\x89\x1c\xb78E0\x00\x0d\xb8g#\x11u\xe0\xc4\xd8\x1c\x8a\xb5\xfc\x06\xae\x12\x94z02\xb6O\xe4\xa7a\xb7\xa8\x86\xac\x0e\xc9\xb7wu\xad0\x14\xf9\x99\xa6\x95\xbb\xc2\xdb\"\x8b\xe4\x87\x1ec\xe9\xa9\x8aE\xae\xd9\xccUo\xcet\x89\x1aY\xbc\x97\x1d\xc2\xc6L\x97\xde|n\x14\x03U\x1fT\x8d\xea\xdai_ \x92\xedTd\xb7\xed^\xfe\x9be];\xdf\xf4f%\xc3~\x1e(\xddQU\xa6I\xc2U\xf8\x81\xd2\xb6\x1d\xc1\xa1\x0eR\x1d\x0bj\xb3\x84<\x9f\xa1E\x11\xc7m\n\x1a\x88\xe0\xdf:\xe8\x94\xa9\xf0\xb6\x83x\x97\xaf~x\xa3\xfc\xa6^\x174\xe2\x91\x85\xbf\xc5\xd3\x15\xc2t<\xbb\x8cv)\xb3\xe8yB\xcd`a\xba\xb5\xeb\xd4\x13\xdf\x88\xf1\x92\xde\xb6\xb2\xc2b\xb7\xcfx\x05G\xc6\x99\xac\xe2\xad j\xde\x81W\xef\xd2\x1d/\x8e\x95\xa3\xaaF\xae\x93\x8dD\xeb\xbc\xdc\xfb\xf3\xbcF\xd7\x11\xc2\xdf\xb4P\xc4\xe0\xe4h\x00Y\x00\x8f\x7f\x03g\xa3\x90\x1f\x0e\x03\x04\xa0\x85\ne3 \x91n\x06j\xdf\xe2\xd0\xdf\x06x\xba\x84\x16Z\xbf\xd3\xde\xedv\xa2\x82\xfe\xbd9\x91\xbc\xdfo\xba\x043V'\xf1\x9c\xee\x84R\x872F\xaesK\x18>\x8f\x8c\xaf\xd6\xe8\xd6\xd0e\x85\x10\xf8Li\xef[3Z\x06N\x848\xc4\x89\x17\xe9+5!e\x8b\xf5'\xd4\x19\x07r\x8f\xba\xb7\x9e\xee\x07rS\x8fA\xb8\x02\x81\xe0\xe2f-G\xbd\xaf^\xd1\x8a\x8em\xf7\xbe\xcaU\x06\"1\xdf\xa73\xe3\xfc\xaf\x03\xf6\xef\x1ctR\x1a)\xa9lo=DA\xa6\x85\xe8\x1f\xe4\xd4\xe0%>\xf5\xdc\xdat\xbb\xa7\xa6Q\x8c\xffB\xdd\x13(\xcf\xa0\xc5\xd3\xec\xbb\x05\xdc\x15\xd4\xc0/Y\xe1\xef\xd4\x18\x0e\xc4\x1c\x0d\xfe\xce\xbc\x0d\xf5\x8e\xf7\x11H\x1a;\xd3\xb6\x9cC\xdbc]\x19|\x8a\x89\xbe\x85\x84\xfaf\x0f\x02e\xc0\x7f\n\x89\xea\x01\x84\xbcf\xfdLD\xbb\x054xl\x02R8Sm\x83cG\xe8\xac|\x88\x0d\x16\x84\xa1\xa6\xa7<\x85\x89\xf3\xc3\xa0\xae\x9d\xde;X\xac\x87\x0d>\xf0\xeaL\xe3\xf3\xa0\xee\xca\x82\x02w\xfc\x83\x80\xac\x98\x18\xc5yp\xe1\xe0;\xf6Y@\xc2\xb5\x86~\x01\xeb\xc6\x15\x7fN\x8cP\xdb\xd5^u\x98\x19\xf7\\E\xf2\xd4)\xf6\xa3\xfeM_\xf1\xf0:\xd9\xce\xac\xd2\xa8\xcc\xe8t[R\xeeB\x19\x04\xc1\x154\xb2\xc1r\xeb\x8e\x0f\xfd\xbcX]\xb3\x11\xe5\x0d\xb3\xed6K\xe89\xea\xa87\xe12\xba\x13\xee\xf6\xbe\xe2\xaa\xd4\xa7|\xd1\xde\xce\x07a\xad\\}\xc9\xe3\xeb\xabMSo|\xfd\x1c\xa0g\xd7\xf8\x07r\xed\xf8/\xe7\xff\x13\xa0\xeb\xa4\xc3{?\xf6!\xcf\\\xab\xb3\xa8\xf2\xf2VA+\xa2\x15\x9d[\xb3.\xb2\xda\x0f\xd8\x9a?[YC\x07\xe6ph\xb2\x14\xa1\xf3S\xfa\x10\x9d\x04N\n\x89U\x95G\xa0\xe9!\\#\x16\xd3\xec\xa0_W\xae%\x08\x91|\x83\xe08\xb3pf\xc9\xd7Y\xe8~\xaf\x83\xe1x\xea4\xfaoo\x7f\xf8\x1e\x94LFH\xb57\x06|K\xea\x18\x92~\xc0\xb1\xb0\xe9\x9d\xbe]X\xf8\xc9\x9b\x85\xfa\x08\x07\\\xaf\x8d\xb7\x06G\xfd2=2\xf9\xc6\xa4\xd6!\xfa?zS\xbd\x1a\x96A\xa77\x8a\x8b\x92\xe8\x14\xff\xfbc\xd5\xbe\xeeW\xdb\xe0\x7f_\xac\xf6u\xaf\xda\xe1\x81\xe3Y#\xe7\x1b\\\x10\xe1\x84\xc4\xb6\x1d\x1b&y=\x90\x91t\xaa\xea\xf4\xc7\xc0u\xbc\x01\xc4\x13KS\x9f\xd88\x93\x9b\xbe\x96_\xb0\xa5fQ\xc0\xcaAp\xa2\xa7\xb0\xf5e16h\xe2\x87\xd2_F<,r\xba\xe3x \xf6Bm\xc8# \x9bR\xe5m\"\x89Hi\x93>G\x08\xff(\xddx\xfc(\x10\\\xc7k\x00\x8ca\x17\xb0`\xe35C\xa2\x1e\xce\xefr\x95\x87[ R\x1b\x0c\x81\x045)\xc6\xa2\x06\xb9\x7f\x1b\xde\xb9\xdd\x99Y\x9b]\x94\xe6\x17\xb1\x81\xd3\x99\xb2\x12Q\xf3\x87\xa9\x89\x99[O\xfeu/O\xf4\x91\x07\xf74Gt\x84(#\x06\x1d+\xd4,\x8b\xb0\"a1\x1c^`\xae\xe5\x89\x04|\xd9\xa6\x91m\x03\x02\x01\xfd6(q\x1c\x81\xb4\xba\xbe\x8e\xf2WLM?\xe4\xb0\xd6-\xee\x93\x0b\x11\x02\"n\xa7<\xc4'\xa9=\xbf\xacN\x1d*\xb3\x0c\xd4\xe8\xb3v\xa9\xc3@\xde\xb31D\x95c\xab$\xfb\xf9\\\x9f\xc3\x9d\xd9=\x80\x81>\xc5\x94\x88 \xc4\x02\x99\x9d\xc1\xfc\x8b\xd0\xd3k\xab\xb1m\x1b\x8b\x1dxG\x91\xea~dw\x9a\xa5a\x83\xad\xfbP\xa0\xf6\x02VkHm\xdb\\9\xb1E\xc1\xc2\xa0\x03\x8dn\xf3\x8c\xc0\xe6\xc77\xe0h%a\xc6i\xf9\xf7\x8f\xd6\xa3`RB<\x86\xdb\xf9\xcfu\xa0\xa6\xa7\xca\n\xf3\xbe\x82@\xd2*\xcd\x85\xaa\xcd\xb15a\x7f>\x8f\xea\x9a\xf7\xd4(1\xf6\xe3@l\x83\xcb\x0b\xa7\xf1&%\xaaw\xe6e-\n)\xc4~\x12`\xda\x03V@\x12\xa1\x84wA\x96f3\xac\xde\x00\x08\x0d\x9f\xd1\xad\x8307\x15\x0cJ\xc1\xf5wr\xed\xcf\xe6\x81'\xd8\xbb\xe8j\xb3\xa8\xd1&\x9a9\x9e\xeb\xf3\xaf\x02\xf8\xb0\x89f5\xbaVW\xf9\xe0\x9f\x88o\xbd+\xf6\x16\xb6~J\x93mea\xeb\x8b\xa2\xaa\x8a\x9d\x85\xad\xd7<\xae\xac\x00\xbf\x1d\x0f\xc1K\x05\xa2\xa1\xd8\xca\x8b\x9cK\xd5C\x08\xfb\xc9\x8a\xd2\xc3>\xa3\x1f,T\xd7S\xc3nh\x10%\x16\xce\xcf\xdfI6T\xc7\x1f\xa8!\"\x01zv\x9dv\x87\x8a\xad\x86^_?\xae+\xf8\xba\xa4 82 \xccH?>\xfc\xd9M\xe5\xd2\xd5\x01\x87\xe7w\x98\xeb\x00\xf4\xe1x\x00z\xe8\x90\x05\xde\x17\xfd8{*H>\xb6\xbap\xf9\xc3<*(\xbd\xbc \xdd\xec^\x88\xf0\x9d\x0c\xb8\xf2eV\xe4\\\x88/\xe2\x17\xac\xe7\xa7K4xkC\x9a\xe9\x18-\x98\xf5\xdc\x17\xf4\x95\x897O/\xae\xdbg\x0b\xdf-\xf2\x02\xaa\xffR\x96\"`N~\xa1\xe6\x9e_\x81RL\xfd\xc3\xbc\xabc}\xb7\x80\x809i\xfe\xc5\x91\xb1\x8c\x1f\x88U\xe4*\xc5J\xf3 \x85\"\xff$\xd7\xef\xef\xf8\x87k\xfc\xb3\\\xd7]q<\xf0z_\xa4y\xc5\xcbZ\x99o\xedx~Du\x98\xa5\xe1\xdd5\xfeEfT5\xc9+h\xe1oq\xacXv,\x85$\x02\xf7D\xfa\xef\x17\xc1\x15\\5\xb9p\x163T#\xd3\xd2\xfe\x7f\xcc\xa0\x90m\xea\xb3.\xd5\xb8_\xea\xdf\x8e\x14!\x14\x14g\xfdH?J\x04\xa0\xe8\xd4\x08\xfe\xfe\x81\xe7\x159\xc9\xbb\xf4\xdd\xd3\xb9aT/\x1c\xe0\xe0\xdaau\xe9\xb0\xa6\xff\xc0\xae\x95\xe8\x14.\xb6\xad\xc25&!\x0eI\xacS0'\x9dk\x1b\\9\x03wG;\xf2\x81\xe8;\xa4\x11vRR\xca\xce\x1dP]\x1bo\xd2\xb1?!\xa5\xaaR\xea\xeb\xf4\xdb\x98\xcaT\xe1\xad|J\xc8?\xe0\xd4[\xd4\xa3\x95\xc0<\x02k\xa7J\x9a\xd6\xcbObw\x83\x9b\x84\xbe\xe4\xd18jP\x9c\x89\xd8\x90\xc0 Y\xc8\x14\xa4-+\xc0\xb7C\x17\xc0\xdb\xf9\x1cm\xc9\xbf\xa4u2\xf3o\x03i\xb9Q\x90{\xb2\xf5W\x01\xde\x13g\xeb?W\xc1c\x95\xf7\xd4B\xbbO!\\\xc0\x95\xcb\xbao\xe0sB3\xbf\x00!\x1a\x17\xc4\xe1^\xb6\x10\x1cFB+\x10\"\xdcl\xc1\xd2<\x02\xf1\xb4\xae\x0b|\xb1\xec\x1d\xe9\x08\xb8\x18\xbf[\xe0\xa2L\x13\xa8\xe3^Jn\x11V\xeb\xe6\x86\xf2\xbar\xb9NX\xaf\xa0\xcb\xfbw\xac\x82U\xe1\x05?\x13)\x93r\x84\x05\xd28\xeci\xc8\xdd\xbdr\x0d[X\xa8\xc11\xc2\xce\x8e\xa4~!\xe6G=\x11?\xc0\xbbvt_\x16\xc7\xbc\"K\x9c ,t\xdc\xdb\xb6z\xe8\\H\xf68ASB\xa6\xab\xba>W]\xdb\xf6\x88:\xbb\xc0 h\xb21\xa8\xc5\xc5T\x8b_]\xe3\x9d@cj\n4\xa8\xf6\x13\x88\x9c\x11\x840\xf7v\xda\x1ab\xd0\xe5\xd9\x0c/\xf1\x1dr\x95c\xf2\x1d\xb0\xdd\xb0\"r\xdb\x89\x81\n\xb6~T\xab\xf4\xc7\xf6_'s\xdbvo7\xda\xb6\xb9\x93\x04\xef\xfc\x9f\x80-\xdc\xd7\xf9\xbf\x87\\t\xfa\x18\xe0F\xbf\x03\xb8\x12\x04\xa0\xc5-D\xe8\xe8\xdd\x9aa9\xef\xeb\xcdf\x81\xac\x99\x86\xa2\xcdf\xe1x\xee\xe2j#\x18\x02!\x9f8\xe2\xe9\x19\xb2\x80\xd1'\xbb\xfe\xf0\xe2\xf9\x1c\xdd\x91\x9d\x1f\x07x\xca\xa5C\xf3\xddB\xc3?Xb\xc8\x95\x85t\xb9\xf4[\xdb\x9en%\x18\xdf-Z(Fu\x1d\xd9\xb6\xccg\x18\x98[WW\x96\xbc\x0ew\xda\xa5\x03dk(\x89\xf1J\x80WWf\x006\xf39\xd6\x87M\x02\xd4\xe5S\x07\x99h\x9d\xd8\xf6t\xd7\xa9\x15\xb2E\xc5i\x19\x15\x8f\xb9\xc8\xae\x9fu\x81=n1\xa6\xda!\xb9y4\xe5P\\t9\xb4\xc8\x02\xbb\xb1i\xf5\xc0\xc5$\xcd')\xd2K\xdaJ\x08\xc5L\x00\x07@\xeat)x\xec\xbe&0\x05\xed\x83\xacQ7\x81\x0d\x01\xc3\x92\xd0iA\xb67\xc1\x86\x12\xf8\xa5\xe3\xb4\xd8\xf7\xd3b\x91\x17\x92\xe1\xb3m\xd0a\xff\x9c\xe6Q\xf1\xe8DH\x9a2\xa6\xa4\xe8a\xa9\xba\xbe\xc7j\xc5\xd3\xd9\xbd\xe4>\x12\xd3\x12\x7f\x9d\xac\x07){\x89\xf7\x13\x84\xb7$Yo !N4t\x03\x82\x88\x0b*h\x8ey\xfd\"\x98\x08BU\xb2_uMQ\x13\xb7a\x17\x9c\x84\xec\xe5=\x07\xb6=\x15\x0b\xfccY\xeci\x02\x01$\xdfV\xc5~/\x04@\xa4n\xed\x8coV^\xea\x16-\x96\x15C\xd9\x11G\xd2\x8b\xa4\xdb\x86\xa0\x9e\xf7e\xa1@\xd3\x93\x04[r\xe7Z\x08\xef\x04\xae\xd2\xd1[B\x84w\xe4\xce\xb6\x13\xff.0\xbe\x08N\xa0;\xc9s\x12\x88\xc5\xae\xd7\xbfW\xbaM\x956\x9e\x0cl\xe1y^\xbd\x92\xb3\xe0\x18QR\xe48\xee\xc5:\x8b\xc1\xaa\x1c?\xca\xfcb\xa8b\xcd\xff\xad\xa6\xcf\xb6\xbbg\xd5\xde^F\\\xd5`\x00\xd2\x9b\xd1\xc9\x08\xd5\xf5\xdd\xc0\x9c#\xf2\xefar{\xa0\x01\x11\xd1\"1`\x81x\xc5\x83<\x18\xc6g(\x80\xdccQ\x833\xf6I\xed\x82\xb6\x8a-\xea&\xa3\x81\xe3\x11`C\xfb\xe7#-\xe8\xc7\xe9\x93c\xd8\xe7\xf6\xacs\xcf\xadxn\xf5:\x83*`\xb0\xd42\x16b\xa0n\x07\x1f\xee\xad\xf6\xeb\xa9\x911\xb2\xc0O\x8bv\xbbBn\\\xa8xz'V\xef\x95\xeay]\xf7^Mo\x0e\xb5\x0fO\xdb\xb69\xc5U\x1d\xcc\\\xf8V0\xda-\xb0\xc7d\xeb3\x05\xec\xf4\x12\xb0\x9f\xe8\"<\x96b\xc7\xa8\x8e\xc5\x0b\x9e\xf1\x1d\x0e\xcdM\xd3\n$\x07\xb8\x8c]W\xf8\xedn\xc7\xa3\x94V|\xb4fgJ{\x88Q0\x99\xe6\xbb\xbe\n\xb0c\x0d \\\xb0j\xea\x07vK\x121m\xb4\xa2$\x81\x1f\xcc\x89\xe3\x0c\xa7;i\xb9\x10yN\xa6\x8a\xd7u\xa2\xfb\x8c\x144\xab\x81\xa5\x86\xe6\x9aC\x83j?qm6\x0d\xf6Y\xfd=\x85\xa5)\xb51N\x07u\xc6\xc3w\x8b}q\xa8\xf4\xba\xd9v\xff\xbd\xb7\x8e\x98v\x10\xab\xe7\xf4\xf2\xa9\x89\x0e3\xc6\xfa\xac\x0e\xd8}H\x02 @lk\xdb\xa9Aa\xc5\xbc\xcb(\xa0um\x81T-\xed\xf9\x05Xj\xc3\x8a)Q\xde\xc7$\xedy4\x88D\xc1\xc6\xa6m\\Y0#\x1a\xa9\x08\xb0}$\x83J/\xd7[\x88\x849C1a~\x18\xf4\xc4\xd6\x995\xb1p\xab\x84\x8c|\x0e'0>\x0fH\xdc\x13x\xbc\xdc\xe1\xd27M\xb9a\xa5\x82\xfc+\xefl\xf5I]e\x94\xb6W\x19!,+lc\xc4\xac\xa3\x96\xc3S\x11\xd6Nb\xd5\xdd\xb4\x9b\xed\xa8i\x17n\xfb\x82\x8dg\x87\xc6\xda\x12\xda\x94x\x8b\x1a\x84\x13P(\xee\x0f\xaeE\xb3\xea;\xfea\xc2\xa4\xfec\x12\xd2<\xe4\x99\x98\xb4IX\x95\x99\xf8\xd4\xdbY\x13\x00\xa9\x1f\xb7\xf4\xc0';^Q\x91\x01\xc2\xa0\xf0He\x00\xaeF$\xcb\xb5\x9dT\xe9\x8e\xbf\xad\xe8n?yH\xf9\xe3\xe4q\x9b\x86[K\xb3B\x13\x0b\xe18}\x92:o!\x9f\xf2\x0f\xeaYu/\xdc\n@\xda\xd2\xf2\xcb\"\xe2\x93;\xfeA\xfc\x17\xcf\x83*\x06\x9e\xd8\x86BO\xc7\x8d\x80\x86a_\xc0\x93\x0es\xb7\xd0\x95{\xdd\xa3\xcb\x16\xaa\x15\x84i\xd3`P\xf8\xf4\xfb%as\"\x7f\x0e\x930Ky^\xfd\xa2~\xff5)\xe2\xf8\xc0\xab_\xd4\xef\xbf&{\x9a\xf0_\xe0\xef\xbf&\x87\xb0\xe4<\xffE\xfd\xfekR\x15JK\xf3\xfbC2\xcf\"\x99\xda\x1f\xeb\xc18\xa1)\x1d/\x8a-T\xcf \"\xa7\xdeog\x8c\x08\x9c\xa0\x9c_\n\x1d.X\x11}\xc0\xaa\xce\xae\xb2\x99\x03\xae\xc2\x87\xb0,\xb2\xec5\x8f+\x08}\xc5{ K4\x97\xb9d\x19#\x97\x99\x00\x179\xc1\xb4\xb4\xb5\xff\xabW\xfb\xbbb\xdf\xab\x1c\xde\x07uwy\x8c\xf7%\xdc\xdb\x02K]\xd7\xed\xce\x8d\xeb\xba\x05\x80\x95\x1d{+\xf7\xb9\x1d{\x9f\xba\x9f\xd9\xb1\xf7\xdc]\xca\xe5\x8e\xd3\xa7\xa1\xd1\x115x\xef6\x1a\xa6\xe9'\xa30\n\x8e \xd5Jw\x0d\xd7>\x0f\xd6\x89\xb6\xfc1\x12IB~\xd6\n\x12y\x86j\xc0\xd9?\xfb_\xba}\xd1 \x1c\x110\x00\xdd\x1f\xb4[a\xb1?hS\x11\xf5\x05\xb9\xdd'L\x89)+\xc4\x82\xbc\x0e\xec>\x18h\xef#\x9f\x05\x98\xfaa@b?l\xcdvh\xc7\xb0\xebG\x92!\xfc\xa9\x8c\xa7,\xe1\xc9\xc0\xdbm\x9e\xf6\xa3\x19\x8e)Q>V^\xd2\xba<\xe2\x18\xb9\xb4\xc1\x8a\x14\xba\xa7\xac\xa0\x91{\xd2\x0c:\\\xe9$\x83\x9a\x9f\xce\xc4\xc4\xde\xa1\xc9\x94\x90\x7f;H\xba\x86J\xad\xae\xf27\x8feDs\xb8\x93\xbc;d4t\x10\x96\xd6\xf86\x98e\xc7\xf2\xf7\x1a\"fC\xa2\x80jG<\xfe~3\xc5\xb1\xb2\x1a\x0c\x84\xe8#\x0dY\xfa\xec\xc0\"\x92\xc8\xa9\xd0Z\xf0\x08\x85\x05\xcb\xaa\xe3\xea(\x06O)\xfd\xb5\x9b\xbd\xc85\xe8\x8ff\x8d\xc7\x0e\x9e\x8c\xea\xf4\xd2a\x8bZB>g<.J.\xefkwO&[\xd0\xab\xc8\xf0\xba\x97\xec\x81mS`l\xd2\x9cf\xea\x16xg\x90\xb2\x90\xad\x83\x8a\xbe-\x87\x9a\xa6\xc1\x87tw\xcczn\x1aJ3\xd69\xff)M\xa6\x01\xdd8\xc4R\xafIqzx\xabj\x80`\xcf\xbdV\xddS\xd3\xa0u\xe4\x0d\xf8s\x87\xeb{\x17\xdd3\xbd\xb0R'p\x84\xf9\xa8\x14\x02\xfe\xec\x03\x86\xab\x91\xd6\xb1\xad\xc2\xe5\xccxt\xd4RX\xcc\xda\x98\x01\xb1\x18\xfct\x05\x16\xb7\xe7\xb5\xf5 \xb4\x17\xb1Bf\xf6\x1cp \xa8\xba0\x0c\xbd \xd1A\x18@\xd6R\xa8\x0c\x12\xce\x87J\xdaxMm\x92\x81`\xcf?\xca\xe1t\x8b,\xd8S\xef\x7f\xdcg\nE\xc9\x161\x93Z\xe4\xd6(\x113eG\xda\xb2\x0fD\x0e@\xbf\xd6\xb5\x00\xd8GG2\xc2\xf2\xac\xb8\xc3\xd1d\xbaD\xa8\xa7\"\x91VD\xea\xcd41=\x1f\xa1\xfb\x0c\x8f\xc9\x19\x90\xfc\x11i\xc1}\x86\xfb\x00\xe0\x9e\x1d\xf6\x9dO\xfc\xfa\xd2,\xff\x8f\xf4\xe1\xe8\xd7x\x9e\xe2\xa0\x06\x0f\x98\xfa\xff\xa4\xd9\xf3Q\xe8\x86\x07\x95\x8e$\xe9\xa6\xc7\xa6\xe4?\xe9\xc3G\xa6\xd4\xec\xccX\xb6\x8f}S\xdey#\xbdn\xb4\x07\xd0 \x08\xae\x98\xef\xd2\xb5\xe0\xb9x\xe0\xa5%\xf9\xbd\x8c\xd3\x07\xae\x93\x8f\x95\x85\xd5\x81\x9f\xca\xae\xded\x01\xf5\xa2\x8a\xe8O\x80\xe9\xfb\x9b\xf4L\xce\x0e\xc8\xa9G$\x18\xd6\x9a\x1a\x97)\xde\xbd\x8fc\xd5\x81?\xec\x11\x891\x0d\xe6\x1b\x82\xe6\xb6\xa2\xa7\xa2\xe0p\xc1.\x97\xd6\xef\xe6\xc9\xb5\x0e\xe2L\x95\xa6\xa8\x95A\xcd\xc3\xbbq\xe71\xac\xca0\x84C0\xf9\x1e\x9e\xa3\x8a\xdd)\xa7X\xd2\xee\x96\xc4J\nk\x92\xc2\x11\x0e\xb7g\xd1\xdeN\x99\xc2\xe6\x0e\xc3-}\xea\xebE\xc0Nj=\x9cb\x16\x90\x13\x1c\x19\x0daRY\n\x0fxa5\xb1\xad%M\x04V\xd1u\x1d\x9d\x9f#Q\x0c7\x0eb3/v\xb8\xe0=g\x02Oku\xfc\xff\xbe\xe1\xf9j\xcd\xbd^\xf5\x1c\xb9\x10\xa8\xf7\x9c7\x8c\x07G\xdc\xda7\xe2\xccLH\x82,\x8d\"\xad\x04\x8bp\xa8l\x03\x8b|\x8c\x052\xad\x85\x8c\x85\x14`W\xc4\xf1\xb8M\x1f\x86\x0bj/\x90\x95\x16k\xb4W1\x9b\xa8\x04\xe7\xceP\xf9'g#2\xce \xa2\x16\x83\xcc\xac\x8553>\xb9\xdd'#\xce\x1a\x8eZ\xed\x16\xcc\xcb%\xd8\x83h\xd5&T\xc5\xb1\xc31\xc3\xd4\xe7\xa3\x11\xae\xe0\x8e\xf8\xe9\xaa\xaeG\x82\xe12y7\x85\x01#\xe0G\x08\x1a\xb3\x90<\xfb\x9d\x05\xea\x99S\xb6+t\xc6\xc5\x0f\xf9\xb1\x8b\xf5i\xbeS\xac\x92\xc8hV\xa7\\\xd5F-\xec*i\x19\xd7\x05\xb5\x1c\xab\x10\xd0\x81f\xfd\x95\x15\x15e\xe4\xfa\x85\xe3Mi\xc9i\xcd\xca:,\xb2\x9a\xef\x18\x8f\xeamY\xa7\xbb\xa4\x06\x19\xa2\xce\xd2\xfc\xae\xde\xf1\x8a\xd6{Z\xd2\x1dr\x1c\x7f\xf3\xe8\x063\x19\x0d\x0em\xaeo\xae\x93\x143\xa8L}\xb9\xc6\xa1x\xad\xed?y\x9b\xc7\xd9\xfa\x1aG\xb2)\xf7\x10\x96\xe9\xbe\xaa\x0f\xd5\x87\x8cC\xc5\xe8:\xc5\x9c\x91ke\xf7\xb39\\9\x9e\xeb\xbf'AM6\x87+m\x0e\xb4\x10\xd9bF\xae\xdf?\xab7\xd7\x8e\xe7\xde\xd2\x07Z\xf3pG\x91\xac\xf1:\xc5\x89\xf8\\\x95G\xbe\xb9v\x16W\xe8\x1aoE\xc2\xe6p\xf5b\xeax\xee\xc6\xff\xf2\xd5\xcbw/7~=\x9f\xa3Z$\x04\x9b@<\xdfl\x0eW\xcf\xae\x13\x9c2r\x92\xd7B\xb9\xfe\n[/$\\Nv\xc7\xacJ\xf7\x19'\x9f\xe8\xa7On,l\xbd\xb8\x96\xdfo\xac\x00W[N#Y\x08B\xe0\xca\xef\xea1\xc0a\x91\xb9\xfe\xf3\xf6\xe3\x8b\xb0\xc8\x92\xb28\xeee\xb6\xf6\xcd(Q\x95\xbd\x02\x15+\xa2\x0f\xaaRx4\xb3F\xae\xff\xe90\xeb\x8b\xaaT\xd9\xcb\x9b\x912\xad\xdc\xe7/\xb1ea\xcb\n\x9au\xca\x16\xc5\xbe\x82\x9e\x10\xf9\x9c\x169N\xd9\x02J\x8b\xa4*.\x8aJ<\xe8\x1e\xc33\x85\x8c\xf0]\xcc\x02\x94\xd8\xc2k\xd4\x99.\xdd\xb2\xbe\x0e\xce\x90-\xb1\x05\xdd\xb2PO\x82=\x8f@\xc4\xcc\xa84VUZH\xdew\xae\xd4S\x87/>\xbc\xa3 \x94\xb5\xa0\xc7\x16\xf2\x97\x01\xd8\x80\x186i\x03\xeb\xbc\xa1\x99\x9c*\x88\\\xdaYR\xdd\xf5\xaf\xf9\x00>\xc7\x91\xda\xb4K\xd7E\xcd\xackk\xa6\xa4&\xa3\xa6\x8cu~\xd6 S\x91\n\xa5\xe2\xb9=\xdd\xf24'\xe5\xaf\x02W\xcb}g-\x98\xb5\xee\xd4\xd4\x1aW@\xe1\xa8\xbbn$RJli\xd1O\xfd0\xc0\x9649\xf9\xea\x81f\x16\x9e\xb2\xba\x96\xa7Bl\xf8\x0d\x19\x01\xf3s6\xa2\xc7\x97\x86(\xeb\xb3\xdbX@E\xd67Hqb\xc3\xfe\x1b\xe1\x84\xc8\xfe0\x1c#|K\xe2\xce8E\xbb\x1bi\x1b\x81\xa4\xb3\xf9Z\xb7\x88\xffVED\x13#\xbd\xf5y0\x1c\xacI@\x19\xe6X\xe4\xf1\xc3\x005o\xfa\x9d\xda\x927F\xa7Rb\xc6\xbd\xd9\"\xfcF\xf51\x15|S;\x15E\xef\xee\x80q\x18\xbc\x04\x9a\xf2\xe6\x11\xe4\xd2\x05\x042\xd3\x01\xd7^f\x99w\x9e\xd4\xe6\xf6G|\xe6\xc0\xf9\xad\xb7\x8f\x18\xf2\xda J\x14\x1cC\x8d+_\xf6\x83\x0b\x0f\xc6C0\xaf\xbb\xeb\xd3B\xdb~\xa7\xafx\x03\x10\x05}\xb8\xb4\xb1l\xef\xd1s\x1d\xa3\x80\xba$M\x90\x12x\x97\xa7\xbd\xa6\xcd%\xe9\x87vF\x86o\x11\x98l^bS\xd4\xb1&\xed\x1bv\xc2z}\xc4\xee\x16\xfc<\x9d\xa1\x81h]\xf7\xa3\xa5\xa9`g\xa63l\x17U\xd9\xa1H\x1e.%\xa4`\xce\x16\xe1X\xfcR\xa4\xc2\xfc\xb5w\x9e\xea8}{\xe6\xc4~\x14\xe0\xc4\x8f\x02\x19\xc3\x18\x82\xf2A\x151\x89\xebZ\x96NH\x02\x8f\xdb\x8b\x15\xe5\xbd\x8a\x80S\x85\x1d\xb8\xed\xee\xd2\x81\x1eaK\x12?\x0ba\xed\x19t\xb3\xb4\xed\x1ds\x12\xefz\xd8\x9d]0\x88N\x88\xc3\x14\xbe\xe5\xd2\xd6M\x90\xc68cH\xac\xf8:i\xfb\x13\x8b\xaa4\xab\xbb5Y\xddi\xab\x03\xd9\xf65-=\"\x91\xe2-('\x16\x872\xf4\xf2\xc5\xbf\xf9\x03\xcd\xfeQf\"\x8f~\x96\x1f\x05\x97\xd9\xd5\"\x9a\xea\xf0u\x8ba\xb6\x0c[\x16\x1a\x04\x85\x95n\xffp 'w\xff\xbb\xc2\xb5\xe4\x93\xa5\xb9\x1b\x91\xa4\x1e-l\xd2[\xd7\x92\x0c\x85N} \x84\xde\x02zoiD\xf12\xcb\\\xcb@\x1a#G\x9f\x838\xce\xb4O\x9c\xe1\x1e\x83\\\x8a\xcb\xbc]\x05\xbc\x85\xa9&2\x86VH\xb6p\xdfh\xb7\xd3\xe5\xea\x8b\x85\xcf\x1d\xeeo\x03\xe4\xb3\xc0 \xbb#\x9a\x08\x872r{\x8f\x98\x19\xd1\x99\xa3\xd6\xc3\xf8\x9e\xe1\x92\xf5\x023\x1f\x98\xd3\x0b\xc5\x94;\xe1@\xe2dH\xa3\xd3w\x85#\xcd\xe5\x10\x1c\xc2&\\\x1f\xae|Y\xec\xf6\xc7\x8aGo\xab\x0f\x19\x87\x90\x1c\x17\xbf\xc2E\xdb\x08y\xd1B9\x1b\xbb\xd2\xfbX$\x1b\x0e\xc8m\x8c\xb0\x85\xc4n\x0e\xc2\xf1\xf0\x9abI\x193\x1c\x92\x92\xf9\xb4;)\x80;\xb1\xe5\x0d\xd2H99\xcb\xa8\x14\xe2\xcb=#\xce=\xab\xeb\xdc\xb1^\xa4qIw|\x02\x7fYQF\xbc$\x9f,?\x99\xc0\xfdf\xf0$/<\x13\x8f\xd77\x969\x0dlhI\x880#\xf7L\xa0\x8dA\x14p\xcc\x16\x8feZ I\x1c\x9cxU\xc0\x1c\xdd\xbd{\xd6\x0e\x10a\x18\x06 \x11\x0e\x1b1\xb6##\xd7\xefw\xb4L\xd2\xfc\x1a?0b\xfa\xa8\xbcw\xac\xd9\xdfg\x16r\xbc\xe9\xfe \xf9t\xfe\xeb\x7f\x05\xb3g\x16\xb6R\x0b\xe1G6\xe6/:\xb8\xa2\xc5\xf4\xc6X\x14{\x9e\xf3rx\x8bK/K\xc2\x07\x0b\xc9\xb0\x0c\x1aG/~2\xc0\xec\x89]\xd2\x7f\xc1\xa1I\xbbv$\xac\xebGP(\x85\xb6\xed$\x04 [Gh\x03\x0d\x9b\xc3P]\x87\xe0/#\xb2Xbm\x13\xe0Z/\xab\xcd\xc0\x9b%\x97M\xc1\xbc#\xfc\xa0pY\x82l\xfb\xc8\xf4\x15Z\x00\xbb\xdb\x05@\x00\xe6d\xbb\xd8\xa5\xf9\xcf\xf0\x12\x8b\x17\xfa$_\xbat#U\x97# \x16\xfd~T9eZd\x96\xe1\xd8(\x15#\xc3\xce=\xf1\x92\x99e\xb9\xc9\xf9\xad\xaer\x82\xc6C\xd2M\xa8\xbei\xce\x8c*%\xb2:\xfa\x890t\xe1@\xb7i\x86\x0e\xfb\xa0\x8a \xd9\x88\xb1\xec\xb8w>\x8e/|\x8007r\xd6\xd1I=,\x18\x0d\xef\x92\xb28\xe6\xd1\x97Y\xba'\x96\xda/sV#_1\x9f\x07\xb3\x10\x0f\xabV\x0fQG\x16\xff\xda\xe7'\xc8K\xa5\xa7`\xdd}\x88\x1e\\C\xbe\xa3O\xce\x12G\xfe*\x98;!\xb8L\xcc\x9cH:\xf7\xef\x9f,\xe4\xb2\xae\xceo\x98i,\xa6\xf9\xf6\x98\x84\xe0\xd9\xea)Ra\xb9\x9a\xd4X\xc8\xfb\xcc\xb5\xe4m\xb8\x10\xb6i\x051\xc2\x97\xeb\xcfn\xe2u<#\xcf\x91%\xa1\\\x9d=:\xc9\xac\x0d\xb5\x13\xce~\x02\x17\xfd%\xdc\xc3\x12yN[\xa9\xce;\xef\xc2\xf2\xa8\xadj\xf5\xca\xe8\xba\xa7\xe7\xf9UG!\xfb\xcc\xfaY^\xd7+\x8b!\xd7\xec\xc5X\xcd]\xe2\xf4\xac\xd7\x1f\xad\xb9=\xc5\xebf\xf4\xdb\xc1*\x89\x9c\xc4\x9c1\xba\x90\xdeCP\x93\xab\xdf\xbe\x01\xc0\xc41yTG\x8bVG\xe3z\xf1\x8aZ\xf4n \xf9<\x06\x86cyCx]K\xa4\xae.~#\x8a\xfb\x8c\x11v\x967\xc6W8-\xd1[\\p\x94\x0f\xdda\x9c\xde\xe9\xeb\x88$\xb6\xed\xdc-\xceh\x89\x83\xea\x9a\x83\xda\xb1\xab\x80\x13\x03\xfdqT\xd7\xcb6\xb8\xe0L\xc3\x97\xe0F\xc7\xa0 G8F3\x01\x96\xdd\x0c\xfemh \xa1\x0e\x89\xe0\xfe\xb5%0\xd0j+m\xd5U3\x11\x1c\x10\xe1Hv\xca\xb6!T\x95\ne\x13a\xab\xc8\xa2V\xc8\x82\xe0\xa8\x12\xa9\xab4\xcc<\xc8_\xd7\x9d\xdcT\xd7\xce \x17i/S\x1e|\xb0\xed\xb7\xd2\x8bX\xb5\xd9\x1au\x9a\xcd\xe2\x8a9Q{X\x8f\x90\x0c\xf4\xfa\x16\x82\x86\xea\x88T\xa1m\xf3\xba\x96\xf6\x14\x83\xd2\xdc\x0b\x95\xc8\x18\x19\xf2\"R7\xa5&\xe0\xe3xa&\x98m\xb7\xc3:\xeb\xb95\x92:2t\xe6\xa9\xf9\xb1\\Y\x17\xea\xdfM\xa6\xcf\xfe\x0f\x07\xe5\xccT\x08\xac[}pO\xe7!\x85\xe10]\x99/\x00\x88Z*s+\xff\xaa\xd8\xa7\xd6\xcar\xc3\xa6i\x1a\x1c\x1e\x0e\xdf\x1fw\x8c\x97\xee),\xb2\xe3.\x07?Sw\xba\xc4q\x9ae?\xa8\xb6\xc4k\xc6\x9f\xfeZ\x16\x8f\xfa\xf9\xed\xb6L\xf3;x\xebP\xfft\x89\xb34\xe7\xdf\xb4oEW\x81\xe4\x13\xe0a\xbf\xa59\\\xde\xf8\x98F\xc5#<\xfd\xfa-\\\x83'\x9e\x8ab\x07\x1eL\xe1\x01L\xed\x0f\xee\xc9\x8a\x05\xf8\x0b\xd0>\x1c`'X\x0d\x86Y\x1c9\x9a\x97\xd6\x9a\x9f\x0e\xec\x17\xfe{\xf0N\xb5\x14a\x9c\xe2\x0fc\x03\xa7Ca\x92ID\x01\x9d\xf2\xb7\x01\x04\xde7\xde\xc9\xd7\x0c\xd4R\x02\xc1\xc0\x07\xe9\xb4\xc6\xe0\x06\xac\xf6u\x1bt>\xb1\xa1\x97\xd8\xb6\x95\xf0\xcaJ\xf3IbD\xbct8IT\x88\xc2\xe9\nG\x08y\xdcM}\x16\xb8N\xdc\x86\xbf5\"\xe2\x92\x18\x10\xcf\x17\x8af\x85H\x1al:\xdc_\x05\xb3\x15\xba\xe2\xfe\xf3`f\xe0\x11\x8d\xef\x84\xdc\x1a\x13+\x07\x00\xb0\x10\x96'!\xa1m\x87\x8ah\xe8OS\xf0\x02\x84b\x12Z\xe4\xf0\xc3\x19\x01\xa2w.> x\x96{} 6jm\x80\x8eN|\xb2 ^\x95\xcf\x02b\xa5\xf9\x96\x97)\x18h\xd8\xb6u\x18\xcc\x07\x81S\xeaD\x85\xe1\x15\x8b\xdc\x96\x0c[Y\x17IX\x1e\x01\x88\xcb+\xfc\x1f\xac\xab\x82\x84?\xb2\xba\xfd%5Wr\x89\xbb\xfe\xb6\x912\x15)\x89\x10`\xabrG3\x15E\x13x\x96W\xf2\xce\xaaW\x0c\x88\x81\xa5l\x88B\xcf\x89\xfbtA\x1a\xe4.\xa5]\xce\xf7\xc7\x1d/\xd3\xd0\x89\x91\x17\xd7\xf5\xd2\xe5\xc8\xe5\x866\xd3\xb7\xa4HjaE9\x833\xad\xa31<2\xc43\xa6)u\xe8\xfd\xaa\x08\xdcy\xc8?d\xdb\xd2\xb9\xc9\xa0\xc8\x9e\xe4\xb6\x1d\x8a\xbf4n\x92i\xab\xfbV\xcfE\x83\xdc\xf6\xb9u\xc4;\x8c\xf4\x03\x16\x97D\xb6\x0d\x94]/(0s!\x8eG\x98#w\xa9\x1d\x00\xf4,\xf4\xe4\x98\x0f\xcc\xb9[\x8c\x88t\x839\xd4\xa0\xd5\x8d\xf8\xd4r\xd2i.\x90\xe4\\3\xd4O\x0c\xfbT\xb3_2\xf2b`\x04Pk\xfdn\xa4\xc4eYXKZ\x96\x85\x95\xf4\xa58\xa7s\xf5q\xbb\x90t&\x96R\xdaH\xb8\xe6\xd1\x87f\x04\xa4\x91\xd5\xa9\x11\x08\xe1,\xd4\xb6\x17\x1an\xd6\xae\x1f\x06\xeb\xcf\x94\x11\x16\xf7\xe9\xec'?\nD\xf5\xb1\x1f\x05u\x1d\xfb\xd1\xfc9\xfc.\x0d\xf1\xa6\xc1G\xd6\xdd\xee\xea\x0cz&\xf66\xf9+CC\xc3\x8d\xe1\x8e\xbe|\xae9\xd0\x05\x8a\x81\x08\xd2\xadB\xf9\xeb\x00\xf1:x\x81\xe4\x03y\x17\xca\x8b+\x12\x1f\xfb\xccO\x82\xa0\x05\x10\xf1&Q\xb0\x1eJ\xac\xf9\xaf\x16Y\x87\x9e\xa1 \xc4p\xe0\xa0\xd1k\x83\xe9h\x88b\xd4\xe0\xc3\xb6x\x1cQ\x1e\xfcM\x19-\xc0\xd9\xda6\x8d\xc6\x14\x0c*\x0fjpU$I6\x16\x12\xd5bE\x91q\x9a\x9b!\xa7U\xd0i\xd1\xb0\xbaMj!\x1a\xd0\xcfCk\x96\xb7\xb2\x11O^\x9c\x8dt9\xfd*\x8b6\xfd\x8b_\xbe\xebI\x10\xa6}\xdehYiK\x92Gu\x13\x01x'\xcbJ\xf2\x88D\xf2\xf1\x08\x97\xb8k(V\x041\x0c<\xc1\xc2 r\xd8\xe0\xf0X\x9e\x1f\x00\xcb\xb1\xed%\xd4\xb7\x9d\xec|\xc6\x05W\x92\xf0J\x9a\xc5*{#\xb3L\x17\xa4\xa7\xfd\xde\xe0\xf28rC\x15\x0e\x7f\xaf1\x99R\x1c\x08#\xe6\\,\xa2c \x1e\x7f^\xaef\xcd7f0\xd0F$\xc3\xdcW\x14/\xf1j\xfc\x1br\xb5\xe5I\xf1H\x1c=\x95\xf3n\xca\xd1\x15\x9buo\xfdJ\x0e\x15\xdf\xab\x83x3\xa9;\x90\x94\x91]t\xfd\xeaD\x15b\xd2\x1dx\xe5\x85m\xd4\xf0K3\xd9~\x97W:5\xf8\x0cP\x0dx4\xbfa\xb3>rj\x9d\x05\x06\xd4R-\xc80\xde\x84\xe8\xb5O\xe5\x92\xd4\xb5|\xd7R\x85d\xc2\xcc4\x9d\xd3s\x98FLr\xdc2\x1d\x0b\xe9I\x88\"\xf4X\x15\x82\xebb\x1es\x97\xc8\xed73\xa4\x9fp\xb8\xf8\x04\xd3\xd9\xd6\x7f\x96\x02\xb7\xc3\xf7z\xe7\x8ct\xcf\xe0\x96T\xb9>S\xa4\x12Q\x87'{\xdd\x17|\xf9\xe3\x0cn\xfd\xac\x86\xbd\x06\xa6\xfd\xb1i\x17F\xad_\x1b\xd7\x82\x8c$\xbf\xe6q\x05\xee\x8b\xbd\xd1\xaa\x1e\x9b\"\x00$\xf4\x0c\x91\xc6\x1a\xd7\xbe\xaf\x80CN\x82r\xd3r\xcc6\x826\x18\xb0\xcb\xc8\xb7\xc5\xe7s\xd0\x1d\x85\xc5\xc1\xa1W\xf0\xf8\xe3\xb7\xe8\xfa9\xd4\x1c?\x913\xa0\xc3\xedJ\x90\x93\xba\xb5\x83\xe17\x0c\x7f\xcfd\x90\\\x89\xf7k\x81\x92k\x81\x88\xe1\x96\x8e\xa1\xe6\xcfs\x95\xf2\xafFZQ(\xcf\xf5:m\xe1\x8f\x8c\\w\x11\xa7\x9f]\xe3\xbf3\xe2\xff\x93\x05\xf8'FN\xd6\x95\xe5\xfa}\xea\xfb`\xdcY#\x8dk\x05\xe2\x96'\x8f\x11 \x15\xbe\xe4\xe4\x87V{\x86c\xc1\xcbr\xff\xd3`\x80/i\x87/qB\x06\x9f\xa42m\n\x82\xcd,B\xb6\xad+\x94\xe0\x1f*\xf8A\x08o\xc9\n\xa7\xe49P\xfa\xc4\xb6\x13\xff\xd3@\x14S\xa6\xcf\xe2\x15s\x81\xf9A\xbf1\x8b\xeaz\xb5\x8e\x8a\xc9\x96l\xeb\xdaZ|n\xe1\xe4\x9al\xb1\x86K]/Nf1R\xba\xc4\xad\x10\xc7\xb6zl\xd7\x91\xbaJ|k\xdb\xf3y\xda\xdd\xf4\xa0\x0e\x17%\x11\x99%u-\xdaZ\xe2P\x11\x0b\x1c\x02\x01\x11\x02\x99\x97\xccz\x82\x99;\x13\x7f\x11\x0e\x9b\xc08\xdf|\xcb:zo\\Of\x10\x95\xd7\xda\x1b\xafA\xf8\xb5@\x0c\xe0\xd9\xdfiz\xde\xf5\xbdQ${\xa7\x0e\xa3\xa8\xd4h3\xa9cT\xcc\x1cy>g($\x82\x9b\xc3\xdc\xd7\xea\xc0Y\x18\x10\xeew\x8a\xbd0 \xb4\x15\x9c\x84p\xb2P2>\xd1\x9a|\xc1Yu\xdd\xf8G\xab\xb2k9M\xcc\x89\xf3\x13\x03\xd1\xc9\x0f\x90\x8e\xc2\xf2\x13\xf3\xad++@pGmg\xce\xb0N@\xf99\x93W\xc8p?\x0e$\xf6\x0f\x05c\xd5j\xd5\x0cM\xee?\xc7O\x86u8Xie\xb4#\x10[U\x8bu\xfb\x9er\xe0\xad`\x0e\xef\xdb\xdb\x1a\xac\xf8Il4\x88\x0c\x0e\x9b\xa5\xae\xc1\x88\xa6\x7fM\x02\xdc\xf5\x80%\x82\xdf.\x8e9|\x8c\xc0DE\xbf\xc0\xbdm[\xe3\x02\x03l\xbe\x98q\xe6\xbb2u\x9d\n.\x0bw)\xb3\x19\xce\x16\xf2\xc6U\x13\x1c\xc6\xd2\xbaB\xf39\xeen\x7f\x80\xae\xb6\xd6`\xdb\xfe\x8d\np\x0f\xdb\x99\xf1\xa3\x16\x19\xd3|\xc2\xeaZ\xc9\x8dp\xa0a\xdbN\xb8(\x1ex\x19g\xc5#\xf1\x8b\xf6\x19w\x8f\xbf\x18\xcf\xff\n\xf0\xedH\x80x|GZe\xdd\xad\xd7N\xbd\xa9]\xac\xebJ\x08\xe2\xad\xa2\xcf\xbd\xc5J\x94\x12\x85\xee\xb4.\xce\x14\xef\xa4\xdeH\xf4\xb1\xe8t\x8d=\xf1\x0b\x0cIu\xdf _;\x96\xf6\x08dlj\x8d|]y\x7f\x19\x98\xa36\xbf\xac\xcc/\xff2\xbf<\x0f\x1a\xa5kT\xd7\x87\x81\x86\x99\x89]\xf8}\xeb\x90\x01z-u\x18\x0f\x9f\x00\xbdY\x92\x0e\x80\xc2\x00sB\x88\xb3\xf7D\xaf\xb9\xe5Z\x12d\xa1\x9c|\x967\x92N\xef\x8d\xc0#\xf7~\xf4\xffg\xee\xdb\x9e\xdc\xb6\xd1=\xdf\xcf_!\xe1xY\x84\x85V\xab\x9d\xd4\xd6Y*07q\x9c\xcb\x1c{\x92\x8c\x9d\x9d\xcc\xc8\x9c\x14\x08\x82\x12\xd5jJ\x16%u;M\xfd\xef[\xf8>\xdcH\xb1\x9d=\x0f[u\x1e\xbaE\x82 \x88;\xbe\xfb/\xa3r[\x1f\xaa\xfa\xa8\xe6;>\x9e\x9d\xef\x16E\xc6?F\xd1G\xe0\xe5\xac\x97\xa29b\xc67s\xe7Z\xc3\xdf\xe4m\xabOh&y\xa0\x14\\\xe3\xb8\xe9\xb3z\xb2v\x0c\xd0\x15\xd2F\xd7>E\x13\x06%\xbf\xb9*@\xe5R\xf1\xf5\xf4\xa0\xc9(o}m\x84\x116}\xb1\xcc\xa6\xfbc\x1d\x97\x1e\xf0#\x04\xf0\x15l\xb1f%\xd3\xa3p\xf3\xb2\x8c\xa2*\x95I\xbc\xea\x80\x94\xe8,\x19\xc5HHk\xbe\x9aZ\xa8\x10\x8cy(L\\\xc3\xd0\xb33\xa7l\xbb;\x04i\xe3\x19{4\x1eD\xaf\x81\x16N\x1e\xcfg&\xa9\x0b\x12\xe5Q\x1f\x93\xdc%\xfe\x84\\[\"\x99\xeb\x9a\xc4u\x9e\xed\x8fD\xba\xaea\xd8\xe2d\x91\xb1\x80\xc0\xf4$u\xa0\xfb3R\x83X\xb0\xb5f\x0e\x1b\x10\x07\xe0\xe5\xb4SQ 4\xcc\x03$\xe3]?\xba\x9e\x07\xef\xaa\x82\xb2\x02\xc3\xf3\x04\x1f\xb4D\xef\x8c\x15\xa8:\xb11\xc0\x01\x97\x8fg\xce:\xdd\x0d\xa3\xc4a\xbc <\x99/\x87\x89\xe5\x19MV\x06\xea\xb8\x93jXT}T\xae1J\x1d|\xeb\xefy|;\xd8n\xda%\x9d~\xc9\x1d\xed\xb4f\x82\xd9w< \xe5\x98T0\xda\xbde\xbf\xe6lM\xbb\xa8\xaf\xf63\xc0\xb7GQxk\xe3\xa7\xc3+\xe5\x03\x04\x9d\xda\xc7n\xfaT\xcc\xce5QWw\xc9\x9a!(\x90)\x01n4\xe1\x01\x0dClg\xf3\xc8\xde\x1b\xf0e\x93\xaa\xafm\xa3-\xac\xaf\x81\x896\xa9\xfa\xda\xadw\x93\x86w\xf4\\O\xbf\xae\xab;\x98p\xde\x9d\xf9\xb7\x9c=\xc2@]\xc4\x8f\xe8Bx\xd3\xd4\xc0\xfa \xb9\x9a\x08ME:\xe1\xe8<4\xcf\x9dA\xb4\xa1\x9e\xdb\xaa\xe4z\xd7c\x7f\x83\x8d\x0d\xfe\x03w\x02W\x0e\x18+G\x07\xaa\xc1\x80\x96y\xfaK\xee2\n\x9a\xfc\x92\xe3\xf4\x15\x06o\xaa\xd9)U\\\x84M\xc3E#\xa2h\x00\x8c.\\\xf8\x82&\x8f\xb6G\x13\xd9\xb6c\x19E9\xea\x15\x82>\x88\"\xe1\x97\xaf`\xb8\xac\x12\xcc\x9a\x9b(\xd0\xdf\xf95\x14Ey\x80+o_\xe40Q\xb6e\x99\xce\x12\xabir\xb5\xf2\xd9R\x7f\x99\xf8K}R \x97\xac\x9b\xdb\xa4\xc1\xf5\xc2\xe7\xca\x92 \xdd\xbb\xab\x9a :\x85\xa5\xe7\xcd\x05\xe8P\xc0f\xd3\xdc#Q_L\xb7\x9b\x82\x17n\xa21\x7f\xd9\x05F\x0b\xc3a\xebwh\x14\xc1\xaf\x97W\xe9\xc2\xa0\xe8\x0b\xb0,\x93N\xcfz\x0f\xea\x08\xc1KQ\xa8\xf7\xdb\x01\xcdV(\xcb3.Z\xef(\x90\xbeN\xef\xcbf\x96\x0e\xd2\x14\x86>\x00a\xe2\xab\xd8\xa9\x91\xf33C]\xca\x99\x99gO\xe9\xd0x\x9f\xde\x13\x08\x17\x07\x9d\x8b\xf0\x03=\xa88<,\x7f3\"\xed\xee,c%\x9d\xc7\xca\xc6U\x80\x0c\xa4\xac\xea\xaaY\x81\xea(\x87\x18d\x80\x89\xee\xec@\xa6\xf8\x9c/\x99j\xdb\xd2\x0f\xd9M\x80\xa6\xb84\xd2l\xecY\x93\x89-i\x7f_\xef\xac\x8a\x0by\x1d\xc7\x10isK\xa6 \"]\x1eKW\x9bA\xb8/\x8c\x91\x13B~\xe5Q\x04x\xec7F\x8ay\x01R6\x1c;\x07+\x01\xd6-F\xde\x16E]p0\xe8y\xd8c\x1b\x08\x14\xe1D\xc2x -\xc1oV\xff\x87\xaaGQ\x11/\xd1G\xcfbT@\x8c\x88\xe5e\xc6\x9f\x9d\xc5\x8a\x7f \x8f4\xef\x80\x7fu5\xa7\xa5~Eo\xe9&\xa24\x1a\xc1@M\xe1\x11\xd4u\xcc\xb9\xa6\xe6 A\xcf.\x1cT f}7\xac\xb4\x08\x1f\x8a\xddP:\x8fs\xbd\xdb\xd0'`\xe4p\xec\x07\x05oc\x1b\xbd\xdb\xe2\xab}\xaeW\x99\x0c{KSf\x0b\xdb\xb3$c*\xb8\xc5\x8e\xce\xba=]\xa4\x85?\xfb\x81r\xb5\xb3\x12\x10\xd2\xc3j\xc3\xf0b\x18^\xe8Y\xfc\x0d\\\x8a\xc6z\x82\xf8n\xcd\xb1[s\xecV\xe3\xd5\xaa{3\xcf\xdc\\\x17`\x0b\x93\x87\xbd\xa9Kq=\x99CO\xa2lg6_\xbe\xcc\xc1\x97\xb1X\xe4Y\x14\xe9\xff\xa6\xb2\x9d\x9b`w\xb2\x13\xde6\xca\x81_\xa2\xde\xd8\xb0\x9b\x0c\x19J\x86\xacf_{|2\x88\x82e\xbd\xc8\xb3\xb9\xf9\x0d\x8f\xa3\x8en\x08\x05\xe2m;\xa4\xb0\x92\xc3\x16\xe6\xb8\xc0\xedF\xf6\x1e\x1c\xfaf\x94a\xc1\xa1\xd7N\xb3\xa9\n\xf5\xed\xf6\xbeN\xde\xe7\x86 \xa6\x0c\x12\x7f\xddA\x12\xd4\xdf$\xbdGU\x9aN6\xcd\xa4L\xef\xbc?\xd6\xde\xe4\x06\xcb8C\xfaO\xc7C\xf0\x00J\xc2\x07\xa6 \xff\xcc\x14w\xfes\xe7\x9e\xcbm\xdd\xb62\xb7\x9b44\x0fg#_d\x96\xd4\x92\xb7\xfdm\x17\\[\x99tS\x17\xe6\x84\x17\x13\xce\xf3\xaf\xa4\x9bw\x93 \x15\\B \xe3\xd8\xf8B\xe0\xc2\x95nZ]]\xb1\x1b:\x97Nhd\xe4\xd3\x00\x12\xe1\x05\x91\x01\xe5\xd7\x0bG\x88\x95\xb0t\x8a\xfe\x8eU6\x88\xfd!\xa6\x89\xcf\xa1\x8b4\x05AD\xc8\x93\xd8\xf0\x9b/\x98\xcf\x1d\xb6\xf4m\xde\xb6\xf1\xdb\x9c7\xea\xf0\xa3\xc9\x1c\xbb.\xe9\x16Bm\xa9\xba\xd6a\x19`\xb9\xe2\xde~\x9bS\xf6\x16}qm~\xa0\x1d\xf8c\xb3\xd9\xde'\xffs6c\xa5h\x0e\xc9\x8b\xd9\xccG\x88\xfar63gv\xa16\xe2\xd3S \x89\xba\xb8\x0e\x9d\"\xb2\xb6\x15\xe0\xfbk\x80ZYpH\x04\x06\x12\xc1Q\x15\xc8\x82s&\x00\xacp\xa8=6\x8fqn\xefO\x8e'\xc1\x0fY~\xf9\x08Cx\x81u_\xfey\x1bu\xd4\xd1\x11J\xe7&B\x93\x0f\xc9la\x0e\x7f\xaa9A0\x81\x93\xd8\x1c\x15\xbb\xd5\x949\xc6\xf3Q\x05\x97&\xce\x1d \x1bZ \x02\xbd\xb3B\xb6o]\x82t\x0f\xd9g\xdab\xbe\xc1\xc9\x81\xd8\xe0\x9b\x06\xc5\x91\xddN\xe1\xe2\xff\xd8\xe7\xdc\xd5\xc8b\x1e\xfe#g\xff\xcc\xd9\xb3\x9c\x1b\xa06q8\x98\xf0r\xf3\x0eu\xa6\xd3?k\xa3P\xc3\xabO\x1b\x02\xf8\xf0UC\x87\xdb\xe0AV\x071\xaf\x823\xb2\x83S|Q\xaf\xae\x94\xc4Kw\xe7\xdeb\xaeDC\xb92\x8a^\x80\x12\xc5\xd6\xc1l\xc8\x9d@^\x9c\xf3_\xd3\x1a\xf8Pk\xf7\x00\x11\x1bJ\xc4\x85q\xb1\x81\xda6\xcey\xde\x8b!\xa3\xb9w\xe8PgC\x15w\xf0\xf0\xf4a`]\xa8\xd2\x7f\xe6\xc9?\xf2\xd0pJ\xa6\x85\xb7\xb1*\xac\xc6\x94\xc7\x8a\x17S\x0b\xb0LS\x85p\xffeU\x17\xf0-\xd4R\x19K]\xf4n\x02\xd3(\xf36\x16\xda\xb8BC[\xbc\xc2\xd9\x9e\x99\x82E\x17\xdf3grB\xf4\x021f;\x9d\xf1\x81\xda\xfc\xdb\x13\xe3\xdc\x11\xda\xf1\x19+y\xaei_\x8b9gp\xbd{`\xfa\x06\xd6\x9c\x97\x0b5\x99dTw\xa6\x1e\x86\xef\xaa\x07`&%{\xa2/!\x9a\x0b\x08\xef\xc67\x88G\xd2\x0d\x9c&5\x0f`G%\xc1\x98\xe0==\xaa\xb12\x1d\x87\xeb'\x8a\xcc\xaaBt\xe7n\xdc:\xb3\x16-Y`\x16\x99\xb3y\x18\x84Z5\xf0\xd8v\xf9\xa2\xb7\x06\xd8d\xfd3\xef+vY\x08i\x8f1,\xd3^\xf7K\x9a\xf4\xbe#\x19\xf8D\xba\x98\xc6\x97\xfd\x85\x88\xb8f\x1c\xae?\xdcO\xae\x97t\x90\xcey\x96\x1b\x13@7\xcf\xe6\x90\xd4\xe5\xbf\xbd\x19\xa2\xe3\x825Y\x8co3|A9b_\x9aw\xd2\xde\xb2Ap0S\xbfq\x05\xee\x84\x0b?i\xe1\x18\xcc\xfa\x1b\x98y\x9a<\x92r\xbb' Y\x1d\xee6\xdfm\xf7\x84\x11\xb9\x11MC\x12\xfc\xd5\x13\x8d 2\xcb\xd3\xdb\x1d[\x0eoxK\xdc\xf0\x96\xb8\xe1-\xed\x86W\xf2\x1bt\x02\x1dw\xb62\xd04\xe4\xc1j\xd3#\x9f\x03\x8a\xb4\xb7\xb5\x01\xab\x7fo\x1a\xa6\xfc\xa6\xa2\xc2M\xa5\xe0\xaa\xb3\xa9\x14\x89\x00\x83\xd6D\xf9\xadM\xf9\xadMg\xf7[\x1bf\xc6F\xdb\xc5*r\xb4\xa0\xbe0@qKm%\x9ap\xa9\x89\x1c\x8cr m\xdb\xdf\xadi\x9e\xd7\xd1\xb4\xad\x98\xae\xf6\xaaL\xc5\xd4\x15}us6\x81\xab\x833\x1b\xb6\xee\xc0\x04\xc3\x1e\xe5\xc3\x860\x80\xb5b\x0d.\x025r\xde\xb1\xc3\x08\xef\\\x89P\x07\xd8\xbf\xbb<\x89\xa9\x1dad\xafD\xf1S\xbd\xf9D\x18\xb9\x13\x0fo`\xa6\xea\xe9\xa26\x1b\xe3\xaad\xee~6\xcalF\xf6\xdb\xfbw;Q\xeb\xf4\xed\xc6\\\x1d\x1b\xf5V\xec\x08#\xe0\xc7\xfd\x0d\xbaU0\xebV\xf1\xba\xa80\x16g\xc6:'\xb2\x9d\x130\xef\xbb\xd1L\x80\x91\xb3\xc1d%\xbf^|8|\xd8\x7f\xa8?\x94\xd9\xf5\xb2GL\x14\xc5+=\xa9\x87L\xba|@\xc9K\x03M\x11E\x82U|\xc6\xd6\xfd0.=\xb9\xddg\xc2`h\x8e\xc4\xd8\xf6\xd9j\xc4\"\xe0V\x8d\x99\x9c[t\xd4\x84\xbdXQd7A\xaa\xd1\xc5K\xcd\xe6\xeb\x97\xd5\xbcB \xb4\x89\xc0[e\xac\xe0\x18\xe4\"\xd0/K_n\x1a\x93\x11\x99\x04 \x132\"\xd4\x07\x83\x91\x0c\x8cP\xf5?\xfaX\x06\xf1\xd3r\x04\xf8+\xbc\xb1\xf9\x88L\xf0\xed\xaff\x00\xa0\xce\xf1n\xbe\xd4l\xd1\xbe\xba\x8b\x0b\xca\x82\x0f\xe1N\x10\xd6\x85/\xbb!!\xcc\x9e\xf7\xff2F`\xfb\xdc\xdb6\xdb\xf6\xff\xf7\xc8\x05\xf5\xfbo=xO\x8c\x1d\xde\x0e\x8d\xe0K>\xa3\x05/\\I\xee 3#\n\x81\xdapL\x13B\xfe\x8b\xc3\x8a,z\x7fX\x03\x8b'3XV\xf8w!\xac\xc8\xc3p4\\\xa69\x8a$\xfdB\xa2a\x90\x9dn\x9a!A\xba:\x06W\x0b\xe9\x077\xa8egpeop5\x01\x95\xd3sh\x81\xda\x89\xcf\xc4\xa5\x9d\xb0\xa8\xa20\xe5\x03W\xd0\x99\x00\x06\xe8\x88\x97\x8bB\x8f\x8e\xd2G\x08~>\xa7\xa9\xea4&\xa7\x89\xf2\xcd\xcdQ_\x1bK\xcd%t\x84;\x18\xf2\xb4[\xdf(z\xe3\x0c1\x19\xf9\xfdw\xf7\xe0\xf7\xdfI\x7f\xde\xf6\xeey\xf7\xb6m\x05\x92\x80\x84$\xa1`\xb9[&\x85\xb9\x0ea\xb3L{:k\xd9\xaby\xf5$\x130\xc9.CdY\xed^\x10\xa8n!\xb3\x8e\xcd\xcc\x88Ll\xf2\xe7\xd7\x83\x9b\xef9\xccs\xa3p\x9e\xcd\xad\xe6\xd9\x12z\xb9\xe4\xd7\x1f\xf6\xfdC\xe3$6O\xedE.\xe89\xb8E\xf5\x03VYR\x94\xf7&\xdf\x90\xf4\xd4L\x195\xbf\x88\xc0\x07\xc6\x02E\xda\x9d\x90v\xca\x9e\xc4&\xa64\x11\x8e\xefR\x1c\x1c\xddz\xca\x1e\x95\xaa\x89~\xe0\x8d\x10\x8c/%\xea\"\xd5P\x88F\x1b=\x8d\x90DL\x089S\xca4mv\x12\x9b\xc0\xe8\xf9\x80\xf0\x90\xfd\xe4z0\xb2o\x06V\xb4\x86Z\xcb\x03j-\xf7\xd3S1\x02\\ x/AY\xc8\xa4\xb8\x1d\xd5\x87G\x0b+\xa3\x06j\xa2>[\x8d\xe5e5b\xc9s\x98\xd4\xbe\x124\x95I,\xb92\xd2\x94A\xcf\x0d;\xd9r\xc9\x08\xb1\xe8\x10R\xf7\x9b\xb4\x9e.\xc1Tr^\x86\xba\xbb\x9f0g\xee\xb1\xd5\xb62\xa1\x95\xf3\x18\xac\x90\xcd\x96lBh\n\x00\xaeFz\xee\xb2\xe42\x0c\\\xca\x855\xf8\x06\x15j\x97\x06,\xb9\x91I]\x19\x03#a\xe2G\xcd^*\xb6\xe4e\xaa+\x90\x00~f\x99\xaa\xc9MbE\xf6\xfa\xa0}\xa9\xd2UR\xa6*\x99\xcdW\xe1\xf9V\xe8\xc3m\x1c\x8f\xbd\x08*\x8a*\xb4\x99\x8a;\xd2\xa7\xd4\x0b\x9f\x9c\xec\xa0\x17\xe2\xdc>'\x94\xb6m'N\xa1}\xd2a\x93\xc3\x1c\x8c\xd8\x00\xf3\xc4\x06V\xe5z\xf5\xe1Jb\xa5\xf7a7\xb0\x95\xb9;\xca\x96\x17.R\x1d\xe1\x82\xefQ\x8c\x1df\xb1\xa2\xf30x\x94\xd9\xf2\x97WW\xb4\xe0j\xb1\xccX\\x\x9a\xde\x07\xc3-\xcc\x84+a\xc3\x02\xd5\xd7xF\xc3\x88I\xbdA\xe3W7\x94\x95\xe7s\x87v7\xc28/%\xec\xd1\xd4\x9dE\x9b]\xb2\xfeALD\xef\xe3\x93\xba\xc8\xdbA}\xc1\xe4\x0b\xbb\x10\xf6X\x07\xf1\xe0\xe5\x92\xc0\xc8t\xbf\x08\x81n\x9e\xdcz.\"\xdb\x9be\x90\x92mM\x12+N\xa4\xbe\xc1$\xdf\x1c\xf7#\x80\xf1\x19\x19l\x9f\x91\x05\xf5\x19m\xb6\xa2\x18\xedUS\xfd\xa1Fh\xc7>B\xf0\xb8\x11\x80\xd2\x8d\x8a|\x83\x17\x00\xaeTl\xefk\xbc:\xee\xf0W\x1f\xc5#\x87\xc74\xb2\x10L#\x0f\xd74\xf2\x10M#\xb9\x12\xf5R\x8d\x0czCs\xcc\xef\xaa\xc3\xe8V}\x82ro\xd5\xa7\xdd^5\x8d\xbe8\xeeFj\xbf\xdf\xeeG\x12\xc1Z\xefT}\xecbnv\xc6c@\xdd\xe3\xc53\x17R\x84\x19RI \xe16Q\x15\xa5\x8583\xa0\x1c9\xbd\x88\xe6\xbb\xd2\x0d\x1c\x9e\x07\xf0\xaao\xb1\x1et\xdf\xe88\x07Pp\x00\x8bzJ\x82d\xeb#\x0c\xa8\x1d\x93\xf4\xcc\x8e\xf5\xc5+\xbd\x17\xca\xd2\xbdA=\x82\xe1\x9f\xa8\xec\xa1\xd9V\xf7~\xac\x9fx\xcb\xbds3\xc0P\xa4\xc1\xe7\xc9\xf3\xe7\xc4t\x9eN\xc8\x99&\xe9\x9f?'\xba \x86~\x90\xd2\xea\x7fX\xa1I\x89\xf4z^O\xc1\x8f\xf4/\xef~\xfa\xeb\xd0L\xd7\xe9\x98#\xd6\x87,\xe8P\xe0\xf6\xb7\xb7o.\xd5\xe6LB:\x85\x13\x96\x19\x8f\xf3\xb6\xcd\x87\xc1\x04\x08\x14\xb9\x879\xec\x8c\x9eA\xc7\x0cI1\xf9\xb1>\x89MU\x8c~{\xfb&\xd1\xe4\x1ee9z\\(\xc9\xaf\xff}\xfa\xfc\xd95+%\xbf\x8e\x17i\x94\xd1\xdf\xf9\xe2_Q\xf6\xfc\x9a-%\xbf\xfeW<}\x9e\xd2d1\xfap\xc8\x9e\xc7\x8b\x7fi\x9e>{N\x9f]/\xef\xd8J\xa2HN\xe4\xdb\xe3\xa1\x15\xbb\x9d\xfe\xbbj\x0e\xdb\xbdX\xaav:\xb9\x82\xc9\xdcT\xdb\xba-\xab\x8dj\xf7\xaai\xef\xabb\xa9\x0e4yv\xcd*\xf3\xfa\xf7\xaf\xdf\xb7?\xbc\xfe\xfa[\xfa\xec\x9a\xadu\xda\x87\xeb\x0f\xd7\xd7\xec\x16\x1e/>\xdcO'W\xd9$\xa1q\x9a\xe8\x07\x00 \xf3\xe1:\xfd\xf7\xec\xf9\xffni\x8c\xd7I\xf6\\?O\xe2\x0f\xc5\x84\xb6\xb4\xa5\xd7l#\xf9\xe3\x99\xdd\xc1\xffZr\xf2\xfc\x9aX#|\xf2\x9cP\xb6\x95\\L7[ \x164 \x05b;\xc9o%\x1a#oe\x97\\AV\xc1\xce\x85\xd1G\x19L\x1f\xcf\xa2\xea\x89\xfc\x04\x1eV\xcer\xae\xbf;7\xe2:\x14\x83w?\xd2\xe5K\xfa\xdc\xb1\xa4\x96s\xb42q2\x01C\xd9\xc5,Kc\xcd6\xda\x801\x00\x16\xc1P\x08.\xc0\xc4y\x91QgL%)M\xfa\xcf\xe0\x90\x95\xa1\xb1\xed^\xf6\x0dc\xc0kVs\x1ew2\x8c\xcf\xb5\xc2\xe7\x95\xf3\x82]\xac24\x13\x80\xe3@\x80\xaf\xf9\xa2\xa3?7\xaf\xac\xf9\xca\x18\xd4\xa9\xfdA\xed\x9b\x05\xb0\x92\x13\xfd \xa3\x8f%W\xa6\xc4%\xc4&T\xf4\x8c\x0ePv\xa0\xcb4.\xc7\xd8\xf0(\xf2\x15))\x93\x8b\xd2\xbb\x9b\xbb\xee=\xf6'y\x10\xb9\xf7\xf1\xccn\xc3\xae5\xab\x0b\xfa\xe1vq\x93!\x1a\x08\x98r\x07\x15\xa6\xeb\xc5\xb2/\x18\xed4h\x99\xcdK~k\x07\xc5\x8cW\xa9;\x130na\x04\xbe\xab\xd4\xa6h\x16\xa5\x9eCr1\x90\x9e\xf1\x9c\x02\xaa\x07`\xa8\xea*~\x07\x96q \xb9\x0f\x13\x00\x12\xd16\x81\x82\xdd7\x0b>\x0f\x10\x1c0WJ=0\x0e]\x83<'\xba\x1b\x917(ap\x96|\xbd\xa8`0\xca\xacm\xd7\x0b\xf2\x1c.\xd9x\xe9\xe7\xc4\x1a\xe6\x04W!\xe5\xb4Z\xdcd&v\x87/b\xa5\xc7\xd3\x95\x02w\x94>.\xc121]\x02\x90O\xa2\xff\x01:?@\x06\xe9<\xec\xd6\x8d\xa8.\x95\x06\xd3k 9)\xba\xc7\x89\x059\xac\xf6\xdb\xfb\x86d4\xe7\xcb87\x06a\xfa<\xc6{s\xc8n\xec\x16\xfe\xd8\x1c4M\xd29F\x19\xfc$\xcbt\x93\x90\xbfnG8\x84\xfa,\x1b\x95\xfb\xed\x9d\x9e\x94\x132:lu/\x9c\xcf\xe7n9\xcd\x11|8\x08\xd3]\x9f\xe4\xe7 \xc4\x8d\x90\x87\xea\xa4\x92\x19\xdb\x88\xe6\xf0v[Te\xa5\x8a\xe4\xf1\xcc\xd4A,\xf5o\xb8\xd9$\x8f\xc7\xfd&\xd9J\x06ZJ\xf2\xfd\xeb\xf7\x84U\xcd\x9b\xad\x14\x9bd%M\xd4g\xa9\xfb\x82a\xf4\xdfd\x9e\x9dpy)\x9d\x93[\xb9\xc8/\xb1\x00x\xbex\x91\x9ds^.D\xef\xc9\xb9\xc3\x8e\xe7(\xf6\xc9\xcf\xbaN_o6\xddj5\xa14\xdc\xbc\x07\x95JU\x82\xc6^\x8dn\xc9\xc7\xa3j\x0e\x17\x0da\x01\x92Y\x17\x0b\xcc\xf2sm\x1b\x0b\xdeh\x1a\x06a\x08\x04\xdb/\x04\x9cE\x07P0h\x96u_\x15\xea\xad!,\x065\xe6 i\xb2\xa4\x07\x17\xf6]?8\xc3}\x0b\xde]/^\x1e\xa8sN\x13\xf4\xa3f\xc2\x17\x1f\xc1\xa6o\x91gHU\x8cN\xd6\x1fB,Nf\xcc{`\xa0L\xe4z\xb2_J\xfcD\xdb\x1e\x9dx'\x8a\xe4\x142\xc69e\x0f\xf1\xcc\x02\x8f\x9f\xcf\xba>[\xe7^t\xa2\xdeP~7\x15E\xc1NSs\x00\xf0\x13\xfap\x9c\x90\x0f\xe3'p\xd8\xd0\xe7\xd8~\xc3\xe3X\xb4-\\\xb6\xedVR\xcdx:)\xa6\x02)\xa6\xbb]K\x06\xdb\xfc\x84\\_C *0\xf3\xca\xa7w\xea\xb0\xda\x16\x9a~C\xd1\xe0\xadK\xc1,\xec\xd6\xd3/V\x1b\xe8\x93\x10S\xeei\x16\x84\x90\xccH\xb4o\xa7r\xbfm\x9ao\xb7w\xa2\xaa!\xba\xbe\xe5\x93\xa0\xfe=V\x89u\xb2\xf3q<^\xb5\xad\xa1\x03\xa0\x19\x9ad|a\xee^h\"g\x85\x9e\xf3du8\xec\x12M\x8e\xe8\xdc)\xf9\x8f\x19I\xc8\x97_~A(\x05\xb7O\xd9\xcf\x06\xa5u\xf2\xc1\xd7u\x03\xa3\xe8v\x1a\x9c\x84^s\xe5\x98\x0b\x9b\xcf\xf4\x08\x87\xddY\xd8\x0e\xd2\x9d\xbc\x17\x05D\x0f\x15\x1bJ\xd9^\xef\x97\xec\x96\xe5\xecD\x19\xaet3SN\xf3\xca\xc2O\xe9\xaf\xe2I\xcc*\x8c\x0cUO\xf1\xc4\x9fL\x80\xd2\xef`\xb1\x12\xd8\x11\x0fb\x7f\xf0\x83\x8a?\xddX\xa0\xec\x16tR\x06~e\\\x99\x93\x1f\xb3RVp\x18\x85N.Xe\xa6}\xe6\xf9\x84\xc7\x85\xb4tzJ\"\x92\x90\x94\xd0\x89i\xae1Z\xc1;\x18B!W\xca\x02\xe0\xe2\x8c-\xfd\xeb^GYJF\x9e\xdd\xfc\xce\xc9D\xca\xc9\x84&\xc5d\xf03\xc4\xe5\xd0\x85W\xa5%}\x00\xb9$\xa4\x85\x16E\x16E\xa7i\x7f\xa3\x8a\xc9\x8f\xe5\x95\xcds\xf5\xae\xaa\xa5\"\xec\xe2M\x90B\x1e\xc4\xf2s\x85\xfcu[\xab\xab\xb7z\x9a\x13\x9f\x9bR\x16\xfb\x89\xe3\xfbQ\xdf\x05\x84\xd3\x18\xe1\x83\xf30\x8d\x0e\x7f\xa9\xc3>\xb1N)\x94\x0d\xbd\xf05\x10X$\\\xb3\xc0\xc7\xdc\x1a\xac\xb2f\xd1}\x92\xa5O>\x99\x18\n\xbe\x9b\x9c\x126\"\x93ZN\xc8|\xf4\x91\xcf\xa6\xb3\x1b\x92\x10B\x13_\x0c\xf8z\x01G\xbb\xd6;\xec\xedt\x85\xc7\n\x1d\xa8\xef\x9a\xb9\xc7\x8b5b\x1c\xdeN\x11\x0e\xe2\x9d\xaa\x0b\x0c\xfe\xe9nQo\xb6a'vK\x0d\x063\xae!\xb7\x88\xcc^K\xe7GN\xe0\x92\xb8\x8a<\x9a\xed4\xb91D\xf9\x0ds\xce[7gzZ\xac\xb3\xf8\xd6VB\xf2\xbd&b\xccJ\xa5\x8f\xa7\xa9?\xca\xf9\x0d\x00\xd3\xf5\x16 \xc0Z,N\xec6\xd3S\x13\xe8e\xdd\xeb\x07\xb4.~9\x03\xd6e8<\x85\xad51\x99 =3\xf7&E\x10\x9f\x03\xbfar\xdah\xea\x7f\xcf\x1e,\xefq\x8ft\x02\x1ci\x14\xd8\x95\xd1\xfd\xfc!\xbe\xbaa\xf7\xf4\x8c~\xc0p\xa7y\x0fG\x9f\x91 \n\xd5\x03\xb0\xae\xa5\x13\xa6\xb0=k\xd8\x91\xdd\xb3\x07\x9e\xcf_\x8c9\xd7T\xd4\x81\xbf`\xcb(\xeaXK/\xa9CFg\nB\x84\x10\xd6\xe9$\xf1r\x96~\x99\xcc\xd8\x9a\x8b\x97\xfc\xc5l\x16E_\xccf/E\xdb~1\xfb\x92s.\xc0B\xec\xc8\x0f2\xbee'VR\xca\x8e\xfc\xa8o\x8e\xec\xc4\xd6\x94\xad\xd3\xb8\xb7\xc2\xef\xf9iH\xc2\xf0F4\x07\xb7\xa6 e\xf7C\x9b\x01\xbf\xa7\xec\x89\xf7\xf5\xdau\xaf\x99\x85\xcc\xef)e/\xb0\xa2mK~x\xfd\xf5\xb7\x108\x01\xf6\xca\xf4\x81\x93zkC\xc7&\xa6=\x98z\xb8\xb3\x15I\xe2\x07~\x04\xcaA\xb1=?\xe2\xfe\xd8\xf0#\x1e\xe2l\xcd\xc7\x0d\xa5I\xdc\xf0\x07\xa6\x8f\xf0\xf1\x03\x8d\xa2\xf8\x81\x13\xc37\xce^\x02\x10\x11\x9f\xe9\xc3\xc8R \\\xb8K\x08]\x1e\xe7m\xfb\xa0\xcf|\xb6N\xb7\x1d\xf7\xd8\x0d[\xec\xd9\x03;e4\xd9\x86\x0e\xb2\x1b=E\x1fX\x93\xf9B5\xb5\x14\x7f\xd4\xc4\xad\x19\xce\xce\xe4^\xa78\xbd\x0d/\x9a\xc0\xddk\xac\xa3\x9e\xedl\x9d\xee\x13]\xdc\x0e\xa2b\x04\x1f\xc9\x00\xbf1\xee\xad\x93Wf\xc9\xb9\xb5rue\x0f\xb7\xb6}\xe2h\xdb\xeeB\xc0\x99\x13P\xad\x9a+zJ\xfc_[\xfb?&\x19\x01^\x8a\xc2;\xef\x80\x11|J-\x86\xef\x98>\xc8=\xacOG\x0d\xb7T\x07\xc2\xc8n\xdb\x1c.CA\xf6\x959]\xef\x9d\xae\x10\x164\xf6\xaam\x0bVp\xe9V\x125lX\x0c\xbc\x9c@\x86=gv\xfbM\x14\x8a\x02$\xb3[Ya-A-\x90\xcf\xa0\n\xee\xb2L\x14\x02\xb8rm[-\x9b\x7f\xe3\x04\x017\xccJA4?I{\xee\x96\xf7{\xb1\xfbz3`R1\x1fj\xb5\xa0\xe9\x80\xb5D`\x91e\x8a\xebZcQz\xa6\x88\xa5\x01\xe7\x18\xe8x\x9f\x00\x8a\xa2S\xf51\x9e\xd1\x00\xb4\xc7f\xebZLv\xc0\xfeL\x16\xca\xf2>\x88\x1c\xd8 \x82\x01\x87a\xc0\x04\x82O\x19\xcd \x02\"\n>\x90\xea\xa3\x12;4\xb4\x03\"\x8f\x1d0\x14\x9dn\xe9\x8fu\xad\xfe\xc4\x8f\xe1IK\xa7^\xa7AQ\x17\xdd\x96\xf4\xda\x92;\xeb%\xc9\x1d\xed\xd1\xc4\xdeW)\x95~\x08h\x92\x07@n\xa6\xca\x83\xe6\x0d\x9d*\xce/\xdaP\xfaI\x7f1\xd0y\xd7\x14\x86&\xf8\xa9c\xdd\xfdX\xb7gp,\x070E\x033\x01(\x8f \xfaz\xdbz\x8b?\x07\x1fe\xcc\xaa<^\xee\xd9x\xfdZ#\x8f\xdd\xde\xf8 76\\\xca\xc0Hu\x02\xb6~\xc5gQ\xd4\x0d\xa3\xfe\x15\x07g\xa7Ni\x00\x1c\xb0Q\x03\xc5\x8d\x07\xbf\xab\xbb\x1f\x84!'\xc9\xaf\xff\xc7\x8b\xd9\xf5\x92\xddK~\xfda\xf1!{v\xcd\x1e\xc0\xcc)\xfdP_/\xd9'\xa3 C\x15\xb51fo\xab;\xb1\x04\xa5\x99:\x80\xfe\x8c>\xbb\xae\xd8\x1f\xf2sf\xf0\xb7\xea\xd3R\xd5\xf4\xba\xf2t\xc2\xd7}\x19\xf7E\xb8P\xb3Ev\\\xb1\x14}\x94m{/m4\xd3\xb4\x88\x05S4\xd1\xa5M\xc8\x82L\xe2\x0b\x81\x90JsMNNHF\x98B\x85o\x80\xd7\xdc\xb6\xf6\x85\xb1\xc3z\xce)-`\x07\xee9\xec\xe6\xd4}FAq\xf9BeX\xa2a\xd2\xf8\x80\xd8\xc2\"\x85u\x1f\xf5\xe6yN\xd3<\xb6\xe6AyJ\x88\xde\xa4\x17\xd6t&\xe3(\xfd\xfc\xf5o?\xea\xd3n[\x03\xb6\x1d\x9d\x10N&\x03Orz\xee\x80H\xe6\xc6r>\x94\xbci\xae\xaf\xa3?\n\xb9\xca \x1e\x8d\x00ct\x94s\x99\xd0\x02?oDU;/t;L\"\xb4\x1e\xc1\xf52\xad\xc5\x9dB{\xb6\x13\xc2\xa9\x07=jb\xe3|-c\xc9 \x06\x8e\x1e\\\x1f\xa6`\xbd\xad\xea\x98D\x81\xb0\xe1$\x19\x99\x90\xfe\x81\xd1\xa8}%6\xd5\x1f\x83X0\x86s\x86\x1a\xb8\x8c\xd8.J\xcf\xac\x9b\xf4\xd4\xee0\xb8\x87\x1b\xdf+\xdc\x15\x94Q|{#,\x91\x86F>\xc6\xd6\xf4Lm\xa0\x80\xc1#\x01\xe6^g\xb7\xab\xc1t\xc6\xd4\\\x8e\xad\xbb\xba\x1f\xfd\xf6\xf6\xcd\x0f\x87\xc3\xce\xb0\x8b\x86\xdf\x11\xf4\xf1\x8c\xbb\xe17\x92\xcf\xd8+\xd0\xcb\x7f+\xf9\xe3\x0c\xbcLo^\xbc\xf8\"y1\xfb\xf2\xcc^\xcb\xbe\xc6\xf5a\xb5\x8f\xe9\\L\xc5\xe1 \xe4\xea5\xcaY:\xb71\xd9\xd6hGD\xc2\xd5a\x8d\xed\x84^\x02\xaf$}%\x17\"\x83pX\x9a\x1d\xdf7|<~-\xa3\x88\xdcW\x87\xd5\xab\xbd*T}\xa8\xc4\xa6!U=z-5+\xb8\x16\x0f\xfc\xb5\x84l\xa6\x0b\x1c+\x16?I9a\xd9m\xab\x8b\x1e\x8bP\x14\x96>6\x1d\xac\xe8P\xef\xc8\x05\xb6\x93-\xf9d\xf2\x8dD\x10\xb0\xedN\x9f\"(\xca\x13 \xe3\x11\xc8\x9f\xea\xbbF\xeda\x08\xc5t'\x9a\xe6~\xbb/(\x83BP\xef\xe1\xd5r\x9d\xc4\x85\xcax\x90\xb0P\xd9\xdck\x82\xa3\xa8\x9c\xf6\x85\xb8Ci\xb1\x7fE\x7f3hb\xdb\xca\x05\xf9\xed\xca\x8c\xbd*\xae\x00\xf1\x11\xc2\xe8\x0f\xa5s\xd2\x9d,&\xb4\x8cQ\n\x97\x97R\x07\xc5$\x04k\xc8\x87\x0e\xf5`\xe8\xf5VlDZ\xaf\xe4b\x99A\x08\x82-L\x11\xb8@y,\x183\x19i\x03p\x82\xa5\x95B$\x86\x9b\x83\xd4\x02\xf0\xd84\xc7\xc5\xca\x80\x89\xa3I\x11\x7f+\x176)k\xdb\xc1l\x97\xf6\xaa\xe54T=\xa5\x06\xb9\xbd\x93x6\xbajVN\x07\x05\xfd1\x053S\xd7\xa6<\xa6\xcc\xb7+\x8fM\xf5)\xcb9\xb4_'a;\x0d\xb20\n$DG\xd4\x85\xaab\x8cqa\xe5\x14+\x03\xb8\x81\"\x8a\xd5\xf9Bx\x0e}\x9d\xebm\"\x8c\xe6\x1e\xe8z\x9c\xe2\x10Y\x15\xa3!\xf4\xea=6\xeah\x00\x9fHW\xf2n0\xfd\xe1\xca?\xe9(\n\xcd\xd7\xae\xe34\xd1e\xb6:\x1b\xc5\xc4\xeb\x9eb\x0f4t\xa6\x88!\xb2\xbe\x83\xad*(\x13g\xbf':\x85Z\xecX\xb1\xce\xce`i\x03\x81\x02U\xf0\xf8D\xd1*\xba\xa7v\x05\xeb\xd6\x81[3y\xd4}\xc3o:\x83\xdf\x00\xdb\x81\xa0\x1co\xa7f\xce\x86\xee\xae\x03\xbc\xad\xe6(\xc8WX\xdaKB\xf1\x94}\xf4\xbab\xd4\xfd&b\x8aY^\xe1=k\xf62\x81\x8d\xe8L\xa7\xdb:&`\xbai\xe4\x1e\xb2\xb3$s\x07\xb5\xcc$\xae3\x11E*\x0e\x96\x15Jd\xbe\x9c} \x07\x00\xdeb\xa8\xc2\x95\x12]\x88\xb4\\\xb3y\x033OF\x91\xd43\xcf\x9a\xfe}'5 \xf8\xbd\xe4\xd71\xa7\x1f\xd28\xe5Q\xfb\x8c\xb6\x1fR4\x02\x0c&\xe5\xba\xd9\xd6\xbb\x84H\xa3/D\xf5\xef\xce\xaa\x0f\xfb\xfc\x97\xe0\xdfI\x0c\xda\x00\x92\x0e\x08\xf0\xb7\x9d\x90\xdfQ\xa2\x1d\xd2\x12\x0b\x01\xc6Obp\x82\xe8o\x80\x86xG:a\x0f\xfa\x00\x1e\xf9\x142\xd9\x88/\xdf\x1b*#\xd7\x1dOSr\xdcoHr\xb1\xa9\xe4Fz=\x8e;\xd2i\xf4xr\xaeF\x7f\xaa\xf7\xd7\xf4\x8e\xff (\x03\xa2\x88\xe8_Ou\xad\xda\x96`3\x00\x84\xbc#c\x8e\x95\xad\xbe\xed\xcc\x1e\x01\xde}H\xd3^B\xac\xd9\xd7N\n[\xa5\xf9b\x95q\xfd\xcf\xd1)\xdf\x83\xd6\x81L\x94\xcbn{+\xef\xe9:l\xafYE\x84\xc9\x8e4=\xc0\xcbz\xe3\x1c\xb3\xbcP\x8b\x9f\xf1KB\x15 S\xd1\xa6RM\xc8\xe8^4\xa3z{\x18\xe9i\x04\x12\xcc\xe5b\x96\x9dY\xb7K8\n\xb2 \xca\xa4\xca\x98\xfe\x17\x96\xbc\xf4\xf6\xaegV\x0c\xc4n\xc4\x17\x80\x07\x82\xe6u;W\xf6:KO\xd4c\xb3\x8a\x155\x88\xd7A\xdf\x974\x8a\xcax 2\x93%/}de'1\x0b\xb7p\xb0U\x00\xf4\xca\x90re\xc6V\xeb\xcf\xcd_\x07\xfd\xc7\x8c%\xa4\xde\xfb\xc0\\`\x83\xf6\x90\xfcd\x01\xf3\x99\xe2c\x19E\x0b\x17\xc4\xbfH\x17y/\xf6E\xb1\xb8\xc9h\x96@\xb0\xcf.\x0e\xf9B \x7f\x83\x11\x89\x90\xa9\x8b\xa2:V\xd4oG\x16\x04|\x91\xb1\"\x94#\x18f\xfd\x07\x0c\xeb3\xd5[\xdb\xdc]\x0d\xf5\xc1Pt\xac\x1f\xa4\xed\x83\x1f\x9e\x08\xec3\x0f,\xf90L\xf3\x8a\x8b\xd0\x17\xd0/\xb3\x97\x1c<:\xad\xe6V\x18\x13\xb4\x15\xa5\x0c\xe2\xf1\xc1\xdd\x0c\xe0z\xfaL\xae\xe9g#\x9cL\xf2\x81\x88x\x08\xbaC~\xfe\xe9\xdd{=s\x9d\xb9\xba\xe5X;bG\x15\x88\x1c\xd1\xb8\xc7\x986\xd1^`YA\x1fK?\xa3\xd9\x12\xe1\xe4\x8bT\x1f7Eu\xd2g\x8d\x11N\x053LsI\xe0l\x13\x17(Ir\x1a\xf5XFQ\x97qZ\"\x1b,Y\xd9\xb6\x81m\x1cPZ9\x13\x99>B\x80\x0b\xf4\xa2_\xaffe^.\xcdzB\xedP<\xde\x11\x9c3\xaf%\xba\xc4\x10\xea;\x02\x0c\x19\xbf\x0fI\xa6L\xc8\xa3bX\xea\xbb\xdc\xab]\xec\xe2q\xf9\xa3\xc2\x8b\xaf`\xe3\xc5`\xaef\xe0p\xf6\xfe(\xb9p\x10\xc4},b/\x14\xfa\x8b\xec|\xafj\xfe^\xd5\xc5\xf6>\x164\x15\xc9\xff\xe2}\x18\xb1\x00\xd1\xfa\\\x1b9\x198\xaa\xfc\x04\x97\x17\xd2\xfc\xd3eL\xf2\x00=\xd1`r\x12\xca6\x08\xeb~\xc7\x1f\xcfs\xa2)\xe6J\x9a(\xd7\x16\x8bjjss\xb2W\x1bq\xa8N\x8aP\xb6\xe2\x1bS\x8b\x18\xa3\xf3\x99\xa2A\xdf\xc0*\x9f\xb0Q\xe5\x81P\xb6\xe6\xb1\x07\x00\xd5\x1fh[RV\x0f\xaa\x80\x1b\x80\xde\x9bT\xe1)y\xc1\x1b\xee\x80\xf2|\xa6\xf8#\xa0H3@\x91\x9e\x9dY\xc9\x0b\x881\x19j\x0c\x80A\xf6^\x88\xe5\x05\xeev\x00m\x0eaF\xe2\x83\x0d\xb9\xb9T\x87o\xb6\xc7\xba\xa8\xea\xe5\xabM\xa5\xea\xc3\xdf\x94<\x8c9\xff\x15\x9d<\x87\x9f\xc7T\x13\xb2\x7f\x91qI\x19TO\xc1\x80\xc8\xe9N,\xd5?\xb0]W\xf9T\xc2\x0b\xef\xb7;\xac\xbc\xc2\xf1\xc0\\\xbf\xf5r\xbdQ\xe5\xe1L\x13uf\xbb\x01H\xe6\xaat\n\x0e\xa4A\xf5\xd2r}T\xf4\xfa\xc8Z\xd0\xbbYm0$\xc2\xe5\x96\xe6\xe8\xc37\xd4\xb8$6\xc21\x1c\xab\x9f\x8d\xa4\x9e\xe5a*\x1c\x9e>\xee\x8d\xae\x07\x1e\x06\x14\x0c\xdc\x85\xcbF\x19\xac\x11\x07\x81\n9\x11\xc5\xeb\xfdv\xe7\x00Pu6\xe8\x9f\x81|\xbas|F\xd3\xe7\xb8\x14\xa0\xec+\xd7@\x84px\xaf\xb7t]$t\x88Y\x0eX|?\xab.\x1a\xf2\x9e\xcfg\x16\xb6\xf7\xbf$\x99\xbc\xe8\xad\xb6\xfdQZu\x13Hp\xc3\x08A\xd8M`\x85dw\xb9\x81\x0d\x11tRa\x99N\xce\xa9\x0b?w\xe3\xfe9\x18\x98\x84\x04\xb3\x8b0\x07\x1b\x83\xe9fn\x86\xb0iA\xa4\xb5N\x16\xce\xb9\xbc\x8ce\xe85\xa1}<\xb2\x1ca\xa9N\x00d\xfe\x97\x10F\xd8\xed\x0ce\xbaL\x97\x0b\x99%\x9a|\x05\xea2^\xa6K\x07m\x13\x17\xa9\x08\xd7FR\xb2\"-\x13\x11\xae*\n\xef\xf2\x92\x9e5iw\x11\xa5\x07\x91\xb1{\x11\x1c\xf5\xf1\x0e{\xff\xe7Q\xff\x00\xe6\xae\x03\x8a\x1ef\xf7ji\xa9\xe9)\xc40\xf4h\xb7\x92b\x04~\x7f6,\xf2\x0c\x80h\x13\xe9 \xe9`\xc4\x0c`\xa8\x03&D\xf8^\x13\xff\xfe2n\"\xbe\xe4`\xf0\x00L\x9eL\x84\x15q$9#$!\xdb\xe3\x01\x92\x83\xf7\x81\x9f\x84a,\x82a\x04\xb6\xff\x04\xd0\xcc\xfd.\xd4dy\x10\xbf\xc0\xd1\xb3\x10\xe9\x16\x90l\x0d\xee\"\xc6\x0eN-jJb\xe1x\xdd\xb8_\xce\x90@\xeftIn\xe4\x9a\xfd{\x8aZY\x10\xdc&\xc9Dd@\x93\xe4\x8e&A.\xb3\xbf\xe3\xbb \xf5\xf94\xdf\x16\x9f\x80\x9b\xdbn6\xfa}\xa6:w6\x03.5\x9b\xa1{\xe7?N\xedh\x02*\x01.[\xdd\xb0%M,<\x02F\"X\xc2\x14-\xd3\xc2 \xef\xdc\xe4\xb4\xee\x9dM\xf5\x87\x1a\xe0+a31t\x1cf\x14u\xf1NmJ\xe4EDQ|\xa3\x99;b\xdf\x0c\"H\xab\xb2\xaaU\x14\xe1\xefT\xdc\x15\xf6:&\xa8M\"l\x91\x0d\xc0P\xd6\xe6\xec\xfdOM1\xae\x7f\xd19\xd9\x1b}\xfd\xcc\x0fT\xbd}\xb5\xad\xcbM%\x03\x07\xe1\x80\x08\x9d>\xd3\xdb\x18\x10k\xcf\xf8\x1b\x89\x81\x80MY\xee\x89\xb9\xfdOIY}f\x96\xf7\xe0x\xdc\xba\xc7\xba\x84Z\xe7\xa0\xf3\x7f\xfb\xbf\x01\x00\x00\xff\xffPK\x07\x08\x01\x84\xa6\xa6\x8ct\x00\x00`I\x01\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x9dJ\xb1L\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x00 \x00javascript/jquery-sparklines/2.1.2/jquery.sparkline.min.jsUT\x05\x00\x01zI\xfdZ\xd4\xbdy{\xdb6\xb60\xfe\xff|\n\x993\xa3\x10\xd6\x91,9ifB\x19\xd6\x93fi\xb35\x99&\xbf\xdb\xf6ay\xfb\x80$\xb8\xc8\x14I\x93\x94-\xc7\xd2w\xff=\xd8H\x90\xa2lw\xb9\xf7}\xdf\xe9\xbd\xb1\x88\xf5\xe0\xe0\xe0l8\x00N\x8e\x07\xcb\xcb5-n&eN\x8a\x8b$N\xe9\xe0t2\x9b\x9c\x0e\xc6\x83\xa8\xaar\xeb\xe4$[\xa5q\x9eU4\xad&)\xadN\xba\xc5O\x06\x7f;>\x1e\xbc\x8f=\x9a\x96\xd4\x1f\xacS\x9f\x16\x83*\xa2\x83\x1f\xe8\xf5\xe0\xdb\xcf/U\xd6`<()\x1d\x107\xbb\xa2\x832\xae\xe8 \xc8\x8a\x81O+\x12'\xe5\xe0\xf8\xe4o\x7f3\x83u\xeaUq\x96\x9a\x04\\\xf0\xd0\xad\x96\x80n\xab\x9b\x9cf\xc1\xc0\xa7A\x9cR\x8c\x0d\x95g\x0c\x87\"mBV\xfeB\xfc4mC\x80i8@\x90\xb5\xfc\x0f\xfb=\x1c\x1e\x89\x1f\x93 m\xc0\x1f\x0e\x89)\x92\xd1\x0e5\x1d\xfa\xe8\xd6X\x97tPVE\xecU\xc6\xfc\x8a\x14\x03\x8aow\x10@\x08\x11\xc4\xb0\x84\x0bH`\x05)d\x90\xc3%\x14PB\x05k\xb8\x82k\xd8\xc0\x0d|\x85\xe7\xf0-\xbc\x80\x97\xf0\n^\xc3w\xf0=\xbc\x81\xb7\xf0\x0e\xde\xe3\xe9<\xc0u?\xe8\xb6\xa0\xd5\xbaHo\xbdl\xb5\xcaR\x8b\x0f\xd32\x18d\x06\xb0\x7f_dIVX\xc6\xdf\xa7\xd3\xc0\x80 N\x12\x95\xe0\xf9\x81\x01>\x0d\xc8:\xa9>\xc5\x1b\x9a\x94\x9fh\xf1_$YS\xeb1\\\xc7~\x15Y\x06YW\x99\x01\x11\x8d\xc3\xa8R_^\xb6\xca3\x86\x7f\xebh\x06\x15 y\x95\xf2yU\x15\xb1\xbb\xae\xa8e\\\xf1\x04\x83\xe5}\xcc\x19\x90\xe5\xa7\x82\x06\xf1\xc628\xd2\x0c\xa0)q\x13\xfa\xa5\xcef\x0d\x89\xb4\xef\xe30JxgGS\x88\xd4\xc7{\xf6\x0fM\xad\xd9\xe4 TY\x96Tq\xfe\xf9\"\xce\x7fX' +'\x93T'F]f\x1d\xc8\x04?.E\xeb\xbeO\xd3\x17\x11\xf5.X\x97\xe9z\xe5\xd2\xe2uV\xacHU\xd1\xa2Iz\x19\x87q\xf5]\x91\xad\xf3\x17\xd9:\xad\xac\xc7{\xe9\x9fin\x19`\xa8t\xea\xc5+\x92| \xc5\x85eL\xea\xee\xbe\x080\xf8\xf0d\xd2\x9b\xb4\xa2\x05\xe13g\x1d\xcdv|\x82\xac\xdb2\xcf*5+\xc1\xbf\xa7F3\xf2\xcfZ\xce7\xc17\x86\x8e\x93fj\x83\xd3S\x03X#?\x12?^\x97\xd6l\xf2\x0d\xac\xe2\xf4s\xb7\xd9\x15\xd9\xec\xa51\x08~\xe2\x93=\x83\x94\xa1\"\xf9\x91\xa4!\xfd\x10\xa7\x96\xd7J \x9bvBMF\x9eg\x80_\x90\xeb\x1fx\xde\xc7\xf4K\x96\xb3\x11{\x11)*\xad-\xed\x9b7\xd5\xca\xff\xb9[\x80%\xc8i\x14\x13d\xa5\xf4z\x10\x99\x8f\xce\xca\x9c\xa4\x83\xb2\xbaI(6<\x0e\xc3\xe0\xf6\x96\xff\xd8\xed\x8c\xf3\xe1\xdf\x9f=\xfd\xd7\xb3\xf9\xd9 +v>\xb8\xbd\xcd9U\xecv\xb7\xb77\xec\x9f\x92\xd3\xc4n\xf7\x08\xed\xc0%\x85u\xeb\x92B\x8d\xe4\xf1\xe3\xa7O\xd9`R\x1a~\xdb\xa4\x06O\x9e\x18PV\xc4\xbb\xa0~\x9dl7\xa5\x8d\xbf\xfb\xde\xe3g\xb3S\xf6+\x08\x9e=\x9bN\xd9\xaf\xd9\xf4\xd9\xd3\xd9\xbf\xd9\xaf\xa7O \x11i\xbe\xff\xe4\xc9\xbf\xfe\xc5~M\xa7\xcf\x9eyO\xd9/V\xfe\xd93\xc3\x81\xaf\xb4\xc8D\xdb\x1e\xa4k\xb5J=\x9e\xfe|\x13\x97\x8c\xd0]R\x88\xa9z\xc2~~\xce\x89\x17\xa7\xa15\xbb\x1b\xb5\xad\xef\x17I,&\x87\xb5\xfe\x81\xe4\x7f=\x96\xf9\xe2\xefb\xba*\xe2\xb2\"\x15\xe5\xe8\xee\x1dB\x9e\x95\x1a\xce\x9f\x06O{\xa7\x81!CK{\xf6\xec\x99\xd1\x0c\xe5v\xf7\xd7\x8c\x85\x8f\xc0Z\x91\x9c\xc1\xae\x9a\xe4L\xee}\x96]\xac\xf3\xd2\xba]\xb1\xee\x8c\xf1\xcc\xb0\x8c\xf7YY\x1a0\xb5\x8c\x97\x05\xb96`f\x19?\xc5\xa9\xb1\xdb\xed\xd8\x92\xf7\n\xca\x06\xcd\xd6\xd8\xf7-\x1eZE\x05-\xa3,\xf1\xd54\xd7 \x82\x01O\xff\xc0\x9c\xf6\x0d\xde\xb8sj\x0c\xb6\x08\xd6IB+\xeb\xb6\"EH\x1b\xd6\xf0\xf81\xe3\xdf,IL\xd7c\xc8i\x11\xb0\xa6S\x8f6\x0b&0\xa0\xa8\x99A\xc9\x96\x85\xff\xd8'\x01e\xa4M\xfe\xed>\x0d\x02\xf6\xeb_\xc1\xb3'A`8\xe0\x92\x92\x1e 9\xe3\xf66\x88i\xe2_\xd0\x1b\x8b\xff(w\xbb\xc1xPCm\x1c\x98\nQ\xd6\xba-,\x83c\xc3\x80\xdc2>5\xb0\x1aPY\xc6\x17>\x12>+yL\xad\xdb,\x08JZYS(\x93\xd8\xd3\x80\xff\x8b\xd7\xb4\x9b\x15>\x95\xf4>\x95_\x8d8\x9e\x1a\x7f!\xbd\xeev\x03\xf3\xf66\xa7\x85\xc7\xd4\xac\xd9n\xf7O\xc4Y\\\xb6\xb1n\x0br\xcd\xe8\xc3\xcd6\xef[\xfa\xc0\xd4`i\xaf\xbb*\xc1u\x14\x97\x17\x1d@\xb3u\x95\xc4\xb4\xd0\xeb?f$\"\xd3\xf56\x026\xe7+\xea\xc7$\xad\x93X\x13e\x94]\x7f\x14\xc593\x93U\xdf\xfc\xe7G.\xaf:\xe2K\xd0\x1e\xa3\x95\x16]>!\xa7\xc6\xbdK\xe3.\xf2\xaai\xcb\xea#-Q\xe55+\x92\xc4e\xf5\x8e\xdeX\x06\xaf`\xdcM|\xc9%c\x04\xd7\xb4\x18\xfcgM\x8a*N(G\x81e|\xe0x0`}i\x19\xff_\x9e\xb7\n$\x99e\xbc\xa7A5\x90X1\xa0\xc8,\xe3G\xc6&\x9a\xa4\xe4Z\x16\xfaI\xcc\x8a\x01\xc5\xb5*\xa4\x92v\xec\x7f\xf0\n?\x9a,/K \xe7\xe0v\xc0\x954\xa6h\x0c\x88[f\xc9\xba\xa2\xf3\x84\x06\x955\x98\xe6\x9by\x95\xe5\xe2\xc7U\\\xc6n\x9c\xc4\xd5\x8d5\x88\xb8~4w\x89w\x11\x16\xd9:\xf5\xadA\x11\xba\xe6\x14\x06\xec\xff\xd0\xa0*H\xcaT8\x9aVZ\xa1\xb1\xa4\xd1\"t\x899\x05\xfe\xdf\xe4)\x9a\x07q\xc2\xb4\xaa\xbc\xc8\xc2\xd8\xb7^\xfe\xfcfEB\xfa\x855\xc1\xd6\xe6\xe4C\xec\x15Y\x99\x05\xd5$,\x88\x1f\xd3\xb42\xcb\x8a\x14b\xaa\xcb\xaa\xc0|\x1d\xb1\xff\xc1\x80\xa6\xfe~2\x9a\x8fW\xe5X\xf620\xfe\xe7\xfa1\xe6r\x84\xd7Q\\\xd1y\x90\xa5\x955\x98M\xf3\xcd\x80\x141I`P\xb2\xf5J\x8b8\x98WtS\x8dI\x12\x87\xa95`\xc8\x9e\xf3*\xe32'\x1e\xb5\x06iv]\x90|\x9e\x13\xdfgRo\xf0M\xbe\x99\x0b\xae`\x0df\xf9fPfI\xec\xcb^\xbe\x8e\xe3\xd4\xa7\x1b\xd6\xd1t:\x9d\xef\xd8\xdcrr\x1b\xdc\x0e\xfe88\xbbG\x10\xea\xb6\x03\xb3J\x08\xb8saC\x0c\x88\x9eWEq9\x89\xd3\xb8\x9a\x90\x1d\x0eM\x17?/\nr\xd342\xe1Ra\xe2\x91$i\xc6\x033\x18\xcf\x10\xb8\x93uZFqP\xe9cC\xa0\x06'Q\xe5\x83\x8b\xd0!\xc0\xd8\x88\xb5\xce\xbc\xa4\xc4\x04\xc8\x0e\xfc\xc9\xe7O\x82\x01\xbdHHY\xe2\x08\x87\xe6mPP\xeb\xe4\xd7\xdb_oM\xfb\xd7\xeb\x893Z \xd32'\xa3\x05B\x8b_w\xbf\xeeNB\xc8\x0b\xea\xb1B\xe6\xaf\xd7#\xf4\xeb\xc4\xfc\xd5\x1f\xa1\x13`\xf3f\xe9\xe6\xb0\x9cO.\x16+L@|y\xbc'w\x07\x05efw\xab\x06\xf8\x82>(\xe63\x1f`\xd2X\xae\x8a`\xb46'\x05\xcd\x13\xe2QS\xa4\x15\x14\xbat\xa6*E\x1a2f\x0e\xc4\xda\xe7c\x07BL'bL\x13\xba\xa1\x9e\x19!\x08\x17\xe6\x05\x0e\xedS\x07\"\x1c\xda3\x07Y\x17\xf8h\x06K\x1c\xd8\x91\x03K\x8c\xb1\xb70\x0c+\x1e\x0e\xdd\xe1\xd0\xb5cFy\x98\xfd\x052 i\xb5`?\xd9\x0fs\x89\xb6\xdb\xa5\xc5>\xed\xa5\xb3\xdd.\x91e\xa6\xe6\x12\x0d\x87\xa6\xcf\xf3\x8d\x8eIh\xa0\xc5\x12\x1f\xca2\x97\xc8Z\xe2\xd2d\x86|\xabL\xc7|4\xd0\xa1\xec\xcf4\xdf\xcblLI\x03!\x04K\xb4C\xbb\x1d+T\xe6r\xee\xda\xb3*q*\xa4\x1cK\xd9A\x8c\xbb~\x10\xb5\xbc\xcf\xdc\x85k\x91so\xe1Yd\xc7\xf0\xd7\x94\xf3\xc4$\xf9j\x92<\x8c\xf1\xe9\xc2\xf4\xb1; \x92,+L\"\xd7\xcc\xc9)[\x92\xe2\xf7?O\x17\xc4\xf6\x1d\xcb$\xb6?\x9e9#\xf6\x81NN\x19\xe5\xd7\x05L\x1f\xd7u\x8f\xbd\x91\x87N\x9e\x80\xffO\xc6*l\xd5\xb4\x8fX\xd5\xe6\x8b-\xfb\x93SK4\x8a\xacN\x0b\xa7\xbf\xbb\x85\x1d\\`\xdd\x13\xc4\x06\xea\xce\xcb\xeb\xb8\xf2\"\xf6\xed\x91\x92\x1a\xebT\xb8~|\xc3\"\xd8\x9b\xbb\x05%\x17s\x9e\xc3\xcc1\x96\xc8\xfe\xea\xe9U\xb1\xa6,\xfdh\xaa\xa7\x06$)E\xf2L&K\x1f\x8b\xe5\xe2\x9c\x14%}\x9dd\xa42 \x02\x82\xb1;\x1c2RE;5C;H\xf6A\x05\x0f\xdb\xce<\xc8\n\xd3\xc5\n\x11sw<\x9e#\xcfv\x1d|\xc1\x10\xe1\xa0z\xe6v\xb0\xea\x10 k\xc5\x03\x1f\xa8j\xc7\xc3S\xf0\x9b\xb6\xbc3\x7f\xee\x8dF\x88\xd8\x9es\xc4\xa1\xa2\x93|]F&K\xa8\x1b\xa6;H[\xc0\x89\xf4\xa3\xb8\xfc\x81\xfc`\xb6\xc6\x86\x86\xc3\xb8|\xcd\x98\x105 \xdaA\xd9!I\xa0\x10\x08\xb0B\x88\xe6\x04\x9b.\xc6\xf8h\xb6h52\xa9\xb2\xcfU\x11\xa7\xa1\xc9\x08\xaa\xca^\xc7\x1b\xea\x9b.B\x932O\xe2\xca4\x0c\x04!6C\xecO\xe2\x94\xf3p\xd3\x98\x18@\x10:\x9b.\xd4\xd8\xac\x10\xc23\xf5\xc1\xb0m\x87\x0e\x0e\x10\xc7B\x84\xc3\xb17\x8f\xce\xa7\xf3h\x8c=Dx\xbb\x1e5#\x98\x02\xad\x87M&\xcb,NYo;\xc8\xf6\x96\x96X4\xac5\xb6T$>}67\xb7q`z\x8c\x1f\xf9\x0e\xc6\x9cx\x90\x97\xa5U\x9c\xae\xe9<\x0eL\x96~\x841A\x12\x8b3I\x03G\xd3\x1d\xe4\xfb4\x80\xa7\xe0\xc9\xa9k\xa6\x8du\xe3\x8e\xb0\xf4l\xb2\xc9\xc2X2\x12c\xc1>\xad\xa9\x1a\x05\xe3\xf1=\x937\xf0'q)pG\xd0\x82X6qvp\xd9\x14T\xc43'\x13\xaf\xa0\xa4\xa2\x9f\x99]\xf29\xa2\xb4Z\xec'\x99h\xe2\x95\xe5\x17\xba\xa9\xb0kqHE\x89W e\xfc\xdd4\xb8Uc \xf0&\\(\x1aLA9\xf1\x98\x05\xcd9\xb5,W~{\xf3\x85\x84?\x90\x155\x8d\x88\x12\xdf@L\xe2\x93\xbc7\x1c\xb6\xfc\xc0\xe7>\xddx\x95'\xd4/\xc8\xb5\x86\x00F\xaa\x10\n4D\x10\xb3\xa9\x0b\x86C3\xe2Rq\xe2\x93\x8a\x98\xc6o\xcb\xcb\xf2\xb7+\x8f\xa4W\xa4dl[ :V\xd8oy\x8b'\xa2\x10\xa7\xf6z\xe6\xef*&Il\xb9\x8fK\xd5\x1d\xab}\xb4\x9cp+)e\x08\xddn[\x9f\xa6q\xea\x1b\x88\x93\xe3\x11\x99\xa4dE\xb9:Zn\xb7G\xad\xef\xc9\x15\xaai\xa2\x0f\x96\xa3\x19\x1c\xcd\xe6\xad\x1a\xc4\xf7M\xe3\xca\x00c]\xa4V\xe9EtE\xca\xf1J)\xdcc/[YW\xab\x84\xdb\xc9\x82\x07\xfe\xfd\xbf>\xbc\xe7\"\xaf\xaf\x83\x0e\x8b\xf0[\xc2\xed\xad\\p\xbb\x1dMJz\x00\xc4;[xS\xa7\xee\x14\xbbe\\\xc7\xe3*\xa0\xcf\xd5\x164\xe1t\xc1-v\x13!\xa02\x9f\xb6\xf3\x85/\x87\x15\x88p/ \x9cj\xb8\xd6\x14\"\x88\xeb\xca\x1a\xb1\xac\"\x92\xfa S# \x1e\x0e\xe3IA\xc3\xb8\xach\xf1B\xd4\x8f\x10D\x92(\xbd\x84\x92\xa2M\x93R\x9f:L\x81s2\x1c\x92IAK\xb6$Y;\xd2Z\xce\x85fY1\xcd\xb2\xa3!\xd6\xa2\x06\xfcZ\xd8\x0c\xe2t@\x10\x99D\xa4\xfcx\x9d~*\xb2\x9c\x16\xd5\x8d\xe9\xa2\xe1P\xae=\xb7Y_\xc3\xa1;\xe1&\xcb\xc7\xc04,\x03\x9d\x8fg\xc3\xa1\xe9aWqk\x8b\xad{{\xea`\xf6\x8fda\x18\xe3\xe9b\xfc&\x0d\x1847\x96\xc6\xfeY!V~\xc6\xca\xcfZ\xe5\xfb\x8b\xcfx\xf1S\x073a\x08\xbe\x90_\x1eBs\x8e\xa5\x15\xc9\x95\xd2\xcb\x1dV\xcc\xbc\xc7\xfev{4\xdbAH{\x10\x81\xdbe\x99\xf0\x84\x80-53\xc0\xaaE\x9b8\xe8\x88-QIN<\xdfE\xbd\xc2\x80b\xc6\xf0Y\x01jO\x9d3L\x86Cj\xcf\x9c\xf3Z\x00\x0c\xa8}\xea\xecj\x19\xceu>\xde\xfdo\x0c\xf6\x1e\xce\xcdh\xba\xe2\xd2u\xdd3\x9f\xb5\xd8\xc7\xbeI$\x12\xfeA\x13\xec $db\xe7\x05\xbb\xe2\xd3[\x17\xcc\xaa\xffDB\xfa3\x9e\xee\xa5\xfd\xa2\xd2h\xa2\xb0\xc8&\xb5\xac\xb0\xed\x88O\xe9v\xe0bN\xf6pE\x0b\xc63\x04\x91\xc6e\x9e\x90\x1b\xb5#\x82\x8f\\\xa1\xf4vvJ\x0c$\x8a\xd7\xbb\x1c\xaf\xf8\xae\x90\xdf-_o\x131\x99\xac\x96\xceg\xb5\x08[\x93\xa9\x01+U\x1a\xd4\xc07\x1c\xf2\x9f\xeb\xdc'\x15})`4\xb5&\xc5j\xec!\x0e\xdf$r\xa9K\xd4J\x06$\x91\xf3\x0f\xf9\xe9\x82;Ye\xeb\x92\xd2\xb4\xa2\x85\xe93\xb3o#,i-\x9d\xd7AH\x95M(\xb9\xa2=eyzS\xd6Kb\xef\xa2\xa7\x18O\x97\xc5\xd8H\xca\x0eu\xdf1{\xc3!\x19\x0eM=eR\xd0UvEM\xd4\x9ee\x0f\xed\xa0\xe9\xac\x0f?\x93WWB\xe0\xabIy\xc1J\x1ah\xeeN\xb2\"\x0e\xe3\x94$\xbc\x04&\xe06\xec\xb3\xc4\x1at\xa0hvR\x15q\x18\xd2\xc2tU\xb7\x1cm\x96\xae\xa4\xb0 aj\x00\x9a\xacS7N}\xd3\xe0\x05\x19\xf0\x93\xe5%#\xac\xa6D_>\xec#\x92\xe5)tk\x14\xbd\xbf:~\xc6\xee$g\x7f{\xd6\x8d\xc8\xf9\xa5\x95\xf3*\xc1\xeeD\xf85\xe1\xa8\x8d\xff\xbe\xc5\xd2\x99\x12\xcc\xd6\xfd\x95H\x92\xab\xb8=;\x92\x9c?I\xf7\x9f\xa9\x80\x93\xa0\xa8\xd1\xec\x11}Cd\x96&i\xeeE\xec\\c\x97r\xe2\xbc\x9a\xf9\x01e, \x80p^\xed\xf1\x84\x06\x1b\x0d\xd3\xa8\x11\xf1\x10*\xe4*5\x97T!\x9e\xce\xc33o\x1e\x8eF(\xc0\xae\x1d:\x10\x08\xc1\xf9#\x0d\xe3,\xad\xf9\x85\x89\xb84?\x9a\xa29\x95\xd8\x16Ku\"\x1c 5\x1eX\x7f\xfb\xcb\xa65\xe9\xe4\xe0\xa4\x93\xfeI'j\xd2{\xe6\xfc\xc0\xdc\xa9>d\x8b\x87\xa6\xae\x95`\xf5\xeb rn\x1a\x0b\x12<6\x15\xc2\xbb\xa38\xd6D\xec\x8c\x98\x08\xa4\x94\xd3G<\xa6\x93\x84\x06\x15\x84{Y\xbf\x8c\xe9\xa4\xca\xf2&\xae\x81\xeb\xa4\xf5\x94K \xc7\xa7j\x89\xa7\xf3\xe5\x99;_\x8eF(\xc6\xc4^:p\x81\xe3II\xab\xeeT\xb5\xb1\xc7\x95p\xb8\xe0*\x05\x9b>f\\\xa1\xdb\xa4\x87\xd3\x88v^D|7\x08A\xf2`\xf6\x92\xf0V\xf5\xe9@\xb7\x116\x8cCpG#\x1cs=[\xc0(\xfa\x95\xab\xd6\x94rA\xcdk)\xd5\xf1\xb42#\xb4S\xcb\xbc%\xcb\xb6\xdb^z\xbc\x90\xc6\xa3$\x14MDp\xc7\xd0\x15\x93\xfde\xfcUXa\x96\xd1x\xfd\xcb\x8aT\xb178\x8aWyVT$\xad\xe6\x92\xb1X\x037\xc9\xbc\x0b=g\x7f\x17@\xcf\x0d\x98\x8a%<\xc8z\xb2\xd1\xf12\xd6\x1a\x87\x14\xd6r\xec\\\xe7dF\x83\x01F\xb3Aa Ez5\xf0\x10HY\x9a\xa5\x15\x89SZt\x1bR\xe9\x06\xdan\x05Wj-\xa5\x8f\x9cv\x7f\xee\xd4\x92\xa9\x06\xcc\xa6\xa8\xa7\xf8/\xbd\xc5\x7f1`v\xcad\x86\xf1\xf7\xe5e\xc9 \xe4 7\x8cH\xe6\xd4\x83\xe9\xb0(Y\x03\xfb\xa6q\xe6\xc7W'\xe7\x06\xdc\xc6\xbeeh\x8d\x017X-\n\x06w\xc2\x1a\x96\xb7\xeb\xf0\xb7\x9e\xca\xaa?\xbd\x924\x8c\xbfdf\x1b{\xf5\x1aV4X\xafm\xb10\xf9\xd7{\x1aT8\x10\xebZK\xfe\x92\xe58\xe0K\x9a'\n\x92`\xb2\xcf7\xaf\xe3\xd4\xcf\xae\x1bqPP6\"&\x0b\x06\xa5WdIR\xcb[U\xf2\xaerm\xb9+\xf8\xd8O\xbc\xde\xcbxU\xb6\xc4o7\xb3a|M\x9a\xce\xfb\xc4D\xf0\xae\xd8p\x1ax\xea\xb4z\xb6x\x02GE\xb7\x14Kl\x17\xe3{o\xb8So\xd4\xd4\xbb\x16\xc6\xa3\x0es\xcd\xce\x1176>\xc7_\xfbtTA\x17\x93\xa8Z%&\xb9cV\xf97\xef\x05\xb7*\xca\x8eGR\xbc\x8a\xa0\xadv\x91H\x1a\xae-\"\xadIw\x07\x0d\x97j\xc1\xc7=\x07\x12LEL^Y\x9aF\xc36\x0c0\x04\x914*\xbc$\x19\xe9\x80\x12Is@\xec\xd4R\x04\xa1\xf2<1\xc5l\x1eu\x1dHT\x8fC\xe5\xae\x0b\x8c\xb1\xc1\x96\xa2\xb1\xdd\xba\x82\xe8Wb\xfc!\xad\xea\x00O3\x90\x02s/\xf4\xd3@\\\x83Z\xb1\xaa\xdb\xedJy\xbdW8\x14\x0b\x1c\xcd)^\xd5\xfb\x84'\xe6\x7f\xffZ\x1e\x9f\x1d\x8d\xc7hk\x8e\xc7\xe7\xbf\x96\xc7\xff@\xdb_\xcb\xd1I\x08\x86Q;\xf9\xc1@b\x95P\xec\xb21\x88\xce9%\x18\x88\x01\xcc#\xaa\x16Tm\x10\xc9\x02\xbd\x81\xad\x06\xb2\xda\xf5\xb97W\xa4\x88\xe5\xa05)\xf8\x9e\xcc\xad\x83^\x99\xeeq\xe4\x0b\xaf\x1b\xc7s\xd7\xf9\xdb\xe3\xa9-s\xc2\xf8\xe2rR{\x9d\xb1A\x0c\x90XY\n\x17\xe1\xb2\xe3\\\xdcnyZ\xcd\xb2\xf9WM\xa2K\x8eZ\x81\x98\x18w\x860\x0fZ\xde\x12-\xe8\xd4@\x8b\x0b|4\xb3\xcc\x0b\xbc?\x06\xcd'y\xb1\xe8\x1b\xf7\x85r)\xb2\xfa\x8c\xfe\xd6\xa2z\x80\xe0\x8e\xd6\xe0\x02!\x1d\xd1Z\x93\xc3\xe1\x9d\xa8\xbc\xdd\xcf\xa4E\x91fU\x1c\xdc0xL\x92\xd0\xa22\x8d\xe7UEWyE\xfdA\x95\x0dHU\x11/\x1a\x90A\xdd\xcf\xa0\x89Lg\xf9\xe9\x80\x8a\x89\x19\\\xc7U4H\xb3\x01\xdd\xc4e\x15\xa7aS\xd0\xe8\x1bQ\xd37\x1cM\x91\xda\x1f\xda%\x0c\x15\x1d\xff\xbd\xad\xd6\xc8MN\x0d\xe4 \xb9$!`K\x8e\xd9$J\xbdg\x16\xcd\xc5d\xcf\x85e&h\xc7w\x05\xa4\xe7X,\x9f\xe1\xf0(\xe8\xf8\xc1\xea\x80f\x86\xcc\xdaI]\x9a\x86\xa5\xc41#W\x99.BwJ\xd3`\xaa\xb3\x81\xe4\x8a9D\xe7\xc3\xe1>\n\x98J\x12\xa7\xa1\x81\xb8\x933\xc6\xef\x94\x933\x9e\xc7\xe31zg\xc7\xe3\x99cO\x1d\xcc\xd9\xc6p\xf8Nm\xa9\xc5\xe3\x19\xcc\xd0\xfc\x9d\xf0\xc1\xd9\xbc\xc9\xc8\xe9\xc3\xb2\xea\x82\xe1X\xd0w$B1\xf8\x18v\xf5^M\xcd\xf5\xe4J/q`\x8a}r\x99\xf1\x9b4w~\x93\xfaAO\xdc\x0bx\xcd\x96(\xdfak\x06\xe4\x9eysw4B\x04\xbf\xb3]6$\xf0\x99\x82\xc2Q\xab\x14\x0eN\xbf,U!\xb6\x83\xfa\x85\xc9\xeb\xce\x1c\x19KR\x0fW5\xd9\x1d\xf1\x0c\x81\xdcxu\x11\xb2D\xdb^\x92\x95\xb4d\xab\x9b1fT\xefd\xaa\x95C\xbaS\xc3\xa3\x19\x1e\xde\x8d\x1c<\xad\x07>w\xd9L\xaa\x89\xa3\xb6;\x9e90\xdb\xc7\xbbr!\xdf\xe1{\x16\x87\x1d\x84U\xb7.i\xf1Qy\x9d\xb1\xbb\xdd\xde\xee\xa4 '\xa1\xf2\x9b\n\x91\xf2\x82x\x918*\xd1\xdd]QS\x0d!\x0e&\xe2\xc0C]\xb1u\xd4\x00\xbb\x93\xee!\x03\xa6\xac\xec\x95\xdbn\xc3\xbd4\x04Q-\xf4\xbe\x90\xf03\xad\x18oPk\x19\"\x8c1]x8\xb0]\xbe\x89\xc9\x9b\xb8\xc9\xa9cy\"\x1e\x85\xd7]\xd1\"\xa4\xbe\x1ao\x1d\xfbt\xbb\x83\x10<\x1e\xa5\xd1j\xfd\xd0\xfeC\x176\xf0%J\xa5\xb4>\x9a)I\xad6\x11\x1a\x17F\x83\xcb\xee\x06\x0eA\xc8\xc7{\x85.\xe8\xcd\x9c\xad\xb7\xdb&\xaf-\xf7\xdd\x11\xe1|\xdc\x17\xf2\xddW\xf2\xdd\xc7t.\x04Q`\xfa\x93r\xed\x96UaNa\xc6E\xa9m\xa0[\x1f\xd7\xc93\xf0U<\xd6\xa9.\xe29\x15\xb2\xf9\x96T\x18\x8c\xc7s\xe4\xdb\x81\x83/L\xf6\xa7\xa35\xa0\xad\xc9\xd5\x05\xa1*H>\xd1\xd7\xfd\xad\x81n\xc3\xfb\xbb\x07\x1f\xdf\xee$\x0ca\x0b\x86\x08\x87\xac\xfbz\x0f\x0bN\x11\xf8vdO\xef\x06\x89\xc1\x1d\xb1\x95\xff\x00\xb8}6F\xe5/jO\x08\xf6\xd5\x8e\x90\xdf\xdd\xa7R\x8b\xcc\xef#V\x82 P;\xff\xfe\x11#X\xdf\xaa7\xaet\xd2\xb4\x89\x83x\xfc\x94k\x05b\xcf\xa9\xb5\xe0~sII\xd9\n\x97\x02\xc7\xb7\x8ef\xfb\xb1ej\x8b\x9c7\xdfl\x11\xfd\x83&|\xf3I|\x89SAj\xc3I1\x0f\xaa\x9b\xb3A\xcbr\x0d\xc5\x97\xa7{\xd7\xb0\xb7\xe3\xdd\x8b\x80\xee}O\xe7\x91\xde\xf8a%h\xae\x96\x08k\x05+`\xb5\xfd\x7f\xb3\x81J\x87 \xf6\x9b\xd7\x04&\x10\x84\x16\xd2\\\xe7*\xccO\x8d\x91.\xba\x9a\xe4L\x1d\xfd\xa9iV\x94\xfb^3\xd5\xf5\x82\"\x1d \xc3W\xcd\x00>\x9a\xee\x87\xeb\xb5\x0d\x06UT\x02C\x13]\xf1\xe4\xfc\xdfb\x8d\x84\xca\xe7\xda\xa1*\xee\x07\xe8xc\xef\x88\x0cl\xcf\x10\x04wL\x82\xb6o\x07a\x1d\x99r\xdeE\xd9v\xeb\x9f\xef\xa1g\xbbu\xcf\xa6\xdb\xad\x7f6]0\xaec\x99aM\xf8\xa2g \x19\xd0#\x8c\xc3\x85\xc9\xfex\xc3a \xfd\xa6Bs\xd66\x02\xfa\xa8+\x84\xb0[\x8b\xe1Y\xafu4E\xd6\x11\x93\x86}\xdb\x0b\x87&\xa4\xd5\x0b\xebA\xce\xcc\x83\x80\xf2d\x9fj\xd6{{\x13\xf5\xb8\xcf\xbbi\x8eiP\xd0\xe9\xe3\xfeJ|p\xed\xc4\x96x\xe2\x84\xd3\xe7\xf3>\xb0\xf1 \x01\\F{L\xdd\xe2\"\xec\xc0\x01\xc8Z|\xb5q\xd0H8\xc3\x98\x07\xf5\xc4\xb7\xa0\xe0a\xfb\xa5\x89\xe0\x12\x93\x96KW\x8b\xd9d\xcd_*Yy)\xd4N\x02\x01\x9a\xb7k\xbc\x88HQ}\x89+\xa1\xe3\x99\xee\x08?:\xf3\xe3\xab\x81\x08\x975\x98\xa9\xbf\xbc,+^\xe0\xfc\xd1\xe8p\xe5\x91qv\xe2\xc7W\xe7\xbf\xa6\xde\\\xbb\xa0~\xae\x84K\x12\xa5\xa1\xb7\x08\xef\xd1h9z\xc4(\xeeB\x11\x96Q\x87\x8e*\x05~\xe1\x8e\xa8\x8cXdTg\x19\xc6\xfe\x82\x15KE_\xaf;\xf0H\xe2\xd5\x0b^\x9c\xb7\xd1x\xbe\x8at\xc4\x9et5\xb4J\xf2\xcd\x9cn\x8e<\xb5k y\xe4y\xc9u\xc7:\xc6\x8c\x87\xc2\xa0\xdb\x00\x9f\xfc\xf7\xdfM{:~F\xc6\x81\x83\xfa~\xfd\xe3$\x16\xa1\xe0\x04m\xb7z\xe9\xdb\xd3\x1d:\xfc\xa1U\xe3\xde\x07t\x1b1\xe6\x13\xd6\x1b\xa0\x18\xe3'\x8b\xd9Sk\xa6m\xf0=\xe6\x1b|\x91\xbdtpl\xba\x13~\xc0E\x84\xb6\xbeI+3\xb0\x97#f\x0c=E\xc7\xe11E0\x85\xd3o\xbeQ\x8e\x00\xa3\x08]\xd3\x18E\x12\xf9\xc0V?2vMh\xef\x0e\xc15\xbe\xbd\x8b\xb5j\x9a\x7f[\xa8z\xbar\xa06\xce\n\x9e\xf79\"9-m\xd7\x81`N\x87C\xa5\xe5 R\x93\x92\xd1\x05\xd2\xe5\x1a\xcd\x17E\x0b\xd3Sz\xeaOq\x15\x89\x16M\n\x81\x94G\x9d\x8e\xb0?Y\x91\xdc\x0c@\x07]\x8dr\x12\xfb;\x84\xac\x9e\x16\xefh0\x98\xc4\xbe\x88V\xe9\xaa5\x9a\x1c\x11\n$\xb8-Tx\xfb\xa8\x10\xda\xa8\xb0\x91\x84*\xe2%\xa5\x9a{< Y\xba8\x9bb<\x99Nb_\x98V\xfc\x93\xbb\xfc\xdcfkx\xcf$\xe7\x8e\xe4\x0d\x0e\xbb\xd1\xa4\\\x8d\x87\xd6\xd5\x00\xfbJ<\x0f\x10G\xb7\x1b\x85*~\xf4\xa7F\x144E\xa4>O\x8b*\xf6hY\x07\x11\x899\xf8@\xf2:e#u~\xf5}\xd3\xfd^\xc5\xe9\x8al\xeao\xc6:\xaa\xfa\xdc\xfb\x1b_\x0b\x0cIHY\xf1\xe9m\xa56\xa6\x80\xdcZ\xeb\xd1gke\x15\x02\xdc\x86\x93O\x16m$\x0fe\x93\xc58\x85M\x9d#\xb5\xe9\xee\x9ec\xf6mO\x9d\xe1\xd0=\x13\xbfgN\x1d\xf1\xc7>O\x1d-\xf4\xfe~V\xab\x91tk\x91\xcbFn\x85\\\xb2t\x8c\xd9D\x85\x90\xc3\xc6\xd2Qk\x13\x07n\xbaE\xc5\x91hk_\xc0\xd7\xd7A0\x9e\\\x1f\xd9\xdc/W\xe7\x19\x08\xe4QY\xb2\xbbS\xfd<4\xa6\xcej\x95\xb6\xaa\"\x1d\x06+m+\x89\x01\xa6\x02\x86\xe6<(\xd7\x9chG\xb8\xd4\xf7\x18p\x8fL7\xf7\xbd6\xd0X\x08\x9e#\xbf^\xe9\xc3a8\x1c\x9a1v'\xcc\xd4{\x11\x17^BM\x9f\xbb\xf8\xec\x19\xd3N=\x08\xbb\x81\x88\x92 \xe3I\xec\x83;\x89\xd3\x92\x16\xd5\xf3\xa0\xa2\x85`m]\x1a\x85\x18!\x88\x86Cs){a\x10\x89>\x04\x92\xb8a\xf3%\xcb\xa1'm\xa4}\n\xdb\x07\xa2.<\xac\xbd7>^>\x14\x9e%\xba\xdb\x14\xd0&P\xcc\xd5\xbco\xfc\xc3\xa1I\xa4\xd1\"\x1b6\xfb\x8a\x1d@\x1ew\x16\xf5\x8e\xe3\xdevE\xb1\x03H\xe0\xed\xee\xa0\xf4H*6\xa4\xee\x16 \xcd\x01\nE\x8fr1)Z\x94+I\xf1\x0b\xc9\xa5\xb4\xc3o\xdd\x90\xb3\x08\x13;t n\x0eb\x84N\xa3\xa6\xc2\xb2\x93\x9e\xb9K\xeaU\xc6p\xc8\xbe\xe3\xb4\xacH\xea\xb1l.J\xe0\x02\xc7\"G\x8f\x9b\x8e\x87\xc3\x8bFk9]\x982\xbe\xf9\x07~\xd6\xc3\xbc\xb0\xa7\x0e\xaaU\xc6:q\xc6\x12\x83\x9eDd-\xeb&\"\x1ehM\xd5\xc7\xcc\xa9\xab\xf0\x0fd\xa9\x82!\x021\x00\x8e\xf0\xedV~\x88\xe3Q\x0b\xd9\x00\x9f\x0b\xcblC\x12\xed\x81\x11!\xa4\"\xb3[\x9cG\xce\x84pb\xf7\x98(u\xbe$\x85\x15\xd9\xdc\xe0\xfaWV\x84\xd8e\xbf\xe41L\xb7V8Vq\xaa\xca\xc5\xa9*\x17\xa7\xfb\xe5\xc8f\xd3i\xc2o\x9a\xd8tj\xa9,%\xe7\xfc\xb6\x98\xa3m)\x17\xec /2\x8f\x96%\x8f\xc6Ww\xdf\xdcg4K;\xa1}7\x0b\xf7X\xf6\xe4\x90\x8d\x81\xe6\xee\x91<\xd5pV\x8fX\x05Cp<\xb8\x08\xa4\x7f\x85!\xad\xceb\xa8\xf4\x11R\x86I\xebT\xbd\x81d\x9b{\x99/\x928\x17\xf1X}\xb5\x1a\x08P\x0b\x84\xfe\xd2}}\xb3\x11\xfd\xfe\xbeY\xadf\x88\xa85\xc6\xfe\xd2\xfd\xe3\xfe\xf9\xee\xce\x7f>4\xf2\x9f\xb5\xa1o\xf4\xa1oz\x87\xfe\xf3\xa1\xb1\xff\xb1\xfey\xbdz\xf8\x1b}\xf8}\xfd\xf3\xe2h\xa7]\xe2\xc3\xd3u-\xcao\x9d\x82\xeaY\x98{\xe4\x19\xdfS\x88\xe1\x1c\x96\xd8\x1f)#\x8b\x8e\xe9\xb1i\xc6\xe3\x86bNB\xc4\xcc\xe6\xba\xc0\xb1\x19\x8f#\x96\xaa\\\xe5\xdcS\xca\xa0\xfe\x91z\x95I` \x01\\\x80\xd7\xe3\xa5\xed\xde[d T\xab\xda\xf7\x98\x1dj%\xd2\x96&\xa3\xc2c\x1b\xa7e\x1d\x16\xdb\x92\xdbm\x85\x07b\x85\xfe\x96z\xb3\xec(\xa6=\x8e1q/\xd8\xc1[\xc1\xb8\x86\xb3\xb9\xd7\xc8\xe1\xdd4rR\xf9\x1b{\xd8\x92\x89\xe0M[8\xbem \xc7\xc6\xb8\x92\xecMJ'\x19q$K\xc9\xc4\xb3S\x05@\x8a3<\x85\x8b\x9aeo\xc6\xcd\xc2\xc0x\xba\x98Y=9\x904,\xbe!\x8fNy-Gy\xc2\xda@\x8cgL\x8a\x9a\xc1Y|\xfcd\xbb\x0d\xd9\x1f\xc4\xd5@\x11L\x1c\xa3\xdb\xef\xd4\xe4\xf4i\x99\xc3\xa1\xf2\x13\xf5n(\xc4\x81\xf9]\xbd\x14\xf5\xbb\xb7\xb4\x15Z\xea\xad\xbd\xb5WLz6\xd4\x1e\x8e\xb1;\xf1h\x9c\x98q\xb79\xed\xda\xae\x075\xc7X\x9e\xde\x1c\xa4\xa3\xbd\xb6\xcd\xbbam\xf7\xc9\x10\xf5\x96o\xeb7\x00o\xb7\xad\x14\xd6'\xca\xb4~ 88\xa0\xb2\xaf\xc3\x87\xc0\xc1\xc1X\xed\x81\xd1\x19:\xd2{\xde\x85\xe31\x1c\x90\xa1\x82\xb5\xd6\xf3\xda\xbe\xc3\x8c\xf5\xc6\xdb\xec\xb0E3\x83\x14B\x08 Ap\xc9L\xd7\x02\xdb\x97\x0e|\xc5\xcf\x85\x81\xf6-~\xab\xbb2\xdf\xe1\xe9\xfc\xdd\xd9\xb7\xf3w\xa3\x11*\xf1\x1b\xfb\x9d\x03W\xec\xcfh\xe6\xc0\x1a\xbfe\xdf\xd78\xab\xb9\xa0Y6t\x8f\x8e\xcd\xe0\xe4\x02!\xb8\xc1\xef\xce\xbe\x1d\xcf\x16Z\xb1\xab\xfdbV\x00\xcf\xf1\xf5\xc8\xbc\x19_\xa3\x93SX\xda\xef\x1cl\x7f\xddn\xa7\xf0\x1c\xdeq\x00a-\x95\xb7\xc5;\x8e\xc9w\xe3Yc\xe8\x9ab0BM\xbbd\xe6\x8b\xa6\xd1!\xcb\\\xb7\xb4\x89\xb5F\xb9\xb0ni\x13km*\xe0\xb2\xe6\x0b\x972\xf4\xe3\x1a\xd2Q\xe8 \xc81\xff\xa9F\x14\x8e\xc3c\xd3\\\xeb\xec?A\xc8\x01Y-\xaf\xe1\xc9\x11\x9a\xbf`\xa0\xbed\xff\xbc\xc2\xc5>\xb6_ql_\xe2\x82a\xf7\xb2\x8e\x98P$\xaf\x99\xb7l\xd8\x12\xaeK\xfb\xb2\xe6\x14\x00\x0d\x80\x8d\xc5t\x84[\xb6\x10\x93\x825\xecm><\x1c\x9a\x8ci5\xdb9z=x\x8b\x1c84\xa2>>\xd6\x1d\x85\xde\xd8\x1d\xa3i\x83\xd4\x0c\x88\x9b\xc5\x87\xe4D\x1f\xd8\xc2D\xfc\x8b\xc0\x16\x8d\xdd\x05v[\x846`\xa3}\x97&w`\xbdo\x12\xea\x9d`\xe5\x13\xc2)P\xcd\xf1\xbb\x17\xa8\xe1\x92\x02\xdf\x1cr\xfc^+\xd7\xafK\x8a}\xcf\xaft\x97\xab{\x06\x9a\xcd\x0e1\x0cuc\xa3\x81\xf8 \x9a\xb4\xaf\x80\xbc\xc7Q\x16\xc9T\"\xf4\x16\x1fMa=\x1c\x9a\xa2)\x9c\x98\x1f5\xef\x0eB\xf0\x11\xaf\xcc\x8f \x1cdW\x1d/\xc3G\x04\xd7\x1d\x9f\xc4G\x04Wg\x05\xdf\xff\xbcBp}^r\x82\xbf\x96\x07\xcb\xe4e\xa5\xf8\xed\xfef\x0bVAwjV\xf1\xb2\xfe\x96\x93\x88UH]V\x91\xe4\xdb\xba\xd8H&\x8bH\x9d\xb0F\xd3\xf1rd\xd2\x9aw\xa1\xe3t\xdf3\x0f\x97\xc3\xa1\xf9=\xcex\x9cQs\xd8?\x8378\xe7i\xcd\x81~\x04_\x99T\xdf\xe0\xb7\x0b\xdb\xb1\xbe\xf2\xb3\xa5\x9fY\xca\x17\xb5\xb9r`\x92\xe2\xc0|\x8bn\xdf\x89\x99\xe28\xfe\x81U\xfb\xcc~Ma\xc3\xfe|\xe1\xbfy#\xef\xf1\x14>4\xb1\x9e\xef\xcf>\xcc\xdf\x8fF\xe8#\xfe\xc1~\xef\xe0\xcbEl\xbe\xb3\xdf;\x8c\x9a\x90\xc5\x7f}l\xd4\xa4\x8f\xe7\xd3\xe1\xd0d\x0d\x8f\xf0G\x04\xc5\xd9t8,\xcf\xa7\x8b\x8fg\xd3\xc5\x17\x9e\xeaN\x88[\x9a\x1f\x91\xb5\x11\x85\xe4_\x99<6Y\xc9\xd2*\x10\x82\xafB7\xf8\xa8\"\xc1>\xf2\xbe\xf9\x18x\xdf\xfc\x97\xa4\x99\x0b\xf3#\xd2\xe0\xa8\xab\xaa\xfb\x0d6\xf8\xbb\x0e\x95|m{\xb50\xff\x83\xdf\nP\x17\xa5\xf5\x1d|\xc2\xe6\x7f\xc6\xaf\xd0\xc9\x8b\xe3\xbd\n\xf0\xe9\x08+\x1b\xeaS\xed?jC0\xc6\xa7\xf0\xa9)\x84\x90\xf5\xa9\xc7\x03\xc2Sn\xc4.\x12\xfe\xa4oBK\xa4g\xe2\xfa^\xa3\x89\x9d\x93)\xdf\xde\xbca\x9c\x15\xef\x15\x84N1\xee\xcc\xc0\xd2\xf3\xdc\xdbD\xb3c\xd8\xad\xf5\xb0\xc6\xd5Q\xf1v\xaa\xa6\x8b\xf6C\xc4\xd5\xd3\xbe\xacZ\x07\xe0\x17|\xe0\x17\x07\xf6.\xf9~\xac8\xedS_mv\xb2\xcf\x9c\xeb\x9b\xaa\x82\xb3\xe9v\x1b\x9c\xeb\xbb\x1d*(\xc4\xb3\x82?\xb37 ..L\xadY\x9b8\x88\xdfJ\xc6`\x94\xfb\xa8nk\x1f\xd5\xc7\xaeM\x1d\xf0\x04\x9bR\x9b\x9a*f\x18\xc4%\xcb\xbe\xbeU\xe9\x91\xc4\xe3\xca\x92I\xc1\x07\xa2m=\xeaW\x9b\xd5\xa5:\x11\xa8\nQ}\xf3_\xbb\xe6\xda\xb3\x00mG&\xdf)\xd4\xa3\xf6\xa4\x1c]\xc48\x92ju\xfb\x16p\x03Y1v\xcf\xa6\x0b\x99\xad]Xm +\xaa\xb5#e\x0c\xb9\x183&\x115\\D\xe6H\xeeU\xf7\xa3e!\x08\xf9.\"\x0f\xc56]\x84\x161^Z\xc1p\xa8v\xad\xcf)\xaf\x19\xd8\xb4\x15\x18\x16\xa3El\x93\x7f\xc6\xb2\x94c\xc5\xca\xcd\xb9Ofm\xdc5\xdb\xc8\xedx5\x85-\x8d\x87A\xcc(@y/\x19)+\xd7\x9e\xc4\x94\xf2\xdcI\xa7\xe9\n\x93\xe3}\xf2U\xb1hm\xee\x02\xf2\xe4\x9dd\x1d}\x0f$\xcc\x03\xac\xc7\xb4,\x02\xcb\x0e\x1c\xb8\xae7\xf4a\x83\x03\xbe\xbb\x8a3\xee\xc5\x80\x80\xa9\x17\x99\x19A\x00\xf2\n\x81Jm\xe4\x87r\n\xd7\xb5m\xbd0KL\x17\xfb\xe9\x0d\xb1\xb6\xa3\xa5\xcc\xfd\xa2\x102\xd56?\x9f.\xf2\xf1\xcc\xca!i\x9c\xd5+\xb8l+b\xe3\x19L\xa1\x84\x12!\xcb\x9b\xaf\xb1\x08N\xb8\xc2\xd3\xf9\xd5\xd9\xf5\xfc\x8a\xa9\xa1l4W\xfc\x06\xa1\x8b\xe1p\x831\x96'w\xben\xb77\xcd\xcdr7\xf8h\xba[\x9eO\x17E\xcd3\xd2cS\xe8\x1e\x9bq\x84N\x96\x08\x8dfV\x81g\xb09\x8b\xb6[\xde\xd0p\x98sw\xaay\x89\xd7\xb0\x1e\xe1\x02Y\xe6%\xce\xc7\x05\xe4c\\ (qg\x85^\xc1\x86\xc7\xa8q\xbd\xf3\x10BJ\x08\x99E$8\xc0=c/\xc631z\x15.\x157\xdb\x9d\xb3ElO\x19\x05\xef\x9b=\xeaby\xfc\xf5^\xdbG\x15\xed\x0b}imn\xd4\xf6\x0d\xed5\x80\xe2\xbe\x02-\x03h\xfe\xf5\x8e\x10\x1a\xd1\xd5C4\xf3hO3\x8f\xfb4\xf3h$\x93\xd5&$\x0f\xcerA\xec\xb4\"]k\x0fj\x1e}\x1c\x8dLW\xd3\xdac\x8du\xd0\x87\n\xe6\xbd\x82\x7f\xa5`~X\xe3\xffc\x82\xf9\x01\x91E\xfa\xfdrj\xa9y}\xe2\xf9\xcf\x08\xde\xbe\xa0 =&\xc8\x93\x92\xb4\x9d\xd1/V;eH+\xb8\xa7_\xae\xaa\x1b=\xb4\xaa\xd0\xde\x97W\xfbb]\x91\xbb'\x89\x85\xc8\x0d!\xaa\xb5\x15~\x8b\xa2P\xc0\x08B\x8b\x10G\x16\x1d\x0e\x95iw\xee.BLm\xd7\xb1<\xdbu\xce\xa6\x8b\xb0\xbe\x89\xb7%gY\xee\xb9\x96\xab\xbd$a \xabN\xd6\x9f\x8e`\x9c\xf9\xb08\xf4Z\xe7j\xda\xa1!M\x98\x92\x98g!\xd7\xb4\x07}\xe6!\x0e\xf4\xc3\x1b\x10\xd7\xfb\x97\xe1\xc9)\x82e\xbf\x08\xf4m\xc2\x86h^\xe0\x18\"\x1c\x8fg\xc8bI\xe7EJ\xb26\xb3\xeb\x8b9e\xf2!Q'\xb3\xe4\xae\x9b\xd2\x9e\x86C39\xc8\xad\x13\xa0\xdc\xbc\xaa\xd94\x1bO\xd5a\xd3\xec\xff\x13H\xfa\xdf#^\xda\xa7\x8e\xc5\x12`i\xcf\x1c\xec\xb3\x7f\xdaY3\x07\xa2\xfd\x90\xb8x?\x80\xaeV\x94Kj\x88\xe3\xa6\x11\x8e\x98\xe1lM\xad:zW\xe46<:j\x98r\xacs\xe1x,s\xca\x1e\xae\xdf\x91\x04B<\xf8\xa4\"u\x92R\x85\xe9\x01nm<\x99L\xe9\xca\xb0\x02\x9d\xbf\x88\x99\xef\x9c\x11er\xa8VS\xebS\xa0\xa8>b\xbc\xdd\n\xfe\xa2\x9d\xdc|\xb8v\xd9=d)\xa3\x9dB*\xb6\x88\x9eW\xb2L}9\xbb\xe0\xc1\x1abD\x14\xbb\xb7h'Y\x7fI\x8cz\xfdT\x13\xd1\x0f\\\xf7\xb1\xa2\xfa\xe45r@\xcc\x86P7\xff\xc4)\x18m\xa2\xf9U\xbfs\x9f&\xb4\x92\xd7(\xc9\x81z\x8e\xba\xdf\xdf\xd5!\x94w\xfd\x17\x86%\xd9\x9ed\x8e|\xdb\xdbm`e\x8a\x94v\xa7\x7f\xde)\xaf\xbd/e\xb6KV\x9d\x92r\x96\x89\xdc\x9ai\x83\x8e\xfdI\xec\xeb\xb4l\xb3\x04G\x9d\x91\x96S\xbew\x8e\x86_a\x0d\x1a\xe4\xf7qu\x11g\xdf#\xf3\xb8x:6M\xbf\xd6h\xd0I\xb3\xd2P}\x83\\+\x96N{\xf0\xcb@6\x19k\xc7\x1f\x9a\xe3G=LR.(ugiK~7Z\xe7\x14\xa6@\xc7\xea\x8a\xd0\xb6\x0f;\x80\xa0\x1e\xb86\x05{\xc4\xd3\xb2W\x18\x97\xf2\xef\x1a\xbcwh\xf0\xb4g\xf0\xddW\xd0\x8c\xe6\x99\x00~\xb3\xe8\xa1\xc1\xd3\x07\x0e\xfeN\xc5\x04\xfc\xf1\xec\xae\x12O\xd0x\x06\x14h\x8d\xa4\xee1\xf9^\xfcL\xff\x18~\xc6\xfb\xc8\xd1\x1e\x8c3\x10\xb3vz\x89NA;C\xed(J9\xcd\xf4\xf8\xb4\xff\xa4l\xf3\x10X\x1b\xe9\xe1A\xa4\x87\x0fB\xba\x0f\xed\xc9\xe9\x19\x0b\xa3\xbd\xf1\x0cB\x08\xef\x8b\x16my\xdd\xbbg\xd5\x80\x1fz<\xfa\xf6\xde8M\xf1\xce\xc3\xe9\xdc;#\xfc]\x8e\x1ef\xe5u\x03;Z\x1c\xc4(\x8c\x91\xb7'\x16m\x9e,\xd8\xce\xbc\xbdD\x9a\xfd\xcd\x83\x8c\xee\xee\x0e\xf3\x99\xb1\xd7\xdf$\x9f\xf1\xbeZ\xba\x87==\xd4\x99\x92\x88w\xf6SM{\xfa\xa9\xa6\xb2\x1f\xf7\xae\x18\x89<\xa6\xf8\xc5=*W\x1e\xf7X\xa5^\xdbA8\x85x\xfe\xe2\xa0\xbe\xe5\xb5\xf4\xad\x07\xe8(R%\xf3\xa4\xb5\xea\xd5\xd6\xea\x01\x0dE\xd9:\xda\x15\x90\xe2v\nq)\xaer\x9fL\xe5\x15M*a\x1e\xf3\xebLF\xd8\xb3cG]N[\x91\x04G\x87L\xab\x82\xc7'\xd7\xa6)W\xf4\xf6\x18\xc4>\xa3f+\xff\xffI\xa5\xe6w\x9aX\xf2\xb1\xc5N\xb2\xe6\x00<\x9eM\xa7\x07\xcf\xe2i/O2)\xfa\xcf{J\xa8}\x9c\x96\xcb\xeeO\xe8Pb\x99|\xe6\xba\xbf8\x1d\xdc\xa7[\xf5iV\xbes\xb7v\xe2\x83\x87\xf69\x8f\xeb`\xaf\xab\xecxB\xd9Q\x1c\x95\x03\xd32szh\xa5\xa3\x91(I!H\x15\xea\xeb\x01\xb5\x977\xf9Y\x04\x99,\x90\xc7#\xeeO\x8f\xdd\xc9\xa77\xcaZ\x95\xd6\xaf\xda\xaeb\xb3\x07+\x1c/D\xa9c3>y\xfct\x8a\xaci\x13\x93?\xbf\xc4\x17zdd\x8e\xa7\xf3\xfc\xecr\x9e\x8fF\xe86\xc5+\xc8\xf0\n\x12\x1e+\x92\xe1\xd5hyl^\xd8\xb9s\x92\x88\xab\xf0\x08\xc68W{O\x85\x02\xafM\x13\xf9?\xfb\x92kB\xf0y\xf8\x8f\\}{\xa2\xaf\x80\x80\x1f\x08cR\xeeSL\xc5D\x87L\x82\x8d#>\x08\x0f\n4_\xe1lw\x8f@\xeb\x9c\xdc\xbc\xcbK '\xa1>\xac\xd9\x9e\x04\xf9v\xce\xd1\x8b{\xa5_8\x1c\x12=\xa3\xf3\xf5h\x84Vb\x83\xd5\xb7\xd7\xcey>\xce\xd4\xb5\xbb\xcd\xab\xce<\n\x9b\x8d`\xed `\xff\x9e\x15\xa3C\xc5JQl.q\xc4\x10@\xc73G\x04EJ,\x94*\xb1\xbd\x8c\xb1\xcdg\xd0i/%\xbcj/\x0f\\Bk\xd9\xaa W\xb5\x14q\x05\xd78<1/\xc6\xf1hV\xefrt\xa7\xd3LT\xb8\x9b*\xa0\x9d\xe2C\x10\x8e\xb9Vq\xb8\x80\xdeEz\xb6\xea\x8893\x1d\xc7\xe8\xf8z\x94@tr\n=\x0d@\x1by\xfa%\x07\xed\x9c\xd7}'D\xa0:/\xbb=V\xff\xa3=\" \x8d\x95]G\xd8\xe7\xb2OT{2\"\xee\x0b\xa8\x0b\x14\xe3\x1c\x1d_\xb7\xb2\xff]\xf7\xa7?bn\xe8\xa9\xfdc&\x8dK\xben\x7f\xb5\x0f\x00S)\xee\x02\x90\xe5k\x9bB\x7f\xbc\x9f'Z?=\xf9c^B\xf6\xa4\xbf\xc3~og\xe5=\x83*\xfe\xa2A\xf5\xf5\xa3\x0f\xaa'\xff\x8f\x0f\xea\xf2>R\xe9-\xf0\xac\xeeL{\x85\xbe\xd5\x97\xcc\x16B\x8e/\xec\xab;\x17v\x1fl\x9d6\xfa\xd0;\xbe\xd2@}@\xf9\xd1U\x07\xb4\x87a\xa9\xbfe\xbd\xf36)\xf4\x97\x1fu\xcb\xdf\x0d \x03E\xd7{\xbf\xeb\xbd\x06Xl\x8fj\x1a\x85\xba\x1a4\xf6k'\xf7MN\xd5\xa3t\xa4\x08K\xec\xef@t\xd2\xa3Kj-IH\x9a\xebN\x84B\xc4`\xf9\x9e\xc1\xf2[\xbe)hH7\xd6 \x7f\x11\xdb\xcc7h\xf1ky\xfc\x8f\x93\xb8O\xd7Vo\\\xe8\xe7\xa4\x85\xd6,\x01\x96w\x92\xb6<\xf3\n\xec\xbd\xbb\x89<~[\x90\xe9a\xf1\x88\xa1\xbc\x8d\xd9\xeb\xdco\xce+\xcbc\xf7\xef\xdb\xcf\xd6\xa9\xab\x96\x98\x01\xa0\x0f\xbd9pg\xdb\x04\\\x07l\x0f|\xc7\xe1\x05EC<\xb7g\x0e\xf4V~\x0b\xa9\x88\x980\x0d\xfe\xc7\x00[\x96sd+B><\x00 \xad)Q\xa7i\x8b\x15V\xed)\x0b\xb4\xb7E\x08\x0f\xb6\xa9\xea\xb5[\x85P\xb5\xcb$\xcb\xef\x83\x92\xd5\xd8\x87\xb1yz\xf6\x10\xd1\x899\xe3%\xb5cZ\x87Jk\x14\xb1\xf7\x04\x1f\xba\x95\xb7\xd6\xf3\xf4A\x9aU\x03\xbe\xa5\xc8z\xa7\xbe\x81v\xf0\x9b\xb8\xce\xc7j\xabs\xbe\xe9\"\xf5N\xca\x0e~c6\xff:!\x15\xe5/\x1c\xb4\xdf\xbe!\xcd\xd3\xc4t.mu\xb5\x1e\xc4\x95x.\x02*|hZ\xac\x12\xa6\xf6\xcc\xb1\xf6R}\xd3\xd3\x9e!\xe8m\x8e\xb4\x9b\x13\xf1*\x9d\xd6D\"oL\xbeT\xb3\x83zb:c\x15\x9b\x14\xefG\xa3\xfa\x8e\xd8\xfa\xd9}\x0fAJ\xaf\x07\xdf +\xd8\x03\xf1\xe4\xb9\xc6\x0cZn0\x89j-\xbb\x0f\xe1]\x1fV\x07\x9az\xbe\xda\xa5\xfaZ\xea^\xc4\xd4\xdfR\xb7T?L\xdamH}cj\x15\xe8k\xa1\xf1\xaa\xeeQ\x86l\xa2)\xd1\x0fA\xd7@\xac{f\x19=Uv\x08\xde\xe0\xd0\xfc\x1e:\x92\xa0\x0e\xb0}s\xc0\x99\xe1j\x8e\x0c\xb1\xd2\x0e?w\x0c\x81\xe0\xae\x01\x0f\xee\xae\xb9k\xd0\xcb]\xa1\xb5\xf3$\xdf\x17R\xcf\xa0\x19q\xca\x14\x9f1\x7f\x0d\xcd\x00\xf1\xec\x90\xab^\x1b\xa2 n\xed \xc9\xf3$\x0eS\xcb\xa8\xb2\xbc~bH.Q\xbd\xf1z\x00=K\xb3~\x0fX\x01\xa2\x7f\xe8\x8e\xfc\xfe\xfb\xa1[o9\xe9\xc1\x85\xb8u\xf1 N\x12Q\x981\xb8\x1e\xd6\xab\xb984P\xf9\xf1yy\x9f\xb3\xdc\x82\xee\x9d\x0d\xfdR\xee?\x83\xeb\x1d\xfcv@V\xfb\xda\xc3\xf8\xfb`\x8a\\\xeeI\x0d'.\x0d\xe3\xf4\x13\xe1o\x8d\x85\x13\xc6\x0b\xbed\xa6+\xae\x1f\x18M\xbe\x01\xfes\xc6~\xaa\xc7\xeeg<4G\xfaC\xa3\xb3x\x1e\x8dF(\xe4(\xe5U\xa3\xa6jTW\xf5\x05rC9\x15\xa6\xb8_\x9b\xa70l\xb7\xc3\xf0~\xd6\xf6kD\xca/\xaap\\~\xca\xe2\xb4z#@\xd6\xeb\xe8\x0d\xfc\xd2\x9c5\xeb\xc3\x1c\x97|\xfd\n\x8a\xaf\x02C!V'\x99\xf7\xf0'r\xe7\xcb\x16\xee\x96\x13Rx\x02\xb50\x05\xb9-p4{\xd8\xb8\x96\x7f\xd5\xb8\xd4\xc5\xe3\xcb\x06\xcf\x91J\x11x\x96#\xefW\xa5\x1e2\xfa\xde\xb1+\xba\x01_a\xa2i\x8c!aY\x93\x87(\xc1_#\x91\xb5\xa3=\x90\xe3\x06\xdc\xff]\xf4I\xe4\x1c\xd4\x07\xf7t\xccF\x93&`\xdb.x\x0e\xd8\xee\xc8o\xfe\x8e(\xfb\xd5\xfcuD\x1c\xe2aUCo^\xee\x11\x10\xbeG@\xda\xbcA\xbeB\xddl\x8b\xeb\xe6\x03K\x06~\x87\xee}J\x89\x16\xc7\xa1Z\x06\xb9\xa9/{w\xc5\xf6\x1a_\xfc~\xb3\x0d\xcc\x9f#\xf7l\xdf\xc1\x980#\x85\xfdr\xf9M\xb4=\x9b}\xc4\xd9\x07\xa4|\x08$\x8c%r\xbc\xcbG5\xea\x8bu\xe5\xc3\x1e\xc4\x0e\x1c\x07\x1fMe\xb6\xd7\xca\xa6\xd8\xb3\x03\x07|\x9br3J=E\x13\xc0\x0cA\x0f\x90\xd4\x81\x10\x07\xea \x11\xb7\xd5T]9\x84)\xb8v\xe04xWh\x12\x89\x0ef?\xee\xd5\xe0\xfa\xd1\xde\x87\xe28\x10\xb8\xc5\x98\xa0\xdb\x1a\x0c\x7f4c\x80\xecC!'KP\xd1\xee.\xfdO\xdb\xda\xadA\xf0d\xc8H=xO\x82\xe0\xda\x9e\x04\xc1U x0\x93!k\xbb\x033~\x87\xe6\xb8o\x88\xff\xdc6\x8a\x7fQV\xb1\xf2\x0e\x1c\x16\x84\xf7\xecA\xd4\x83k\x0d\xb6\xe7\xfa\xce\x96$\x97T\xe7\xff^y\xbew\xa9'\x15\x97z\x06\xe2\x1c++o\x1b\x9cm\x18\xa3@<\xf8#\xf7\x19*\xfe\x04\x1aw^\xc8\xc3\xf8J#S{e\x87\xb5\x04\xae3\xbf\xed\xd7\x99\xbd\xfa`\xe6\xfc\xedA\xbd\x99\x15\x02*4b\x8a\xa9\xae\x11\xd3~\x8dXL\xc7\x01%[\xbeT\xf7;\xb4\xe6\xfa\xbda\xa3\xa0 \xa9\xe2+j@vE\x8b \xc9\xae-\xf5&hW\xb7\xf6`E\x8a0N-c\x9ao\x0c\xc8\x89\xef\xc7i(\xbf~\xa7\xdaM\xefT\xbb=}\xbc\x7f\x95\xda\x1d\xe0GgWVXd\xeb|\xe0eY\xe1\x8b'\xed\xb11\x1dL\x0d\x91R\xc6_)6\x1e\x8d:\xcd\x8f\x8c\x811\xea\xb67zd<\x1a=\x1a\xf0\xf7\x80q\xf3\x803q\xcb,YWt^e\xb95\x9d\xf3'.\xa7s\x81\xc9\x9e\x86\xf3\xcd\\\xc2\xdb\xd7C\xbe\x99\x1b\xe7g'\x12\xea\xf3G\xadqJ\x9e\xe7/\x89G\xd3\xea\xfb/\x1f\xde\x9b\x86K\x83\xac\xa0\xafR\xdf\xa8\x0d\x1b^\x15wi#\x8a\x13\xbf\xa0\xa9\x89\xea\x8b\x8c\xc5\xaa\xa6~\xfd\xe6j^P\x91\x86\x0d\xe3\x81\xba\xaf\xed\xe8\x8fS\x82\x08\x89K\xf1\x14V\x0d\x8fK\xcfV\xf3\x94\xa9\xb0v\xea`\xc3\x18\xb9v\xca5X\x03\xe4\xefY\xbd\xbf\x1b\xe1P\xb1?\x1e\xa8\x1c\xe0@\x9a\x0f\x01\xc4\xd2\x94`3\xc0\xf4\x18\x1f\x1b\x01IJj\x0c\x1eY*\xed'\x89\xd9G\xa3\x80\xe1\xd2\x90\xc9\xdc-\xcaR\xfd\xd1#c\xf0\x08\x96\x98\xca\xa6\x98\x12\xd4\xb4\xc4\x1a\xaa\xaf\xedb\xe5)+\xaf\xcaT\xc5\x9au\x06\x178\x14\xe1\xf7\xa1\x1d\xd6g3\x9d\x85\xb1\x19\x18\x96a@\xc2\xa9\x8e3\x8f\xbf\x88\xea\x06\x8c\xecb\x9f?h\xc2\xdb}4\"\"9\x1e-\xef\xa2HA\x8b\xf9F\x90fMy-\xb2\x94\xbd0\xba\x144k\xec\x81\xc5\xa8R\xad}\xd6\x8ad\n\xec\xa7\x80-'U\x84\x8d\xd5\xe0\xd1\x88\x8d!\x19\x18\xa3P\xbd\xae00\x10\x1f\xd6\xc5\xe8\x11\x7f\x83\xc5\x180\xea\xe6\xa387 9h'h\xba\xb2\xa05q\xa5\xb3\xf23\x8d1\x05\x9f\xfd\x13K\ny\x18UD\xbdT\x11(\xaa\x08\x1fF\x15a?U\xb0i\xcf\xaeH2\xf8Cs\xc5\xa6\x88\x11(\x9b\x08\xfe\x84\xbbe\x8c\\\xf1\xa5\xe6\x85\x1e\x9f\x8a\x049\x8d\"\x85\x8d\x88\xb3\x0c\xd6\xf7\xf9#\xb8\xb8\xc3\x02\xd1\xec\x0fX\n\xbcv\xee0\x9d\xc7\x81\x19\xf2C\xeb\x02\xd5\x861\x8f\xc6,AX\\<\x8ew\n\x91\xfcD\x90hW\xc3\xba\x13/+\xcd\x10\x1d\x07\x08V\x98j\xe9e\x9c\xca\xf4t\xaf|\xc4\xd3\xb3\xbd\xf2<\xbd>&9\x1c\xae0\xc6\x19\xdf\x00\x88\xc6\xe1\x19\xef\xbd\x061\xc1\xac\xdd\x00V8\xc3T\x1dM\xd7\xeb\x0d\x87\xaa\xd2\xc20,\xf3\x02\xdb\xfe8\x00:\x0e\x80U\xa3\xa3@a\xc1\x81\x1c\xc7\x0f\xa6\xa8Y\x0f5\xc5\x82\x9a.\xf1\xf2a\xd4\xb4\xec\xa3\xa6\xe2\x7f\x91\x89\xe4\xa3\xcb\xff\xbb\x98\x88\xcfE\x03\x1d\x19\x83k\xc2X\x87\xceK\x1e\x0d6\x83\x1eFR\xfcE\xa6\xa52$\x1b\xd3R\x19\x9b\x9ai\xb9\xe7\xaej\xc4n\xeb\x05\xb7\xc3Fhc\x1b\xd4\xca*\xd9WV\x89TVu\xb0\x95\xd0^\xb4\xfa\xbcS/p\xe5]\x18\xb5x\x1f)S\xe0\xcf\x98\xb4\xbei\xfc]\x91\x921\"j\xc7\xa1\x1e\x8f\xbb?\x1eW\x8e\xc7\xb3\xa7\xce$[W\x12Q\xf4\xa1\xb6k\xa7Kq!>6\x0ch\xacIi\xc8\n\x03!\x10\x06\xc2\xa8\x03\x98\x1d:=\xb0\xb1\xd4~\xf0d\x8b\xb3yx\xd6\xbc;3\x1a\xa1.8\xa1\x83\xb47\xfa\x1fd\xa0\xfeY$\xf6\xcdXR(G\xc2\xb7>44#_\xfe3\xff\xea\x7f\xe9\x895\xc3\x07U\n_|G\x7fp\x1f\x08\x9f\x10\x01#\x00\xa0\n\x9a\xbf\x03\x08\x04E\xcc\x85\x10\xbf\xd7^\x8d\xcbA\x04\x10\xc0\n\x88\xb0]\xe7\x05\x11`\xa4\xec\x18,X\xde3\xc9\xb6\x9d\xf0\n\x92C\x98\x0b\x05Q\xb8l\xa8\xc8\xe7\xde8\xcag\xdd\xb0\x9f\x89j\xf4\xde\xec\x8e\x00\xd05'B\xd7\xa4.|G\x0e\xf4\xc5\x8cV\x0bL\xf4\x17\x19-Go\xcf\xea\x8a\xf0\x96\xa4\n\x08X\xc9\xcd\xcc\xe4}o\x01\xe4\x8d\xe5&\xaf/\xd4yy\xae\xc6\xc9\xb5\x041\x19\"a\x17g4\xec*+PpH1j7\x07\x91\x85\xddx\x84\xde1\xbfm\x17\x8c\x80W\xce%w\xbe-\x9d\xad\xa5\xfc\xe1\xcb\x0b\x04\x85L=\x83\x83\xc7Y[\xbf\x18\xf5\x86\xae$\xbfIc!\xcb\xd0\xd4\x83j/D\x9c\x8f\xe7\x92\xd8\x82\xb5\xa8\x0f\xbd\xd7\x1aA\xacAC\x80d\xdb<>\x80\x87\xaeb\x07\x99\xbf@\x90\\-\xaf\xa0B\xb1\xb4\xca\xc0@\x1bd\xedRv\xae\xb6\xd8\x1c,r\x881h\xe6A\xbbc\xe7\xde-k:c\xe7Rg\x0e\x80\xd4CPz\x14Y\x00v\xf6;.HB_\xff4\xce\xb5P\x95^3\xb0\x16\x90\xddop\x8f\x12\xe7\xc0\x18\xd4{\xc8\x02(\xe0L\xa7_[)\xc0\x1e@$P)\xcf\xb1\xb2z\x19\x1a\x1cH\xe8\x9a\x95X\xe1\x1d\x931\x881\xe0\x94\xae\x19\xabv\xda\xf9A\x94s\x866P\xacI\x08>\xdaqA\x1e\x85\xe4mN\xa8\xb2K.\x01\xd0\x9d1y\x07Hd\x84\xdb'\xab,\xd4S\x8e\xacl\xd2\x95\x1a\xac\xdb$.l\xd0\x0d)\xa2\x00`@\x00\xe4<7,\x17\xc6\"o\xa5~\xefF/\xd9\x01\xa2Pt\xa6\x0d\xd2\xc7\x91\xe5f\x17DP\x86\xf6\xbd\xc2\xe0\xc01\xbc/R\xabO\x82\xd1\x1e\xa7\xc4\x18Dz\x17I\xe9\x95\xbc\xcdy\xd1\x14\x1d\xa1\x95\x82W\xd0\xed \x02\xb5\xd4\xf3\xc7//\xd0L\x03\xa8\x10\x17\xd7\x18\x1c<\xca\xf8\xd8\xd3,-_\xc3\xe9\xd3\xb7\x90fU@\xbb%\x82\x8d\x1d\xc6\xc8\xae;\xa0(\xc0[\xde\x12Av\x85\x00P1\x10;\xc2f\x06\xaa \xe0\xb6'\xd0\xb9Z\n\x02`(\x97\xe7\x99:\xf4_\xcc\xce\xde\xc9\x993\xf7\x03\x80t!\x88\n\x11Qd1\x08\x82\x9e\xd3-\xba\x11N\xf4\x82)D\xce=\xda\x9d\x13\xf0\x08\x1e%\xd8\xdc\xf9\x01\xb7\xcb|\x94\x8a\xcb\x84\xe0XY\xb9\xb2\xf7fd\x0b\xc2Q\x88-\x91O\x88[\x0d4*\xa2\x85R\xef\xca\xed\xd9\xb8v\x07P\x80\xb4\x85ilP\xab\x0c\x92\x89\xa0\"\xbb\x87\xdfre\x8e\xe1\xe1\xd7Y\\\xbc\x8efs\x04\xd0\x9ep\x1bE\x8eRs\x8d\xe1\xa3\xcf`\x8c!\xf4\x8f\xb0y\xf1\x0d`,\x08\xdd\x02O{\xa2\x8dv\xc3g\x0fq\xb7O\xf2n\xcd\xbf\x1bD\xc8\xbf\x06\x14\xc1\x8b\xc1\xae/P:\xfe\x1c\xc9\xf5\x0f\xd3\xb2\x06\xcd+\xe2\x1e\x10\x11e|\xe2qF\xda\x10++W0;{\x07\xaa\xa6gA\x8d\x11\xac1\x94\x97g\xb1\x1ah\xdc\xf00\xce\x08\xb1\xb1\xd8\xf5EL\xbb_\xabC\x84\x91Id\xe5,f}\x01\xad\x0c\x12\x06\xc70\xed\xefa\xe4\x00R[\x011h\xb9\x1f\xb3\xd4\xee\x1bzsL\xea\xeb\x84}\x07\xd0\xbe!\xcc\xeaz\xa8\x03N\x1bB6V\x10\x9f\xe1U\xf1a[\x1e\xa9T\xcer\xf9\xe5\x7f\x8d\xb5 \x0b\x8b\xd7S\xaf\x8f\x83\x04PC\xb1\xb4\xc2\xdc\xdc-,-]\x07\xa2\x80\x80\x13l\xac\x98\x8de\xca\xb3\x87\x11`\xf3\xd0\xd5\x84\x89\xcb\x88\x93\x16\xf6\xe4+h\xb1\x82?x\x15vh\x0c9s\x98P\xa8\xe0\xa3b\xc7w\\\x1b&\xdb\xf2\x9fV\x03\xe33\xb2R?\x1c\xb8\nw\xecy\xe4\xd8\x0b\x84\x81}\xf8\x03W`\xdb\xf3\x9b\x13/\xa3\xa5\ni;\x90\x98\xad\xf9\x8e\xbfHV\xa8\xd0\x1a\x1c#\xf5\x8a\xf7\x01r\xc9\xd7\xfe\xda\xef\x84\xdf~\xee\xac4\x1b\xfbI\x93>\x94\x9c\xd0\xb5\x98\x98|\x94\xb9\xb3\xb7\x93t\xccJ\xbb\xd5mT\x8a(:C\xec3\x9c\x11l\x14cE\xda\x0dL\x96\x80\x08\xd8\x084 \xc1\xa3\xc6m+\xfa\x02\x88\x01\x14\xcd\xa3\x13\x00\x1a\x90,\x05\xeb\xc0X\x807wZ\xa4\xf3\xfb\x00\xf84%\x15C\xa6\xb0\xb1\x99\x91\xa6\x1e\x02|\xe1\xad\x15u\x9b\xf5 \xd6V\xaa \xddH\x0dj\xa9V\xa7\x01H\x92*\xa0=a4\xa8\x92*\xa8\x8d\xc8\x04\xac\x0f\x98\xdc\xf9D\x1c\x82 >\x80\x08\x88\x83|j%\x00\x02\x04r\xf5~61(\x90\xaf4\x12\xa1(\xea\x95\x00\x04qx\x94V\xe6I\xb3\xd0s,\xe4\x10@BO\x08\xee\x1f8\xc2\xe4\xe4c\xcc\x9e\xbd\x03\xd4\xe4\xa6&\xf9=(!\xf1d\xc6\x10\x04\x8c\x80\xa1\xf7\xb4\x06\x14\xc9\xe7\xea\x91\x82\xa2\x17T*k\xcfk\xde\x142\x0d$I\x06As\x88\x1c\x04e\x1bD`b\xe2\x89N[]\xbd\x94\xf5\xb5\x8b\xba&e\xf2\xe7u\x1fb4\xf5x\x85P\xc8C\xac\x80hOq\xff\xb6\x1f\x95i\xdeB\x16\xd0v#h\xcf\x80\xa3+a\xdf\xbe\x97\x19\x1f\x7f\x92\xf9\xf9\x9b\x99\x99\xb9\x0b\xef\x8b\x80v\x00\xc6\xdbp\x1b\xebSll\x1c\x02\xd1\xfcqV\xa1\x18\xe5\x19\\\xbb\x10\xe7%\xd1\xf3\x03\xc9y\xa1\xf3\x7f7\x87\xe0\\y\xa4\\\x99\xe7\xc0\x81\xffca\xe1&\xa6\xa7\x1f@\xd5\x00\xda\x1d\xf3>\xa6V\x9b\x00r3\x03\xd4\x07\xf0\xa1\xe7\xd1V\xf7\xba\xe4\xbb\xc0\xf5B\x044\x0d;.\xda\xee#\x08\x03\x9dg\x8e\xb8\x13n5\x98n\xb8\x15\xe3\xe9\x1f8\xc5\xf2\xd2Uh\xb0;\x82\x02h+\x83\xd8\x815 \xecMy\xaduN\x05\x05\x1f\xba\x8b\x86\xeev\x1c\xa4\x821)\xd5\xea\x0cg\xdb\xce\x9d\xb4\xf2P\xab\x06c\x93\xb6\xb9\xbdD\x14\xd5h\xe5\xfd=\xc7\x95\x92\xc3$)8\x83X\x0bF\xba\x03\x9a\xdf\x84 \xe0\xcc9nVQ\x1f \xf3t\xe7D\x90\xbc\xaa%\x04\xe8\x1e/\x9d_\xceEu\xc6\xc6\x9f&\xcb\xca,-]\xd3]\xf1\xc1\xa1#\x8c\x8d=C\x7f\xdf)NO?\x08\xe2\xc0\x91\xe7\x82s\x1c\xa8\x05E\xb3\x14L\x0e\x1a\xb4\xdb\x14 \x13p\x16\xb19\x90\xe6\xf6\x9e\xed\\eP\xc0\x1a\xa1\x10Y\\\xd1\xe1\x83\x92d\x81\xd4\x87\xddA\xfa\x06N\xb2\x7f\xf49\x8e\x1e\xf9\xa4\xee\xe1B\xa9\xbc\xc4\xd4\xd4\xbf\x11|\x81\xd9\xb9;XZ\xbb\x0e\x9c\x01\xcd\xb7\x17\xd8y\xb0\x865\x80\x81\xcc\xefn\"I\x86\xcay\x9e\x89\x01c\x0d\xc3\xfd\x05F\xfb\nT\x0b\x8e\xc8\x1aD\x95$\xf5,\xd5\x12fW\x9b4\x12\xcfN9U\xd3q\xf0Ni\x92\x9bT\xa5:\xcb\xea\xeae\x9c\x99\xb9\x1fO\x19\x11\xc0{r[\xce\x9b\x01\xcd3u\x08@\x80m\xab\xbd\x8b\xce;f\"\xcb5\x97\x0c\xa0\xe5\"\x8b\x85\x12+\xc5\x88V\x14\x11e\x9e\x81z\x93\xe1R\x93\x81j\xcc\xf1\xf9\x1a+\xb5\xa4\xf7\xb7[\xb6\xbf\xb8p= y\x03cR\x96V\xae\xc5S\xe1\xca\xe1\x02\x9fpI?\xd5\xc8\xe4fc\xe8/e\xdc:2\xcbg\\\xfe*\x97\x0d\xad\x82\x98ff\xeea}}\n\x9c\x01\x94F\x1aP\xb1|\xfeU/\xf0-7=\xc1\x93s\x1fM\xa5\x7f\x10\x1f\x0e\xd3\xf4}\x0cU=?w\xdf\xdf\xf2\xcd\xff\xf7\x91L\xaf]\xbag\x0eD!x$Sn\x1b)\xf2\xafNhe\x81\xd5\xa0|\xee\x08\xac&\xf0\xeb+\x8e\x16\x06\x1aM\xd8l\xa1\n\x18@r\x10\x95f\xe7\x00nv\xe6n\xb2\xb4\x02\x92\xc7uc8\xb3\x91\x80\x08\x7f~\xe2\x1a>\xee\xa2\xa3\xdcs\xe8i\xa6W\xcbx\x1d\xe3\xc0\xfe\"\xb5\xc2\xb5\x1c\x9e~\x9e\xd9z\x05\x00D \xec\x81$(\x84\x8c\xd5&\xfc\xef|B6\xe6\x01\xa5\x16\x84\xdf_\xef\xa3\xe1\xe9\x80!\n\x1buH3\x90\xde\xff\xf41\xebkWsf\xfa\xbeNBD\xc26\xa7\xa5\xeb\xb8'V\x07\xf8\xb1\x17\xeeauc\x9e\xa3gA\x81\xeb/\x0e\x1c\xcfn\xe2\x8b\xfe\xeb\x93xee\x1f\x88\xee\xdd\xb4\xbcB\x96\xa1>c\xad\xb5\xf5\x9er\x95\xab\xf3`\xbc\xcah\xa8!Y\x82\x84\x8c\xa2f\x8c\xfa&x\xbf-\xeb\xe7 Ys\x82\x10\xe2\x9e\x1b\xe8 \xa5\xaa\x80\xe7\x9fN]\xc27<\xfa\xf1\xd8B\xc6\xa7^\xfb\x0cqi\x04u\x03\xd4\x12G\xcb\x1b\x90\xbds\x10\x804\x80O\xc1g\x0cK\x8b;\xfd\"\x13\xabs\xdc\xd1~\xff\x8c\xf2\"\xd7D\x0d\xa2V\x83J\xd2\x84\xe0!Ka[bt\xec&\x1f\xf2l.\x10\x94@\xe0O\x0e_\xcd\xd3\x0b\xe3|\xc4\x81\xa3\xdcV\x9b\xe0tk\x1d\x1fx{\x94\x18\x883l\x96P\x0e FS\xb2V\xca\xf4\\J_\xd12\xd8\x1f\xf1\xcaR\xca\xc6R\x03\x8c@b \xdb\x9e\x86\x04\x05\x84\x9d\n\x01\x82\x805y\xf6V\x10\xcf\xb1\x95\x01~y\xe56\xe4eE\xa8\x13\x82\x01\xd5n\xe4A\x95=)\x18H#.w\x9er\xab\xc9\xe3\xae\xc2\xfe\xfe\x12U\xcd\xd8\x108\xd9PX[\x87\x90Aj\xa1ez*$\xf9\xae\xdf\xfa\xcfS?\xf4\x9f\xcb\x87\x1a\xbb\xfdQ\x8d\xb3`r\xc7\xd2\xbc\xed4#\x93\x03gy\xb9\xb2w\xe1\\\xc0\xc5\x9e\xcd\xd8B)\xc6\xc6\x8e\x8b\xab\x868Mym\xba\x86\xa6\x162\xdb\x0d\xf7%+|\xeb\xc3C\xb3\xf2\xf7\xff\xf1\xe8\xb7\xfe\xca\xe3\xeb\xdf\xf1\x0f\xaf\xd7+\x9b;`\xba{eL\xbe\xe2ta\xbac\"\x90\x97\xdco\x8b\x9d) \nF\xc1\x04\x10%6\x82Ch$\xb9\xa9+\x00\x14\x9c\xf01W\x96\x1b_z\xf7\xc0\xf7\xb9\xad?\xdaR\x90\x1b\xc7\xe3o\x98^\xcb\xc6w\x8d\x9e\x02\x18A\x8ca\xa7\xd4\xe7\xa6\xf7\x0ej\xa7\xfd\x1b\x81\xc9\x017w\xd7T\xf1gn;T\xf8\xe9\x0f\x01\xed\xf2ln\xbd\x85\x11\xa3\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x08&\xd2\xc7\x1f\x1e\x0d\x00\x00\x14\x0d\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00;/TL\xb5Q\xa0\xce\xe9I\x00\x00Z\xbb\x01\x00%\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00bootstrap/3.3.1/css/bootstrap.min.cssUT\x05\x00\x01\xe3\xb8\x8bZPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x89\x89\xb8H>\xd4\x17\xe7u\x02\x00\x006\x0e\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81EJ\x00\x00favicon.icoUT\x05\x00\x01s\x8bDWPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x94\x91O \xa9\x03\xb9JR\x00\x00\x00P\x00\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xfcL\x00\x00images/folder.gifUT\x05\x00\x01\x98w#1PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00!z\x92E\x01\x84\xa6\xa6\x8ct\x00\x00`I\x01\x00\x1e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x96M\x00\x00javascript/jquery-2.1.3.min.jsUT\x05\x00\x01\xef\xef\x92TPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x9dJ\xb1L\x9d\x06\xc6\xc6-3\x00\x00\xef\xa8\x00\x00:\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81w\xc2\x00\x00javascript/jquery-sparklines/2.1.2/jquery.sparkline.min.jsUT\x05\x00\x01zI\xfdZPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00j\x8dGM&\xd2\xc7\x1f\x1e\x0d\x00\x00\x14\x0d\x00\x00\x10\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x15\xf6\x00\x00seaweed50x50.pngUT\x05\x00\x01\xb9E\xba[PK\x05\x06\x00\x00\x00\x00\x06\x00\x06\x00\xf3\x01\x00\x00z\x03\x01\x00\x00\x00" - fs.Register(data) -} diff --git a/weed/weed.go b/weed/weed.go index 6e69c1480..91c17d9ff 100644 --- a/weed/weed.go +++ b/weed/weed.go @@ -1,12 +1,12 @@ -//go:generate statik -src=./static -// install this first "go get github.com/rakyll/statik" - package main import ( + "embed" "fmt" + weed_server "github.com/chrislusf/seaweedfs/weed/server" flag "github.com/chrislusf/seaweedfs/weed/util/fla9" "io" + "io/fs" "math/rand" "os" "strings" @@ -35,6 +35,13 @@ func setExitStatus(n int) { exitMu.Unlock() } +//go:embed static +var static embed.FS + +func init() { + weed_server.StaticFS, _ = fs.Sub(static, "static") +} + func main() { glog.MaxSize = 1024 * 1024 * 32 rand.Seed(time.Now().UnixNano()) From 9a6aa00e9d1178fb85105dbe1505619b02723015 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 02:39:52 -0700 Subject: [PATCH 16/40] avoid nil locations fix https://github.com/chrislusf/seaweedfs/issues/2059 --- weed/topology/topology_event_handling.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/weed/topology/topology_event_handling.go b/weed/topology/topology_event_handling.go index e4eb430fe..2f4fba932 100644 --- a/weed/topology/topology_event_handling.go +++ b/weed/topology/topology_event_handling.go @@ -49,7 +49,12 @@ func (t *Topology) SetVolumeCapacityFull(volumeInfo *storage.VolumeInfo) bool { vl.accessLock.RLock() defer vl.accessLock.RUnlock() - for _, dn := range vl.vid2location[volumeInfo.Id].list { + vidLocations, found := vl.vid2location[volumeInfo.Id] + if !found { + return false + } + + for _, dn := range vidLocations.list { if !volumeInfo.ReadOnly { disk := dn.getOrCreateDisk(volumeInfo.DiskType) From 55d547afecda9fc8ea7a142993798f96d0678e9e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 13:50:10 -0700 Subject: [PATCH 17/40] switch back to in memory uploading for now --- weed/filesys/filehandle.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index abdab2b5e..1245cce71 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -38,8 +38,8 @@ type FileHandle struct { func newFileHandle(file *File, uid, gid uint32, writeOnly bool) *FileHandle { fh := &FileHandle{ f: file, - // dirtyPages: newContinuousDirtyPages(file, writeOnly), - dirtyPages: newTempFileDirtyPages(file, writeOnly), + dirtyPages: newContinuousDirtyPages(file, writeOnly), + /// dirtyPages: newTempFileDirtyPages(file, writeOnly), Uid: uid, Gid: gid, } From fe2edd4b50e2a3821ccb03ca262b4633e2e00a89 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 13:53:03 -0700 Subject: [PATCH 18/40] 2.45 --- k8s/seaweedfs/Chart.yaml | 4 ++-- k8s/seaweedfs/values.yaml | 2 +- weed/util/constants.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/k8s/seaweedfs/Chart.yaml b/k8s/seaweedfs/Chart.yaml index ffdfe7b75..91ae0a251 100644 --- a/k8s/seaweedfs/Chart.yaml +++ b/k8s/seaweedfs/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 description: SeaweedFS name: seaweedfs -appVersion: "2.44" -version: 2.44 +appVersion: "2.45" +version: 2.45 diff --git a/k8s/seaweedfs/values.yaml b/k8s/seaweedfs/values.yaml index 0a6be919d..82dbc60ee 100644 --- a/k8s/seaweedfs/values.yaml +++ b/k8s/seaweedfs/values.yaml @@ -4,7 +4,7 @@ global: registry: "" repository: "" imageName: chrislusf/seaweedfs - # imageTag: "2.44" - started using {.Chart.appVersion} + # imageTag: "2.45" - started using {.Chart.appVersion} imagePullPolicy: IfNotPresent imagePullSecrets: imagepullsecret restartPolicy: Always diff --git a/weed/util/constants.go b/weed/util/constants.go index ca554a9de..270cedb6f 100644 --- a/weed/util/constants.go +++ b/weed/util/constants.go @@ -5,7 +5,7 @@ import ( ) var ( - VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 44) + VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 45) COMMIT = "" ) From d06ecc2649416128a69a29187d3f3b89f5ad38dd Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 21:47:07 -0700 Subject: [PATCH 19/40] working properly --- weed/filesys/dirty_pages_temp_file.go | 27 +++++++++---- weed/filesys/dirty_pages_temp_interval.go | 48 ++++++++++++++++------- weed/filesys/filehandle.go | 4 +- 3 files changed, 55 insertions(+), 24 deletions(-) diff --git a/weed/filesys/dirty_pages_temp_file.go b/weed/filesys/dirty_pages_temp_file.go index a04efb6aa..58c150acf 100644 --- a/weed/filesys/dirty_pages_temp_file.go +++ b/weed/filesys/dirty_pages_temp_file.go @@ -56,18 +56,23 @@ func (pages *TempFileDirtyPages) AddPage(offset int64, data []byte) { } pages.tf = tf pages.writtenIntervals.tempFile = tf + pages.writtenIntervals.lastOffset = 0 } - writtenOffset := pages.writtenIntervals.TotalSize() + writtenOffset := pages.writtenIntervals.lastOffset + dataSize := int64(len(data)) - glog.V(4).Infof("%s AddPage %v at %d [%d,%d)", pages.f.fullpath(), pages.tf.Name(), writtenOffset, offset, offset+int64(len(data))) + // glog.V(4).Infof("%s AddPage %v at %d [%d,%d)", pages.f.fullpath(), pages.tf.Name(), writtenOffset, offset, offset+dataSize) if _, err := pages.tf.WriteAt(data, writtenOffset); err != nil { pages.lastErr = err } else { pages.writtenIntervals.AddInterval(writtenOffset, len(data), offset) + pages.writtenIntervals.lastOffset += dataSize } + // pages.writtenIntervals.debug() + return } @@ -81,6 +86,11 @@ func (pages *TempFileDirtyPages) FlushData() error { pages.pageAddLock.Lock() defer pages.pageAddLock.Unlock() if pages.tf != nil { + + pages.writtenIntervals.tempFile = nil + pages.writtenIntervals.lists = nil + + pages.tf.Close() os.Remove(pages.tf.Name()) pages.tf = nil } @@ -91,15 +101,16 @@ func (pages *TempFileDirtyPages) saveExistingPagesToStorage() { pageSize := pages.f.wfs.option.ChunkSizeLimit - uploadedSize := int64(0) + // glog.V(4).Infof("%v saveExistingPagesToStorage %d lists", pages.f.Name, len(pages.writtenIntervals.lists)) + for _, list := range pages.writtenIntervals.lists { - for { - start, stop := max(list.Offset(), uploadedSize), min(list.Offset()+list.Size(), uploadedSize+pageSize) + listStopOffset := list.Offset() + list.Size() + for uploadedOffset:=int64(0); uploadedOffset < listStopOffset; uploadedOffset += pageSize { + start, stop := max(list.Offset(), uploadedOffset), min(listStopOffset, uploadedOffset+pageSize) if start >= stop { - break + continue } - uploadedSize = stop - glog.V(4).Infof("uploading %v [%d,%d)", pages.f.Name, start, stop) + // glog.V(4).Infof("uploading %v [%d,%d) %d/%d", pages.f.Name, start, stop, i, len(pages.writtenIntervals.lists)) pages.saveToStorage(list.ToReader(start, stop), start, stop-start) } } diff --git a/weed/filesys/dirty_pages_temp_interval.go b/weed/filesys/dirty_pages_temp_interval.go index f423b0e85..2d22845e2 100644 --- a/weed/filesys/dirty_pages_temp_interval.go +++ b/weed/filesys/dirty_pages_temp_interval.go @@ -1,8 +1,8 @@ package filesys import ( - "github.com/chrislusf/seaweedfs/weed/glog" "io" + "log" "os" ) @@ -20,8 +20,9 @@ type WrittenIntervalLinkedList struct { } type WrittenContinuousIntervals struct { - tempFile *os.File - lists []*WrittenIntervalLinkedList + tempFile *os.File + lastOffset int64 + lists []*WrittenIntervalLinkedList } func (list *WrittenIntervalLinkedList) Offset() int64 { @@ -95,6 +96,21 @@ func (list *WrittenIntervalLinkedList) subList(start, stop int64) *WrittenInterv } } +func (c *WrittenContinuousIntervals) debug() { + log.Printf("++") + for _, l := range c.lists { + log.Printf("++++") + for t := l.Head; ; t = t.Next { + log.Printf("[%d,%d) => [%d,%d) %d", t.DataOffset, t.DataOffset+t.Size, t.TempOffset, t.TempOffset+t.Size, t.Size) + if t.Next == nil { + break + } + } + log.Printf("----") + } + log.Printf("--") +} + func (c *WrittenContinuousIntervals) AddInterval(tempOffset int64, dataSize int, dataOffset int64) { interval := &WrittenIntervalNode{DataOffset: dataOffset, TempOffset: tempOffset, Size: int64(dataSize)} @@ -223,6 +239,7 @@ func (l *WrittenIntervalLinkedList) ToReader(start int64, stop int64) io.Reader for t := l.Head; ; t = t.Next { startOffset, stopOffset := max(t.DataOffset, start), min(t.DataOffset+t.Size, stop) if startOffset < stopOffset { + // log.Printf("ToReader read [%d,%d) from [%d,%d) %d", t.DataOffset, t.DataOffset+t.Size, t.TempOffset, t.TempOffset+t.Size, t.Size) readers = append(readers, newFileSectionReader(l.tempFile, startOffset-t.DataOffset+t.TempOffset, startOffset, stopOffset-startOffset)) } if t.Next == nil { @@ -236,29 +253,32 @@ func (l *WrittenIntervalLinkedList) ToReader(start int64, stop int64) io.Reader } type FileSectionReader struct { - file *os.File - Offset int64 - dataStart int64 - dataStop int64 + file *os.File + tempStartOffset int64 + Offset int64 + dataStart int64 + dataStop int64 } var _ = io.Reader(&FileSectionReader{}) func newFileSectionReader(tempfile *os.File, offset int64, dataOffset int64, size int64) *FileSectionReader { return &FileSectionReader{ - file: tempfile, - Offset: offset, - dataStart: dataOffset, - dataStop: dataOffset + size, + file: tempfile, + tempStartOffset: offset, + Offset: offset, + dataStart: dataOffset, + dataStop: dataOffset + size, } } func (f *FileSectionReader) Read(p []byte) (n int, err error) { - dataLen := min(f.dataStop-f.Offset, int64(len(p))) - if dataLen < 0 { + remaining := (f.dataStop - f.dataStart) - (f.Offset - f.tempStartOffset) + if remaining <= 0 { return 0, io.EOF } - glog.V(4).Infof("reading %v [%d,%d)", f.file.Name(), f.Offset, f.Offset+dataLen) + dataLen := min(remaining, int64(len(p))) + // glog.V(4).Infof("reading [%d,%d) from %v [%d,%d)/[%d,%d) %d", f.Offset-f.tempStartOffset+f.dataStart, f.Offset-f.tempStartOffset+f.dataStart+dataLen, f.file.Name(), f.Offset, f.Offset+dataLen, f.tempStartOffset, f.tempStartOffset+f.dataStop-f.dataStart, f.dataStop-f.dataStart) n, err = f.file.ReadAt(p[:dataLen], f.Offset) if n > 0 { f.Offset += int64(n) diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 1245cce71..abdab2b5e 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -38,8 +38,8 @@ type FileHandle struct { func newFileHandle(file *File, uid, gid uint32, writeOnly bool) *FileHandle { fh := &FileHandle{ f: file, - dirtyPages: newContinuousDirtyPages(file, writeOnly), - /// dirtyPages: newTempFileDirtyPages(file, writeOnly), + // dirtyPages: newContinuousDirtyPages(file, writeOnly), + dirtyPages: newTempFileDirtyPages(file, writeOnly), Uid: uid, Gid: gid, } From 1737af480a15c6d23456b6b30dd662addbe37c14 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 21:47:51 -0700 Subject: [PATCH 20/40] adjust logs --- weed/filer/filerstore_wrapper.go | 2 +- weed/filer/reader_at.go | 6 +++--- weed/filesys/dir.go | 2 +- weed/filesys/filehandle.go | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/weed/filer/filerstore_wrapper.go b/weed/filer/filerstore_wrapper.go index cd7c0bea3..5175a87a1 100644 --- a/weed/filer/filerstore_wrapper.go +++ b/weed/filer/filerstore_wrapper.go @@ -150,7 +150,7 @@ func (fsw *FilerStoreWrapper) FindEntry(ctx context.Context, fp util.FullPath) ( }() entry, err = actualStore.FindEntry(ctx, fp) - glog.V(4).Infof("FindEntry %s: %v", fp, err) + // glog.V(4).Infof("FindEntry %s: %v", fp, err) if err != nil { return nil, err } diff --git a/weed/filer/reader_at.go b/weed/filer/reader_at.go index b03b3bbb4..458cf88be 100644 --- a/weed/filer/reader_at.go +++ b/weed/filer/reader_at.go @@ -106,7 +106,7 @@ func (c *ChunkReadAt) ReadAt(p []byte, offset int64) (n int, err error) { c.readerLock.Lock() defer c.readerLock.Unlock() - glog.V(4).Infof("ReadAt [%d,%d) of total file size %d bytes %d chunk views", offset, offset+int64(len(p)), c.fileSize, len(c.chunkViews)) + // glog.V(4).Infof("ReadAt [%d,%d) of total file size %d bytes %d chunk views", offset, offset+int64(len(p)), c.fileSize, len(c.chunkViews)) return c.doReadAt(p, offset) } @@ -137,7 +137,7 @@ func (c *ChunkReadAt) doReadAt(p []byte, offset int64) (n int, err error) { if chunkStart >= chunkStop { continue } - glog.V(4).Infof("read [%d,%d), %d/%d chunk %s [%d,%d)", chunkStart, chunkStop, i, len(c.chunkViews), chunk.FileId, chunk.LogicOffset-chunk.Offset, chunk.LogicOffset-chunk.Offset+int64(chunk.Size)) + // glog.V(4).Infof("read [%d,%d), %d/%d chunk %s [%d,%d)", chunkStart, chunkStop, i, len(c.chunkViews), chunk.FileId, chunk.LogicOffset-chunk.Offset, chunk.LogicOffset-chunk.Offset+int64(chunk.Size)) var buffer []byte bufferOffset := chunkStart - chunk.LogicOffset + chunk.Offset bufferLength := chunkStop - chunkStart @@ -152,7 +152,7 @@ func (c *ChunkReadAt) doReadAt(p []byte, offset int64) (n int, err error) { startOffset, remaining = startOffset+int64(copied), remaining-int64(copied) } - glog.V(4).Infof("doReadAt [%d,%d), n:%v, err:%v", offset, offset+int64(len(p)), n, err) + // glog.V(4).Infof("doReadAt [%d,%d), n:%v, err:%v", offset, offset+int64(len(p)), n, err) if err == nil && remaining > 0 && c.fileSize > startOffset { delta := int(min(remaining, c.fileSize-startOffset)) diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go index 09d5fd449..72e41247f 100644 --- a/weed/filesys/dir.go +++ b/weed/filesys/dir.go @@ -296,7 +296,7 @@ func (dir *Dir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, err func (dir *Dir) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (node fs.Node, err error) { dirPath := util.FullPath(dir.FullPath()) - glog.V(4).Infof("dir Lookup %s: %s by %s", dirPath, req.Name, req.Header.String()) + // glog.V(4).Infof("dir Lookup %s: %s by %s", dirPath, req.Name, req.Header.String()) fullFilePath := dirPath.Child(req.Name) visitErr := meta_cache.EnsureVisited(dir.wfs.metaCache, dir.wfs, dirPath) diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index abdab2b5e..88cfe45f0 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -149,7 +149,7 @@ func (fh *FileHandle) readFromChunks(buff []byte, offset int64) (int64, error) { glog.Errorf("file handle read %s: %v", fileFullPath, err) } - glog.V(4).Infof("file handle read %s [%d,%d] %d : %v", fileFullPath, offset, offset+int64(totalRead), totalRead, err) + // glog.V(4).Infof("file handle read %s [%d,%d] %d : %v", fileFullPath, offset, offset+int64(totalRead), totalRead, err) return int64(totalRead), err } @@ -175,7 +175,7 @@ func (fh *FileHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *f entry.Content = nil entry.Attributes.FileSize = uint64(max(req.Offset+int64(len(data)), int64(entry.Attributes.FileSize))) - glog.V(4).Infof("%v write [%d,%d) %d", fh.f.fullpath(), req.Offset, req.Offset+int64(len(req.Data)), len(req.Data)) + // glog.V(4).Infof("%v write [%d,%d) %d", fh.f.fullpath(), req.Offset, req.Offset+int64(len(req.Data)), len(req.Data)) fh.dirtyPages.AddPage(req.Offset, data) From 4596e647100d23d36e96335d0022eec846eaf16e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 10 May 2021 21:58:37 -0700 Subject: [PATCH 21/40] 2.46 --- k8s/seaweedfs/Chart.yaml | 4 ++-- k8s/seaweedfs/values.yaml | 2 +- weed/util/constants.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/k8s/seaweedfs/Chart.yaml b/k8s/seaweedfs/Chart.yaml index 91ae0a251..53df922d6 100644 --- a/k8s/seaweedfs/Chart.yaml +++ b/k8s/seaweedfs/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 description: SeaweedFS name: seaweedfs -appVersion: "2.45" -version: 2.45 +appVersion: "2.46" +version: 2.46 diff --git a/k8s/seaweedfs/values.yaml b/k8s/seaweedfs/values.yaml index 82dbc60ee..5a8e83d55 100644 --- a/k8s/seaweedfs/values.yaml +++ b/k8s/seaweedfs/values.yaml @@ -4,7 +4,7 @@ global: registry: "" repository: "" imageName: chrislusf/seaweedfs - # imageTag: "2.45" - started using {.Chart.appVersion} + # imageTag: "2.46" - started using {.Chart.appVersion} imagePullPolicy: IfNotPresent imagePullSecrets: imagepullsecret restartPolicy: Always diff --git a/weed/util/constants.go b/weed/util/constants.go index 270cedb6f..71a3c0622 100644 --- a/weed/util/constants.go +++ b/weed/util/constants.go @@ -5,7 +5,7 @@ import ( ) var ( - VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 45) + VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 46) COMMIT = "" ) From d2d36a3f9dd39b772abe1a78a056d9ea5309ec7e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 11 May 2021 10:05:31 -0700 Subject: [PATCH 22/40] master: avoid creating too many volumes fix https://github.com/chrislusf/seaweedfs/issues/2062 --- weed/topology/node.go | 4 ++-- weed/topology/topology.go | 8 ++++---- weed/topology/topology_event_handling.go | 4 ++-- weed/topology/volume_layout.go | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/weed/topology/node.go b/weed/topology/node.go index a23729dd3..4556b4165 100644 --- a/weed/topology/node.go +++ b/weed/topology/node.go @@ -242,9 +242,9 @@ func (n *NodeImpl) CollectDeadNodeAndFullVolumes(freshThreshHold int64, volumeSi for _, v := range dn.GetVolumes() { if v.Size >= volumeSizeLimit { //fmt.Println("volume",v.Id,"size",v.Size,">",volumeSizeLimit) - n.GetTopology().chanFullVolumes <- &v + n.GetTopology().chanFullVolumes <- v }else if float64(v.Size) > float64(volumeSizeLimit) * growThreshold { - n.GetTopology().chanCrowdedVolumes <- &v + n.GetTopology().chanCrowdedVolumes <- v } } } diff --git a/weed/topology/topology.go b/weed/topology/topology.go index 3932e3fbb..d704a5636 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -34,8 +34,8 @@ type Topology struct { Sequence sequence.Sequencer - chanFullVolumes chan *storage.VolumeInfo - chanCrowdedVolumes chan *storage.VolumeInfo + chanFullVolumes chan storage.VolumeInfo + chanCrowdedVolumes chan storage.VolumeInfo Configuration *Configuration @@ -57,8 +57,8 @@ func NewTopology(id string, seq sequence.Sequencer, volumeSizeLimit uint64, puls t.Sequence = seq - t.chanFullVolumes = make(chan *storage.VolumeInfo) - t.chanCrowdedVolumes = make(chan *storage.VolumeInfo) + t.chanFullVolumes = make(chan storage.VolumeInfo) + t.chanCrowdedVolumes = make(chan storage.VolumeInfo) t.Configuration = &Configuration{} diff --git a/weed/topology/topology_event_handling.go b/weed/topology/topology_event_handling.go index 2f4fba932..0f1db74df 100644 --- a/weed/topology/topology_event_handling.go +++ b/weed/topology/topology_event_handling.go @@ -39,7 +39,7 @@ func (t *Topology) StartRefreshWritableVolumes(grpcDialOption grpc.DialOption, g } }() } -func (t *Topology) SetVolumeCapacityFull(volumeInfo *storage.VolumeInfo) bool { +func (t *Topology) SetVolumeCapacityFull(volumeInfo storage.VolumeInfo) bool { diskType := types.ToDiskType(volumeInfo.DiskType) vl := t.GetVolumeLayout(volumeInfo.Collection, volumeInfo.ReplicaPlacement, volumeInfo.Ttl, diskType) if !vl.SetVolumeCapacityFull(volumeInfo.Id) { @@ -68,7 +68,7 @@ func (t *Topology) SetVolumeCapacityFull(volumeInfo *storage.VolumeInfo) bool { return true } -func (t *Topology) SetVolumeCrowded(volumeInfo *storage.VolumeInfo) { +func (t *Topology) SetVolumeCrowded(volumeInfo storage.VolumeInfo) { diskType := types.ToDiskType(volumeInfo.DiskType) vl := t.GetVolumeLayout(volumeInfo.Collection, volumeInfo.ReplicaPlacement, volumeInfo.Ttl, diskType) vl.SetVolumeCrowded(volumeInfo.Id) diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go index 57e511fa0..f315cb7e4 100644 --- a/weed/topology/volume_layout.go +++ b/weed/topology/volume_layout.go @@ -108,7 +108,7 @@ type VolumeLayout struct { diskType types.DiskType vid2location map[needle.VolumeId]*VolumeLocationList writables []needle.VolumeId // transient array of writable volume id - crowded map[needle.VolumeId]interface{} + crowded map[needle.VolumeId]struct{} readonlyVolumes *volumesBinaryState // readonly volumes oversizedVolumes *volumesBinaryState // oversized volumes volumeSizeLimit uint64 @@ -129,7 +129,7 @@ func NewVolumeLayout(rp *super_block.ReplicaPlacement, ttl *needle.TTL, diskType diskType: diskType, vid2location: make(map[needle.VolumeId]*VolumeLocationList), writables: *new([]needle.VolumeId), - crowded: make(map[needle.VolumeId]interface{}), + crowded: make(map[needle.VolumeId]struct{}), readonlyVolumes: NewVolumesBinaryState(readOnlyState, rp, ExistCopies()), oversizedVolumes: NewVolumesBinaryState(oversizedState, rp, ExistCopies()), volumeSizeLimit: volumeSizeLimit, @@ -421,7 +421,7 @@ func (vl *VolumeLayout) removeFromCrowded(vid needle.VolumeId) { func (vl *VolumeLayout) setVolumeCrowded(vid needle.VolumeId) { if _, ok := vl.crowded[vid]; !ok { - vl.crowded[vid] = nil + vl.crowded[vid] = struct{}{} glog.V(0).Infoln("Volume", vid, "becomes crowded") } } From 0f7b43af99928ea56b2d2fbee5c084dbad765ff5 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 11 May 2021 10:12:15 -0700 Subject: [PATCH 23/40] 2.47 --- k8s/seaweedfs/Chart.yaml | 4 ++-- k8s/seaweedfs/values.yaml | 2 +- weed/util/constants.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/k8s/seaweedfs/Chart.yaml b/k8s/seaweedfs/Chart.yaml index 53df922d6..b27e50f57 100644 --- a/k8s/seaweedfs/Chart.yaml +++ b/k8s/seaweedfs/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 description: SeaweedFS name: seaweedfs -appVersion: "2.46" -version: 2.46 +appVersion: "2.47" +version: 2.47 diff --git a/k8s/seaweedfs/values.yaml b/k8s/seaweedfs/values.yaml index 5a8e83d55..8c2c11a6b 100644 --- a/k8s/seaweedfs/values.yaml +++ b/k8s/seaweedfs/values.yaml @@ -4,7 +4,7 @@ global: registry: "" repository: "" imageName: chrislusf/seaweedfs - # imageTag: "2.46" - started using {.Chart.appVersion} + # imageTag: "2.47" - started using {.Chart.appVersion} imagePullPolicy: IfNotPresent imagePullSecrets: imagepullsecret restartPolicy: Always diff --git a/weed/util/constants.go b/weed/util/constants.go index 71a3c0622..9985b111c 100644 --- a/weed/util/constants.go +++ b/weed/util/constants.go @@ -5,7 +5,7 @@ import ( ) var ( - VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 46) + VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 47) COMMIT = "" ) From 19895d5f7207a90325fa6a5dc924190ad23d851b Mon Sep 17 00:00:00 2001 From: suika <2320837+Suika@users.noreply.github.com> Date: Wed, 12 May 2021 04:26:31 +0200 Subject: [PATCH 24/40] Container build actions initial brainless copy of docker hub config to github actions --- .github/workflows/container_latest.yml | 115 +++++++++++++++++++++++ .github/workflows/container_release.yml | 118 ++++++++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 .github/workflows/container_latest.yml create mode 100644 .github/workflows/container_release.yml diff --git a/.github/workflows/container_latest.yml b/.github/workflows/container_latest.yml new file mode 100644 index 000000000..aacb52d29 --- /dev/null +++ b/.github/workflows/container_latest.yml @@ -0,0 +1,115 @@ +name: Build Latest Containers +on: + push: + branches: + - gh-container-build + workflow_dispatch: [] + +jobs: + build-latest: + runs-on: [ubuntu-latest] + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + chrislusf/seaweedfs + ghcr.io/chrislusf/seaweedfs + tags: | + type=raw,value=latest + labels: | + org.opencontainers.image.title=seaweedfs + org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast! + org.opencontainers.image.vendor=Chris Lu + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + buildkitd-flags: "--debug" + - + name: Login to Docker Hub + if: false + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - + name: Login to GHCR + if: false + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + - + name: Build + uses: docker/build-push-action@v2 + with: + context: . + push: false + file: ./docker/Dockerfile + platforms: linux/amd64 + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + + build-dev: + runs-on: [ubuntu-latest] + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + chrislusf/seaweedfs + ghcr.io/chrislusf/seaweedfs + tags: | + type=raw,value=dev + labels: | + org.opencontainers.image.title=seaweedfs + org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast! + org.opencontainers.image.vendor=Chris Lu + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + buildkitd-flags: "--debug" + - + name: Login to Docker Hub + if: false + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - + name: Login to GHCR + if: false + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + - + name: Build + uses: docker/build-push-action@v2 + with: + context: ./docker + push: false + file: ./docker/Dockerfile.go_build + platforms: linux/amd64 + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/container_release.yml b/.github/workflows/container_release.yml new file mode 100644 index 000000000..d86b1d1ea --- /dev/null +++ b/.github/workflows/container_release.yml @@ -0,0 +1,118 @@ +name: Build Release Containers +on: + push: + tags: + - '*' + workflow_dispatch: [] + +jobs: + build-default: + runs-on: [ubuntu-latest] + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + chrislusf/seaweedfs + ghcr.io/chrislusf/seaweedfs + tags: | + type=ref,event=tag + flavor: | + latest=false + labels: | + org.opencontainers.image.title=seaweedfs + org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast! + org.opencontainers.image.vendor=Chris Lu + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + buildkitd-flags: "--debug" + - + name: Login to Docker Hub + if: false + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - + name: Login to GHCR + if: false + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + - + name: Build + uses: docker/build-push-action@v2 + with: + context: ./docker + push: false + file: ./docker/Dockerfile.go_build + platforms: linux/amd64 + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + build-large: + runs-on: [ubuntu-latest] + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + chrislusf/seaweedfs + ghcr.io/chrislusf/seaweedfs + tags: | + type=ref,event=tag,suffix=_large_disk + flavor: | + latest=false + labels: | + org.opencontainers.image.title=seaweedfs + org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast! + org.opencontainers.image.vendor=Chris Lu + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + buildkitd-flags: "--debug" + - + name: Login to Docker Hub + if: false + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - + name: Login to GHCR + if: false + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + - + name: Build + uses: docker/build-push-action@v2 + with: + context: ./docker + push: false + file: ./docker/Dockerfile.go_build_large + platforms: linux/amd64 + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} From 727287a755bad6c40cca56ee9c5f985d49898a08 Mon Sep 17 00:00:00 2001 From: suika <2320837+Suika@users.noreply.github.com> Date: Wed, 12 May 2021 04:31:13 +0200 Subject: [PATCH 25/40] Fix build context for latest tag --- .github/workflows/container_latest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/container_latest.yml b/.github/workflows/container_latest.yml index aacb52d29..f7bc4d353 100644 --- a/.github/workflows/container_latest.yml +++ b/.github/workflows/container_latest.yml @@ -53,7 +53,7 @@ jobs: name: Build uses: docker/build-push-action@v2 with: - context: . + context: ./docker push: false file: ./docker/Dockerfile platforms: linux/amd64 From 285a4667c2a0c642a902fbb870d0591b574f7a81 Mon Sep 17 00:00:00 2001 From: suika <2320837+Suika@users.noreply.github.com> Date: Wed, 12 May 2021 04:38:36 +0200 Subject: [PATCH 26/40] Enable login/push, build latest/dev on master branch Login to Docker Hub and Github Container Repo is enabled, need the secrets to be set. Remove ...image.description because it wil be automatically set. --- .github/workflows/container_latest.yml | 15 +++++++-------- .github/workflows/container_release.yml | 12 ++++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/container_latest.yml b/.github/workflows/container_latest.yml index f7bc4d353..e4b3c2a38 100644 --- a/.github/workflows/container_latest.yml +++ b/.github/workflows/container_latest.yml @@ -2,7 +2,7 @@ name: Build Latest Containers on: push: branches: - - gh-container-build + - master workflow_dispatch: [] jobs: @@ -24,7 +24,6 @@ jobs: type=raw,value=latest labels: | org.opencontainers.image.title=seaweedfs - org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast! org.opencontainers.image.vendor=Chris Lu - name: Set up QEMU @@ -36,14 +35,14 @@ jobs: buildkitd-flags: "--debug" - name: Login to Docker Hub - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ghcr.io @@ -54,7 +53,7 @@ jobs: uses: docker/build-push-action@v2 with: context: ./docker - push: false + push: ${{ github.event_name != 'pull_request' }} file: ./docker/Dockerfile platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} @@ -90,14 +89,14 @@ jobs: buildkitd-flags: "--debug" - name: Login to Docker Hub - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ghcr.io @@ -108,7 +107,7 @@ jobs: uses: docker/build-push-action@v2 with: context: ./docker - push: false + push: ${{ github.event_name != 'pull_request' }} file: ./docker/Dockerfile.go_build platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} diff --git a/.github/workflows/container_release.yml b/.github/workflows/container_release.yml index d86b1d1ea..1ade0878e 100644 --- a/.github/workflows/container_release.yml +++ b/.github/workflows/container_release.yml @@ -38,14 +38,14 @@ jobs: buildkitd-flags: "--debug" - name: Login to Docker Hub - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ghcr.io @@ -56,7 +56,7 @@ jobs: uses: docker/build-push-action@v2 with: context: ./docker - push: false + push: ${{ github.event_name != 'pull_request' }} file: ./docker/Dockerfile.go_build platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} @@ -93,14 +93,14 @@ jobs: buildkitd-flags: "--debug" - name: Login to Docker Hub - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR - if: false + if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ghcr.io @@ -111,7 +111,7 @@ jobs: uses: docker/build-push-action@v2 with: context: ./docker - push: false + push: ${{ github.event_name != 'pull_request' }} file: ./docker/Dockerfile.go_build_large platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} From fc5a8af09ec3c083f21f80475355e02cd7ec7b38 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 11 May 2021 22:06:41 -0700 Subject: [PATCH 27/40] fix possible nil --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6b2af25d7..b0aba4c94 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/buraksezer/consistent v0.0.0-20191006190839-693edf70fd72 github.com/bwmarrin/snowflake v0.3.0 github.com/cespare/xxhash v1.1.0 - github.com/chrislusf/raft v1.0.6 + github.com/chrislusf/raft v1.0.7 github.com/coreos/go-semver v0.3.0 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/disintegration/imaging v1.6.2 From 0c16e00ef925bf69110489f01e8854c0ce792293 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 11 May 2021 22:07:19 -0700 Subject: [PATCH 28/40] raft v1.0.7 --- go.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.sum b/go.sum index f2cc6d26d..b02192d9c 100644 --- a/go.sum +++ b/go.sum @@ -159,6 +159,8 @@ github.com/chrislusf/raft v1.0.5 h1:g8GxKCSStfm0/bGBDpNEbmEXL6MJkpXX+NI0ksbX5D4= github.com/chrislusf/raft v1.0.5/go.mod h1:Ep5DP+mJSosjfKiix1uU7Lc2Df/SX4oGJEpZlXH5l68= github.com/chrislusf/raft v1.0.6 h1:wunb85WWhMKhNRn7EmdIw35D4Lmew0ZJv8oYDizR/+Y= github.com/chrislusf/raft v1.0.6/go.mod h1:Ep5DP+mJSosjfKiix1uU7Lc2Df/SX4oGJEpZlXH5l68= +github.com/chrislusf/raft v1.0.7 h1:reybAIwnQOTSgTj1YgflbJFWLSN0KVQSxe8gDZYa04o= +github.com/chrislusf/raft v1.0.7/go.mod h1:Ep5DP+mJSosjfKiix1uU7Lc2Df/SX4oGJEpZlXH5l68= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= From 534c4202a56874f405c51f1cff2deae810830702 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 11 May 2021 23:44:27 -0700 Subject: [PATCH 29/40] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a28b13b98..1c227cec8 100644 --- a/README.md +++ b/README.md @@ -437,7 +437,7 @@ SeaweedFS has a centralized master group to look up free volumes, while Ceph use Same as SeaweedFS, Ceph is also based on the object store RADOS. Ceph is rather complicated with mixed reviews. -Ceph uses CRUSH hashing to automatically manage the data placement, which is efficient to locate the data. But the data has to be placed according to the CRUSH algorithm. Any wrong configuration would cause data loss. SeaweedFS places data by assigning them to any writable volumes. If writes to one volume failed, just pick another volume to write. Adding more volumes are also as simple as it can be. +Ceph uses CRUSH hashing to automatically manage the data placement, which is efficient to locate the data. But the data has to be placed according to the CRUSH algorithm. Any wrong configuration would cause data loss. Topology changes, such as adding new servers to increase capacity, will cause data migration with high IO cost to fit the CRUSH algorithm. SeaweedFS places data by assigning them to any writable volumes. If writes to one volume failed, just pick another volume to write. Adding more volumes are also as simple as it can be. SeaweedFS is optimized for small files. Small files are stored as one continuous block of content, with at most 8 unused bytes between files. Small file access is O(1) disk read. From b430d1b6ee7ae245a1c1ad4116f5de7f52062104 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 12 May 2021 21:45:39 -0700 Subject: [PATCH 30/40] filer.copy: "check.size" before copying files fix https://github.com/chrislusf/seaweedfs/issues/2067 --- weed/command/filer_copy.go | 62 +++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/weed/command/filer_copy.go b/weed/command/filer_copy.go index dc729ed33..a5d29c451 100644 --- a/weed/command/filer_copy.go +++ b/weed/command/filer_copy.go @@ -3,6 +3,7 @@ package command import ( "context" "fmt" + "github.com/chrislusf/seaweedfs/weed/filer" "io" "io/ioutil" "net/http" @@ -46,6 +47,8 @@ type CopyOptions struct { masters []string cipher bool ttlSec int32 + checkSize *bool + verbose *bool } func init() { @@ -59,6 +62,8 @@ func init() { copy.maxMB = cmdCopy.Flag.Int("maxMB", 4, "split files larger than the limit") copy.concurrenctFiles = cmdCopy.Flag.Int("c", 8, "concurrent file copy goroutines") copy.concurrenctChunks = cmdCopy.Flag.Int("concurrentChunks", 8, "concurrent chunk copy goroutines for each file") + copy.checkSize = cmdCopy.Flag.Bool("check.size", false, "copy when the target file size is different from the source file") + copy.verbose = cmdCopy.Flag.Bool("verbose", false, "print out details during copying") } var cmdCopy = &Command{ @@ -220,9 +225,9 @@ func genFileCopyTask(fileOrDir string, destPath string, fileCopyTaskChan chan Fi if mode.IsDir() { files, _ := ioutil.ReadDir(fileOrDir) - println("checking directory", fileOrDir) for _, subFileOrDir := range files { - if err = genFileCopyTask(fileOrDir+"/"+subFileOrDir.Name(), destPath+fi.Name()+"/", fileCopyTaskChan); err != nil { + cleanedDestDirectory := filepath.Clean(destPath + fi.Name()) + if err = genFileCopyTask(fileOrDir+"/"+subFileOrDir.Name(), cleanedDestDirectory+"/", fileCopyTaskChan); err != nil { return err } } @@ -275,6 +280,15 @@ func (worker *FileCopyWorker) doEachCopy(task FileCopyTask) error { } } + if shouldCopy, err := worker.checkExistingFileFirst(task, f); err != nil { + return fmt.Errorf("check existing file: %v", err) + } else if !shouldCopy { + if *worker.options.verbose { + fmt.Printf("skipping copied file: %v\n", f.Name()) + } + return nil + } + // find the chunk count chunkSize := int64(*worker.options.maxMB * 1024 * 1024) chunkCount := 1 @@ -289,6 +303,42 @@ func (worker *FileCopyWorker) doEachCopy(task FileCopyTask) error { return worker.uploadFileInChunks(task, f, chunkCount, chunkSize) } +func (worker *FileCopyWorker) checkExistingFileFirst(task FileCopyTask, f *os.File) (shouldCopy bool, err error) { + + shouldCopy = true + + if !*worker.options.checkSize { + return + } + + fileStat, err := f.Stat() + if err != nil { + shouldCopy = false + return + } + + err = pb.WithGrpcFilerClient(worker.filerGrpcAddress, worker.options.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { + + request := &filer_pb.LookupDirectoryEntryRequest{ + Directory: task.destinationUrlPath, + Name: filepath.Base(f.Name()), + } + + resp, lookupErr := client.LookupDirectoryEntry(context.Background(), request) + if lookupErr != nil { + // mostly not found error + return nil + } + + if fileStat.Size() == int64(filer.FileSize(resp.Entry)) { + shouldCopy = false + } + + return nil + }) + return +} + func (worker *FileCopyWorker) uploadFileAsOne(task FileCopyTask, f *os.File) error { // upload the file content @@ -343,11 +393,13 @@ func (worker *FileCopyWorker) uploadFileAsOne(task FileCopyTask, f *os.File) err if uploadResult.Error != "" { return fmt.Errorf("upload %v to %s result: %v\n", fileName, targetUrl, uploadResult.Error) } - fmt.Printf("uploaded %s to %s\n", fileName, targetUrl) + if *worker.options.verbose { + fmt.Printf("uploaded %s to %s\n", fileName, targetUrl) + } chunks = append(chunks, uploadResult.ToPbFileChunk(assignResult.FileId, 0)) - fmt.Printf("copied %s => http://%s%s%s\n", fileName, worker.filerHost, task.destinationUrlPath, fileName) + fmt.Printf("copied %s => http://%s%s%s\n", f.Name(), worker.filerHost, task.destinationUrlPath, fileName) } if err := pb.WithGrpcFilerClient(worker.filerGrpcAddress, worker.options.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { @@ -501,7 +553,7 @@ func (worker *FileCopyWorker) uploadFileInChunks(task FileCopyTask, f *os.File, return fmt.Errorf("upload data %v to http://%s%s%s: %v\n", fileName, worker.filerHost, task.destinationUrlPath, fileName, err) } - fmt.Printf("copied %s => http://%s%s%s\n", fileName, worker.filerHost, task.destinationUrlPath, fileName) + fmt.Printf("copied %s => http://%s%s%s\n", f.Name(), worker.filerHost, task.destinationUrlPath, fileName) return nil } From ceb620a30a51c565bd281b2eae0d2c62701fc49d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 12 May 2021 22:04:47 -0700 Subject: [PATCH 31/40] directory rename: change directory name after renaming fix https://github.com/chrislusf/seaweedfs/issues/2068 --- weed/filesys/dir_rename.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index b07710d17..df05dcd3f 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -68,10 +68,15 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newFsNode := NodeWithId(newPath.AsInode()) dir.wfs.Server.InvalidateInternalNode(oldFsNode, newFsNode, func(internalNode fs.Node) { if file, ok := internalNode.(*File); ok { - glog.V(4).Infof("internal node %s", file.Name) + glog.V(4).Infof("internal file node %s", file.Name) file.Name = req.NewName file.id = uint64(newFsNode) } + if dir, ok := internalNode.(*Dir); ok { + glog.V(4).Infof("internal dir node %s", dir.name) + dir.name = req.NewName + dir.id = uint64(newFsNode) + } }) // change file handle From 26a55bbb5c1156ede00540c18d82a5c1f1713d7f Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 12 May 2021 22:30:39 -0700 Subject: [PATCH 32/40] Adjust error message when bucket name conflicts with existing collections fix https://github.com/chrislusf/seaweedfs/issues/2069 --- weed/s3api/s3err/s3api_errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weed/s3api/s3err/s3api_errors.go b/weed/s3api/s3err/s3api_errors.go index a3f7bb25e..877c39a52 100644 --- a/weed/s3api/s3err/s3api_errors.go +++ b/weed/s3api/s3err/s3api_errors.go @@ -116,7 +116,7 @@ var errorCodeResponse = map[ErrorCode]APIError{ }, ErrBucketAlreadyExists: { Code: "BucketAlreadyExists", - Description: "The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.", + Description: "The requested bucket name is not available. The bucket name can not be an existing collection, and the bucket namespace is shared by all users of the system. Please select a different name and try again.", HTTPStatusCode: http.StatusConflict, }, ErrBucketAlreadyOwnedByYou: { From a48ebd7c7391fc649eb1f7925b26e13ad36cc26b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 00:32:23 -0700 Subject: [PATCH 33/40] mount: read file when file is still being written a possible fix for https://github.com/chrislusf/seaweedfs/issues/2065 --- weed/filesys/dirty_pages_temp_interval.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weed/filesys/dirty_pages_temp_interval.go b/weed/filesys/dirty_pages_temp_interval.go index 2d22845e2..2030178be 100644 --- a/weed/filesys/dirty_pages_temp_interval.go +++ b/weed/filesys/dirty_pages_temp_interval.go @@ -53,8 +53,8 @@ func (list *WrittenIntervalLinkedList) ReadData(buf []byte, start, stop int64) { nodeStart, nodeStop := max(start, t.DataOffset), min(stop, t.DataOffset+t.Size) if nodeStart < nodeStop { - // glog.V(0).Infof("copying start=%d stop=%d t=[%d,%d) t.data=%d => bufSize=%d nodeStart=%d, nodeStop=%d", start, stop, t.Offset, t.Offset+t.Size, len(t.Data), len(buf), nodeStart, nodeStop) - list.tempFile.ReadAt(buf[nodeStart-start:nodeStop-start], nodeStart-t.TempOffset) + // glog.V(4).Infof("copying start=%d stop=%d t=[%d,%d) => bufSize=%d nodeStart=%d, nodeStop=%d", start, stop, t.DataOffset, t.DataOffset+t.Size, len(buf), nodeStart, nodeStop) + list.tempFile.ReadAt(buf[nodeStart-start:nodeStop-start], t.TempOffset + nodeStart - t.DataOffset) } if t.Next == nil { @@ -239,7 +239,7 @@ func (l *WrittenIntervalLinkedList) ToReader(start int64, stop int64) io.Reader for t := l.Head; ; t = t.Next { startOffset, stopOffset := max(t.DataOffset, start), min(t.DataOffset+t.Size, stop) if startOffset < stopOffset { - // log.Printf("ToReader read [%d,%d) from [%d,%d) %d", t.DataOffset, t.DataOffset+t.Size, t.TempOffset, t.TempOffset+t.Size, t.Size) + // glog.V(4).Infof("ToReader read [%d,%d) from [%d,%d) %d", t.DataOffset, t.DataOffset+t.Size, t.TempOffset, t.TempOffset+t.Size, t.Size) readers = append(readers, newFileSectionReader(l.tempFile, startOffset-t.DataOffset+t.TempOffset, startOffset, stopOffset-startOffset)) } if t.Next == nil { From 3ff307e8422be86f352618bae4d3e53db5c4e145 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 00:32:37 -0700 Subject: [PATCH 34/40] reduce logs --- weed/filesys/file.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 2b1eb5a44..4b711ecee 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -83,7 +83,7 @@ func (file *File) Attr(ctx context.Context, attr *fuse.Attr) (err error) { func (file *File) Getxattr(ctx context.Context, req *fuse.GetxattrRequest, resp *fuse.GetxattrResponse) error { - glog.V(4).Infof("file Getxattr %s", file.fullpath()) + // glog.V(4).Infof("file Getxattr %s", file.fullpath()) entry, err := file.maybeLoadEntry(ctx) if err != nil { @@ -267,7 +267,7 @@ func (file *File) maybeLoadEntry(ctx context.Context) (entry *filer_pb.Entry, er file.wfs.handlesLock.Unlock() entry = file.entry if found { - glog.V(4).Infof("maybeLoadEntry found opened file %s/%s", file.dir.FullPath(), file.Name) + // glog.V(4).Infof("maybeLoadEntry found opened file %s/%s", file.dir.FullPath(), file.Name) entry = handle.f.entry } From e3f47ddb764b8618569c6b8f2e62b0a3caaaa3e8 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 00:32:46 -0700 Subject: [PATCH 35/40] debug --- docker/compose/local-mount-profile-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/compose/local-mount-profile-compose.yml b/docker/compose/local-mount-profile-compose.yml index 4682591c4..20cddae2d 100644 --- a/docker/compose/local-mount-profile-compose.yml +++ b/docker/compose/local-mount-profile-compose.yml @@ -40,7 +40,7 @@ services: - fuse volumes: - /Volumes/mobile_disk/99:/data - entrypoint: '/bin/sh -c "mkdir -p t1 && weed mount -filer=filer:8888 -dir=./t1 -cacheCapacityMB=0 -memprofile=/data/mount.mem.pprof"' + entrypoint: '/bin/sh -c "mkdir -p t1 && weed -v=4 mount -filer=filer:8888 -dir=./t1 -cacheCapacityMB=0 -memprofile=/data/mount.mem.pprof"' depends_on: - master - volume From 5a29d284fa5a28470e12020d953e15071100620a Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 10:18:35 -0700 Subject: [PATCH 36/40] ensure proper directory name a fix related to https://github.com/chrislusf/seaweedfs/issues/2064 --- weed/filesys/dirty_pages_temp_file.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/weed/filesys/dirty_pages_temp_file.go b/weed/filesys/dirty_pages_temp_file.go index 58c150acf..274b2a09e 100644 --- a/weed/filesys/dirty_pages_temp_file.go +++ b/weed/filesys/dirty_pages_temp_file.go @@ -6,6 +6,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "io" "os" + "path/filepath" "sync" "time" ) @@ -24,7 +25,7 @@ type TempFileDirtyPages struct { } var ( - tmpDir = os.TempDir() + "sw" + tmpDir = filepath.Join(os.TempDir(), "sw") ) func init() { From 83c037e093627697f786c46eaa162284559b7f8f Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 22:41:19 -0700 Subject: [PATCH 37/40] fix logs --- weed/filesys/meta_cache/meta_cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weed/filesys/meta_cache/meta_cache.go b/weed/filesys/meta_cache/meta_cache.go index 3a64df018..3f6391c39 100644 --- a/weed/filesys/meta_cache/meta_cache.go +++ b/weed/filesys/meta_cache/meta_cache.go @@ -74,7 +74,7 @@ func (mc *MetaCache) AtomicUpdateEntryFromFiler(ctx context.Context, oldPath uti // skip the unnecessary deletion // leave the update to the following InsertEntry operation } else { - glog.V(3).Infof("DeleteEntry %s/%s", oldPath, oldPath.Name()) + glog.V(3).Infof("DeleteEntry %s", oldPath) if err := mc.localStore.DeleteEntry(ctx, oldPath); err != nil { return err } From 789465d99e9a14bdd7424d62a5a252e101d14cc5 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 May 2021 22:52:19 -0700 Subject: [PATCH 38/40] set renamed item to new directory related to https://github.com/chrislusf/seaweedfs/issues/2064 --- weed/filesys/dir_rename.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index df05dcd3f..d50c6dab0 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -71,11 +71,13 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector glog.V(4).Infof("internal file node %s", file.Name) file.Name = req.NewName file.id = uint64(newFsNode) + file.dir = newDir } if dir, ok := internalNode.(*Dir); ok { glog.V(4).Infof("internal dir node %s", dir.name) dir.name = req.NewName dir.id = uint64(newFsNode) + dir.parent = newDir } }) From 45a762223afc320da6dc19fd484f28db19ee8536 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 14 May 2021 10:26:42 -0700 Subject: [PATCH 39/40] 2.48 --- k8s/seaweedfs/Chart.yaml | 4 ++-- k8s/seaweedfs/values.yaml | 2 +- weed/util/constants.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/k8s/seaweedfs/Chart.yaml b/k8s/seaweedfs/Chart.yaml index b27e50f57..22988491c 100644 --- a/k8s/seaweedfs/Chart.yaml +++ b/k8s/seaweedfs/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 description: SeaweedFS name: seaweedfs -appVersion: "2.47" -version: 2.47 +appVersion: "2.48" +version: 2.48 diff --git a/k8s/seaweedfs/values.yaml b/k8s/seaweedfs/values.yaml index 8c2c11a6b..1e37ba663 100644 --- a/k8s/seaweedfs/values.yaml +++ b/k8s/seaweedfs/values.yaml @@ -4,7 +4,7 @@ global: registry: "" repository: "" imageName: chrislusf/seaweedfs - # imageTag: "2.47" - started using {.Chart.appVersion} + # imageTag: "2.48" - started using {.Chart.appVersion} imagePullPolicy: IfNotPresent imagePullSecrets: imagepullsecret restartPolicy: Always diff --git a/weed/util/constants.go b/weed/util/constants.go index 9985b111c..6a0ae3cae 100644 --- a/weed/util/constants.go +++ b/weed/util/constants.go @@ -5,7 +5,7 @@ import ( ) var ( - VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 47) + VERSION = fmt.Sprintf("%s %d.%02d", sizeLimit, 2, 48) COMMIT = "" ) From 1aa7e99a899bd0b22c00fb8128c381b7406f75eb Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sat, 15 May 2021 09:37:39 -0700 Subject: [PATCH 40/40] skip file not found error when deleting --- weed/storage/volume_vacuum.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weed/storage/volume_vacuum.go b/weed/storage/volume_vacuum.go index be84f8a13..067456dfa 100644 --- a/weed/storage/volume_vacuum.go +++ b/weed/storage/volume_vacuum.go @@ -158,10 +158,10 @@ func (v *Volume) cleanupCompact() error { e1 := os.Remove(v.FileName(".cpd")) e2 := os.Remove(v.FileName(".cpx")) - if e1 != nil { + if e1 != nil && !os.IsNotExist(e1) { return e1 } - if e2 != nil { + if e2 != nil && !os.IsNotExist(e2) { return e2 } return nil