diff --git a/Gopkg.lock b/Gopkg.lock index 4abd5261a..508c7f538 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -211,12 +211,6 @@ revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" -[[projects]] - branch = "master" - name = "github.com/google/btree" - packages = ["."] - revision = "e89373fe6b4a7413d7acd6da1725b83ef713e6e4" - [[projects]] branch = "master" name = "github.com/google/gofuzz" @@ -251,15 +245,6 @@ revision = "53c1911da2b537f792e7cafcb446b05ffe33b996" version = "v1.6.1" -[[projects]] - branch = "master" - name = "github.com/gregjones/httpcache" - packages = [ - ".", - "diskcache" - ] - revision = "9cad4c3443a7200dd6400aef47183728de563a38" - [[projects]] branch = "master" name = "github.com/hashicorp/hcl" @@ -368,12 +353,6 @@ revision = "ca39e5af3ece67bbcda3d0f4f56a8e24d9f2dad4" version = "1.1.3" -[[projects]] - name = "github.com/juju/ratelimit" - packages = ["."] - revision = "59fac5042749a5afb9af70e813da1dd5474f0167" - version = "1.0.1" - [[projects]] name = "github.com/magiconair/properties" packages = ["."] @@ -416,18 +395,6 @@ revision = "acdc4509485b587f5e675510c4f2c63e90ff68a8" version = "v1.1.0" -[[projects]] - branch = "master" - name = "github.com/petar/GoLLRB" - packages = ["llrb"] - revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" - -[[projects]] - name = "github.com/peterbourgon/diskv" - packages = ["."] - revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" - version = "v2.0.1" - [[projects]] name = "github.com/pkg/errors" packages = ["."] @@ -605,6 +572,12 @@ revision = "41344da2231b913fa3d983840a57a6b1b7b631a1" version = "v1.12.0" +[[projects]] + branch = "master" + name = "golang.org/x/time" + packages = ["rate"] + revision = "fbb02b2291d28baffd63558aa44b4b56f178d650" + [[projects]] name = "gopkg.in/inf.v0" packages = ["."] @@ -757,7 +730,10 @@ "kubernetes/typed/storage/v1alpha1/fake", "kubernetes/typed/storage/v1beta1", "kubernetes/typed/storage/v1beta1/fake", + "pkg/apis/clientauthentication", + "pkg/apis/clientauthentication/v1alpha1", "pkg/version", + "plugin/pkg/client/auth/exec", "rest", "rest/watch", "testing", @@ -774,8 +750,8 @@ "util/homedir", "util/integer" ] - revision = "78700dec6369ba22221b72770783300f143df150" - version = "v6.0.0" + revision = "23781f4d6632d88e869066eaebb743857aa1ef9b" + version = "v7.0.0" [[projects]] name = "k8s.io/kubernetes" @@ -786,6 +762,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "0e598c4f61f6beda8cab3e525179712397ba87526f8dbe1bbe55e12e83b2d82b" + inputs-digest = "574b1551c18b46c07b8d4a67c305c335c6001f6e9a07b41b15067a0f2aa9352e" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 258e8f874..c9485002e 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -59,7 +59,7 @@ [[constraint]] name = "k8s.io/client-go" - version = "6.0.0" + version = "7.0.0" [[constraint]] name = "github.com/hyperhq/hypercli" diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/budgets/2016-10-20/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/paginators-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/paginators-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/waiters-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-08-20/waiters-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/paginators-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/paginators-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/waiters-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/cloudfront/2016-09-07/waiters-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/paginators-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/paginators-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/waiters-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-09-15/waiters-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/paginators-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/paginators-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/waiters-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/ec2/2016-11-15/waiters-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/api-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/api-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/docs-2.json b/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/docs-2.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/paginators-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/snowball/2016-06-30/paginators-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/sns/2010-03-31/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/sns/2010-03-31/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/aws/aws-sdk-go/models/apis/support/2013-04-15/examples-1.json b/vendor/github.com/aws/aws-sdk-go/models/apis/support/2013-04-15/examples-1.json old mode 100644 new mode 100755 diff --git a/vendor/github.com/google/btree/.travis.yml b/vendor/github.com/google/btree/.travis.yml deleted file mode 100644 index 4f2ee4d97..000000000 --- a/vendor/github.com/google/btree/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: go diff --git a/vendor/github.com/google/btree/LICENSE b/vendor/github.com/google/btree/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/github.com/google/btree/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/google/btree/README.md b/vendor/github.com/google/btree/README.md deleted file mode 100644 index 6062a4dac..000000000 --- a/vendor/github.com/google/btree/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# BTree implementation for Go - -![Travis CI Build Status](https://api.travis-ci.org/google/btree.svg?branch=master) - -This package provides an in-memory B-Tree implementation for Go, useful as -an ordered, mutable data structure. - -The API is based off of the wonderful -http://godoc.org/github.com/petar/GoLLRB/llrb, and is meant to allow btree to -act as a drop-in replacement for gollrb trees. - -See http://godoc.org/github.com/google/btree for documentation. diff --git a/vendor/github.com/google/btree/btree.go b/vendor/github.com/google/btree/btree.go deleted file mode 100644 index eb74b1d39..000000000 --- a/vendor/github.com/google/btree/btree.go +++ /dev/null @@ -1,821 +0,0 @@ -// Copyright 2014 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package btree implements in-memory B-Trees of arbitrary degree. -// -// btree implements an in-memory B-Tree for use as an ordered data structure. -// It is not meant for persistent storage solutions. -// -// It has a flatter structure than an equivalent red-black or other binary tree, -// which in some cases yields better memory usage and/or performance. -// See some discussion on the matter here: -// http://google-opensource.blogspot.com/2013/01/c-containers-that-save-memory-and-time.html -// Note, though, that this project is in no way related to the C++ B-Tree -// implementation written about there. -// -// Within this tree, each node contains a slice of items and a (possibly nil) -// slice of children. For basic numeric values or raw structs, this can cause -// efficiency differences when compared to equivalent C++ template code that -// stores values in arrays within the node: -// * Due to the overhead of storing values as interfaces (each -// value needs to be stored as the value itself, then 2 words for the -// interface pointing to that value and its type), resulting in higher -// memory use. -// * Since interfaces can point to values anywhere in memory, values are -// most likely not stored in contiguous blocks, resulting in a higher -// number of cache misses. -// These issues don't tend to matter, though, when working with strings or other -// heap-allocated structures, since C++-equivalent structures also must store -// pointers and also distribute their values across the heap. -// -// This implementation is designed to be a drop-in replacement to gollrb.LLRB -// trees, (http://github.com/petar/gollrb), an excellent and probably the most -// widely used ordered tree implementation in the Go ecosystem currently. -// Its functions, therefore, exactly mirror those of -// llrb.LLRB where possible. Unlike gollrb, though, we currently don't -// support storing multiple equivalent values. -package btree - -import ( - "fmt" - "io" - "sort" - "strings" - "sync" -) - -// Item represents a single object in the tree. -type Item interface { - // Less tests whether the current item is less than the given argument. - // - // This must provide a strict weak ordering. - // If !a.Less(b) && !b.Less(a), we treat this to mean a == b (i.e. we can only - // hold one of either a or b in the tree). - Less(than Item) bool -} - -const ( - DefaultFreeListSize = 32 -) - -var ( - nilItems = make(items, 16) - nilChildren = make(children, 16) -) - -// FreeList represents a free list of btree nodes. By default each -// BTree has its own FreeList, but multiple BTrees can share the same -// FreeList. -// Two Btrees using the same freelist are safe for concurrent write access. -type FreeList struct { - mu sync.Mutex - freelist []*node -} - -// NewFreeList creates a new free list. -// size is the maximum size of the returned free list. -func NewFreeList(size int) *FreeList { - return &FreeList{freelist: make([]*node, 0, size)} -} - -func (f *FreeList) newNode() (n *node) { - f.mu.Lock() - index := len(f.freelist) - 1 - if index < 0 { - f.mu.Unlock() - return new(node) - } - n = f.freelist[index] - f.freelist[index] = nil - f.freelist = f.freelist[:index] - f.mu.Unlock() - return -} - -func (f *FreeList) freeNode(n *node) { - f.mu.Lock() - if len(f.freelist) < cap(f.freelist) { - f.freelist = append(f.freelist, n) - } - f.mu.Unlock() -} - -// ItemIterator allows callers of Ascend* to iterate in-order over portions of -// the tree. When this function returns false, iteration will stop and the -// associated Ascend* function will immediately return. -type ItemIterator func(i Item) bool - -// New creates a new B-Tree with the given degree. -// -// New(2), for example, will create a 2-3-4 tree (each node contains 1-3 items -// and 2-4 children). -func New(degree int) *BTree { - return NewWithFreeList(degree, NewFreeList(DefaultFreeListSize)) -} - -// NewWithFreeList creates a new B-Tree that uses the given node free list. -func NewWithFreeList(degree int, f *FreeList) *BTree { - if degree <= 1 { - panic("bad degree") - } - return &BTree{ - degree: degree, - cow: ©OnWriteContext{freelist: f}, - } -} - -// items stores items in a node. -type items []Item - -// insertAt inserts a value into the given index, pushing all subsequent values -// forward. -func (s *items) insertAt(index int, item Item) { - *s = append(*s, nil) - if index < len(*s) { - copy((*s)[index+1:], (*s)[index:]) - } - (*s)[index] = item -} - -// removeAt removes a value at a given index, pulling all subsequent values -// back. -func (s *items) removeAt(index int) Item { - item := (*s)[index] - copy((*s)[index:], (*s)[index+1:]) - (*s)[len(*s)-1] = nil - *s = (*s)[:len(*s)-1] - return item -} - -// pop removes and returns the last element in the list. -func (s *items) pop() (out Item) { - index := len(*s) - 1 - out = (*s)[index] - (*s)[index] = nil - *s = (*s)[:index] - return -} - -// truncate truncates this instance at index so that it contains only the -// first index items. index must be less than or equal to length. -func (s *items) truncate(index int) { - var toClear items - *s, toClear = (*s)[:index], (*s)[index:] - for len(toClear) > 0 { - toClear = toClear[copy(toClear, nilItems):] - } -} - -// find returns the index where the given item should be inserted into this -// list. 'found' is true if the item already exists in the list at the given -// index. -func (s items) find(item Item) (index int, found bool) { - i := sort.Search(len(s), func(i int) bool { - return item.Less(s[i]) - }) - if i > 0 && !s[i-1].Less(item) { - return i - 1, true - } - return i, false -} - -// children stores child nodes in a node. -type children []*node - -// insertAt inserts a value into the given index, pushing all subsequent values -// forward. -func (s *children) insertAt(index int, n *node) { - *s = append(*s, nil) - if index < len(*s) { - copy((*s)[index+1:], (*s)[index:]) - } - (*s)[index] = n -} - -// removeAt removes a value at a given index, pulling all subsequent values -// back. -func (s *children) removeAt(index int) *node { - n := (*s)[index] - copy((*s)[index:], (*s)[index+1:]) - (*s)[len(*s)-1] = nil - *s = (*s)[:len(*s)-1] - return n -} - -// pop removes and returns the last element in the list. -func (s *children) pop() (out *node) { - index := len(*s) - 1 - out = (*s)[index] - (*s)[index] = nil - *s = (*s)[:index] - return -} - -// truncate truncates this instance at index so that it contains only the -// first index children. index must be less than or equal to length. -func (s *children) truncate(index int) { - var toClear children - *s, toClear = (*s)[:index], (*s)[index:] - for len(toClear) > 0 { - toClear = toClear[copy(toClear, nilChildren):] - } -} - -// node is an internal node in a tree. -// -// It must at all times maintain the invariant that either -// * len(children) == 0, len(items) unconstrained -// * len(children) == len(items) + 1 -type node struct { - items items - children children - cow *copyOnWriteContext -} - -func (n *node) mutableFor(cow *copyOnWriteContext) *node { - if n.cow == cow { - return n - } - out := cow.newNode() - if cap(out.items) >= len(n.items) { - out.items = out.items[:len(n.items)] - } else { - out.items = make(items, len(n.items), cap(n.items)) - } - copy(out.items, n.items) - // Copy children - if cap(out.children) >= len(n.children) { - out.children = out.children[:len(n.children)] - } else { - out.children = make(children, len(n.children), cap(n.children)) - } - copy(out.children, n.children) - return out -} - -func (n *node) mutableChild(i int) *node { - c := n.children[i].mutableFor(n.cow) - n.children[i] = c - return c -} - -// split splits the given node at the given index. The current node shrinks, -// and this function returns the item that existed at that index and a new node -// containing all items/children after it. -func (n *node) split(i int) (Item, *node) { - item := n.items[i] - next := n.cow.newNode() - next.items = append(next.items, n.items[i+1:]...) - n.items.truncate(i) - if len(n.children) > 0 { - next.children = append(next.children, n.children[i+1:]...) - n.children.truncate(i + 1) - } - return item, next -} - -// maybeSplitChild checks if a child should be split, and if so splits it. -// Returns whether or not a split occurred. -func (n *node) maybeSplitChild(i, maxItems int) bool { - if len(n.children[i].items) < maxItems { - return false - } - first := n.mutableChild(i) - item, second := first.split(maxItems / 2) - n.items.insertAt(i, item) - n.children.insertAt(i+1, second) - return true -} - -// insert inserts an item into the subtree rooted at this node, making sure -// no nodes in the subtree exceed maxItems items. Should an equivalent item be -// be found/replaced by insert, it will be returned. -func (n *node) insert(item Item, maxItems int) Item { - i, found := n.items.find(item) - if found { - out := n.items[i] - n.items[i] = item - return out - } - if len(n.children) == 0 { - n.items.insertAt(i, item) - return nil - } - if n.maybeSplitChild(i, maxItems) { - inTree := n.items[i] - switch { - case item.Less(inTree): - // no change, we want first split node - case inTree.Less(item): - i++ // we want second split node - default: - out := n.items[i] - n.items[i] = item - return out - } - } - return n.mutableChild(i).insert(item, maxItems) -} - -// get finds the given key in the subtree and returns it. -func (n *node) get(key Item) Item { - i, found := n.items.find(key) - if found { - return n.items[i] - } else if len(n.children) > 0 { - return n.children[i].get(key) - } - return nil -} - -// min returns the first item in the subtree. -func min(n *node) Item { - if n == nil { - return nil - } - for len(n.children) > 0 { - n = n.children[0] - } - if len(n.items) == 0 { - return nil - } - return n.items[0] -} - -// max returns the last item in the subtree. -func max(n *node) Item { - if n == nil { - return nil - } - for len(n.children) > 0 { - n = n.children[len(n.children)-1] - } - if len(n.items) == 0 { - return nil - } - return n.items[len(n.items)-1] -} - -// toRemove details what item to remove in a node.remove call. -type toRemove int - -const ( - removeItem toRemove = iota // removes the given item - removeMin // removes smallest item in the subtree - removeMax // removes largest item in the subtree -) - -// remove removes an item from the subtree rooted at this node. -func (n *node) remove(item Item, minItems int, typ toRemove) Item { - var i int - var found bool - switch typ { - case removeMax: - if len(n.children) == 0 { - return n.items.pop() - } - i = len(n.items) - case removeMin: - if len(n.children) == 0 { - return n.items.removeAt(0) - } - i = 0 - case removeItem: - i, found = n.items.find(item) - if len(n.children) == 0 { - if found { - return n.items.removeAt(i) - } - return nil - } - default: - panic("invalid type") - } - // If we get to here, we have children. - if len(n.children[i].items) <= minItems { - return n.growChildAndRemove(i, item, minItems, typ) - } - child := n.mutableChild(i) - // Either we had enough items to begin with, or we've done some - // merging/stealing, because we've got enough now and we're ready to return - // stuff. - if found { - // The item exists at index 'i', and the child we've selected can give us a - // predecessor, since if we've gotten here it's got > minItems items in it. - out := n.items[i] - // We use our special-case 'remove' call with typ=maxItem to pull the - // predecessor of item i (the rightmost leaf of our immediate left child) - // and set it into where we pulled the item from. - n.items[i] = child.remove(nil, minItems, removeMax) - return out - } - // Final recursive call. Once we're here, we know that the item isn't in this - // node and that the child is big enough to remove from. - return child.remove(item, minItems, typ) -} - -// growChildAndRemove grows child 'i' to make sure it's possible to remove an -// item from it while keeping it at minItems, then calls remove to actually -// remove it. -// -// Most documentation says we have to do two sets of special casing: -// 1) item is in this node -// 2) item is in child -// In both cases, we need to handle the two subcases: -// A) node has enough values that it can spare one -// B) node doesn't have enough values -// For the latter, we have to check: -// a) left sibling has node to spare -// b) right sibling has node to spare -// c) we must merge -// To simplify our code here, we handle cases #1 and #2 the same: -// If a node doesn't have enough items, we make sure it does (using a,b,c). -// We then simply redo our remove call, and the second time (regardless of -// whether we're in case 1 or 2), we'll have enough items and can guarantee -// that we hit case A. -func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) Item { - if i > 0 && len(n.children[i-1].items) > minItems { - // Steal from left child - child := n.mutableChild(i) - stealFrom := n.mutableChild(i - 1) - stolenItem := stealFrom.items.pop() - child.items.insertAt(0, n.items[i-1]) - n.items[i-1] = stolenItem - if len(stealFrom.children) > 0 { - child.children.insertAt(0, stealFrom.children.pop()) - } - } else if i < len(n.items) && len(n.children[i+1].items) > minItems { - // steal from right child - child := n.mutableChild(i) - stealFrom := n.mutableChild(i + 1) - stolenItem := stealFrom.items.removeAt(0) - child.items = append(child.items, n.items[i]) - n.items[i] = stolenItem - if len(stealFrom.children) > 0 { - child.children = append(child.children, stealFrom.children.removeAt(0)) - } - } else { - if i >= len(n.items) { - i-- - } - child := n.mutableChild(i) - // merge with right child - mergeItem := n.items.removeAt(i) - mergeChild := n.children.removeAt(i + 1) - child.items = append(child.items, mergeItem) - child.items = append(child.items, mergeChild.items...) - child.children = append(child.children, mergeChild.children...) - n.cow.freeNode(mergeChild) - } - return n.remove(item, minItems, typ) -} - -type direction int - -const ( - descend = direction(-1) - ascend = direction(+1) -) - -// iterate provides a simple method for iterating over elements in the tree. -// -// When ascending, the 'start' should be less than 'stop' and when descending, -// the 'start' should be greater than 'stop'. Setting 'includeStart' to true -// will force the iterator to include the first item when it equals 'start', -// thus creating a "greaterOrEqual" or "lessThanEqual" rather than just a -// "greaterThan" or "lessThan" queries. -func (n *node) iterate(dir direction, start, stop Item, includeStart bool, hit bool, iter ItemIterator) (bool, bool) { - var ok bool - switch dir { - case ascend: - for i := 0; i < len(n.items); i++ { - if start != nil && n.items[i].Less(start) { - continue - } - if len(n.children) > 0 { - if hit, ok = n.children[i].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - if !includeStart && !hit && start != nil && !start.Less(n.items[i]) { - hit = true - continue - } - hit = true - if stop != nil && !n.items[i].Less(stop) { - return hit, false - } - if !iter(n.items[i]) { - return hit, false - } - } - if len(n.children) > 0 { - if hit, ok = n.children[len(n.children)-1].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - case descend: - for i := len(n.items) - 1; i >= 0; i-- { - if start != nil && !n.items[i].Less(start) { - if !includeStart || hit || start.Less(n.items[i]) { - continue - } - } - if len(n.children) > 0 { - if hit, ok = n.children[i+1].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - if stop != nil && !stop.Less(n.items[i]) { - return hit, false // continue - } - hit = true - if !iter(n.items[i]) { - return hit, false - } - } - if len(n.children) > 0 { - if hit, ok = n.children[0].iterate(dir, start, stop, includeStart, hit, iter); !ok { - return hit, false - } - } - } - return hit, true -} - -// Used for testing/debugging purposes. -func (n *node) print(w io.Writer, level int) { - fmt.Fprintf(w, "%sNODE:%v\n", strings.Repeat(" ", level), n.items) - for _, c := range n.children { - c.print(w, level+1) - } -} - -// BTree is an implementation of a B-Tree. -// -// BTree stores Item instances in an ordered structure, allowing easy insertion, -// removal, and iteration. -// -// Write operations are not safe for concurrent mutation by multiple -// goroutines, but Read operations are. -type BTree struct { - degree int - length int - root *node - cow *copyOnWriteContext -} - -// copyOnWriteContext pointers determine node ownership... a tree with a write -// context equivalent to a node's write context is allowed to modify that node. -// A tree whose write context does not match a node's is not allowed to modify -// it, and must create a new, writable copy (IE: it's a Clone). -// -// When doing any write operation, we maintain the invariant that the current -// node's context is equal to the context of the tree that requested the write. -// We do this by, before we descend into any node, creating a copy with the -// correct context if the contexts don't match. -// -// Since the node we're currently visiting on any write has the requesting -// tree's context, that node is modifiable in place. Children of that node may -// not share context, but before we descend into them, we'll make a mutable -// copy. -type copyOnWriteContext struct { - freelist *FreeList -} - -// Clone clones the btree, lazily. Clone should not be called concurrently, -// but the original tree (t) and the new tree (t2) can be used concurrently -// once the Clone call completes. -// -// The internal tree structure of b is marked read-only and shared between t and -// t2. Writes to both t and t2 use copy-on-write logic, creating new nodes -// whenever one of b's original nodes would have been modified. Read operations -// should have no performance degredation. Write operations for both t and t2 -// will initially experience minor slow-downs caused by additional allocs and -// copies due to the aforementioned copy-on-write logic, but should converge to -// the original performance characteristics of the original tree. -func (t *BTree) Clone() (t2 *BTree) { - // Create two entirely new copy-on-write contexts. - // This operation effectively creates three trees: - // the original, shared nodes (old b.cow) - // the new b.cow nodes - // the new out.cow nodes - cow1, cow2 := *t.cow, *t.cow - out := *t - t.cow = &cow1 - out.cow = &cow2 - return &out -} - -// maxItems returns the max number of items to allow per node. -func (t *BTree) maxItems() int { - return t.degree*2 - 1 -} - -// minItems returns the min number of items to allow per node (ignored for the -// root node). -func (t *BTree) minItems() int { - return t.degree - 1 -} - -func (c *copyOnWriteContext) newNode() (n *node) { - n = c.freelist.newNode() - n.cow = c - return -} - -func (c *copyOnWriteContext) freeNode(n *node) { - if n.cow == c { - // clear to allow GC - n.items.truncate(0) - n.children.truncate(0) - n.cow = nil - c.freelist.freeNode(n) - } -} - -// ReplaceOrInsert adds the given item to the tree. If an item in the tree -// already equals the given one, it is removed from the tree and returned. -// Otherwise, nil is returned. -// -// nil cannot be added to the tree (will panic). -func (t *BTree) ReplaceOrInsert(item Item) Item { - if item == nil { - panic("nil item being added to BTree") - } - if t.root == nil { - t.root = t.cow.newNode() - t.root.items = append(t.root.items, item) - t.length++ - return nil - } else { - t.root = t.root.mutableFor(t.cow) - if len(t.root.items) >= t.maxItems() { - item2, second := t.root.split(t.maxItems() / 2) - oldroot := t.root - t.root = t.cow.newNode() - t.root.items = append(t.root.items, item2) - t.root.children = append(t.root.children, oldroot, second) - } - } - out := t.root.insert(item, t.maxItems()) - if out == nil { - t.length++ - } - return out -} - -// Delete removes an item equal to the passed in item from the tree, returning -// it. If no such item exists, returns nil. -func (t *BTree) Delete(item Item) Item { - return t.deleteItem(item, removeItem) -} - -// DeleteMin removes the smallest item in the tree and returns it. -// If no such item exists, returns nil. -func (t *BTree) DeleteMin() Item { - return t.deleteItem(nil, removeMin) -} - -// DeleteMax removes the largest item in the tree and returns it. -// If no such item exists, returns nil. -func (t *BTree) DeleteMax() Item { - return t.deleteItem(nil, removeMax) -} - -func (t *BTree) deleteItem(item Item, typ toRemove) Item { - if t.root == nil || len(t.root.items) == 0 { - return nil - } - t.root = t.root.mutableFor(t.cow) - out := t.root.remove(item, t.minItems(), typ) - if len(t.root.items) == 0 && len(t.root.children) > 0 { - oldroot := t.root - t.root = t.root.children[0] - t.cow.freeNode(oldroot) - } - if out != nil { - t.length-- - } - return out -} - -// AscendRange calls the iterator for every value in the tree within the range -// [greaterOrEqual, lessThan), until iterator returns false. -func (t *BTree) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, greaterOrEqual, lessThan, true, false, iterator) -} - -// AscendLessThan calls the iterator for every value in the tree within the range -// [first, pivot), until iterator returns false. -func (t *BTree) AscendLessThan(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, nil, pivot, false, false, iterator) -} - -// AscendGreaterOrEqual calls the iterator for every value in the tree within -// the range [pivot, last], until iterator returns false. -func (t *BTree) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, pivot, nil, true, false, iterator) -} - -// Ascend calls the iterator for every value in the tree within the range -// [first, last], until iterator returns false. -func (t *BTree) Ascend(iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(ascend, nil, nil, false, false, iterator) -} - -// DescendRange calls the iterator for every value in the tree within the range -// [lessOrEqual, greaterThan), until iterator returns false. -func (t *BTree) DescendRange(lessOrEqual, greaterThan Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, lessOrEqual, greaterThan, true, false, iterator) -} - -// DescendLessOrEqual calls the iterator for every value in the tree within the range -// [pivot, first], until iterator returns false. -func (t *BTree) DescendLessOrEqual(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, pivot, nil, true, false, iterator) -} - -// DescendGreaterThan calls the iterator for every value in the tree within -// the range (pivot, last], until iterator returns false. -func (t *BTree) DescendGreaterThan(pivot Item, iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, nil, pivot, false, false, iterator) -} - -// Descend calls the iterator for every value in the tree within the range -// [last, first], until iterator returns false. -func (t *BTree) Descend(iterator ItemIterator) { - if t.root == nil { - return - } - t.root.iterate(descend, nil, nil, false, false, iterator) -} - -// Get looks for the key item in the tree, returning it. It returns nil if -// unable to find that item. -func (t *BTree) Get(key Item) Item { - if t.root == nil { - return nil - } - return t.root.get(key) -} - -// Min returns the smallest item in the tree, or nil if the tree is empty. -func (t *BTree) Min() Item { - return min(t.root) -} - -// Max returns the largest item in the tree, or nil if the tree is empty. -func (t *BTree) Max() Item { - return max(t.root) -} - -// Has returns true if the given key is in the tree. -func (t *BTree) Has(key Item) bool { - return t.Get(key) != nil -} - -// Len returns the number of items currently in the tree. -func (t *BTree) Len() int { - return t.length -} - -// Int implements the Item interface for integers. -type Int int - -// Less returns true if int(a) < int(b). -func (a Int) Less(b Item) bool { - return a < b.(Int) -} diff --git a/vendor/github.com/google/btree/btree_mem.go b/vendor/github.com/google/btree/btree_mem.go deleted file mode 100644 index cb95b7fa1..000000000 --- a/vendor/github.com/google/btree/btree_mem.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2014 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build ignore - -// This binary compares memory usage between btree and gollrb. -package main - -import ( - "flag" - "fmt" - "math/rand" - "runtime" - "time" - - "github.com/google/btree" - "github.com/petar/GoLLRB/llrb" -) - -var ( - size = flag.Int("size", 1000000, "size of the tree to build") - degree = flag.Int("degree", 8, "degree of btree") - gollrb = flag.Bool("llrb", false, "use llrb instead of btree") -) - -func main() { - flag.Parse() - vals := rand.Perm(*size) - var t, v interface{} - v = vals - var stats runtime.MemStats - for i := 0; i < 10; i++ { - runtime.GC() - } - fmt.Println("-------- BEFORE ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - start := time.Now() - if *gollrb { - tr := llrb.New() - for _, v := range vals { - tr.ReplaceOrInsert(llrb.Int(v)) - } - t = tr // keep it around - } else { - tr := btree.New(*degree) - for _, v := range vals { - tr.ReplaceOrInsert(btree.Int(v)) - } - t = tr // keep it around - } - fmt.Printf("%v inserts in %v\n", *size, time.Since(start)) - fmt.Println("-------- AFTER ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - for i := 0; i < 10; i++ { - runtime.GC() - } - fmt.Println("-------- AFTER GC ----------") - runtime.ReadMemStats(&stats) - fmt.Printf("%+v\n", stats) - if t == v { - fmt.Println("to make sure vals and tree aren't GC'd") - } -} diff --git a/vendor/github.com/google/btree/btree_test.go b/vendor/github.com/google/btree/btree_test.go deleted file mode 100644 index 5da9d8b69..000000000 --- a/vendor/github.com/google/btree/btree_test.go +++ /dev/null @@ -1,689 +0,0 @@ -// Copyright 2014 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package btree - -import ( - "flag" - "fmt" - "math/rand" - "reflect" - "sort" - "sync" - "testing" - "time" -) - -func init() { - seed := time.Now().Unix() - fmt.Println(seed) - rand.Seed(seed) -} - -// perm returns a random permutation of n Int items in the range [0, n). -func perm(n int) (out []Item) { - for _, v := range rand.Perm(n) { - out = append(out, Int(v)) - } - return -} - -// rang returns an ordered list of Int items in the range [0, n). -func rang(n int) (out []Item) { - for i := 0; i < n; i++ { - out = append(out, Int(i)) - } - return -} - -// all extracts all items from a tree in order as a slice. -func all(t *BTree) (out []Item) { - t.Ascend(func(a Item) bool { - out = append(out, a) - return true - }) - return -} - -// rangerev returns a reversed ordered list of Int items in the range [0, n). -func rangrev(n int) (out []Item) { - for i := n - 1; i >= 0; i-- { - out = append(out, Int(i)) - } - return -} - -// allrev extracts all items from a tree in reverse order as a slice. -func allrev(t *BTree) (out []Item) { - t.Descend(func(a Item) bool { - out = append(out, a) - return true - }) - return -} - -var btreeDegree = flag.Int("degree", 32, "B-Tree degree") - -func TestBTree(t *testing.T) { - tr := New(*btreeDegree) - const treeSize = 10000 - for i := 0; i < 10; i++ { - if min := tr.Min(); min != nil { - t.Fatalf("empty min, got %+v", min) - } - if max := tr.Max(); max != nil { - t.Fatalf("empty max, got %+v", max) - } - for _, item := range perm(treeSize) { - if x := tr.ReplaceOrInsert(item); x != nil { - t.Fatal("insert found item", item) - } - } - for _, item := range perm(treeSize) { - if x := tr.ReplaceOrInsert(item); x == nil { - t.Fatal("insert didn't find item", item) - } - } - if min, want := tr.Min(), Item(Int(0)); min != want { - t.Fatalf("min: want %+v, got %+v", want, min) - } - if max, want := tr.Max(), Item(Int(treeSize-1)); max != want { - t.Fatalf("max: want %+v, got %+v", want, max) - } - got := all(tr) - want := rang(treeSize) - if !reflect.DeepEqual(got, want) { - t.Fatalf("mismatch:\n got: %v\nwant: %v", got, want) - } - - gotrev := allrev(tr) - wantrev := rangrev(treeSize) - if !reflect.DeepEqual(gotrev, wantrev) { - t.Fatalf("mismatch:\n got: %v\nwant: %v", got, want) - } - - for _, item := range perm(treeSize) { - if x := tr.Delete(item); x == nil { - t.Fatalf("didn't find %v", item) - } - } - if got = all(tr); len(got) > 0 { - t.Fatalf("some left!: %v", got) - } - } -} - -func ExampleBTree() { - tr := New(*btreeDegree) - for i := Int(0); i < 10; i++ { - tr.ReplaceOrInsert(i) - } - fmt.Println("len: ", tr.Len()) - fmt.Println("get3: ", tr.Get(Int(3))) - fmt.Println("get100: ", tr.Get(Int(100))) - fmt.Println("del4: ", tr.Delete(Int(4))) - fmt.Println("del100: ", tr.Delete(Int(100))) - fmt.Println("replace5: ", tr.ReplaceOrInsert(Int(5))) - fmt.Println("replace100:", tr.ReplaceOrInsert(Int(100))) - fmt.Println("min: ", tr.Min()) - fmt.Println("delmin: ", tr.DeleteMin()) - fmt.Println("max: ", tr.Max()) - fmt.Println("delmax: ", tr.DeleteMax()) - fmt.Println("len: ", tr.Len()) - // Output: - // len: 10 - // get3: 3 - // get100: - // del4: 4 - // del100: - // replace5: 5 - // replace100: - // min: 0 - // delmin: 0 - // max: 100 - // delmax: 100 - // len: 8 -} - -func TestDeleteMin(t *testing.T) { - tr := New(3) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - for v := tr.DeleteMin(); v != nil; v = tr.DeleteMin() { - got = append(got, v) - } - if want := rang(100); !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } -} - -func TestDeleteMax(t *testing.T) { - tr := New(3) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - for v := tr.DeleteMax(); v != nil; v = tr.DeleteMax() { - got = append(got, v) - } - // Reverse our list. - for i := 0; i < len(got)/2; i++ { - got[i], got[len(got)-i-1] = got[len(got)-i-1], got[i] - } - if want := rang(100); !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } -} - -func TestAscendRange(t *testing.T) { - tr := New(2) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.AscendRange(Int(40), Int(60), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rang(100)[40:60]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.AscendRange(Int(40), Int(60), func(a Item) bool { - if a.(Int) > 50 { - return false - } - got = append(got, a) - return true - }) - if want := rang(100)[40:51]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } -} - -func TestDescendRange(t *testing.T) { - tr := New(2) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.DescendRange(Int(60), Int(40), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rangrev(100)[39:59]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendrange:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.DescendRange(Int(60), Int(40), func(a Item) bool { - if a.(Int) < 50 { - return false - } - got = append(got, a) - return true - }) - if want := rangrev(100)[39:50]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendrange:\n got: %v\nwant: %v", got, want) - } -} -func TestAscendLessThan(t *testing.T) { - tr := New(*btreeDegree) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.AscendLessThan(Int(60), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rang(100)[:60]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.AscendLessThan(Int(60), func(a Item) bool { - if a.(Int) > 50 { - return false - } - got = append(got, a) - return true - }) - if want := rang(100)[:51]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } -} - -func TestDescendLessOrEqual(t *testing.T) { - tr := New(*btreeDegree) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.DescendLessOrEqual(Int(40), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rangrev(100)[59:]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendlessorequal:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.DescendLessOrEqual(Int(60), func(a Item) bool { - if a.(Int) < 50 { - return false - } - got = append(got, a) - return true - }) - if want := rangrev(100)[39:50]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendlessorequal:\n got: %v\nwant: %v", got, want) - } -} -func TestAscendGreaterOrEqual(t *testing.T) { - tr := New(*btreeDegree) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.AscendGreaterOrEqual(Int(40), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rang(100)[40:]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.AscendGreaterOrEqual(Int(40), func(a Item) bool { - if a.(Int) > 50 { - return false - } - got = append(got, a) - return true - }) - if want := rang(100)[40:51]; !reflect.DeepEqual(got, want) { - t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) - } -} - -func TestDescendGreaterThan(t *testing.T) { - tr := New(*btreeDegree) - for _, v := range perm(100) { - tr.ReplaceOrInsert(v) - } - var got []Item - tr.DescendGreaterThan(Int(40), func(a Item) bool { - got = append(got, a) - return true - }) - if want := rangrev(100)[:59]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendgreaterthan:\n got: %v\nwant: %v", got, want) - } - got = got[:0] - tr.DescendGreaterThan(Int(40), func(a Item) bool { - if a.(Int) < 50 { - return false - } - got = append(got, a) - return true - }) - if want := rangrev(100)[:50]; !reflect.DeepEqual(got, want) { - t.Fatalf("descendgreaterthan:\n got: %v\nwant: %v", got, want) - } -} - -const benchmarkTreeSize = 10000 - -func BenchmarkInsert(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - b.StartTimer() - i := 0 - for i < b.N { - tr := New(*btreeDegree) - for _, item := range insertP { - tr.ReplaceOrInsert(item) - i++ - if i >= b.N { - return - } - } - } -} - -func BenchmarkDeleteInsert(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, item := range insertP { - tr.ReplaceOrInsert(item) - } - b.StartTimer() - for i := 0; i < b.N; i++ { - tr.Delete(insertP[i%benchmarkTreeSize]) - tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) - } -} - -func BenchmarkDeleteInsertCloneOnce(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, item := range insertP { - tr.ReplaceOrInsert(item) - } - tr = tr.Clone() - b.StartTimer() - for i := 0; i < b.N; i++ { - tr.Delete(insertP[i%benchmarkTreeSize]) - tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) - } -} - -func BenchmarkDeleteInsertCloneEachTime(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, item := range insertP { - tr.ReplaceOrInsert(item) - } - b.StartTimer() - for i := 0; i < b.N; i++ { - tr = tr.Clone() - tr.Delete(insertP[i%benchmarkTreeSize]) - tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) - } -} - -func BenchmarkDelete(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - removeP := perm(benchmarkTreeSize) - b.StartTimer() - i := 0 - for i < b.N { - b.StopTimer() - tr := New(*btreeDegree) - for _, v := range insertP { - tr.ReplaceOrInsert(v) - } - b.StartTimer() - for _, item := range removeP { - tr.Delete(item) - i++ - if i >= b.N { - return - } - } - if tr.Len() > 0 { - panic(tr.Len()) - } - } -} - -func BenchmarkGet(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - removeP := perm(benchmarkTreeSize) - b.StartTimer() - i := 0 - for i < b.N { - b.StopTimer() - tr := New(*btreeDegree) - for _, v := range insertP { - tr.ReplaceOrInsert(v) - } - b.StartTimer() - for _, item := range removeP { - tr.Get(item) - i++ - if i >= b.N { - return - } - } - } -} - -func BenchmarkGetCloneEachTime(b *testing.B) { - b.StopTimer() - insertP := perm(benchmarkTreeSize) - removeP := perm(benchmarkTreeSize) - b.StartTimer() - i := 0 - for i < b.N { - b.StopTimer() - tr := New(*btreeDegree) - for _, v := range insertP { - tr.ReplaceOrInsert(v) - } - b.StartTimer() - for _, item := range removeP { - tr = tr.Clone() - tr.Get(item) - i++ - if i >= b.N { - return - } - } - } -} - -type byInts []Item - -func (a byInts) Len() int { - return len(a) -} - -func (a byInts) Less(i, j int) bool { - return a[i].(Int) < a[j].(Int) -} - -func (a byInts) Swap(i, j int) { - a[i], a[j] = a[j], a[i] -} - -func BenchmarkAscend(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := 0 - tr.Ascend(func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j++ - return true - }) - } -} - -func BenchmarkDescend(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := len(arr) - 1 - tr.Descend(func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j-- - return true - }) - } -} -func BenchmarkAscendRange(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := 100 - tr.AscendRange(Int(100), arr[len(arr)-100], func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j++ - return true - }) - if j != len(arr)-100 { - b.Fatalf("expected: %v, got %v", len(arr)-100, j) - } - } -} - -func BenchmarkDescendRange(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := len(arr) - 100 - tr.DescendRange(arr[len(arr)-100], Int(100), func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j-- - return true - }) - if j != 100 { - b.Fatalf("expected: %v, got %v", len(arr)-100, j) - } - } -} -func BenchmarkAscendGreaterOrEqual(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := 100 - k := 0 - tr.AscendGreaterOrEqual(Int(100), func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j++ - k++ - return true - }) - if j != len(arr) { - b.Fatalf("expected: %v, got %v", len(arr), j) - } - if k != len(arr)-100 { - b.Fatalf("expected: %v, got %v", len(arr)-100, k) - } - } -} -func BenchmarkDescendLessOrEqual(b *testing.B) { - arr := perm(benchmarkTreeSize) - tr := New(*btreeDegree) - for _, v := range arr { - tr.ReplaceOrInsert(v) - } - sort.Sort(byInts(arr)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - j := len(arr) - 100 - k := len(arr) - tr.DescendLessOrEqual(arr[len(arr)-100], func(item Item) bool { - if item.(Int) != arr[j].(Int) { - b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) - } - j-- - k-- - return true - }) - if j != -1 { - b.Fatalf("expected: %v, got %v", -1, j) - } - if k != 99 { - b.Fatalf("expected: %v, got %v", 99, k) - } - } -} - -const cloneTestSize = 10000 - -func cloneTest(t *testing.T, b *BTree, start int, p []Item, wg *sync.WaitGroup, trees *[]*BTree) { - t.Logf("Starting new clone at %v", start) - *trees = append(*trees, b) - for i := start; i < cloneTestSize; i++ { - b.ReplaceOrInsert(p[i]) - if i%(cloneTestSize/5) == 0 { - wg.Add(1) - go cloneTest(t, b.Clone(), i+1, p, wg, trees) - } - } - wg.Done() -} - -func TestCloneConcurrentOperations(t *testing.T) { - b := New(*btreeDegree) - trees := []*BTree{} - p := perm(cloneTestSize) - var wg sync.WaitGroup - wg.Add(1) - go cloneTest(t, b, 0, p, &wg, &trees) - wg.Wait() - want := rang(cloneTestSize) - t.Logf("Starting equality checks on %d trees", len(trees)) - for i, tree := range trees { - if !reflect.DeepEqual(want, all(tree)) { - t.Errorf("tree %v mismatch", i) - } - } - t.Log("Removing half from first half") - toRemove := rang(cloneTestSize)[cloneTestSize/2:] - for i := 0; i < len(trees)/2; i++ { - tree := trees[i] - wg.Add(1) - go func() { - for _, item := range toRemove { - tree.Delete(item) - } - wg.Done() - }() - } - wg.Wait() - t.Log("Checking all values again") - for i, tree := range trees { - var wantpart []Item - if i < len(trees)/2 { - wantpart = want[:cloneTestSize/2] - } else { - wantpart = want - } - if got := all(tree); !reflect.DeepEqual(wantpart, got) { - t.Errorf("tree %v mismatch, want %v got %v", i, len(want), len(got)) - } - } -} diff --git a/vendor/github.com/gregjones/httpcache/.travis.yml b/vendor/github.com/gregjones/httpcache/.travis.yml deleted file mode 100644 index b5ffbe03d..000000000 --- a/vendor/github.com/gregjones/httpcache/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -sudo: false -language: go -go: - - 1.6.x - - 1.7.x - - 1.8.x - - 1.9.x - - master -matrix: - allow_failures: - - go: master - fast_finish: true -install: - - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step). -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . - - go test -v -race ./... diff --git a/vendor/github.com/gregjones/httpcache/LICENSE.txt b/vendor/github.com/gregjones/httpcache/LICENSE.txt deleted file mode 100644 index 81316beb0..000000000 --- a/vendor/github.com/gregjones/httpcache/LICENSE.txt +++ /dev/null @@ -1,7 +0,0 @@ -Copyright © 2012 Greg Jones (greg.jones@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Softwareâ€), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/gregjones/httpcache/README.md b/vendor/github.com/gregjones/httpcache/README.md deleted file mode 100644 index eb2eae8ed..000000000 --- a/vendor/github.com/gregjones/httpcache/README.md +++ /dev/null @@ -1,25 +0,0 @@ -httpcache -========= - -[![Build Status](https://travis-ci.org/gregjones/httpcache.svg?branch=master)](https://travis-ci.org/gregjones/httpcache) [![GoDoc](https://godoc.org/github.com/gregjones/httpcache?status.svg)](https://godoc.org/github.com/gregjones/httpcache) - -Package httpcache provides a http.RoundTripper implementation that works as a mostly RFC-compliant cache for http responses. - -It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy). - -Cache Backends --------------- - -- The built-in 'memory' cache stores responses in an in-memory map. -- [`github.com/gregjones/httpcache/diskcache`](https://github.com/gregjones/httpcache/tree/master/diskcache) provides a filesystem-backed cache using the [diskv](https://github.com/peterbourgon/diskv) library. -- [`github.com/gregjones/httpcache/memcache`](https://github.com/gregjones/httpcache/tree/master/memcache) provides memcache implementations, for both App Engine and 'normal' memcache servers. -- [`sourcegraph.com/sourcegraph/s3cache`](https://sourcegraph.com/github.com/sourcegraph/s3cache) uses Amazon S3 for storage. -- [`github.com/gregjones/httpcache/leveldbcache`](https://github.com/gregjones/httpcache/tree/master/leveldbcache) provides a filesystem-backed cache using [leveldb](https://github.com/syndtr/goleveldb/leveldb). -- [`github.com/die-net/lrucache`](https://github.com/die-net/lrucache) provides an in-memory cache that will evict least-recently used entries. -- [`github.com/die-net/lrucache/twotier`](https://github.com/die-net/lrucache/tree/master/twotier) allows caches to be combined, for example to use lrucache above with a persistent disk-cache. -- [`github.com/birkelund/boltdbcache`](https://github.com/birkelund/boltdbcache) provides a BoltDB implementation (based on the [bbolt](https://github.com/coreos/bbolt) fork). - -License -------- - -- [MIT License](LICENSE.txt) diff --git a/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go b/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go deleted file mode 100644 index 42e3129d8..000000000 --- a/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go +++ /dev/null @@ -1,61 +0,0 @@ -// Package diskcache provides an implementation of httpcache.Cache that uses the diskv package -// to supplement an in-memory map with persistent storage -// -package diskcache - -import ( - "bytes" - "crypto/md5" - "encoding/hex" - "github.com/peterbourgon/diskv" - "io" -) - -// Cache is an implementation of httpcache.Cache that supplements the in-memory map with persistent storage -type Cache struct { - d *diskv.Diskv -} - -// Get returns the response corresponding to key if present -func (c *Cache) Get(key string) (resp []byte, ok bool) { - key = keyToFilename(key) - resp, err := c.d.Read(key) - if err != nil { - return []byte{}, false - } - return resp, true -} - -// Set saves a response to the cache as key -func (c *Cache) Set(key string, resp []byte) { - key = keyToFilename(key) - c.d.WriteStream(key, bytes.NewReader(resp), true) -} - -// Delete removes the response with key from the cache -func (c *Cache) Delete(key string) { - key = keyToFilename(key) - c.d.Erase(key) -} - -func keyToFilename(key string) string { - h := md5.New() - io.WriteString(h, key) - return hex.EncodeToString(h.Sum(nil)) -} - -// New returns a new Cache that will store files in basePath -func New(basePath string) *Cache { - return &Cache{ - d: diskv.New(diskv.Options{ - BasePath: basePath, - CacheSizeMax: 100 * 1024 * 1024, // 100MB - }), - } -} - -// NewWithDiskv returns a new Cache using the provided Diskv as underlying -// storage. -func NewWithDiskv(d *diskv.Diskv) *Cache { - return &Cache{d} -} diff --git a/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go b/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go deleted file mode 100644 index 35c76cbd1..000000000 --- a/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package diskcache - -import ( - "bytes" - "io/ioutil" - "os" - "testing" -) - -func TestDiskCache(t *testing.T) { - tempDir, err := ioutil.TempDir("", "httpcache") - if err != nil { - t.Fatalf("TempDir: %v", err) - } - defer os.RemoveAll(tempDir) - - cache := New(tempDir) - - key := "testKey" - _, ok := cache.Get(key) - if ok { - t.Fatal("retrieved key before adding it") - } - - val := []byte("some bytes") - cache.Set(key, val) - - retVal, ok := cache.Get(key) - if !ok { - t.Fatal("could not retrieve an element we just added") - } - if !bytes.Equal(retVal, val) { - t.Fatal("retrieved a different value than what we put in") - } - - cache.Delete(key) - - _, ok = cache.Get(key) - if ok { - t.Fatal("deleted key still present") - } -} diff --git a/vendor/github.com/gregjones/httpcache/httpcache.go b/vendor/github.com/gregjones/httpcache/httpcache.go deleted file mode 100644 index f6a2ec4a5..000000000 --- a/vendor/github.com/gregjones/httpcache/httpcache.go +++ /dev/null @@ -1,551 +0,0 @@ -// Package httpcache provides a http.RoundTripper implementation that works as a -// mostly RFC-compliant cache for http responses. -// -// It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client -// and not for a shared proxy). -// -package httpcache - -import ( - "bufio" - "bytes" - "errors" - "io" - "io/ioutil" - "net/http" - "net/http/httputil" - "strings" - "sync" - "time" -) - -const ( - stale = iota - fresh - transparent - // XFromCache is the header added to responses that are returned from the cache - XFromCache = "X-From-Cache" -) - -// A Cache interface is used by the Transport to store and retrieve responses. -type Cache interface { - // Get returns the []byte representation of a cached response and a bool - // set to true if the value isn't empty - Get(key string) (responseBytes []byte, ok bool) - // Set stores the []byte representation of a response against a key - Set(key string, responseBytes []byte) - // Delete removes the value associated with the key - Delete(key string) -} - -// cacheKey returns the cache key for req. -func cacheKey(req *http.Request) string { - if req.Method == http.MethodGet { - return req.URL.String() - } else { - return req.Method + " " + req.URL.String() - } -} - -// CachedResponse returns the cached http.Response for req if present, and nil -// otherwise. -func CachedResponse(c Cache, req *http.Request) (resp *http.Response, err error) { - cachedVal, ok := c.Get(cacheKey(req)) - if !ok { - return - } - - b := bytes.NewBuffer(cachedVal) - return http.ReadResponse(bufio.NewReader(b), req) -} - -// MemoryCache is an implemtation of Cache that stores responses in an in-memory map. -type MemoryCache struct { - mu sync.RWMutex - items map[string][]byte -} - -// Get returns the []byte representation of the response and true if present, false if not -func (c *MemoryCache) Get(key string) (resp []byte, ok bool) { - c.mu.RLock() - resp, ok = c.items[key] - c.mu.RUnlock() - return resp, ok -} - -// Set saves response resp to the cache with key -func (c *MemoryCache) Set(key string, resp []byte) { - c.mu.Lock() - c.items[key] = resp - c.mu.Unlock() -} - -// Delete removes key from the cache -func (c *MemoryCache) Delete(key string) { - c.mu.Lock() - delete(c.items, key) - c.mu.Unlock() -} - -// NewMemoryCache returns a new Cache that will store items in an in-memory map -func NewMemoryCache() *MemoryCache { - c := &MemoryCache{items: map[string][]byte{}} - return c -} - -// Transport is an implementation of http.RoundTripper that will return values from a cache -// where possible (avoiding a network request) and will additionally add validators (etag/if-modified-since) -// to repeated requests allowing servers to return 304 / Not Modified -type Transport struct { - // The RoundTripper interface actually used to make requests - // If nil, http.DefaultTransport is used - Transport http.RoundTripper - Cache Cache - // If true, responses returned from the cache will be given an extra header, X-From-Cache - MarkCachedResponses bool -} - -// NewTransport returns a new Transport with the -// provided Cache implementation and MarkCachedResponses set to true -func NewTransport(c Cache) *Transport { - return &Transport{Cache: c, MarkCachedResponses: true} -} - -// Client returns an *http.Client that caches responses. -func (t *Transport) Client() *http.Client { - return &http.Client{Transport: t} -} - -// varyMatches will return false unless all of the cached values for the headers listed in Vary -// match the new request -func varyMatches(cachedResp *http.Response, req *http.Request) bool { - for _, header := range headerAllCommaSepValues(cachedResp.Header, "vary") { - header = http.CanonicalHeaderKey(header) - if header != "" && req.Header.Get(header) != cachedResp.Header.Get("X-Varied-"+header) { - return false - } - } - return true -} - -// RoundTrip takes a Request and returns a Response -// -// If there is a fresh Response already in cache, then it will be returned without connecting to -// the server. -// -// If there is a stale Response, then any validators it contains will be set on the new request -// to give the server a chance to respond with NotModified. If this happens, then the cached Response -// will be returned. -func (t *Transport) RoundTrip(req *http.Request) (resp *http.Response, err error) { - cacheKey := cacheKey(req) - cacheable := (req.Method == "GET" || req.Method == "HEAD") && req.Header.Get("range") == "" - var cachedResp *http.Response - if cacheable { - cachedResp, err = CachedResponse(t.Cache, req) - } else { - // Need to invalidate an existing value - t.Cache.Delete(cacheKey) - } - - transport := t.Transport - if transport == nil { - transport = http.DefaultTransport - } - - if cacheable && cachedResp != nil && err == nil { - if t.MarkCachedResponses { - cachedResp.Header.Set(XFromCache, "1") - } - - if varyMatches(cachedResp, req) { - // Can only use cached value if the new request doesn't Vary significantly - freshness := getFreshness(cachedResp.Header, req.Header) - if freshness == fresh { - return cachedResp, nil - } - - if freshness == stale { - var req2 *http.Request - // Add validators if caller hasn't already done so - etag := cachedResp.Header.Get("etag") - if etag != "" && req.Header.Get("etag") == "" { - req2 = cloneRequest(req) - req2.Header.Set("if-none-match", etag) - } - lastModified := cachedResp.Header.Get("last-modified") - if lastModified != "" && req.Header.Get("last-modified") == "" { - if req2 == nil { - req2 = cloneRequest(req) - } - req2.Header.Set("if-modified-since", lastModified) - } - if req2 != nil { - req = req2 - } - } - } - - resp, err = transport.RoundTrip(req) - if err == nil && req.Method == "GET" && resp.StatusCode == http.StatusNotModified { - // Replace the 304 response with the one from cache, but update with some new headers - endToEndHeaders := getEndToEndHeaders(resp.Header) - for _, header := range endToEndHeaders { - cachedResp.Header[header] = resp.Header[header] - } - resp = cachedResp - } else if (err != nil || (cachedResp != nil && resp.StatusCode >= 500)) && - req.Method == "GET" && canStaleOnError(cachedResp.Header, req.Header) { - // In case of transport failure and stale-if-error activated, returns cached content - // when available - return cachedResp, nil - } else { - if err != nil || resp.StatusCode != http.StatusOK { - t.Cache.Delete(cacheKey) - } - if err != nil { - return nil, err - } - } - } else { - reqCacheControl := parseCacheControl(req.Header) - if _, ok := reqCacheControl["only-if-cached"]; ok { - resp = newGatewayTimeoutResponse(req) - } else { - resp, err = transport.RoundTrip(req) - if err != nil { - return nil, err - } - } - } - - if cacheable && canStore(parseCacheControl(req.Header), parseCacheControl(resp.Header)) { - for _, varyKey := range headerAllCommaSepValues(resp.Header, "vary") { - varyKey = http.CanonicalHeaderKey(varyKey) - fakeHeader := "X-Varied-" + varyKey - reqValue := req.Header.Get(varyKey) - if reqValue != "" { - resp.Header.Set(fakeHeader, reqValue) - } - } - switch req.Method { - case "GET": - // Delay caching until EOF is reached. - resp.Body = &cachingReadCloser{ - R: resp.Body, - OnEOF: func(r io.Reader) { - resp := *resp - resp.Body = ioutil.NopCloser(r) - respBytes, err := httputil.DumpResponse(&resp, true) - if err == nil { - t.Cache.Set(cacheKey, respBytes) - } - }, - } - default: - respBytes, err := httputil.DumpResponse(resp, true) - if err == nil { - t.Cache.Set(cacheKey, respBytes) - } - } - } else { - t.Cache.Delete(cacheKey) - } - return resp, nil -} - -// ErrNoDateHeader indicates that the HTTP headers contained no Date header. -var ErrNoDateHeader = errors.New("no Date header") - -// Date parses and returns the value of the Date header. -func Date(respHeaders http.Header) (date time.Time, err error) { - dateHeader := respHeaders.Get("date") - if dateHeader == "" { - err = ErrNoDateHeader - return - } - - return time.Parse(time.RFC1123, dateHeader) -} - -type realClock struct{} - -func (c *realClock) since(d time.Time) time.Duration { - return time.Since(d) -} - -type timer interface { - since(d time.Time) time.Duration -} - -var clock timer = &realClock{} - -// getFreshness will return one of fresh/stale/transparent based on the cache-control -// values of the request and the response -// -// fresh indicates the response can be returned -// stale indicates that the response needs validating before it is returned -// transparent indicates the response should not be used to fulfil the request -// -// Because this is only a private cache, 'public' and 'private' in cache-control aren't -// signficant. Similarly, smax-age isn't used. -func getFreshness(respHeaders, reqHeaders http.Header) (freshness int) { - respCacheControl := parseCacheControl(respHeaders) - reqCacheControl := parseCacheControl(reqHeaders) - if _, ok := reqCacheControl["no-cache"]; ok { - return transparent - } - if _, ok := respCacheControl["no-cache"]; ok { - return stale - } - if _, ok := reqCacheControl["only-if-cached"]; ok { - return fresh - } - - date, err := Date(respHeaders) - if err != nil { - return stale - } - currentAge := clock.since(date) - - var lifetime time.Duration - var zeroDuration time.Duration - - // If a response includes both an Expires header and a max-age directive, - // the max-age directive overrides the Expires header, even if the Expires header is more restrictive. - if maxAge, ok := respCacheControl["max-age"]; ok { - lifetime, err = time.ParseDuration(maxAge + "s") - if err != nil { - lifetime = zeroDuration - } - } else { - expiresHeader := respHeaders.Get("Expires") - if expiresHeader != "" { - expires, err := time.Parse(time.RFC1123, expiresHeader) - if err != nil { - lifetime = zeroDuration - } else { - lifetime = expires.Sub(date) - } - } - } - - if maxAge, ok := reqCacheControl["max-age"]; ok { - // the client is willing to accept a response whose age is no greater than the specified time in seconds - lifetime, err = time.ParseDuration(maxAge + "s") - if err != nil { - lifetime = zeroDuration - } - } - if minfresh, ok := reqCacheControl["min-fresh"]; ok { - // the client wants a response that will still be fresh for at least the specified number of seconds. - minfreshDuration, err := time.ParseDuration(minfresh + "s") - if err == nil { - currentAge = time.Duration(currentAge + minfreshDuration) - } - } - - if maxstale, ok := reqCacheControl["max-stale"]; ok { - // Indicates that the client is willing to accept a response that has exceeded its expiration time. - // If max-stale is assigned a value, then the client is willing to accept a response that has exceeded - // its expiration time by no more than the specified number of seconds. - // If no value is assigned to max-stale, then the client is willing to accept a stale response of any age. - // - // Responses served only because of a max-stale value are supposed to have a Warning header added to them, - // but that seems like a hassle, and is it actually useful? If so, then there needs to be a different - // return-value available here. - if maxstale == "" { - return fresh - } - maxstaleDuration, err := time.ParseDuration(maxstale + "s") - if err == nil { - currentAge = time.Duration(currentAge - maxstaleDuration) - } - } - - if lifetime > currentAge { - return fresh - } - - return stale -} - -// Returns true if either the request or the response includes the stale-if-error -// cache control extension: https://tools.ietf.org/html/rfc5861 -func canStaleOnError(respHeaders, reqHeaders http.Header) bool { - respCacheControl := parseCacheControl(respHeaders) - reqCacheControl := parseCacheControl(reqHeaders) - - var err error - lifetime := time.Duration(-1) - - if staleMaxAge, ok := respCacheControl["stale-if-error"]; ok { - if staleMaxAge != "" { - lifetime, err = time.ParseDuration(staleMaxAge + "s") - if err != nil { - return false - } - } else { - return true - } - } - if staleMaxAge, ok := reqCacheControl["stale-if-error"]; ok { - if staleMaxAge != "" { - lifetime, err = time.ParseDuration(staleMaxAge + "s") - if err != nil { - return false - } - } else { - return true - } - } - - if lifetime >= 0 { - date, err := Date(respHeaders) - if err != nil { - return false - } - currentAge := clock.since(date) - if lifetime > currentAge { - return true - } - } - - return false -} - -func getEndToEndHeaders(respHeaders http.Header) []string { - // These headers are always hop-by-hop - hopByHopHeaders := map[string]struct{}{ - "Connection": struct{}{}, - "Keep-Alive": struct{}{}, - "Proxy-Authenticate": struct{}{}, - "Proxy-Authorization": struct{}{}, - "Te": struct{}{}, - "Trailers": struct{}{}, - "Transfer-Encoding": struct{}{}, - "Upgrade": struct{}{}, - } - - for _, extra := range strings.Split(respHeaders.Get("connection"), ",") { - // any header listed in connection, if present, is also considered hop-by-hop - if strings.Trim(extra, " ") != "" { - hopByHopHeaders[http.CanonicalHeaderKey(extra)] = struct{}{} - } - } - endToEndHeaders := []string{} - for respHeader, _ := range respHeaders { - if _, ok := hopByHopHeaders[respHeader]; !ok { - endToEndHeaders = append(endToEndHeaders, respHeader) - } - } - return endToEndHeaders -} - -func canStore(reqCacheControl, respCacheControl cacheControl) (canStore bool) { - if _, ok := respCacheControl["no-store"]; ok { - return false - } - if _, ok := reqCacheControl["no-store"]; ok { - return false - } - return true -} - -func newGatewayTimeoutResponse(req *http.Request) *http.Response { - var braw bytes.Buffer - braw.WriteString("HTTP/1.1 504 Gateway Timeout\r\n\r\n") - resp, err := http.ReadResponse(bufio.NewReader(&braw), req) - if err != nil { - panic(err) - } - return resp -} - -// cloneRequest returns a clone of the provided *http.Request. -// The clone is a shallow copy of the struct and its Header map. -// (This function copyright goauth2 authors: https://code.google.com/p/goauth2) -func cloneRequest(r *http.Request) *http.Request { - // shallow copy of the struct - r2 := new(http.Request) - *r2 = *r - // deep copy of the Header - r2.Header = make(http.Header) - for k, s := range r.Header { - r2.Header[k] = s - } - return r2 -} - -type cacheControl map[string]string - -func parseCacheControl(headers http.Header) cacheControl { - cc := cacheControl{} - ccHeader := headers.Get("Cache-Control") - for _, part := range strings.Split(ccHeader, ",") { - part = strings.Trim(part, " ") - if part == "" { - continue - } - if strings.ContainsRune(part, '=') { - keyval := strings.Split(part, "=") - cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") - } else { - cc[part] = "" - } - } - return cc -} - -// headerAllCommaSepValues returns all comma-separated values (each -// with whitespace trimmed) for header name in headers. According to -// Section 4.2 of the HTTP/1.1 spec -// (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2), -// values from multiple occurrences of a header should be concatenated, if -// the header's value is a comma-separated list. -func headerAllCommaSepValues(headers http.Header, name string) []string { - var vals []string - for _, val := range headers[http.CanonicalHeaderKey(name)] { - fields := strings.Split(val, ",") - for i, f := range fields { - fields[i] = strings.TrimSpace(f) - } - vals = append(vals, fields...) - } - return vals -} - -// cachingReadCloser is a wrapper around ReadCloser R that calls OnEOF -// handler with a full copy of the content read from R when EOF is -// reached. -type cachingReadCloser struct { - // Underlying ReadCloser. - R io.ReadCloser - // OnEOF is called with a copy of the content of R when EOF is reached. - OnEOF func(io.Reader) - - buf bytes.Buffer // buf stores a copy of the content of R. -} - -// Read reads the next len(p) bytes from R or until R is drained. The -// return value n is the number of bytes read. If R has no data to -// return, err is io.EOF and OnEOF is called with a full copy of what -// has been read so far. -func (r *cachingReadCloser) Read(p []byte) (n int, err error) { - n, err = r.R.Read(p) - r.buf.Write(p[:n]) - if err == io.EOF { - r.OnEOF(bytes.NewReader(r.buf.Bytes())) - } - return n, err -} - -func (r *cachingReadCloser) Close() error { - return r.R.Close() -} - -// NewMemoryCacheTransport returns a new Transport using the in-memory cache implementation -func NewMemoryCacheTransport() *Transport { - c := NewMemoryCache() - t := NewTransport(c) - return t -} diff --git a/vendor/github.com/gregjones/httpcache/httpcache_test.go b/vendor/github.com/gregjones/httpcache/httpcache_test.go deleted file mode 100644 index a50464180..000000000 --- a/vendor/github.com/gregjones/httpcache/httpcache_test.go +++ /dev/null @@ -1,1475 +0,0 @@ -package httpcache - -import ( - "bytes" - "errors" - "flag" - "io" - "io/ioutil" - "net/http" - "net/http/httptest" - "os" - "strconv" - "testing" - "time" -) - -var s struct { - server *httptest.Server - client http.Client - transport *Transport - done chan struct{} // Closed to unlock infinite handlers. -} - -type fakeClock struct { - elapsed time.Duration -} - -func (c *fakeClock) since(t time.Time) time.Duration { - return c.elapsed -} - -func TestMain(m *testing.M) { - flag.Parse() - setup() - code := m.Run() - teardown() - os.Exit(code) -} - -func setup() { - tp := NewMemoryCacheTransport() - client := http.Client{Transport: tp} - s.transport = tp - s.client = client - s.done = make(chan struct{}) - - mux := http.NewServeMux() - s.server = httptest.NewServer(mux) - - mux.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - })) - - mux.HandleFunc("/method", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - w.Write([]byte(r.Method)) - })) - - mux.HandleFunc("/range", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - lm := "Fri, 14 Dec 2010 01:01:50 GMT" - if r.Header.Get("if-modified-since") == lm { - w.WriteHeader(http.StatusNotModified) - return - } - w.Header().Set("last-modified", lm) - if r.Header.Get("range") == "bytes=4-9" { - w.WriteHeader(http.StatusPartialContent) - w.Write([]byte(" text ")) - return - } - w.Write([]byte("Some text content")) - })) - - mux.HandleFunc("/nostore", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "no-store") - })) - - mux.HandleFunc("/etag", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - etag := "124567" - if r.Header.Get("if-none-match") == etag { - w.WriteHeader(http.StatusNotModified) - return - } - w.Header().Set("etag", etag) - })) - - mux.HandleFunc("/lastmodified", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - lm := "Fri, 14 Dec 2010 01:01:50 GMT" - if r.Header.Get("if-modified-since") == lm { - w.WriteHeader(http.StatusNotModified) - return - } - w.Header().Set("last-modified", lm) - })) - - mux.HandleFunc("/varyaccept", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - w.Header().Set("Content-Type", "text/plain") - w.Header().Set("Vary", "Accept") - w.Write([]byte("Some text content")) - })) - - mux.HandleFunc("/doublevary", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - w.Header().Set("Content-Type", "text/plain") - w.Header().Set("Vary", "Accept, Accept-Language") - w.Write([]byte("Some text content")) - })) - mux.HandleFunc("/2varyheaders", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - w.Header().Set("Content-Type", "text/plain") - w.Header().Add("Vary", "Accept") - w.Header().Add("Vary", "Accept-Language") - w.Write([]byte("Some text content")) - })) - mux.HandleFunc("/varyunused", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Cache-Control", "max-age=3600") - w.Header().Set("Content-Type", "text/plain") - w.Header().Set("Vary", "X-Madeup-Header") - w.Write([]byte("Some text content")) - })) - - mux.HandleFunc("/cachederror", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - etag := "abc" - if r.Header.Get("if-none-match") == etag { - w.WriteHeader(http.StatusNotModified) - return - } - w.Header().Set("etag", etag) - w.WriteHeader(http.StatusNotFound) - w.Write([]byte("Not found")) - })) - - updateFieldsCounter := 0 - mux.HandleFunc("/updatefields", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("X-Counter", strconv.Itoa(updateFieldsCounter)) - w.Header().Set("Etag", `"e"`) - updateFieldsCounter++ - if r.Header.Get("if-none-match") != "" { - w.WriteHeader(http.StatusNotModified) - return - } - w.Write([]byte("Some text content")) - })) - - // Take 3 seconds to return 200 OK (for testing client timeouts). - mux.HandleFunc("/3seconds", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - time.Sleep(3 * time.Second) - })) - - mux.HandleFunc("/infinite", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for { - select { - case <-s.done: - return - default: - w.Write([]byte{0}) - } - } - })) -} - -func teardown() { - close(s.done) - s.server.Close() -} - -func resetTest() { - s.transport.Cache = NewMemoryCache() - clock = &realClock{} -} - -// TestCacheableMethod ensures that uncacheable method does not get stored -// in cache and get incorrectly used for a following cacheable method request. -func TestCacheableMethod(t *testing.T) { - resetTest() - { - req, err := http.NewRequest("POST", s.server.URL+"/method", nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), "POST"; got != want { - t.Errorf("got %q, want %q", got, want) - } - if resp.StatusCode != http.StatusOK { - t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) - } - } - { - req, err := http.NewRequest("GET", s.server.URL+"/method", nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), "GET"; got != want { - t.Errorf("got wrong body %q, want %q", got, want) - } - if resp.StatusCode != http.StatusOK { - t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) - } - if resp.Header.Get(XFromCache) != "" { - t.Errorf("XFromCache header isn't blank") - } - } -} - -func TestDontServeHeadResponseToGetRequest(t *testing.T) { - resetTest() - url := s.server.URL + "/" - req, err := http.NewRequest(http.MethodHead, url, nil) - if err != nil { - t.Fatal(err) - } - _, err = s.client.Do(req) - if err != nil { - t.Fatal(err) - } - req, err = http.NewRequest(http.MethodGet, url, nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - if resp.Header.Get(XFromCache) != "" { - t.Errorf("Cache should not match") - } -} - -func TestDontStorePartialRangeInCache(t *testing.T) { - resetTest() - { - req, err := http.NewRequest("GET", s.server.URL+"/range", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("range", "bytes=4-9") - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), " text "; got != want { - t.Errorf("got %q, want %q", got, want) - } - if resp.StatusCode != http.StatusPartialContent { - t.Errorf("response status code isn't 206 Partial Content: %v", resp.StatusCode) - } - } - { - req, err := http.NewRequest("GET", s.server.URL+"/range", nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), "Some text content"; got != want { - t.Errorf("got %q, want %q", got, want) - } - if resp.StatusCode != http.StatusOK { - t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) - } - if resp.Header.Get(XFromCache) != "" { - t.Error("XFromCache header isn't blank") - } - } - { - req, err := http.NewRequest("GET", s.server.URL+"/range", nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), "Some text content"; got != want { - t.Errorf("got %q, want %q", got, want) - } - if resp.StatusCode != http.StatusOK { - t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) - } - if resp.Header.Get(XFromCache) != "1" { - t.Errorf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } - { - req, err := http.NewRequest("GET", s.server.URL+"/range", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("range", "bytes=4-9") - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, resp.Body) - if err != nil { - t.Fatal(err) - } - err = resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if got, want := buf.String(), " text "; got != want { - t.Errorf("got %q, want %q", got, want) - } - if resp.StatusCode != http.StatusPartialContent { - t.Errorf("response status code isn't 206 Partial Content: %v", resp.StatusCode) - } - } -} - -func TestCacheOnlyIfBodyRead(t *testing.T) { - resetTest() - { - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - // We do not read the body - resp.Body.Close() - } - { - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatalf("XFromCache header isn't blank") - } - } -} - -func TestOnlyReadBodyOnDemand(t *testing.T) { - resetTest() - - req, err := http.NewRequest("GET", s.server.URL+"/infinite", nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) // This shouldn't hang forever. - if err != nil { - t.Fatal(err) - } - buf := make([]byte, 10) // Only partially read the body. - _, err = resp.Body.Read(buf) - if err != nil { - t.Fatal(err) - } - resp.Body.Close() -} - -func TestGetOnlyIfCachedHit(t *testing.T) { - resetTest() - { - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - req.Header.Add("cache-control", "only-if-cached") - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - if resp.StatusCode != http.StatusOK { - t.Fatalf("response status code isn't 200 OK: %v", resp.StatusCode) - } - } -} - -func TestGetOnlyIfCachedMiss(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - req.Header.Add("cache-control", "only-if-cached") - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - if resp.StatusCode != http.StatusGatewayTimeout { - t.Fatalf("response status code isn't 504 GatewayTimeout: %v", resp.StatusCode) - } -} - -func TestGetNoStoreRequest(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL, nil) - if err != nil { - t.Fatal(err) - } - req.Header.Add("Cache-Control", "no-store") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } -} - -func TestGetNoStoreResponse(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/nostore", nil) - if err != nil { - t.Fatal(err) - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } -} - -func TestGetWithEtag(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/etag", nil) - if err != nil { - t.Fatal(err) - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - // additional assertions to verify that 304 response is converted properly - if resp.StatusCode != http.StatusOK { - t.Fatalf("response status code isn't 200 OK: %v", resp.StatusCode) - } - if _, ok := resp.Header["Connection"]; ok { - t.Fatalf("Connection header isn't absent") - } - } -} - -func TestGetWithLastModified(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/lastmodified", nil) - if err != nil { - t.Fatal(err) - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } -} - -func TestGetWithVary(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/varyaccept", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("Accept", "text/plain") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get("Vary") != "Accept" { - t.Fatalf(`Vary header isn't "Accept": %v`, resp.Header.Get("Vary")) - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } - req.Header.Set("Accept", "text/html") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - req.Header.Set("Accept", "") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } -} - -func TestGetWithDoubleVary(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/doublevary", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("Accept", "text/plain") - req.Header.Set("Accept-Language", "da, en-gb;q=0.8, en;q=0.7") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get("Vary") == "" { - t.Fatalf(`Vary header is blank`) - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } - req.Header.Set("Accept-Language", "") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - req.Header.Set("Accept-Language", "da") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } -} - -func TestGetWith2VaryHeaders(t *testing.T) { - resetTest() - // Tests that multiple Vary headers' comma-separated lists are - // merged. See https://github.com/gregjones/httpcache/issues/27. - const ( - accept = "text/plain" - acceptLanguage = "da, en-gb;q=0.8, en;q=0.7" - ) - req, err := http.NewRequest("GET", s.server.URL+"/2varyheaders", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("Accept", accept) - req.Header.Set("Accept-Language", acceptLanguage) - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get("Vary") == "" { - t.Fatalf(`Vary header is blank`) - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } - req.Header.Set("Accept-Language", "") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - req.Header.Set("Accept-Language", "da") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - req.Header.Set("Accept-Language", acceptLanguage) - req.Header.Set("Accept", "") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - } - req.Header.Set("Accept", "image/png") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "" { - t.Fatal("XFromCache header isn't blank") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } -} - -func TestGetVaryUnused(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/varyunused", nil) - if err != nil { - t.Fatal(err) - } - req.Header.Set("Accept", "text/plain") - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get("Vary") == "" { - t.Fatalf(`Vary header is blank`) - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - } -} - -func TestUpdateFields(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/updatefields", nil) - if err != nil { - t.Fatal(err) - } - var counter, counter2 string - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - counter = resp.Header.Get("x-counter") - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.Header.Get(XFromCache) != "1" { - t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) - } - counter2 = resp.Header.Get("x-counter") - } - if counter == counter2 { - t.Fatalf(`both "x-counter" values are equal: %v %v`, counter, counter2) - } -} - -// This tests the fix for https://github.com/gregjones/httpcache/issues/74. -// Previously, after validating a cached response, its StatusCode -// was incorrectly being replaced. -func TestCachedErrorsKeepStatus(t *testing.T) { - resetTest() - req, err := http.NewRequest("GET", s.server.URL+"/cachederror", nil) - if err != nil { - t.Fatal(err) - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - io.Copy(ioutil.Discard, resp.Body) - } - { - resp, err := s.client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusNotFound { - t.Fatalf("Status code isn't 404: %d", resp.StatusCode) - } - } -} - -func TestParseCacheControl(t *testing.T) { - resetTest() - h := http.Header{} - for range parseCacheControl(h) { - t.Fatal("cacheControl should be empty") - } - - h.Set("cache-control", "no-cache") - { - cc := parseCacheControl(h) - if _, ok := cc["foo"]; ok { - t.Error(`Value "foo" shouldn't exist`) - } - noCache, ok := cc["no-cache"] - if !ok { - t.Fatalf(`"no-cache" value isn't set`) - } - if noCache != "" { - t.Fatalf(`"no-cache" value isn't blank: %v`, noCache) - } - } - h.Set("cache-control", "no-cache, max-age=3600") - { - cc := parseCacheControl(h) - noCache, ok := cc["no-cache"] - if !ok { - t.Fatalf(`"no-cache" value isn't set`) - } - if noCache != "" { - t.Fatalf(`"no-cache" value isn't blank: %v`, noCache) - } - if cc["max-age"] != "3600" { - t.Fatalf(`"max-age" value isn't "3600": %v`, cc["max-age"]) - } - } -} - -func TestNoCacheRequestExpiration(t *testing.T) { - resetTest() - respHeaders := http.Header{} - respHeaders.Set("Cache-Control", "max-age=7200") - - reqHeaders := http.Header{} - reqHeaders.Set("Cache-Control", "no-cache") - if getFreshness(respHeaders, reqHeaders) != transparent { - t.Fatal("freshness isn't transparent") - } -} - -func TestNoCacheResponseExpiration(t *testing.T) { - resetTest() - respHeaders := http.Header{} - respHeaders.Set("Cache-Control", "no-cache") - respHeaders.Set("Expires", "Wed, 19 Apr 3000 11:43:00 GMT") - - reqHeaders := http.Header{} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestReqMustRevalidate(t *testing.T) { - resetTest() - // not paying attention to request setting max-stale means never returning stale - // responses, so always acting as if must-revalidate is set - respHeaders := http.Header{} - - reqHeaders := http.Header{} - reqHeaders.Set("Cache-Control", "must-revalidate") - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestRespMustRevalidate(t *testing.T) { - resetTest() - respHeaders := http.Header{} - respHeaders.Set("Cache-Control", "must-revalidate") - - reqHeaders := http.Header{} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestFreshExpiration(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("expires", now.Add(time.Duration(2)*time.Second).Format(time.RFC1123)) - - reqHeaders := http.Header{} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - clock = &fakeClock{elapsed: 3 * time.Second} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestMaxAge(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("cache-control", "max-age=2") - - reqHeaders := http.Header{} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - clock = &fakeClock{elapsed: 3 * time.Second} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestMaxAgeZero(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("cache-control", "max-age=0") - - reqHeaders := http.Header{} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestBothMaxAge(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("cache-control", "max-age=2") - - reqHeaders := http.Header{} - reqHeaders.Set("cache-control", "max-age=0") - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestMinFreshWithExpires(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("expires", now.Add(time.Duration(2)*time.Second).Format(time.RFC1123)) - - reqHeaders := http.Header{} - reqHeaders.Set("cache-control", "min-fresh=1") - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - reqHeaders = http.Header{} - reqHeaders.Set("cache-control", "min-fresh=2") - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func TestEmptyMaxStale(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("cache-control", "max-age=20") - - reqHeaders := http.Header{} - reqHeaders.Set("cache-control", "max-stale") - clock = &fakeClock{elapsed: 10 * time.Second} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - clock = &fakeClock{elapsed: 60 * time.Second} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } -} - -func TestMaxStaleValue(t *testing.T) { - resetTest() - now := time.Now() - respHeaders := http.Header{} - respHeaders.Set("date", now.Format(time.RFC1123)) - respHeaders.Set("cache-control", "max-age=10") - - reqHeaders := http.Header{} - reqHeaders.Set("cache-control", "max-stale=20") - clock = &fakeClock{elapsed: 5 * time.Second} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - clock = &fakeClock{elapsed: 15 * time.Second} - if getFreshness(respHeaders, reqHeaders) != fresh { - t.Fatal("freshness isn't fresh") - } - - clock = &fakeClock{elapsed: 30 * time.Second} - if getFreshness(respHeaders, reqHeaders) != stale { - t.Fatal("freshness isn't stale") - } -} - -func containsHeader(headers []string, header string) bool { - for _, v := range headers { - if http.CanonicalHeaderKey(v) == http.CanonicalHeaderKey(header) { - return true - } - } - return false -} - -func TestGetEndToEndHeaders(t *testing.T) { - resetTest() - var ( - headers http.Header - end2end []string - ) - - headers = http.Header{} - headers.Set("content-type", "text/html") - headers.Set("te", "deflate") - - end2end = getEndToEndHeaders(headers) - if !containsHeader(end2end, "content-type") { - t.Fatal(`doesn't contain "content-type" header`) - } - if containsHeader(end2end, "te") { - t.Fatal(`doesn't contain "te" header`) - } - - headers = http.Header{} - headers.Set("connection", "content-type") - headers.Set("content-type", "text/csv") - headers.Set("te", "deflate") - end2end = getEndToEndHeaders(headers) - if containsHeader(end2end, "connection") { - t.Fatal(`doesn't contain "connection" header`) - } - if containsHeader(end2end, "content-type") { - t.Fatal(`doesn't contain "content-type" header`) - } - if containsHeader(end2end, "te") { - t.Fatal(`doesn't contain "te" header`) - } - - headers = http.Header{} - end2end = getEndToEndHeaders(headers) - if len(end2end) != 0 { - t.Fatal(`non-zero end2end headers`) - } - - headers = http.Header{} - headers.Set("connection", "content-type") - end2end = getEndToEndHeaders(headers) - if len(end2end) != 0 { - t.Fatal(`non-zero end2end headers`) - } -} - -type transportMock struct { - response *http.Response - err error -} - -func (t transportMock) RoundTrip(req *http.Request) (resp *http.Response, err error) { - return t.response, t.err -} - -func TestStaleIfErrorRequest(t *testing.T) { - resetTest() - now := time.Now() - tmock := transportMock{ - response: &http.Response{ - Status: http.StatusText(http.StatusOK), - StatusCode: http.StatusOK, - Header: http.Header{ - "Date": []string{now.Format(time.RFC1123)}, - "Cache-Control": []string{"no-cache"}, - }, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), - }, - err: nil, - } - tp := NewMemoryCacheTransport() - tp.Transport = &tmock - - // First time, response is cached on success - r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) - r.Header.Set("Cache-Control", "stale-if-error") - resp, err := tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // On failure, response is returned from the cache - tmock.response = nil - tmock.err = errors.New("some error") - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } -} - -func TestStaleIfErrorRequestLifetime(t *testing.T) { - resetTest() - now := time.Now() - tmock := transportMock{ - response: &http.Response{ - Status: http.StatusText(http.StatusOK), - StatusCode: http.StatusOK, - Header: http.Header{ - "Date": []string{now.Format(time.RFC1123)}, - "Cache-Control": []string{"no-cache"}, - }, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), - }, - err: nil, - } - tp := NewMemoryCacheTransport() - tp.Transport = &tmock - - // First time, response is cached on success - r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) - r.Header.Set("Cache-Control", "stale-if-error=100") - resp, err := tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // On failure, response is returned from the cache - tmock.response = nil - tmock.err = errors.New("some error") - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - - // Same for http errors - tmock.response = &http.Response{StatusCode: http.StatusInternalServerError} - tmock.err = nil - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - - // If failure last more than max stale, error is returned - clock = &fakeClock{elapsed: 200 * time.Second} - _, err = tp.RoundTrip(r) - if err != tmock.err { - t.Fatalf("got err %v, want %v", err, tmock.err) - } -} - -func TestStaleIfErrorResponse(t *testing.T) { - resetTest() - now := time.Now() - tmock := transportMock{ - response: &http.Response{ - Status: http.StatusText(http.StatusOK), - StatusCode: http.StatusOK, - Header: http.Header{ - "Date": []string{now.Format(time.RFC1123)}, - "Cache-Control": []string{"no-cache, stale-if-error"}, - }, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), - }, - err: nil, - } - tp := NewMemoryCacheTransport() - tp.Transport = &tmock - - // First time, response is cached on success - r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) - resp, err := tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // On failure, response is returned from the cache - tmock.response = nil - tmock.err = errors.New("some error") - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } -} - -func TestStaleIfErrorResponseLifetime(t *testing.T) { - resetTest() - now := time.Now() - tmock := transportMock{ - response: &http.Response{ - Status: http.StatusText(http.StatusOK), - StatusCode: http.StatusOK, - Header: http.Header{ - "Date": []string{now.Format(time.RFC1123)}, - "Cache-Control": []string{"no-cache, stale-if-error=100"}, - }, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), - }, - err: nil, - } - tp := NewMemoryCacheTransport() - tp.Transport = &tmock - - // First time, response is cached on success - r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) - resp, err := tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // On failure, response is returned from the cache - tmock.response = nil - tmock.err = errors.New("some error") - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - - // If failure last more than max stale, error is returned - clock = &fakeClock{elapsed: 200 * time.Second} - _, err = tp.RoundTrip(r) - if err != tmock.err { - t.Fatalf("got err %v, want %v", err, tmock.err) - } -} - -// This tests the fix for https://github.com/gregjones/httpcache/issues/74. -// Previously, after a stale response was used after encountering an error, -// its StatusCode was being incorrectly replaced. -func TestStaleIfErrorKeepsStatus(t *testing.T) { - resetTest() - now := time.Now() - tmock := transportMock{ - response: &http.Response{ - Status: http.StatusText(http.StatusNotFound), - StatusCode: http.StatusNotFound, - Header: http.Header{ - "Date": []string{now.Format(time.RFC1123)}, - "Cache-Control": []string{"no-cache"}, - }, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), - }, - err: nil, - } - tp := NewMemoryCacheTransport() - tp.Transport = &tmock - - // First time, response is cached on success - r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) - r.Header.Set("Cache-Control", "stale-if-error") - resp, err := tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // On failure, response is returned from the cache - tmock.response = nil - tmock.err = errors.New("some error") - resp, err = tp.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatal("resp is nil") - } - if resp.StatusCode != http.StatusNotFound { - t.Fatalf("Status wasn't 404: %d", resp.StatusCode) - } -} - -// Test that http.Client.Timeout is respected when cache transport is used. -// That is so as long as request cancellation is propagated correctly. -// In the past, that required CancelRequest to be implemented correctly, -// but modern http.Client uses Request.Cancel (or request context) instead, -// so we don't have to do anything. -func TestClientTimeout(t *testing.T) { - if testing.Short() { - t.Skip("skipping timeout test in short mode") // Because it takes at least 3 seconds to run. - } - resetTest() - client := &http.Client{ - Transport: NewMemoryCacheTransport(), - Timeout: time.Second, - } - started := time.Now() - resp, err := client.Get(s.server.URL + "/3seconds") - taken := time.Since(started) - if err == nil { - t.Error("got nil error, want timeout error") - } - if resp != nil { - t.Error("got non-nil resp, want nil resp") - } - if taken >= 2*time.Second { - t.Error("client.Do took 2+ seconds, want < 2 seconds") - } -} diff --git a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go deleted file mode 100644 index 9bcb7e277..000000000 --- a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go +++ /dev/null @@ -1,51 +0,0 @@ -// Package leveldbcache provides an implementation of httpcache.Cache that -// uses github.com/syndtr/goleveldb/leveldb -package leveldbcache - -import ( - "github.com/syndtr/goleveldb/leveldb" -) - -// Cache is an implementation of httpcache.Cache with leveldb storage -type Cache struct { - db *leveldb.DB -} - -// Get returns the response corresponding to key if present -func (c *Cache) Get(key string) (resp []byte, ok bool) { - var err error - resp, err = c.db.Get([]byte(key), nil) - if err != nil { - return []byte{}, false - } - return resp, true -} - -// Set saves a response to the cache as key -func (c *Cache) Set(key string, resp []byte) { - c.db.Put([]byte(key), resp, nil) -} - -// Delete removes the response with key from the cache -func (c *Cache) Delete(key string) { - c.db.Delete([]byte(key), nil) -} - -// New returns a new Cache that will store leveldb in path -func New(path string) (*Cache, error) { - cache := &Cache{} - - var err error - cache.db, err = leveldb.OpenFile(path, nil) - - if err != nil { - return nil, err - } - return cache, nil -} - -// NewWithDB returns a new Cache using the provided leveldb as underlying -// storage. -func NewWithDB(db *leveldb.DB) *Cache { - return &Cache{db} -} diff --git a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go deleted file mode 100644 index b885c0169..000000000 --- a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package leveldbcache - -import ( - "bytes" - "io/ioutil" - "os" - "path/filepath" - "testing" -) - -func TestDiskCache(t *testing.T) { - tempDir, err := ioutil.TempDir("", "httpcache") - if err != nil { - t.Fatalf("TempDir: %v", err) - } - defer os.RemoveAll(tempDir) - - cache, err := New(filepath.Join(tempDir, "db")) - if err != nil { - t.Fatalf("New leveldb,: %v", err) - } - - key := "testKey" - _, ok := cache.Get(key) - if ok { - t.Fatal("retrieved key before adding it") - } - - val := []byte("some bytes") - cache.Set(key, val) - - retVal, ok := cache.Get(key) - if !ok { - t.Fatal("could not retrieve an element we just added") - } - if !bytes.Equal(retVal, val) { - t.Fatal("retrieved a different value than what we put in") - } - - cache.Delete(key) - - _, ok = cache.Get(key) - if ok { - t.Fatal("deleted key still present") - } -} diff --git a/vendor/github.com/gregjones/httpcache/memcache/appengine.go b/vendor/github.com/gregjones/httpcache/memcache/appengine.go deleted file mode 100644 index e68d9bc09..000000000 --- a/vendor/github.com/gregjones/httpcache/memcache/appengine.go +++ /dev/null @@ -1,61 +0,0 @@ -// +build appengine - -// Package memcache provides an implementation of httpcache.Cache that uses App -// Engine's memcache package to store cached responses. -// -// When not built for Google App Engine, this package will provide an -// implementation that connects to a specified memcached server. See the -// memcache.go file in this package for details. -package memcache - -import ( - "appengine" - "appengine/memcache" -) - -// Cache is an implementation of httpcache.Cache that caches responses in App -// Engine's memcache. -type Cache struct { - appengine.Context -} - -// cacheKey modifies an httpcache key for use in memcache. Specifically, it -// prefixes keys to avoid collision with other data stored in memcache. -func cacheKey(key string) string { - return "httpcache:" + key -} - -// Get returns the response corresponding to key if present. -func (c *Cache) Get(key string) (resp []byte, ok bool) { - item, err := memcache.Get(c.Context, cacheKey(key)) - if err != nil { - if err != memcache.ErrCacheMiss { - c.Context.Errorf("error getting cached response: %v", err) - } - return nil, false - } - return item.Value, true -} - -// Set saves a response to the cache as key. -func (c *Cache) Set(key string, resp []byte) { - item := &memcache.Item{ - Key: cacheKey(key), - Value: resp, - } - if err := memcache.Set(c.Context, item); err != nil { - c.Context.Errorf("error caching response: %v", err) - } -} - -// Delete removes the response with key from the cache. -func (c *Cache) Delete(key string) { - if err := memcache.Delete(c.Context, cacheKey(key)); err != nil { - c.Context.Errorf("error deleting cached response: %v", err) - } -} - -// New returns a new Cache for the given context. -func New(ctx appengine.Context) *Cache { - return &Cache{ctx} -} diff --git a/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go b/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go deleted file mode 100644 index 818b2776e..000000000 --- a/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// +build appengine - -package memcache - -import ( - "bytes" - "testing" - - "appengine/aetest" -) - -func TestAppEngine(t *testing.T) { - ctx, err := aetest.NewContext(nil) - if err != nil { - t.Fatal(err) - } - defer ctx.Close() - - cache := New(ctx) - - key := "testKey" - _, ok := cache.Get(key) - if ok { - t.Fatal("retrieved key before adding it") - } - - val := []byte("some bytes") - cache.Set(key, val) - - retVal, ok := cache.Get(key) - if !ok { - t.Fatal("could not retrieve an element we just added") - } - if !bytes.Equal(retVal, val) { - t.Fatal("retrieved a different value than what we put in") - } - - cache.Delete(key) - - _, ok = cache.Get(key) - if ok { - t.Fatal("deleted key still present") - } -} diff --git a/vendor/github.com/gregjones/httpcache/memcache/memcache.go b/vendor/github.com/gregjones/httpcache/memcache/memcache.go deleted file mode 100644 index 462f0e541..000000000 --- a/vendor/github.com/gregjones/httpcache/memcache/memcache.go +++ /dev/null @@ -1,60 +0,0 @@ -// +build !appengine - -// Package memcache provides an implementation of httpcache.Cache that uses -// gomemcache to store cached responses. -// -// When built for Google App Engine, this package will provide an -// implementation that uses App Engine's memcache service. See the -// appengine.go file in this package for details. -package memcache - -import ( - "github.com/bradfitz/gomemcache/memcache" -) - -// Cache is an implementation of httpcache.Cache that caches responses in a -// memcache server. -type Cache struct { - *memcache.Client -} - -// cacheKey modifies an httpcache key for use in memcache. Specifically, it -// prefixes keys to avoid collision with other data stored in memcache. -func cacheKey(key string) string { - return "httpcache:" + key -} - -// Get returns the response corresponding to key if present. -func (c *Cache) Get(key string) (resp []byte, ok bool) { - item, err := c.Client.Get(cacheKey(key)) - if err != nil { - return nil, false - } - return item.Value, true -} - -// Set saves a response to the cache as key. -func (c *Cache) Set(key string, resp []byte) { - item := &memcache.Item{ - Key: cacheKey(key), - Value: resp, - } - c.Client.Set(item) -} - -// Delete removes the response with key from the cache. -func (c *Cache) Delete(key string) { - c.Client.Delete(cacheKey(key)) -} - -// New returns a new Cache using the provided memcache server(s) with equal -// weight. If a server is listed multiple times, it gets a proportional amount -// of weight. -func New(server ...string) *Cache { - return NewWithClient(memcache.New(server...)) -} - -// NewWithClient returns a new Cache with the given memcache client. -func NewWithClient(client *memcache.Client) *Cache { - return &Cache{client} -} diff --git a/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go b/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go deleted file mode 100644 index 4dcc547c6..000000000 --- a/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// +build !appengine - -package memcache - -import ( - "bytes" - "net" - "testing" -) - -const testServer = "localhost:11211" - -func TestMemCache(t *testing.T) { - conn, err := net.Dial("tcp", testServer) - if err != nil { - // TODO: rather than skip the test, fall back to a faked memcached server - t.Skipf("skipping test; no server running at %s", testServer) - } - conn.Write([]byte("flush_all\r\n")) // flush memcache - conn.Close() - - cache := New(testServer) - - key := "testKey" - _, ok := cache.Get(key) - if ok { - t.Fatal("retrieved key before adding it") - } - - val := []byte("some bytes") - cache.Set(key, val) - - retVal, ok := cache.Get(key) - if !ok { - t.Fatal("could not retrieve an element we just added") - } - if !bytes.Equal(retVal, val) { - t.Fatal("retrieved a different value than what we put in") - } - - cache.Delete(key) - - _, ok = cache.Get(key) - if ok { - t.Fatal("deleted key still present") - } -} diff --git a/vendor/github.com/gregjones/httpcache/redis/redis.go b/vendor/github.com/gregjones/httpcache/redis/redis.go deleted file mode 100644 index 3143d4438..000000000 --- a/vendor/github.com/gregjones/httpcache/redis/redis.go +++ /dev/null @@ -1,43 +0,0 @@ -// Package redis provides a redis interface for http caching. -package redis - -import ( - "github.com/garyburd/redigo/redis" - "github.com/gregjones/httpcache" -) - -// cache is an implementation of httpcache.Cache that caches responses in a -// redis server. -type cache struct { - redis.Conn -} - -// cacheKey modifies an httpcache key for use in redis. Specifically, it -// prefixes keys to avoid collision with other data stored in redis. -func cacheKey(key string) string { - return "rediscache:" + key -} - -// Get returns the response corresponding to key if present. -func (c cache) Get(key string) (resp []byte, ok bool) { - item, err := redis.Bytes(c.Do("GET", cacheKey(key))) - if err != nil { - return nil, false - } - return item, true -} - -// Set saves a response to the cache as key. -func (c cache) Set(key string, resp []byte) { - c.Do("SET", cacheKey(key), resp) -} - -// Delete removes the response with key from the cache. -func (c cache) Delete(key string) { - c.Do("DEL", cacheKey(key)) -} - -// NewWithClient returns a new Cache with the given redis connection. -func NewWithClient(client redis.Conn) httpcache.Cache { - return cache{client} -} diff --git a/vendor/github.com/gregjones/httpcache/redis/redis_test.go b/vendor/github.com/gregjones/httpcache/redis/redis_test.go deleted file mode 100644 index 72f6f619a..000000000 --- a/vendor/github.com/gregjones/httpcache/redis/redis_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package redis - -import ( - "bytes" - "testing" - - "github.com/garyburd/redigo/redis" -) - -func TestRedisCache(t *testing.T) { - conn, err := redis.Dial("tcp", "localhost:6379") - if err != nil { - // TODO: rather than skip the test, fall back to a faked redis server - t.Skipf("skipping test; no server running at localhost:6379") - } - conn.Do("FLUSHALL") - - cache := NewWithClient(conn) - - key := "testKey" - _, ok := cache.Get(key) - if ok { - t.Fatal("retrieved key before adding it") - } - - val := []byte("some bytes") - cache.Set(key, val) - - retVal, ok := cache.Get(key) - if !ok { - t.Fatal("could not retrieve an element we just added") - } - if !bytes.Equal(retVal, val) { - t.Fatal("retrieved a different value than what we put in") - } - - cache.Delete(key) - - _, ok = cache.Get(key) - if ok { - t.Fatal("deleted key still present") - } -} diff --git a/vendor/github.com/juju/ratelimit/LICENSE b/vendor/github.com/juju/ratelimit/LICENSE deleted file mode 100644 index ade9307b3..000000000 --- a/vendor/github.com/juju/ratelimit/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -All files in this repository are licensed as follows. If you contribute -to this repository, it is assumed that you license your contribution -under the same license unless you state otherwise. - -All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/vendor/github.com/juju/ratelimit/README.md b/vendor/github.com/juju/ratelimit/README.md deleted file mode 100644 index a0fdfe2b1..000000000 --- a/vendor/github.com/juju/ratelimit/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# ratelimit --- - import "github.com/juju/ratelimit" - -The ratelimit package provides an efficient token bucket implementation. See -http://en.wikipedia.org/wiki/Token_bucket. - -## Usage - -#### func Reader - -```go -func Reader(r io.Reader, bucket *Bucket) io.Reader -``` -Reader returns a reader that is rate limited by the given token bucket. Each -token in the bucket represents one byte. - -#### func Writer - -```go -func Writer(w io.Writer, bucket *Bucket) io.Writer -``` -Writer returns a writer that is rate limited by the given token bucket. Each -token in the bucket represents one byte. - -#### type Bucket - -```go -type Bucket struct { -} -``` - -Bucket represents a token bucket that fills at a predetermined rate. Methods on -Bucket may be called concurrently. - -#### func NewBucket - -```go -func NewBucket(fillInterval time.Duration, capacity int64) *Bucket -``` -NewBucket returns a new token bucket that fills at the rate of one token every -fillInterval, up to the given maximum capacity. Both arguments must be positive. -The bucket is initially full. - -#### func NewBucketWithQuantum - -```go -func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket -``` -NewBucketWithQuantum is similar to NewBucket, but allows the specification of -the quantum size - quantum tokens are added every fillInterval. - -#### func NewBucketWithRate - -```go -func NewBucketWithRate(rate float64, capacity int64) *Bucket -``` -NewBucketWithRate returns a token bucket that fills the bucket at the rate of -rate tokens per second up to the given maximum capacity. Because of limited -clock resolution, at high rates, the actual rate may be up to 1% different from -the specified rate. - -#### func (*Bucket) Rate - -```go -func (tb *Bucket) Rate() float64 -``` -Rate returns the fill rate of the bucket, in tokens per second. - -#### func (*Bucket) Take - -```go -func (tb *Bucket) Take(count int64) time.Duration -``` -Take takes count tokens from the bucket without blocking. It returns the time -that the caller should wait until the tokens are actually available. - -Note that if the request is irrevocable - there is no way to return tokens to -the bucket once this method commits us to taking them. - -#### func (*Bucket) TakeAvailable - -```go -func (tb *Bucket) TakeAvailable(count int64) int64 -``` -TakeAvailable takes up to count immediately available tokens from the bucket. It -returns the number of tokens removed, or zero if there are no available tokens. -It does not block. - -#### func (*Bucket) TakeMaxDuration - -```go -func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) -``` -TakeMaxDuration is like Take, except that it will only take tokens from the -bucket if the wait time for the tokens is no greater than maxWait. - -If it would take longer than maxWait for the tokens to become available, it does -nothing and reports false, otherwise it returns the time that the caller should -wait until the tokens are actually available, and reports true. - -#### func (*Bucket) Wait - -```go -func (tb *Bucket) Wait(count int64) -``` -Wait takes count tokens from the bucket, waiting until they are available. - -#### func (*Bucket) WaitMaxDuration - -```go -func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool -``` -WaitMaxDuration is like Wait except that it will only take tokens from the -bucket if it needs to wait for no greater than maxWait. It reports whether any -tokens have been removed from the bucket If no tokens have been removed, it -returns immediately. diff --git a/vendor/github.com/juju/ratelimit/ratelimit.go b/vendor/github.com/juju/ratelimit/ratelimit.go deleted file mode 100644 index bd9ef1038..000000000 --- a/vendor/github.com/juju/ratelimit/ratelimit.go +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3 with static-linking exception. -// See LICENCE file for details. - -// Package ratelimit provides an efficient token bucket implementation -// that can be used to limit the rate of arbitrary things. -// See http://en.wikipedia.org/wiki/Token_bucket. -package ratelimit - -import ( - "math" - "strconv" - "sync" - "time" -) - -// The algorithm that this implementation uses does computational work -// only when tokens are removed from the bucket, and that work completes -// in short, bounded-constant time (Bucket.Wait benchmarks at 175ns on -// my laptop). -// -// Time is measured in equal measured ticks, a given interval -// (fillInterval) apart. On each tick a number of tokens (quantum) are -// added to the bucket. -// -// When any of the methods are called the bucket updates the number of -// tokens that are in the bucket, and it records the current tick -// number too. Note that it doesn't record the current time - by -// keeping things in units of whole ticks, it's easy to dish out tokens -// at exactly the right intervals as measured from the start time. -// -// This allows us to calculate the number of tokens that will be -// available at some time in the future with a few simple arithmetic -// operations. -// -// The main reason for being able to transfer multiple tokens on each tick -// is so that we can represent rates greater than 1e9 (the resolution of the Go -// time package) tokens per second, but it's also useful because -// it means we can easily represent situations like "a person gets -// five tokens an hour, replenished on the hour". - -// Bucket represents a token bucket that fills at a predetermined rate. -// Methods on Bucket may be called concurrently. -type Bucket struct { - clock Clock - - // startTime holds the moment when the bucket was - // first created and ticks began. - startTime time.Time - - // capacity holds the overall capacity of the bucket. - capacity int64 - - // quantum holds how many tokens are added on - // each tick. - quantum int64 - - // fillInterval holds the interval between each tick. - fillInterval time.Duration - - // mu guards the fields below it. - mu sync.Mutex - - // availableTokens holds the number of available - // tokens as of the associated latestTick. - // It will be negative when there are consumers - // waiting for tokens. - availableTokens int64 - - // latestTick holds the latest tick for which - // we know the number of tokens in the bucket. - latestTick int64 -} - -// NewBucket returns a new token bucket that fills at the -// rate of one token every fillInterval, up to the given -// maximum capacity. Both arguments must be -// positive. The bucket is initially full. -func NewBucket(fillInterval time.Duration, capacity int64) *Bucket { - return NewBucketWithClock(fillInterval, capacity, nil) -} - -// NewBucketWithClock is identical to NewBucket but injects a testable clock -// interface. -func NewBucketWithClock(fillInterval time.Duration, capacity int64, clock Clock) *Bucket { - return NewBucketWithQuantumAndClock(fillInterval, capacity, 1, clock) -} - -// rateMargin specifes the allowed variance of actual -// rate from specified rate. 1% seems reasonable. -const rateMargin = 0.01 - -// NewBucketWithRate returns a token bucket that fills the bucket -// at the rate of rate tokens per second up to the given -// maximum capacity. Because of limited clock resolution, -// at high rates, the actual rate may be up to 1% different from the -// specified rate. -func NewBucketWithRate(rate float64, capacity int64) *Bucket { - return NewBucketWithRateAndClock(rate, capacity, nil) -} - -// NewBucketWithRateAndClock is identical to NewBucketWithRate but injects a -// testable clock interface. -func NewBucketWithRateAndClock(rate float64, capacity int64, clock Clock) *Bucket { - // Use the same bucket each time through the loop - // to save allocations. - tb := NewBucketWithQuantumAndClock(1, capacity, 1, clock) - for quantum := int64(1); quantum < 1<<50; quantum = nextQuantum(quantum) { - fillInterval := time.Duration(1e9 * float64(quantum) / rate) - if fillInterval <= 0 { - continue - } - tb.fillInterval = fillInterval - tb.quantum = quantum - if diff := math.Abs(tb.Rate() - rate); diff/rate <= rateMargin { - return tb - } - } - panic("cannot find suitable quantum for " + strconv.FormatFloat(rate, 'g', -1, 64)) -} - -// nextQuantum returns the next quantum to try after q. -// We grow the quantum exponentially, but slowly, so we -// get a good fit in the lower numbers. -func nextQuantum(q int64) int64 { - q1 := q * 11 / 10 - if q1 == q { - q1++ - } - return q1 -} - -// NewBucketWithQuantum is similar to NewBucket, but allows -// the specification of the quantum size - quantum tokens -// are added every fillInterval. -func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket { - return NewBucketWithQuantumAndClock(fillInterval, capacity, quantum, nil) -} - -// NewBucketWithQuantumAndClock is like NewBucketWithQuantum, but -// also has a clock argument that allows clients to fake the passing -// of time. If clock is nil, the system clock will be used. -func NewBucketWithQuantumAndClock(fillInterval time.Duration, capacity, quantum int64, clock Clock) *Bucket { - if clock == nil { - clock = realClock{} - } - if fillInterval <= 0 { - panic("token bucket fill interval is not > 0") - } - if capacity <= 0 { - panic("token bucket capacity is not > 0") - } - if quantum <= 0 { - panic("token bucket quantum is not > 0") - } - return &Bucket{ - clock: clock, - startTime: clock.Now(), - latestTick: 0, - fillInterval: fillInterval, - capacity: capacity, - quantum: quantum, - availableTokens: capacity, - } -} - -// Wait takes count tokens from the bucket, waiting until they are -// available. -func (tb *Bucket) Wait(count int64) { - if d := tb.Take(count); d > 0 { - tb.clock.Sleep(d) - } -} - -// WaitMaxDuration is like Wait except that it will -// only take tokens from the bucket if it needs to wait -// for no greater than maxWait. It reports whether -// any tokens have been removed from the bucket -// If no tokens have been removed, it returns immediately. -func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool { - d, ok := tb.TakeMaxDuration(count, maxWait) - if d > 0 { - tb.clock.Sleep(d) - } - return ok -} - -const infinityDuration time.Duration = 0x7fffffffffffffff - -// Take takes count tokens from the bucket without blocking. It returns -// the time that the caller should wait until the tokens are actually -// available. -// -// Note that if the request is irrevocable - there is no way to return -// tokens to the bucket once this method commits us to taking them. -func (tb *Bucket) Take(count int64) time.Duration { - tb.mu.Lock() - defer tb.mu.Unlock() - d, _ := tb.take(tb.clock.Now(), count, infinityDuration) - return d -} - -// TakeMaxDuration is like Take, except that -// it will only take tokens from the bucket if the wait -// time for the tokens is no greater than maxWait. -// -// If it would take longer than maxWait for the tokens -// to become available, it does nothing and reports false, -// otherwise it returns the time that the caller should -// wait until the tokens are actually available, and reports -// true. -func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) { - tb.mu.Lock() - defer tb.mu.Unlock() - return tb.take(tb.clock.Now(), count, maxWait) -} - -// TakeAvailable takes up to count immediately available tokens from the -// bucket. It returns the number of tokens removed, or zero if there are -// no available tokens. It does not block. -func (tb *Bucket) TakeAvailable(count int64) int64 { - tb.mu.Lock() - defer tb.mu.Unlock() - return tb.takeAvailable(tb.clock.Now(), count) -} - -// takeAvailable is the internal version of TakeAvailable - it takes the -// current time as an argument to enable easy testing. -func (tb *Bucket) takeAvailable(now time.Time, count int64) int64 { - if count <= 0 { - return 0 - } - tb.adjustavailableTokens(tb.currentTick(now)) - if tb.availableTokens <= 0 { - return 0 - } - if count > tb.availableTokens { - count = tb.availableTokens - } - tb.availableTokens -= count - return count -} - -// Available returns the number of available tokens. It will be negative -// when there are consumers waiting for tokens. Note that if this -// returns greater than zero, it does not guarantee that calls that take -// tokens from the buffer will succeed, as the number of available -// tokens could have changed in the meantime. This method is intended -// primarily for metrics reporting and debugging. -func (tb *Bucket) Available() int64 { - return tb.available(tb.clock.Now()) -} - -// available is the internal version of available - it takes the current time as -// an argument to enable easy testing. -func (tb *Bucket) available(now time.Time) int64 { - tb.mu.Lock() - defer tb.mu.Unlock() - tb.adjustavailableTokens(tb.currentTick(now)) - return tb.availableTokens -} - -// Capacity returns the capacity that the bucket was created with. -func (tb *Bucket) Capacity() int64 { - return tb.capacity -} - -// Rate returns the fill rate of the bucket, in tokens per second. -func (tb *Bucket) Rate() float64 { - return 1e9 * float64(tb.quantum) / float64(tb.fillInterval) -} - -// take is the internal version of Take - it takes the current time as -// an argument to enable easy testing. -func (tb *Bucket) take(now time.Time, count int64, maxWait time.Duration) (time.Duration, bool) { - if count <= 0 { - return 0, true - } - - tick := tb.currentTick(now) - tb.adjustavailableTokens(tick) - avail := tb.availableTokens - count - if avail >= 0 { - tb.availableTokens = avail - return 0, true - } - // Round up the missing tokens to the nearest multiple - // of quantum - the tokens won't be available until - // that tick. - - // endTick holds the tick when all the requested tokens will - // become available. - endTick := tick + (-avail+tb.quantum-1)/tb.quantum - endTime := tb.startTime.Add(time.Duration(endTick) * tb.fillInterval) - waitTime := endTime.Sub(now) - if waitTime > maxWait { - return 0, false - } - tb.availableTokens = avail - return waitTime, true -} - -// currentTick returns the current time tick, measured -// from tb.startTime. -func (tb *Bucket) currentTick(now time.Time) int64 { - return int64(now.Sub(tb.startTime) / tb.fillInterval) -} - -// adjustavailableTokens adjusts the current number of tokens -// available in the bucket at the given time, which must -// be in the future (positive) with respect to tb.latestTick. -func (tb *Bucket) adjustavailableTokens(tick int64) { - if tb.availableTokens >= tb.capacity { - return - } - tb.availableTokens += (tick - tb.latestTick) * tb.quantum - if tb.availableTokens > tb.capacity { - tb.availableTokens = tb.capacity - } - tb.latestTick = tick - return -} - -// Clock represents the passage of time in a way that -// can be faked out for tests. -type Clock interface { - // Now returns the current time. - Now() time.Time - // Sleep sleeps for at least the given duration. - Sleep(d time.Duration) -} - -// realClock implements Clock in terms of standard time functions. -type realClock struct{} - -// Now implements Clock.Now by calling time.Now. -func (realClock) Now() time.Time { - return time.Now() -} - -// Now implements Clock.Sleep by calling time.Sleep. -func (realClock) Sleep(d time.Duration) { - time.Sleep(d) -} diff --git a/vendor/github.com/juju/ratelimit/ratelimit_test.go b/vendor/github.com/juju/ratelimit/ratelimit_test.go deleted file mode 100644 index 3de0cad6e..000000000 --- a/vendor/github.com/juju/ratelimit/ratelimit_test.go +++ /dev/null @@ -1,396 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3 with static-linking exception. -// See LICENCE file for details. - -package ratelimit - -import ( - "math" - "testing" - "time" - - gc "gopkg.in/check.v1" -) - -func TestPackage(t *testing.T) { - gc.TestingT(t) -} - -type rateLimitSuite struct{} - -var _ = gc.Suite(rateLimitSuite{}) - -type takeReq struct { - time time.Duration - count int64 - expectWait time.Duration -} - -var takeTests = []struct { - about string - fillInterval time.Duration - capacity int64 - reqs []takeReq -}{{ - about: "serial requests", - fillInterval: 250 * time.Millisecond, - capacity: 10, - reqs: []takeReq{{ - time: 0, - count: 0, - expectWait: 0, - }, { - time: 0, - count: 10, - expectWait: 0, - }, { - time: 0, - count: 1, - expectWait: 250 * time.Millisecond, - }, { - time: 250 * time.Millisecond, - count: 1, - expectWait: 250 * time.Millisecond, - }}, -}, { - about: "concurrent requests", - fillInterval: 250 * time.Millisecond, - capacity: 10, - reqs: []takeReq{{ - time: 0, - count: 10, - expectWait: 0, - }, { - time: 0, - count: 2, - expectWait: 500 * time.Millisecond, - }, { - time: 0, - count: 2, - expectWait: 1000 * time.Millisecond, - }, { - time: 0, - count: 1, - expectWait: 1250 * time.Millisecond, - }}, -}, { - about: "more than capacity", - fillInterval: 1 * time.Millisecond, - capacity: 10, - reqs: []takeReq{{ - time: 0, - count: 10, - expectWait: 0, - }, { - time: 20 * time.Millisecond, - count: 15, - expectWait: 5 * time.Millisecond, - }}, -}, { - about: "sub-quantum time", - fillInterval: 10 * time.Millisecond, - capacity: 10, - reqs: []takeReq{{ - time: 0, - count: 10, - expectWait: 0, - }, { - time: 7 * time.Millisecond, - count: 1, - expectWait: 3 * time.Millisecond, - }, { - time: 8 * time.Millisecond, - count: 1, - expectWait: 12 * time.Millisecond, - }}, -}, { - about: "within capacity", - fillInterval: 10 * time.Millisecond, - capacity: 5, - reqs: []takeReq{{ - time: 0, - count: 5, - expectWait: 0, - }, { - time: 60 * time.Millisecond, - count: 5, - expectWait: 0, - }, { - time: 60 * time.Millisecond, - count: 1, - expectWait: 10 * time.Millisecond, - }, { - time: 80 * time.Millisecond, - count: 2, - expectWait: 10 * time.Millisecond, - }}, -}} - -var availTests = []struct { - about string - capacity int64 - fillInterval time.Duration - take int64 - sleep time.Duration - - expectCountAfterTake int64 - expectCountAfterSleep int64 -}{{ - about: "should fill tokens after interval", - capacity: 5, - fillInterval: time.Second, - take: 5, - sleep: time.Second, - expectCountAfterTake: 0, - expectCountAfterSleep: 1, -}, { - about: "should fill tokens plus existing count", - capacity: 2, - fillInterval: time.Second, - take: 1, - sleep: time.Second, - expectCountAfterTake: 1, - expectCountAfterSleep: 2, -}, { - about: "shouldn't fill before interval", - capacity: 2, - fillInterval: 2 * time.Second, - take: 1, - sleep: time.Second, - expectCountAfterTake: 1, - expectCountAfterSleep: 1, -}, { - about: "should fill only once after 1*interval before 2*interval", - capacity: 2, - fillInterval: 2 * time.Second, - take: 1, - sleep: 3 * time.Second, - expectCountAfterTake: 1, - expectCountAfterSleep: 2, -}} - -func (rateLimitSuite) TestTake(c *gc.C) { - for i, test := range takeTests { - tb := NewBucket(test.fillInterval, test.capacity) - for j, req := range test.reqs { - d, ok := tb.take(tb.startTime.Add(req.time), req.count, infinityDuration) - c.Assert(ok, gc.Equals, true) - if d != req.expectWait { - c.Fatalf("test %d.%d, %s, got %v want %v", i, j, test.about, d, req.expectWait) - } - } - } -} - -func (rateLimitSuite) TestTakeMaxDuration(c *gc.C) { - for i, test := range takeTests { - tb := NewBucket(test.fillInterval, test.capacity) - for j, req := range test.reqs { - if req.expectWait > 0 { - d, ok := tb.take(tb.startTime.Add(req.time), req.count, req.expectWait-1) - c.Assert(ok, gc.Equals, false) - c.Assert(d, gc.Equals, time.Duration(0)) - } - d, ok := tb.take(tb.startTime.Add(req.time), req.count, req.expectWait) - c.Assert(ok, gc.Equals, true) - if d != req.expectWait { - c.Fatalf("test %d.%d, %s, got %v want %v", i, j, test.about, d, req.expectWait) - } - } - } -} - -type takeAvailableReq struct { - time time.Duration - count int64 - expect int64 -} - -var takeAvailableTests = []struct { - about string - fillInterval time.Duration - capacity int64 - reqs []takeAvailableReq -}{{ - about: "serial requests", - fillInterval: 250 * time.Millisecond, - capacity: 10, - reqs: []takeAvailableReq{{ - time: 0, - count: 0, - expect: 0, - }, { - time: 0, - count: 10, - expect: 10, - }, { - time: 0, - count: 1, - expect: 0, - }, { - time: 250 * time.Millisecond, - count: 1, - expect: 1, - }}, -}, { - about: "concurrent requests", - fillInterval: 250 * time.Millisecond, - capacity: 10, - reqs: []takeAvailableReq{{ - time: 0, - count: 5, - expect: 5, - }, { - time: 0, - count: 2, - expect: 2, - }, { - time: 0, - count: 5, - expect: 3, - }, { - time: 0, - count: 1, - expect: 0, - }}, -}, { - about: "more than capacity", - fillInterval: 1 * time.Millisecond, - capacity: 10, - reqs: []takeAvailableReq{{ - time: 0, - count: 10, - expect: 10, - }, { - time: 20 * time.Millisecond, - count: 15, - expect: 10, - }}, -}, { - about: "within capacity", - fillInterval: 10 * time.Millisecond, - capacity: 5, - reqs: []takeAvailableReq{{ - time: 0, - count: 5, - expect: 5, - }, { - time: 60 * time.Millisecond, - count: 5, - expect: 5, - }, { - time: 70 * time.Millisecond, - count: 1, - expect: 1, - }}, -}} - -func (rateLimitSuite) TestTakeAvailable(c *gc.C) { - for i, test := range takeAvailableTests { - tb := NewBucket(test.fillInterval, test.capacity) - for j, req := range test.reqs { - d := tb.takeAvailable(tb.startTime.Add(req.time), req.count) - if d != req.expect { - c.Fatalf("test %d.%d, %s, got %v want %v", i, j, test.about, d, req.expect) - } - } - } -} - -func (rateLimitSuite) TestPanics(c *gc.C) { - c.Assert(func() { NewBucket(0, 1) }, gc.PanicMatches, "token bucket fill interval is not > 0") - c.Assert(func() { NewBucket(-2, 1) }, gc.PanicMatches, "token bucket fill interval is not > 0") - c.Assert(func() { NewBucket(1, 0) }, gc.PanicMatches, "token bucket capacity is not > 0") - c.Assert(func() { NewBucket(1, -2) }, gc.PanicMatches, "token bucket capacity is not > 0") -} - -func isCloseTo(x, y, tolerance float64) bool { - return math.Abs(x-y)/y < tolerance -} - -func (rateLimitSuite) TestRate(c *gc.C) { - tb := NewBucket(1, 1) - if !isCloseTo(tb.Rate(), 1e9, 0.00001) { - c.Fatalf("got %v want 1e9", tb.Rate()) - } - tb = NewBucket(2*time.Second, 1) - if !isCloseTo(tb.Rate(), 0.5, 0.00001) { - c.Fatalf("got %v want 0.5", tb.Rate()) - } - tb = NewBucketWithQuantum(100*time.Millisecond, 1, 5) - if !isCloseTo(tb.Rate(), 50, 0.00001) { - c.Fatalf("got %v want 50", tb.Rate()) - } -} - -func checkRate(c *gc.C, rate float64) { - tb := NewBucketWithRate(rate, 1<<62) - if !isCloseTo(tb.Rate(), rate, rateMargin) { - c.Fatalf("got %g want %v", tb.Rate(), rate) - } - d, ok := tb.take(tb.startTime, 1<<62, infinityDuration) - c.Assert(ok, gc.Equals, true) - c.Assert(d, gc.Equals, time.Duration(0)) - - // Check that the actual rate is as expected by - // asking for a not-quite multiple of the bucket's - // quantum and checking that the wait time - // correct. - d, ok = tb.take(tb.startTime, tb.quantum*2-tb.quantum/2, infinityDuration) - c.Assert(ok, gc.Equals, true) - expectTime := 1e9 * float64(tb.quantum) * 2 / rate - if !isCloseTo(float64(d), expectTime, rateMargin) { - c.Fatalf("rate %g: got %g want %v", rate, float64(d), expectTime) - } -} - -func (rateLimitSuite) NewBucketWithRate(c *gc.C) { - for rate := float64(1); rate < 1e6; rate += 7 { - checkRate(c, rate) - } - for _, rate := range []float64{ - 1024 * 1024 * 1024, - 1e-5, - 0.9e-5, - 0.5, - 0.9, - 0.9e8, - 3e12, - 4e18, - float64(1<<63 - 1), - } { - checkRate(c, rate) - checkRate(c, rate/3) - checkRate(c, rate*1.3) - } -} - -func TestAvailable(t *testing.T) { - for i, tt := range availTests { - tb := NewBucket(tt.fillInterval, tt.capacity) - if c := tb.takeAvailable(tb.startTime, tt.take); c != tt.take { - t.Fatalf("#%d: %s, take = %d, want = %d", i, tt.about, c, tt.take) - } - if c := tb.available(tb.startTime); c != tt.expectCountAfterTake { - t.Fatalf("#%d: %s, after take, available = %d, want = %d", i, tt.about, c, tt.expectCountAfterTake) - } - if c := tb.available(tb.startTime.Add(tt.sleep)); c != tt.expectCountAfterSleep { - t.Fatalf("#%d: %s, after some time it should fill in new tokens, available = %d, want = %d", - i, tt.about, c, tt.expectCountAfterSleep) - } - } - -} - -func BenchmarkWait(b *testing.B) { - tb := NewBucket(1, 16*1024) - for i := b.N - 1; i >= 0; i-- { - tb.Wait(1) - } -} - -func BenchmarkNewBucket(b *testing.B) { - for i := b.N - 1; i >= 0; i-- { - NewBucketWithRate(4e18, 1<<62) - } -} diff --git a/vendor/github.com/juju/ratelimit/reader.go b/vendor/github.com/juju/ratelimit/reader.go deleted file mode 100644 index 6403bf78d..000000000 --- a/vendor/github.com/juju/ratelimit/reader.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3 with static-linking exception. -// See LICENCE file for details. - -package ratelimit - -import "io" - -type reader struct { - r io.Reader - bucket *Bucket -} - -// Reader returns a reader that is rate limited by -// the given token bucket. Each token in the bucket -// represents one byte. -func Reader(r io.Reader, bucket *Bucket) io.Reader { - return &reader{ - r: r, - bucket: bucket, - } -} - -func (r *reader) Read(buf []byte) (int, error) { - n, err := r.r.Read(buf) - if n <= 0 { - return n, err - } - r.bucket.Wait(int64(n)) - return n, err -} - -type writer struct { - w io.Writer - bucket *Bucket -} - -// Writer returns a reader that is rate limited by -// the given token bucket. Each token in the bucket -// represents one byte. -func Writer(w io.Writer, bucket *Bucket) io.Writer { - return &writer{ - w: w, - bucket: bucket, - } -} - -func (w *writer) Write(buf []byte) (int, error) { - w.bucket.Wait(int64(len(buf))) - return w.w.Write(buf) -} diff --git a/vendor/github.com/petar/GoLLRB/.gitignore b/vendor/github.com/petar/GoLLRB/.gitignore deleted file mode 100644 index e333b2dbf..000000000 --- a/vendor/github.com/petar/GoLLRB/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -syntax:glob -*.[568ao] -*.ao -*.so -*.pyc -*.swp -*.swo -._* -.nfs.* -[568a].out -*~ -*.orig -*.pb.go -core -_obj -_test -src/pkg/Make.deps -_testmain.go - -syntax:regexp -^pkg/ -^src/cmd/(.*)/6?\1$ -^.*/core.[0-9]*$ diff --git a/vendor/github.com/petar/GoLLRB/AUTHORS b/vendor/github.com/petar/GoLLRB/AUTHORS deleted file mode 100644 index 78d1de495..000000000 --- a/vendor/github.com/petar/GoLLRB/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Petar Maymounkov -Vadim Vygonets -Ian Smith -Martin Bruse diff --git a/vendor/github.com/petar/GoLLRB/LICENSE b/vendor/github.com/petar/GoLLRB/LICENSE deleted file mode 100644 index b75312c78..000000000 --- a/vendor/github.com/petar/GoLLRB/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2010, Petar Maymounkov -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -(*) Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. - -(*) Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -(*) Neither the name of Petar Maymounkov nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/petar/GoLLRB/README.md b/vendor/github.com/petar/GoLLRB/README.md deleted file mode 100644 index 742ca0bd5..000000000 --- a/vendor/github.com/petar/GoLLRB/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# GoLLRB - -GoLLRB is a Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary -search trees in Go Language. - -## Overview - -As of this writing and to the best of the author's knowledge, -Go still does not have a balanced binary search tree (BBST) data structure. -These data structures are quite useful in a variety of cases. A BBST maintains -elements in sorted order under dynamic updates (inserts and deletes) and can -support various order-specific queries. Furthermore, in practice one often -implements other common data structures like Priority Queues, using BBST's. - -2-3 trees (a type of BBST's), as well as the runtime-similar 2-3-4 trees, are -the de facto standard BBST algoritms found in implementations of Python, Java, -and other libraries. The LLRB method of implementing 2-3 trees is a recent -improvement over the traditional implementation. The LLRB approach was -discovered relatively recently (in 2008) by Robert Sedgewick of Princeton -University. - -GoLLRB is a Go implementation of LLRB 2-3 trees. - -## Maturity - -GoLLRB has been used in some pretty heavy-weight machine learning tasks over many gigabytes of data. -I consider it to be in stable, perhaps even production, shape. There are no known bugs. - -## Installation - -With a healthy Go Language installed, simply run `go get github.com/petar/GoLLRB/llrb` - -## Example - - package main - - import ( - "fmt" - "github.com/petar/GoLLRB/llrb" - ) - - func lessInt(a, b interface{}) bool { return a.(int) < b.(int) } - - func main() { - tree := llrb.New(lessInt) - tree.ReplaceOrInsert(1) - tree.ReplaceOrInsert(2) - tree.ReplaceOrInsert(3) - tree.ReplaceOrInsert(4) - tree.DeleteMin() - tree.Delete(4) - c := tree.IterAscend() - for { - u := <-c - if u == nil { - break - } - fmt.Printf("%d\n", int(u.(int))) - } - } - -## About - -GoLLRB was written by [Petar Maymounkov](http://pdos.csail.mit.edu/~petar/). - -Follow me on [Twitter @maymounkov](http://www.twitter.com/maymounkov)! diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf deleted file mode 100644 index a399b06ae..000000000 --- a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf +++ /dev/null @@ -1,4401 +0,0 @@ -%PDF-1.4 %âãÏÓ -1 0 obj <>/Outlines 348 0 R/Metadata 406 0 R/Pages 2 0 R/Type/Catalog>> endobj 348 0 obj <> endobj 406 0 obj <>stream - - - - - uuid:a1e65d06-96f2-9a40-84d3-4ac4f901a7ea - adobe:docid:indd:e8dd818f-4504-11dd-9d3e-8aa37d5afcf2 - proof:pdf - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:1f382f0a-0ae0-7240-90c9-052bfa9b93bb - uuid:D604B9AA2016DD118D05AA6D720C964E - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:f2359209-ca4b-f145-bc24-11a32d3118e1 - uuid:92F9E1E974FFDC11AC15B6426E08541E - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:725ae99a-7e76-5e45-a638-be54a8b3e099 - uuid:96F9E1E974FFDC11AC15B6426E08541E - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:46ba4750-b6d0-a148-b72a-6aac87b46fcf - uuid:39AC52ADCAFFDC11AC15B6426E08541E - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:d81eb84f-0775-844f-8950-327b309a2838 - uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:852ed07c-1a0d-af4f-b9f3-759b446c18bc - uuid:B4D572641149DD119EEFF96D7801BC77 - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:b46d8aee-c25e-b541-956c-22fa803ac69c - uuid:B7D572641149DD119EEFF96D7801BC77 - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:c81f585c-6684-f14a-ae05-056a473a74d0 - uuid:1C547E781A4ADD119EEFF96D7801BC77 - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:d1fde563-235e-8e47-a158-ac3cc76aa98f - uuid:23547E781A4ADD119EEFF96D7801BC77 - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:dbaaada4-048d-4642-b37f-5659c12203ae - uuid:DAD009446E4ADD119EEFF96D7801BC77 - - - - ReferenceStream - 72.00 - 72.00 - Inches - - uuid:a7a9523b-0c40-7d47-980c-c2d7a5d1ae87 - uuid:20547E781A4ADD119EEFF96D7801BC77 - - - - - - - 2008-09-14T13:43:34-04:00 - 2008-09-14T13:43:43-04:00 - 2008-09-14T13:43:43-04:00 - Adobe InDesign CS3 (5.0) - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4AE0Fkb2JlAGQAAAAAAQUAAuMM/9sAhAAMCAgICAgMCAgMEAsLCxAUDg0NDhQY EhMTExIYFBIUFBQUEhQUGx4eHhsUJCcnJyckMjU1NTI7Ozs7Ozs7Ozs7AQ0LCxAOECIYGCIyKCEo MjsyMjIyOzs7Ozs7Ozs7Ozs7Ozs7OztAQEBAQDtAQEBAQEBAQEBAQEBAQEBAQEBAQED/wAARCAEA AMYDAREAAhEBAxEB/8QBQgAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAA AAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGx QiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSV xNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgI7AQACEQMh MRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0 ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH1+f3/9oADAMB AAIRAxEAPwDrfqx9WPq3kfVvpN9/ScG223Bxn2WPxqnOc51TC5znFkkkpKdL/mn9Vf8Aym6f/wCw tP8A6TSUr/mn9Vf/ACm6f/7C0/8ApNJSv+af1V/8pun/APsLT/6TSUr/AJp/VX/ym6f/AOwtP/pN JSv+af1V/wDKbp//ALC0/wDpNJSv+af1V/8AKbp//sLT/wCk0lK/5p/VX/ym6f8A+wtP/pNJSv8A mn9Vf/Kbp/8A7C0/+k0lK/5p/VX/AMpun/8AsLT/AOk0lK/5p/VX/wApun/+wtP/AKTSUr/mn9Vf /Kbp/wD7C0/+k0lK/wCaf1V/8pun/wDsLT/6TSUr/mn9Vf8Aym6f/wCwtP8A6TSUr/mn9Vf/ACm6 f/7C0/8ApNJSv+af1V/8pun/APsLT/6TSUr/AJp/VX/ym6f/AOwtP/pNJSv+af1V/wDKbp//ALC0 /wDpNJSv+af1V/8AKbp//sLT/wCk0lK/5p/VX/ym6f8A+wtP/pNJSv8Amn9Vf/Kbp/8A7C0/+k0l K/5p/VX/AMpun/8AsLT/AOk0lK/5p/VX/wApun/+wtP/AKTSUr/mn9Vf/Kbp/wD7C0/+k0lOb1b6 sfVuvP6KyvpOCxt2c9ljW41QD2jDzX7XAM1G5gPxCSnS+qf/AIlejf8Apvxf/PNaSnWSUpJSklKS UpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJTk9Z/5R6F/wCnCz/2xz0lK+qf /iV6N/6b8X/zzWkp1klKSUpJSklKSUpJSklLFwaJcQAO50SUx9an/SN+8JKV61P+kb94SUr1qf8A SN+8JKV61P8ApG/eElK9an/SN+8JKV61P+kb94SUr1qf32/eElM0lKSUpJSklKSUpJSklKSU5PWf +Uehf+nCz/2xz0lK+qf/AIlejf8Apvxf/PNaSnWSUpJSklKSUpJSklKSU1epdPp6rhWYGQ5za7du 41kB3tcHiJDhy1JThf8Ajf8ARv8ATZX+cz/0kkpDk/U36s4ZaMvOtoL52i26pkxzG6sJKQ/82fqb /wCWv/sxR/5BJSv+bP1N/wDLX/2Yo/8AIJKV/wA2fqb/AOWv/sxR/wCQSU2afqN0DIrF2PlX21un a+uytzTBgwRURyElJWfUHo7HteLsmWkES5nb/rSSnpUlKSUpJSklKSUpJSklKSU5PWf+Uehf+nCz /wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klKSUpJSklKSUpJSklKSU5/VczqeJ6X7Nwvtu/d6nvDNk bdvPMyUlOF1FvVOrFjuofV/1jUCGfrO2N0T9BzfBJTT/AGM//wCdn/2bf/5NJSv2M/8A+dn/ANm3 /wDk0lK/Yz//AJ2f/Zt//k0lOnh5nXun4zMTE6F6dNc7W/aA6NxLjq6TyUlO/hW5F+LXbl0/Z7nA 76p3bTJ7hJSdJSklKSUpJSklKSUpJSklOT1n/lHoX/pws/8AbHPSUr6p/wDiV6N/6b8X/wA81pKd ZJSklKSUpJSklKSUpJSklKSU431oxq8nBqFmHbnbbQRVQ7a4e13uMA6JKeZ/ZWN/5QZ3/bp/9JpK V+ysb/ygzv8At0/+k0lK/ZWN/wCUGd/26f8A0mkp7bptbaen41bK3UhtTAKnmXM9o9rj4hJTZSUp JSklKSUpJSklKSUpJSklOT1n/lHoX/pws/8AbHPSUr6p/wDiV6N/6b8X/wA81pKdZJSO976qLLK2 eo9jHOawfnECQ35pKed/5yfWL/yjt+93/pNJSv8AnJ9Yv/KO373f+k0lOp0bqPUOoNtdn4TsEsLQ wOJO6ZnlreElOkkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKcnrP/KPQv8A04Wf +2OekpX1T/8AEr0b/wBN+L/55rSU6ySkOW4sxbnNf6RbW4iwidsA+6PJJTxn7UzP/nkq/wC2T/6T SUr9qZn/AM8lX/bJ/wDSaSlftTM/+eSr/tk/+k0lK/amZ/8APJV/2yf/AEmkpX7UzP8A55Kv+2T/ AOk0lK/amZ/88lX/AGyf/SaSlftTM/8Ankq/7ZP/AKTSUr9qZn/zyVf9sn/0mkpX7UzP/nkq/wC2 T/6TSUr9qZn/AM8lX/bJ/wDSaSlftTM/+eSr/tk/+k0lK/amZ/8APJV/2yf/AEmkpX7UzP8A55Kv +2T/AOk0lK/amZ/88lX/AGyf/SaSlftTM/8Ankq/7ZP/AKTSUr9qZn/zyVf9sn/0mkpX7UzP/nkq /wC2T/6TSUr9qZn/AM8lX/bJ/wDSaSmz03qOVZn49b+vV5DXWNBpFRBfr9GfTHKSnsElKSU5PWf+ Uehf+nCz/wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klIsoOONaGNa9xY7ax/0XGDAd5Hukp5H7N1v/ AMp+j/5jP/SqSlfZut/+U/R/8xn/AKVSUr7N1v8A8p+j/wCYz/0qkpX2brf/AJT9H/zGf+lUlK+z db/8p+j/AOYz/wBKpKV9m63/AOU/R/8AMZ/6VSUr7N1v/wAp+j/5jP8A0qkpX2brf/lP0f8AzGf+ lUlK+zdb/wDKfo/+Yz/0qkpX2brf/lP0f/MZ/wClUlK+zdb/APKfo/8AmM/9KpKV9m63/wCU/R/8 xn/pVJSvs3W//Kfo/wDmM/8ASqSlfZut/wDlP0f/ADGf+lUlK+zdb/8AKfo/+Yz/ANKpKV9m63/5 T9H/AMxn/pVJSvs3W/8Ayn6P/mM/9KpKV9m63/5T9H/zGf8ApVJTY6fj9WbnUOu6V0umsPbuspYw WNE8siw6pKerSUpJTk9Z/wCUehf+nCz/ANsc9JSvqn/4lejf+m/F/wDPNaSnWSUhzQHYd7XMdYDU 8FjfpO9p9o51KSngvsGH/wDO/wBR/wA5/wD6SSUr7Bh//O/1H/Of/wCkklK+wYf/AM7/AFH/ADn/ APpJJSvsGH/87/Uf85//AKSSUr7Bh/8Azv8AUf8AOf8A+kklK+wYf/zv9R/zn/8ApJJSvsGH/wDO /wBR/wA5/wD6SSUr7Bh//O/1H/Of/wCkklK+wYf/AM7/AFH/ADn/APpJJSvsGH/87/Uf85//AKSS Ur7Bh/8Azv8AUf8AOf8A+kklK+wYf/zv9R/zn/8ApJJSvsGH/wDO/wBR/wA5/wD6SSUr7Bh//O/1 H/Of/wCkklK+wYf/AM7/AFH/ADn/APpJJSvsGH/87/Uf85//AKSSUr7Bh/8Azv8AUf8AOf8A+kkl K+wYf/zv9R/zn/8ApJJTb6Vh4rOpYz2dEzqHC1pFthfsZr9J01jRJT3CSlJKcnrP/KPQv/ThZ/7Y 56SlfVP/AMSvRv8A034v/nmtJTrJKQ5pDcO9znurAqeS9v0m+0+4cahJTwX2/D/+eDqP+a//ANKp KV9vw/8A54Oo/wCa/wD9KpKV9vw//ng6j/mv/wDSqSlfb8P/AOeDqP8Amv8A/SqSlfb8P/54Oo/5 r/8A0qkpX2/D/wDng6j/AJr/AP0qkpX2/D/+eDqP+a//ANKpKV9vw/8A54Oo/wCa/wD9KpKV9vw/ /ng6j/mv/wDSqSlfb8P/AOeDqP8Amv8A/SqSlfb8P/54Oo/5r/8A0qkpX2/D/wDng6j/AJr/AP0q kpX2/D/+eDqP+a//ANKpKV9vw/8A54Oo/wCa/wD9KpKV9vw//ng6j/mv/wDSqSlfb8P/AOeDqP8A mv8A/SqSlfb8P/54Oo/5r/8A0qkpX2/D/wDng6j/AJr/AP0qkpt9KzMV/UsZjOt517ja0CqwP2P1 +i6bDokp7hJSklOT1n/lHoX/AKcLP/bHPSUr6p/+JXo3/pvxf/PNaSnWSUiyt32W7Y5rHem6HWfQ Bg6umdPFJTx2/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/ AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW /qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0 kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq /wD0kkpW/qv/AJa9F/zq/wD0kkplWOs3PbVV1Loz3vMNY01kknsAKUlNv9j/AFu/03Tv+2x/7zpK TYXS/rNVl02ZVuCaWvBsFdYDy0c7T6Ldfmkp6NJSklOT1n/lHoX/AKcLP/bHPSUr6p/+JXo3/pvx f/PNaSnWSUxsrZbW6qwbmPaWuHiCIISU42T9V+iV49tmPgMstaxzq69zhucAS1s7+5SU4P7LzP8A 526v+3j/AOlElK/ZeZ/87dX/AG8f/SiSlfsvM/8Anbq/7eP/AKUSUr9l5n/zt1f9vH/0okpX7LzP /nbq/wC3j/6USUr9l5n/AM7dX/bx/wDSiSlfsvM/+dur/t4/+lElK/ZeZ/8AO3V/28f/AEokpX7L zP8A526v+3j/AOlElK/ZeZ/87dX/AG8f/SiSlfsvM/8Anbq/7eP/AKUSUr9l5n/zt1f9vH/0okpX 7LzP/nbq/wC3j/6USUr9l5n/AM7dX/bx/wDSiSlfsvM/+dur/t4/+lElJKMLqONczIo+rtbLK3Bz HC46Ed9bElOl+1/rb/5Tt/7cH/kklJsTqf1mtyaq8rpbaaXOAssFgO1p5MbklO6kpSSnJ6z/AMo9 C/8AThZ/7Y56SlfVP/xK9G/9N+L/AOea0lOskpBm7Psd/q7tnpP3en9KNpnbPfwSU8B/2Nf+bj/w JJSv+xr/AM3H/gSSlf8AY1/5uP8AwJJTp9I6D0TrLbXY9vUqhUQD6zq2zuniGu8ElOh/zG6b/wBy sz/txn/pJJSv+Y3Tf+5WZ/24z/0kkpX/ADG6b/3KzP8Atxn/AKSSUr/mN03/ALlZn/bjP/SSSlf8 xum/9ysz/txn/pJJSv8AmN03/uVmf9uM/wDSSSlf8xum/wDcrM/7cZ/6SSUr/mN03/uVmf8AbjP/ AEkkpX/Mbpv/AHKzP+3Gf+kklK/5jdN/7lZn/bjP/SSSlf8AMbpv/crM/wC3Gf8ApJJSv+Y3Tf8A uVmf9uM/9JJKV/zG6b/3KzP+3Gf+kklK/wCY3Tf+5WZ/24z/ANJJKS4n1PwMPJqyq8nKc6lwe1r3 tLSR4gVhJTvJKUkpyes/8o9C/wDThZ/7Y56SlfVP/wASvRv/AE34v/nmtJTrJKUkpwvrPe6n7Nt6 p+zN3qfmF/qRs/d/d/ikpw/ttn/zz/8AgL0lK+22f/PP/wCAvSUr7bZ/88//AIC9JSvttn/zz/8A gL0lK+22f/PP/wCAvSUr7bZ/88//AIC9JT13S8irK6fRZVf9qAYGOvAI3uYNrnQfEhJTbSUpJSkl KSUpJSklKSUpJSklKSUpJSklKSU5PWf+Uehf+nCz/wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klLEh oLnGANSSkpwvrCbMr0PsDMDK2b9/2vY/bOyNm4941SU4/wBl6p/3D6L/AJlf96SlfZeqf9w+i/5l f96SlfZeqf8AcPov+ZX/AHpKV9l6p/3D6L/mV/3pKV9l6p/3D6L/AJlf96SlfZeqf9w+i/5lf96S mzRk/WbGrFOMOl01iYZW5rWideGvCSkn7Q+tv7/Tv88f+TSUr9ofW39/p3+eP/JpKV+0Prb+/wBO /wA8f+TSUr9ofW39/p3+eP8AyaSlftD62/v9O/zx/wCTSU2um5/XTltHVLMJuNB3Gp43THt/PPdJ Ts/bcP8A09X+e3+9JSvtuH/p6v8APb/ekpX23D/09X+e3+9JSvtuH/p6v89v96Sl25eK9way6tzj oAHAk/ikpKkpSSnJ6z/yj0L/ANOFn/tjnpKV9U//ABK9G/8ATfi/+ea0lOskpDmAHEvDmG0Gt4Nb eXDafaI7lJTwv2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDn bzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdv O/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287 /Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv8 63/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkp3eh9A6TYyrqX2C7Cvrsltdz37gWnQw6P yJKejSUpJTk9Z/5R6F/6cLP/AGxz0lK+qf8A4lejf+m/F/8APNaSnWSUwutZRS++z6FbS90a6NEl JTz2T9cug5GPbji66s2scwPawhzdwI3DzCSnB+1dH/8ALnqP3O/8kkpX2ro//lz1H7nf+SSUr7V0 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 12/8tKP+2m/+kUlK/Z/12/8ALSj/ALab/wCkUlK/Z/12/wDLSj/tpv8A6RSUr9n/AF2/8tKP+2m/ +kUlK/Z/12/8tKP+2m/+kUlK/Z/12/8ALSj/ALab/wCkUlK/Z/12/wDLSj/tpv8A6RSUr9n/AF2/ 8tKP+2m/+kUlK/Z/12/8tKP+2m/+kUlJcTB+trMmp+X1Gm2hrgbWNraC5vcAioJKd5JSklOT1n/l HoX/AKcLP/bHPSUr6p/+JXo3/pvxf/PNaSnWSUxsYy1jq7BuY8Frge4OhCSnnOsdCZR6X7H6RjZW 7d6vqEN2xt2xNjOdUlOd+yusf/O7h/8Abjf/AEukpX7K6x/87uH/ANuN/wDS6SlfsrrH/wA7uH/2 43/0ukpuYln1rwKvQw+jY1Ncl21tjYk9/wCe8klJ/wBofXb/AMq6P+3W/wDpZJSv2h9dv/Kuj/t1 v/pZJSv2h9dv/Kuj/t1v/pZJSv2h9dv/ACro/wC3W/8ApZJSv2h9dv8Ayro/7db/AOlklK/aH12/ 8q6P+3W/+lklK/aH12/8q6P+3W/+lklK/aH12/8AKuj/ALdb/wClklK/aH12/wDKuj/t1v8A6WSU r9ofXb/yro/7db/6WSUr9ofXb/yro/7db/6WSUr9ofXb/wAq6P8At1v/AKWSU6HSMnrl7rR1jErx WtA9M1uDtxM7ph70lOmkpSSlJKcnrP8Ayj0L/wBOFn/tjnpKV9U//Er0b/034v8A55rSU6ySlJKe c+uFGJd9k+1YuVlbfV2/ZfzZ9Od/tdz2SU859h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T /wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCV XU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9 f+tpKV9h6T/5VdT/ANf+tpKX+wdJmP2X1PmJnT/z2kpb7D0n/wAqup/6/wDW0lK+w9J/8qup/wCv /W0lK+w9J/8AKrqf+v8A1tJTrdE+rfSM6cn7Pl4rqXtLW3OAJI1/cHgkp7BJSklKSU5PWf8AlHoX /pws/wDbHPSUr6p/+JXo3/pvxf8AzzWkp1klIcshuJcTYaQK3k2gElmh90DwSU8R9sx//nqv/wDY e7/ySSlfbMf/AOeq/wD9h7v/ACSSlfbMf/56r/8A2Hu/8kkpX2zH/wDnqv8A/Ye7/wAkkpX2zH/+ eq//ANh7v/JJKV9sx/8A56r/AP2Hu/8AJJKV9sx//nqv/wDYe7/ySSlfbMf/AOeq/wD9h7v/ACSS lfbMf/56r/8A2Hu/8kkpX2zH/wDnqv8A/Ye7/wAkkpX2zH/+eq//ANh7v/JJKV9sx/8A56r/AP2H u/8AJJKV9sx//nqv/wDYe7/ySSlfbMf/AOeq/wD9h7v/ACSSk2Ift2QzExfrPfZdYSGN9C0TAnlz wOySnU/5tdc/8vr/APMP/pZJSv8Am11z/wAvr/8AMP8A6WSUr/m11z/y+v8A8w/+lklJcToHV8fJ qvu6zdfXW4OdU5hAeB+af0pSU7ySlJKcnrP/ACj0L/04Wf8AtjnpKV9U/wDxK9G/9N+L/wCea0lO skpZzWuaWuAc1wgg6ggpKa37M6b/ANxKP+22f+RSUr9mdN/7iUf9ts/8ikpX7M6b/wBxKP8Attn/ AJFJSv2Z03/uJR/22z/yKSlfszpv/cSj/ttn/kUlK/ZnTf8AuJR/22z/AMikpX7M6b/3Eo/7bZ/5 FJSv2Z03/uJR/wBts/8AIpKV+zOm/wDcSj/ttn/kUlK/ZnTf+4lH/bbP/IpKV+zOm/8AcSj/ALbZ /wCRSUr9mdN/7iUf9ts/8ikpX7M6b/3Eo/7bZ/5FJSv2Z03/ALiUf9ts/wDIpKZV4GDS8WVY1THt 4c1jQR8CAkpsJKUkpSSlJKUkpSSnJ6z/AMo9C/8AThZ/7Y56SlfVP/xK9G/9N+L/AOea0lOskpSS lJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSnJ6z/wAo9C/9OFn/ALY5 6SnN+rH1n+reP9W+k0X9WwarasHGZZW/Jqa5rm1MDmuaXyCCkp0v+dn1V/8ALnp//sVT/wClElK/ 52fVX/y56f8A+xVP/pRJSv8AnZ9Vf/Lnp/8A7FU/+lElK/52fVX/AMuen/8AsVT/AOlElK/52fVX /wAuen/+xVP/AKUSUr/nZ9Vf/Lnp/wD7FU/+lElK/wCdn1V/8uen/wDsVT/6USUr/nZ9Vf8Ay56f /wCxVP8A6USUr/nZ9Vf/AC56f/7FU/8ApRJSv+dn1V/8uen/APsVT/6USUr/AJ2fVX/y56f/AOxV P/pRJSv+dn1V/wDLnp//ALFU/wDpRJSv+dn1V/8ALnp//sVT/wClElK/52fVX/y56f8A+xVP/pRJ Sv8AnZ9Vf/Lnp/8A7FU/+lElK/52fVX/AMuen/8AsVT/AOlElK/52fVX/wAuen/+xVP/AKUSUr/n Z9Vf/Lnp/wD7FU/+lElK/wCdn1V/8uen/wDsVT/6USUr/nZ9Vf8Ay56f/wCxVP8A6USUr/nZ9Vf/ AC56f/7FU/8ApRJSv+dn1V/8uen/APsVT/6USUr/AJ2fVX/y56f/AOxVP/pRJTm9W+s/1bsz+ivr 6tgvbTnPfY5uTUQxpw81m5xD9BueB8Skp//Z - - - - - - application/pdf - - - Adobe PDF Library 8.0 - False - - - - endstream endobj 2 0 obj <> endobj 7 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 71 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 97 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>/MC1<>/MC2<>>>/ExtGState<>>>/Type/Page>> endobj 151 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 180 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 216 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 224 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 241 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 284 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>/MC1<>/MC2<>>>/ExtGState<>>>/Type/Page>> endobj 322 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 347 0 obj <>stream -H‰´WkoÛÊýî_ÁË"d¸»|A€¬ÄÒh[ƹÍP³Å™ŠÂÙÏ"™b“-ÀdÍw¸dDºä§à`úœ¡ÇðpäwÔÑ?×f¨ÉèC{Ö¨f®nê/¯å¡ß.[\íx?ž…çÕ½ ÐFZ5n¶»wjÕɃ†¿Ãªå$HoúðIا-M{¨†¼ä ¦Ï1&ibß@0Åî–‡>ò‡›¬ÝNzŒVmƒï&-Ø;³?sB¨jÄ-âh°íÄ'äÞ¦½’-õt«È5+*¶K>Ž(2æ÷)DU>5|³ap$øqù0ú½&S{›rÌ2Ó’õéAL™'jÏmôýoéå£qÇjùe:\Sl3 «Rí.ÉA˜«Û:>pÁ3Éà™ 2rõ[˜ªx• çQ˜©Mwàû†=Æ ¡×¾b¬¢jBV¸<¼š=į³{ÀUB‚üQ· \7>½øOC¨‡ðK޳r®2û,‹Scw›‚¢ N#_\oüXŠ|¯† ß{13Â1ì>øóÀ+o0ËøÜÊ¿Uâ;3‚§6íV½ÌMmûøE¥tçy1¡T™(µæð–ð3ÖÉ…QW‡F£L"\.)XÖVŒS~mÑ\^†+ŽYÛ±­öH)X†ŽÑ:þ\57!r¹,^Ë€ÂÚí©û½Õ/|÷>jå!ÀóàslÆ‚ÏR;)ØG»ŽÖ˜ÄÅ…Ò‚Wpø4yÅ‘¬RHäy©÷Þ¾Š·CìЕ [??%C¼iŽh×ÜHh"Ñ,|ð,r©Xp$ ß__„<Ô²[-xÌ —ùüöþåøy¡êÎ8©å¹F~7»­l–ÛÂqÔš!BÇ÷è û/ÆxYËEãho"Äd™º›‚.Þ'óÒÙ LÐÑ'Éwð+†‚Ëa^P9FaTNõ]ò/BGGx!<þMÅìÚ…¾(‹ â8ÎýÕ‚L˜¿Ä¹Ò›‚Jëë†*“> »ry)A¿Zxª 6Ý(-ÈL_˜åJb -Å>}ÝÆ¼ƒ>#èæ-6Ú5Zš”››4×±­ªŠ;\p¦ê¦uЪ”f4;ó‘U§69ijãÊËñå£ÍTM.¸"·>Çv×ÈO6óµ°¥ŒÛÞÐè¯Ü¸ ¾ e©úVÂçw-_T:ܽ®ÛÐ;ÀÇÔ‘ vŽþ¡¢Í‹¦›ïºŽ "VŒp~ ‚QwÓ´ìZBÍ&,rjÍŽT£úB åÞà » È@‹á.Œã2Ò×PÊ&Ï€ 9ÏYè'Ã~ú¬KBú½ÝøÝ–Äm  ›YÜ?.ã^bãÂâc‰r 2_¡Üó0¾ŽÀÍÀ­ -l™yX+£yŸžßÖí³gO_Ìû]½š-¿õÏÞüòæM’$Õóçσ—¯_gIœW¥ø$ÀC¿|€Ù1¦5 éb"å³z+Q ôƒ óCÊ×ã@˜Y,úG¨7®º›¦¡S„'øýåð"¾‡å¦{¶¾ÿ-&IŒ ”+YzÿcÄñI,øÃÀ·)¦Ôbu…xÞRkUÉšf/6[†°† ~¼Âÿê–€h³ák6àÀKš¡Ï¦å¨þ\{ñž2. A:gôžs´ì¡#ôÀu5ÛƒzèP~dÁ‘¹…ÞkJ67œàð–»cŠ&É‹Ä+º§œ€_YšžÕ…ÒUn\JÒ&«þ5ªû„Tqš±Ë…1¹6¹¬{ƒ#Ë|è)óÓ‚c$æ*ûÂØ -5J²P›pTœŽ¨ÄMu"´_äêö6ѨDÑaþXB-¨1ޝy¾§|¿E¾výκ^,å0!ÅíòصqỉØý;âs¿ÀTrGF½&åOåZXÊC ¶ø'HÉ(`å™d¸¢už± -Â?u[1—t%&‰ÓL; `¬×u_ç=Þ»E{ºªÕNêåq^Y‡sS%?smâ²ÁÜ&ùq”›<Öv\"ö“>‘ð‘%¼DŸk,¿×Ñ¿Ày BéÜÅ•>ßoÐÈÂÖ-R÷2¨ÛzN¼Ã|ÞAí@H• ²!¤£¦kz—‘§kD“'‚dÕ«Á«Kôõ-•yT4@urŽ ÆšÅh×4Aùr[º¡>qÌiŠædHež:“bNÇ©IÊĺå!h%Õ@ éO#Б/pi¦cXår‹#mÀé®´qfOØ9Ò#¶@…Z¯¥Fd~$ÌÍY§/ìÚzK8»E£YXz&ý3O.0hÔ %Ä)^"0*µä=ÜLVXºc m)­csÙ´_³<"ÖLëì¨[&°¦ NÞðëòÖ·È€k)Žçõ¬ŠX.àô~ùÙ*.‹tÄÆ…ùƒ4›Æyž=‚fM™ŒH0û 4;•ðÁѬϑڵŒ( ÒØœL°ç›õÚ§T}áz½(O¹R5”²]¥¯‰l0)Q$˜8IïWêˆG`ÇùüÞ*úW ß÷Ô[a=<´¤æ>â­îçÝ¢rËŠ¢ÝI9¦ÝìÖŲvàÃüg m"aV‰b)á—ÌØÜK®Yi×¥qcûBéÔyÛn†½Bäïùç#îC_rìú Oî;gÿÀŽG@Ûè¸JÓôv¤bsÁzÜ•nŠzܺ B“ÅTÓØ£‚ëVX n‚ïz…ðàJQjF¸0€G'TåWeâ_çsÛ‰AĆy+TM¥¶´)âö…ëŸVDØÂü“p‹¦¹! ñZû(W%iœ9®*W¤|þûe×ÜÆm…á{þ -\ÒèßXô®‘ãÌ$ñÔ)=Íô’¥e[E;Yg2í¯ï°»Ü]Š"éZ2y.¤Å‚ àÁ‹¸z®=âšü˜Ò©lû¼aŠ&¯ÓDÓæÉÇ@qY˜~=o³ï`³êé»|nüžf~w—·*ŠÙ8Ô¸é?ñ¼ ÓËcÊ9P¶§NX_"“ð%ˆÎóš,íýºÏ½ïBxÂÜ{`ÚµÙ“çÞ¼¹)çx²Ð/ŠF­—ÍÅu´W¦æÌªªºŒvk©û£ôî -÷ÒΣ§ùwß¶c¿é)ʼn\ø!™£Ù(j:ÿ¦7Ü«´´ófõÚ–*ÉhÿúLuŸ½H^IѲ¤VŸæËºßËóroÌüMò‚û¾ÍYTº5æœà›ñD7­Ów]þ®Ü2×Òô Õ; ^ÿ…<Ü` -îIëÍ^VàuvI”ÜÛ_˜FTöõ†éüµÃYyÏbL0mØy±œÿúaYn#e<Úlf<ÿWŽû©àVó%þôü«oê~˜ûš‰p€àÌþ–ñ­Ã1ø‡Ž4ŒÕ½Hâ~ù«Õpˆ¡YP¿õqz@Üoî·ëfÖû1­w“Và¿:IôWY,rªtw—œ±ºY´©ð‡$×âØïoõð>X,…±æýu}Sj›:”M®·„ì¯Ö¶–±w±Sæ1x0ÄËfŒ2ÍvN›£>à&e Üsì­r>EÀpèsÒÞ¸¸DqZì6(ª,æëµQMÂÛ„§»®‰öÛliw0ß»<µMèL”/‡¡¾{=¹|µœ/®ß¼zþB\¾¼’¥‹Ÿ'¿Mt´`ªJ8÷*ïñž‹Z“;üýzò‹XM¾}=‘eÑÅíäòû™ïê< ÛXBä­!‘£<Új#%îg'\PéðwYž…[L— nYÆwñ®Å*cwÿn;ü s—˜r—”dã‡jzý¦{¿çòüÓ{q30ÄO?ýãÛì=-Í®×é+è1Ï 5B{ÌÆ\TiÓÎ$ñ…§ñ{Òg‹¨T‹­ÀxüîùdjS… ­˜I .èdîåÿ¹SðG4þü§°â¥èÔüM4Û -Õ -˜iáq]¬7^,îrÛ»‰ƒ(ÓîX6¥‹Ê@’s‰¿¯Ë³´ª]oÎÐÚZá%bU¸Æ]wR”n–8A­¡Â¡6*dÛáž6¹¼šI§™¢^¬²Ð¾õH!’¢Ô1XT{1XÈvèo\Qßü3Óë¼X¹ÍEnnd•Â[E–Ü07É©zÝz½ %AÛ€†íI« ¨`½ÀaÁÜò=1мکü6=¬k®}[¤àŸL°þ5ÊØk™Þdù,ÛúÔfÐa¯¿4Zy•M™ûx;XÇÓ@w¸Ç¤ÙîF!º;ÝõÑÝÝ:† s.èìu6 £=:oS6 £3:£Ÿ:á¸N°aÑýèÑ98²aνΆatFgtFgtFgtF?ytNzYuR[ñ§PR¼Dþ_…?ˆÁ„4›µpj<¡¨*±LE>ØR‹-p¬åd†ý_^Íp¨{õb5RªrÞd¥œJ2:ö:OÛ¥Ù+P&Œ83ÁÛ®Zƒ¦kYÞ²RMësãÔ&5ñmËò’•J£•WÙ4X+%sõ³AÜ&bAI”Ø[ ÆýŠßK޹à7Ðõg£ë-è‡n³]à,9K¾·ätÉÙ,l–3 g›³Yö&Ç‚SŠÒÝàÐÉnQç xò&çÀšŸƒætC ]r6 KÎ’­ä Îà Îà Îà|æŸINÎäœ!ò=br²f! Ž§Ô³ ùíÜn–}È·™Å€·ÎtSÙºS^¦¢…*ÆR‹-‚ÅÚöty5ÃNkìIÔ‹ÕH“Pi…+ðUÔ#M¼®ÒÃ¥y*9Œ8ÁÛ®-Lײ¼eMš"ÖçÆ©Í §®¿2Zy•Mƒµ&2—Q)Äí`"¤ö'â ·¹¸GëÊkìHÔ‹ÕH C•M(­¬F‚xÒÃ¥I*P&Œ8ÁÛ®Zƒ¦kYÞ² M±Ô—6ƒžºþÊhåU6 Ö’È\Fl·£‰D§\¨2z<‘#½ÝYÑ:FZtø´tBAî!gh…ß]áGi¿?ºæìôp:å˜N×é˜shOÑ.NƒÆ?]ô¡QŸê¥énQªÓ.„íB®Ó)£>I {Ñýt¾}Ãppd¯Ÿ‹×“Þ3AçÃ^çDàø Ãè_Ý>í JΚ³æ¬9]p’i—> -ï h£ô§¥*±LEm0?P¥ZØïr2þ.¯fØm}‰z±tíÁL)Ò2Ñ™‘*u‡K3U ðÃüíÎBAð¶ûUƒ¦kYÞ²*M±Ô—6½žBó’UI£•WÙ4X«"sµ²AÜŽ&R?‡ã®å=Ä—{-ï>IÒ¶åmÑ ~äÕfj: 7r3"7ò-à_,»kÁ1§ÆÙmÆßÏÞQON-ˆ€ËÉjî<„€ñ•Ðõ«E÷UñúHéÌ;§S ‹”5¯@šèGét²v!›·ö9atº Õ JÙ,t“.ª3:£Ÿ º‹`¤ÞÌ^ VÑ9õ:$õ¢›PF§jÊ[”îqD°a ~äÕ¦êr3 7#r3 ªèBXsgÓGáaÍ é¬9ûü5gtF?tŽél—½Ð­ÖAx@ÚèèÊ€“A,Sí$u,õV‚ÓëgØÙåÕ û­±3Q/Vƒ¾8­ðø½46Ždñ8,>\šªeÂèÓP¼íª5è`º–å-ËÒK}i3è©ë¯ŒV^eÓ`-‹ÌeËq;šH%Â3[C¨üx"G¼§Zp+ॡdÌNsQ¿ýÑ·¡qÕ)£Su:]p6 ›åÌBÝÑ=EÉ:ÁŸÜ¢àdgp>?÷ßž£?=ºW bØ ×Ÿ}òë-ä}pÛ·CpÛ€Ÿìepgð#§{|ÒÕœ,8a³Fw ½4;ÐÉX¶¡«CÑÕ «Nv“R÷ŒÑÕ˜eàó}RsöùñÙ…Á|Opˆ‚s\a—ŸƒYHýÆV.Çã¼ G\%–©h"øÊ”j!xƒõ3ìëòj†ÝÖØ—¨«A×`Ï4€S‰k Š×yŠ.ÍT2aôÀY(ÇvÕt0]Ëò–UiŠXŸ§6©‰o[–—¬J­¼Ê¦ÁZ™Ë¨• âv4‘ «*O$:½¹¥ŽøÓ¡;¨*ïH¢V.º7IrÊV÷U ŒÎè¼K®_ÑÏ%ƒáÃègƒNw›zܦ¹1=tŽ0ìõ³1 «ÎªŸ :áàÈ^gÃ0:£3úi¡Žë¬:Ÿ¦ç¢úÿد¢ìäy¸•¬@µ$[vž»–ÐÇöô…ýŸså$¤$ù¸@†ßO± VÆ“ÑH†,`èÀæØ ßºä(%¦ÒûžcèFK÷U‡b”ú4.sO}4_ßy¬·÷‡Ý{¬nÿñ½ÝSdvRŠoÕµw™”úHõ L¬yõðC0e‹ó²8Pw޳”ièëÃæºgiŽ7¾mœ†iÃ)a;U1wŸ«sXòóZ ¤¦H÷€\ë§He}|y€¸BÈO—kËàòFùÅ”7äMæÿ™ãRΤçó׿xóÄFyëYšXå?”kݲ.¿æ\N@?F®ÇÈu‰\'ä/«•(þ§lw¦<#Käñå)‡EŽk,òFyËϧKÞÒóå;–¦•få ù#o Ú(ÿP^(ZŸÎ@¿†ó‹ _R@ÏZ “r€dW/ˆÈeÐJ)q-ó⛿êP)ŠŒ«BÉÌWwæí}ç÷¦Û|GU§A-|pÖuÿi’ë#ÕC2±æÕÃÀ”-ÎËÞÅfw޳iè륛ö,"ÍñÆ·Ó0mø!$ c§)æîsuTœI‹êoÊ ôeôÇBŠAÏA¦ÊÑ ?:S’~ƒ\~-u9üZà/Ly³—Æú…õ½A¿ -z¢Ò÷ µ”6gl9zôHœ:°Ö…ú/DèÀ‚NS`­Co‚y먽WsÆ&ôÿŠ3¢æhzzkë­”¾ôÖ{=:j(ÔÓ5glBQ¡³¤2ØbN!¯€÷Zº¯:TÿUÆU¡Âê«;ôö¾ó {Ôí?¾™Äü­õ[–Ë*°I®TOÉÄšW?S¶4/‹w(:ïg#ÓÐ×K7íYDšão§aÚðÃIÆNTÌÝçê )˜øAÌ?qZ34~ˆ_iòć•k@N|Ú8^Å;‚Þ›’ýâË%QÎÿ(yOka3p%Õ~+–Û¿½Î3i_sX±Àvs`Îa˰\€Y/¾¥ß Ö ¶NRXÎaë(,p`gNPX¹À‡Ö9,tØBì- zsô+”}¡ƒ•‹Q*iËú¯I?\®.ç€÷„·ŽŽÀ9°Òaåk‹°ŒÃns 0ëírÑÚÜ+8‡Õ9"ô؆–KÅút&MÝW%Ïß<.F -±øêν½ï<æÞuûïE\!.Eš”u‘ó¥úHõ˜L¬yõð#0eKó²dw޳’ièëÃæºgiŽ7¾mœ†iÃ%a;Q1wŸ«ƒDõO›<¶˜âë ·[o¯ý=¬÷f’ÄG^Èþq{yZç=ÀöTµTà$žü?ÌP·E|‰##ç©¥; 7Š¢çšÑ[è¼eèÌy_ÿ»õÄ¿õr=®Kàz™—Ãj8?‘‘ãº9.r\µ4ä÷FŽZ‡¢>s¥Ðj]¡ÖêV„^ôoTܸoÿîœßß`9‡Ö9.rTµ€–}\ÂQ "³t¦#¿ÆÉO þƒŽ¼™JÓxÓøsj—qÔÜlÈÛ5èòüDur£(jw`üfÎÂÔç±dŽKèL‘K÷U‡n˜YÆÕèÑ¢¯î<ÒÛû΃î=R·ÿø^Vbv*jþ”\Ö*4)õ‘B©¯aÍãÃ3?S¶8ÿ*$Yçãlàdúú£îYœão§aÚðÃIÆÎTÌÝçê šrDÉ"[Q>±ÌЋIîqêÝxòA‰ ç¢8÷¼²»8Áͼ÷tÞ 7w¹Ü]œó¢g9oIzs¥Ã²ž=œl•þôå¨ÉåAI - U0À­6tIº¾æý…5Þºß £l¡ÿšôÀo;jry„\pYGvu”˜ðZ¯$dù.rù iIzkD-GÀí.¬»4ÎÂ9löTα¡Ãº p¤°Àc¡ÈÜoÞòo¾Ò¡¦(²ŸãÞE“ºxH•áf5é:S,¥ûªÃD½ÇV#E˾ºóHoï;º÷HÝþã{8RÐ>ÙS^sbÎ’?R='»R—?S¶8/ IÖyç88™†ãú¸§nɇãdाmœ†iÃ'a;S1wŸ«ƒHQ?‡ÕSßVWuiÇqé·MÝ"àÂÇô¢²w@.ÄYNz. Ç•*Ó/T™ºE¤…*õ"U³³ð¯ÿÿÊq9ã§*ÇwpH[ÜZ)‘Ó©’÷ ä§JÞµRyaÆQ³U+ÈŒ7äwF.É£x®î?#rØü Ä–O^»ž·QI¼Uʯ…rõÍ»•è¹™·:i¸ÿ7j^j½AmqôX¨JiŒ7Æ/e9;rÝÖû§×JÃ}_ܨ}aóÂV}.í 9‹!Þ5qµ‚ê†Ñoµ‚«r\ä¨*W9o}åék~ ¢iË7€¢2Ž›› yC~9rÜÞÓWUãhZQ*RúÎ,ÖÁ1ðH¡çî«ÙHÍÆe’}}ç±ÞÞwvﱺýÇ÷Š’Þù¿f4YqbRê#Õs2±wxÃÃ3?SökÂá×úVw޳“ièëCŒºç(’M“”ú¶q¦ ?¬„aìTÅÜ}.’œÌRsµ¢3põ³†‚äGœw1$+xÖ…4•uÊ6Öÿ\ëÍ_îÍ90tX¹õ=N‹4ÃÎÿ¡”ì%뺂­-;¯“¸dÊš²Áf'®\p9îr[EX¹ø-WLC‹6Eq¹0Êù.ÐoŸ¦‰W0p-:æÍYå°5¸GÛÖÐÛ«¼ÕÐ×€Þš®Vþ¯ìÒ«(²1âvè©e6<¹ 7]ÀJ/´?§ôçd8Ia/t°Àa¯À*Çê["åsg–‰û´,DÙ·çî«¥§â1†eñVÞz_ßy¬·÷‡Ý{¬nÿñ½b¤T°•)º¢Ä¤ÔGªÇdbÍãÃ3?S¶8ÿêA²Î;ÇÙ@É4ôõ!FÝsɦÉÀI}Û8 Ó†RÂ0v¦œÏÅ9¼Îi´±àñúO]ïfäÙcomà‰ËÝŒ¼øGK@Ý 8×]ÃúEÐ/±ƒ³¬…â"dX0*°Ð±µn‰·]ëâ±1¡»Ös1 Niθrám«ôÔ™#OÇ v‚¢#`è°JW%Mþ/8à©P/õšõçbi¥èt Ø[¯ø€M”¸õŠ÷외Ïx„#‹·ö'£P¤@²Žš¡.ÌùÚÜåî‚ ¶YÄu—@&åKKÑ…§«‚6¸¬c—#LÁí3 ÷ R,«so`Yï)ö¼Uúú5•ô"è—hýt×I0í,'*—îÂB1ÇcOÅ?ʰîç¾¾ó`oï;»÷`Ýþã{EKŽž­–Û€I®TÊĚLJf~ ¦ü?ö«%¹qîß)t„@€\ç>B–qeãûW=H²•ØrÆŸñ(î”V"en¶@Ãtú4tá2w-ûåø~\0ÀU¸4§)°oŒ¹´Zƒ„Ž,!aŸ³þô½²4áÜ™™çcè™{;ÖmûuÉT²Žï¥’EïÚþ·‰`/¯›ˆ»‹`Ýîíã(v|ͪ„w.õ„ãᎥ¿j¦,>>ì°‹käèï:}ÊÄ.ÓÉq7в_Æû!FæK$ÛoZú_·ià“–4¬ƒ,õîýä"-GÛèMžySa€K¡Z ª|.`%x’K3jðãÌ­È1çÀ)ŠÊy4HèJµÈÐ/#M’Y·hÒ™ç>éù“ÔbÑ|í£Ë&)°Ò…ØxÞŽ ‡O>#uóëuq…Ž\^pƒëv-#p’âBGíFÈ€‰%1 ç°Àe“Џ…—¨-î—?+é¨z‰ââZæ9úx½<Þt᲎ì\”jæKV÷9YÇ­¬YbÀxxš®eý'Êúš¥?‘¥À‚AH™·ù@z·X–*‹«V–× -Kb@àp„kñÚ™Gë/ÅŽ€g¡lݶ_&“6¾–F.aûß&b½¼n"ì.bu»·£ÐJÓÜ™:©Øiƒ3®ý£ô÷ ÎÄNq‰Ln:½E¸L'ÇÝÀÉ~9¾ÏEšâ¿6nÓþÀ'+iXUêÝûÉEª¸GhÁ¸Î°§ýs'àÙ¤—f˜§*`èaI[–KCï³B×sµzƹByÒ º‘Ï=pd¹ r <üQãrÉ’>bòz˜›þ Í(SŸ—Å»I_ŠsàÚJWÉ@Sã<¦Æ–0« ®éBv.¸…ºElm€åEIdŠFÕ(éx”¯µeµº·å(ªw‘JžmÎ9ß-¾F.úºC×k•Ž:Ò!§¨‘T…”‹ _ž÷ÑçOÑUçëpqCŠ’f ]HssDèÈIŠªtäúÒ"Ü™fôø>zký½Õ%¬.3£&)ªÒסîG#k™W ¹ÀrŽiÂtµ,bÑDÖd^Ÿ¸‹JëÌK|×9ÏB)ºÓ¶_¦<¾#ÉK¼ÝD¨—×MDÝE¨n÷öñ5r0Qr«AI#M§¦±÷Òß2SvØÅ2¹éô)»L'ÇÝÀÈ~9¾Ïœâ¿6nÓþÀ''iXQêÝûÉ=ܤ ª,¦sŸñø¿6ßúß~£Ê zøŒ¦@ª\9ÿAÎ5“ä„4~}å\­-áì/—¨’ùŒAzV—¯sdà¨*7¥$ÖUŽšž±ƒ,æ¸Èõ¤– 1AqI‡ÍÐ~vlI!ûf.ÔªÎ?>?/§ÖΨ!AaåRâ»~‰ó§,縜£Esª\æÀŸžqX©àGu,fT½úŒ?~…MOT±à¶ZÀ#…Z+V –sÔ _Þ$ÏHPc²|ÆÞ@G¶[  -]1k ®ÊQÇBL+b,ªØ|BÈO`ëT˜‹uIM‡!Ô•»Δ-wÛ~­J¦6¾!­ï7ìåuqw¬Û½}ÅΤ?lZ¢â¶S1{ÿ(©Æ/QvØÅ5rðªÓ§Lì<w-ûe¼BõgŽNñÆ_·ià“–4¬ƒ,õîýä"V›IFÊðßÿ¿kèñG'KPµì7@gáKµì© -Â֘Û gä4…eZë% 1 x a¹äùH€ àê Úxµ6ƒ~7ék3úÕîX鸬›ÍFT€F -¬–ð–‚'¼º˜©z]B,k]ü-Ð1m:.pè]+úÂyÅ• pE· ˜u`è!Ø4ÌHYlµü‹ º9yµé0ÍKèÕë"§(n/R&®Ðç:`Ö•ÜF³€ÀYâ7ÌzÏUŽÒFâÞmû¥8•dãk®”¹ÅûMÄzyÝDØ]ÄêvoG¡C~`M•šòé¬k¡Ìx”þž™²øø°Ã..‘ÉM§O™Øy:9îNöËñýxæK$ÛoRú_·ià“•4¬ƒ*õîýä"–ƒš>¡4ÉéE®L(»#¡ì¯j‚ž©ðÜ#]%K»]–׿€»ïךçéª)æ,ð«(ÿ›)æ åÍÊVãgÕâQ´ÞÙ9~\è¨¬ÇØëYçП>IcQ¥-Á9ßš¤ß™ê_ k”‚zH¹À¶Q¥R}.—»‘/¦sÔÚ %™Ï_ÏÏ8¨ãB®ˆFÕë\+ç|íý¿¡÷÷¡B©ÿâX´ -ægÆ¢µ-Ly"ëÏXÊqUމ[)žkA\ â•¶}›`Á EžH\+¤=Ç­‹©å²R¾ åÀEQ©TŸC¿ùbÀ{(p#‚fµ¸¬”¯SèïÄ-`[ào' -¯d‰»m¿%Íã[.T“ÇëMDzyÝDÐ]DêvoG…¸™!…´žºOc勵d¦,vòˆdrÓé5;O'ÇÝ@È~ïk·?ÓñÃÉq30ÒÿÚ¸MûŸ”¤a<©wï'÷(šêХㆪ_ — È~AÞÚ™tB = i­ -Êú*õ•ôëIrI+ë‹K:lY;“åÔÏ hµ6`èÀR_YÿÖ%5,븵Z/°Y -,õGS0™Œ‹C²ÎTkUDÖͨz³ÎwCç•õ_]'S`Ö™Ô¼@²Žë¾€I®¸zQjÛª—¥³º‘¹ah;Þª¢˜30ëk]_}À-Èç à,E”zªæ•Lœë±Òlݶ_f!3_爧5Þo"ÖËë&Âî"V·{û8 -­ÄÌeÈ"©3‹aìý£ô7Í”ÅLJvq‹L¿yø”‰#'ÇÝÀÊ~ïk·?spŠ7þÚ¸MûŸ¬¤aÝßÍ»÷“‹¨™ÅEœ¤ÕyRñ¹¿·\ó÷ò7ïa–? ó›?w)%Í~.¥þˆü;]NУ›§Ô¹b0åÁŸŠÁ7ÀùLB•?%_n”kºT nA~Kû[ί7ÖO½Ï•~¶_¥ô[*ðsz!±:·xk’þÃ$…V:&çmX.Qþœ¦ZKìÿÀU8C¡°`0ëb Mäʹ÷¯äò/Ú((ç«Î—çÜ©&)kY\zºp/ó>úüÞ8¬[DaÅlsau \¤ÍÛF‚ÂÖX¹×`èF¹¦¹?G€ÛESt˜žˆ`Å›žÀÕXçÀ–kÌOƨÔâÍ­‹¦Ì¦êõ˜pék|·í—¹PN<¾Î™$Tµýo¡^^7u¡ºÝÛÇQä8¢UÆäg?M~c勵g¦,>>ì°‹Kdò`òð);O'ÇÝÿìWMRó<¼ŠO0hô3#­9BŽÀŠMî_õ-ãÄTòð£æóÊ’ÀJ«ÝÓÓšH™‡¶ž‡ùÕ†Ë~õ×êÔÍ/\HqÓØ¨Š:¼Þ$k=…pšÞÜîì Š'µc…|Í|¸Av­§¸’ŒåóóœoÝÂç{лêøræØ]€=9ÊGø -+`g pyŠ–sà¤kŠÀ™ÖÚâýÈ-ÿÔŠ|þ8‚-¶"X±å÷`ü'z(¬·ÀÆÜLQ>Žà-Ðr-R`¥;ýärÑ+‚í¡À*‡ ly -1Â8B#†|µ€MèÀœgÊ)´ŽŽ¹€Yöt´0f-͓ҽwëË“sqx‡‘K] 6ô¶z²žžO¶éÙvÎ/ï«ÅE¥Ä³—JÄçñ‘Æc2qÐú™I%.õäÕ/oÖÙDÉ<´õiñ«džL”Œ¿V§n~áB‰›ÆFTÔáõ泯ßÖy¨Û×]í#$Ë¿= H}ÅyÕô®Š4úpë6?Ñô6ëГí-åž¿tÕ¯ÿB‘kSŸ¤¤þ‹º™/FPè°J·@#P¨þœ£¶£Ã_~ :lô::éoÄ]XO‡-Q`Ov`èy0 1âi²bnqû"Ý>3+¸“B³`/v‡§ÿÆÃŽ™wæ<\#käáaÎu.¥µ–þežH$µZAðDØún¡À - ½ÓTÝ8ç7QXc<ÂâÑŒîCO”%ÈT¢ZܺD™œ”ámFò¹.òlk'Ûçéùd[žmŸáüò~ÃH)%OŒHâ[Šmf4ž’‰í÷×;“J\–=yõË›u612ëz}gµÓ²_ýµ:uó FÜ46žìFûº:ˆÚZœª©ð—ÑnVýúû†›Vö‹ïú@´‹E»wr²—¯9ÿ—LúRä…ñ”\Ûîü -ù>þñ¯ÜJ.‡ööÂ߯½#ã7ë2ÙéºU -pmk_¶¹CâÛK\)³´÷­o+e¿ÒÄŠÕ¦Æòå¥[O1sŒ{*±ì@8ÿ+ã÷<%Qɱm??LùÈq]µácšŠÚ¿º=jów¸ÆÖ¸Ãc¸Au›RŽ+ÛþyµÝ31ï~÷Ù¦i‚Š™rÌœ‚ꇠ¸-_9–ˆ¨pÐŽÌ8j6ÄõBH…ã&,Ü bµé3$å°ÀqU~ ?dþð ÈQÈ~÷+Ð6f“í½o\ ×ÀÃxx,® J¸:A“–§ÆÒâî6‘ i.#p¦”ì¿®3†·q˜Ès¬«Á¾Œ-žl£§ç“íy¶†óËû Å'©2Þš•ø<>F/°aËwÓC>fv&µ+ÙÇ_=yõË›u6ñ1ëz}çj'™'!ã¯Õ©›_¸0⦱Ñux]Ã*Hì{ŽçPÑ{¥´…ën&Éè¦É}›¡¿|/àæ»9ø¶˜~¸Ó=RM_Ù>ç™\ÒÉ9“8ó&ï=t~xË787èìïBï*Õý.j¬Gýäп»;º£\²‡T:ª\€97èœïBïUé }4Sd.À[pvÁ´Å¨â']t{à?Á9¬\p‹¹ -•î±Þ'ô#ìßIqý™söw9ï²Dq#0ç°)7v%&q…ñtkŠÆx‘ ˆ8èÛ"pZÄÌ‘÷¶F`à°% -taÓ"p%eû£$OÃ8S”2¼ÃDYK]ݸz²žžO¶éÙvÎ/ï7Œäız­‹·ùYÌ ì‘Æc2qÐú™­½Ä寞¼úåÍ:›8™‡u½¾³ÚpÙ¯þZºù… 'nSQ‡×ÕA -¹b4Ž> %´iºÛO»÷¦ÉÔv»Žo0 t&òÐ72°+à!û{®"é•ÎmÒ^x Û@ìÆ‹Ôª¯ŠÔik.È9—Z©÷_£ilÚ@‰ôºÅ‚¢¾5—þÅÌ9°+¢z‹ Ë—ÆíÝ6sá—(ƶBû§üH-‡Êÿ/â9ª)"7"TSDÅͲo-ÀYÌ¥„¶}[ä»iÕW`Eˆ]ÜÃ"²€Š6kyŠœö¨ÎŸË#&ª—X¢ÇEîˆ[Ç-dµ`öPUÊ%·¹¥™=ô7*4¯;”èæJ™Šú–õ[`9t—LmOI…²‹kÎ#¹†·qÈBžë*{⤶|²­žžO¶ëÙ¶Î/ï7¤¨ªŸ’…”[й=ÒxN&Zò1³3Xx•¸üÕ“W¿¼Yg'óÐÖó0¿³ÚpÙ¯þZºù… 'nSQ‡×ësŒ‰Îs˜Î‘\hM¬×fý€GÊQîu¼ž,ìpÆ2I@)ãÝ[2…iàÞtÎ-çÀ““{—Æ> 4çSçL9hËzÿÞ’ˆ-d@ÊÖÏ-­©Ç,QXÎ-dJ¹wÝíÓ[€Û?°Ò¡ãjÝn¨±ä Éz0Á$ÄÄ›]`C‡.PÎqMñ¸Þò8ðH‰¹KÿÀ ÔYBçzÿ­?ZfQD±À2Î<´Àûgø‘Ëâ|qoÀ¥e#—Ögr5ÜÂ&–d)1µ7ÐþK4Ú]HZà% -ì.Þz¨? Ð·F¨ì %Œ‘à8S(<¼C³M uu¼:y[=ÙNOÏ'Ûôl; ç—÷FÔÕo¼ãBÄçñ‘ÆSZ3±þ==äcfG`R³»¿zòê—7ël¢dÚú´ÇøÎÕN2O&JÆ_«S7¿p¡ÄMc#*êðzsŽ•!;Ç ÒxL&ró°30©ÄeÙxU¿¼Yg'ó°®×wV;-ûÕ_«S7¿páÄMcc*êðzs¬¾LŸ6¤Üö¼ŽMl(¸Ø¦énUù87÷Ýã°‘÷âK¸ªÞK[hü'ÊÓE¿GÂ8Ês†ÇîÛ^u1 Ñ’‘@ê¸De_Ú,Ý¿-*AÚ$ tØVjа·‹®äÖWúg:—ÃBâ(-t„¸H¼kK”¿ ý!Ö)Ò»Ðñ'®ˆ€<ŽÿÔÆóþ}Z- ½˜sÐØÂ™Ãjø - -{§8€ï¯r}Ûöb"ð…ØYJy!müÀ÷8`gƒÎ-ôþåœÌa“"0çÀíØ¡»(¬`ñ'  ë*œƒ!Wrr#u¦¤<¼C!ŸS]¤lõd;==ŸlÓ³í4œ_ÞW{J)¦*Dßth±ïk4ž“‰ƒÖ‡|Ìì L*qù«'¯~y³Î&Næ¡­ça~gµá²_ýµ:uó NÜ46¦¢¯7Ñ’u2(Þ-À£}<9€ï|ŒmÛèØ®DÎ>·ÞÛqž¾"=ñN-æZîÉ¥«V½@W -I÷€¾½\€•(H‚´—d¯è½kLŸRŠ`ú/@Çí¤ÀR?r×/¨4¼k”q\‘]à´+ôh;;n€›òÝÎ[À:$Ê(\CWrɵ7Ñí­e{èBbn ÆynÍ¥àJ!éÝû -µAr{¸âÿد–äÖax]` r#øY&•ï_5ÐÇŠmzÊ™”£§Ny%Š6©V«Ùh<ÞÐ9Ì¥õmèþåò¬þÛ‹¥ÄïÅ‚¸·èR ±†§\`±”¦}VDˆ¹Àå8¡Ã*ÝÉ,cVQÜVTI Ì]4râ$—ðÅ˼ȤbÃÇ8,¤ñäi6"Nå˜=ÄN/¯‡Øô; Ç·Ï‹•rM:§¹z M|¼”ñ5™Xýê¯Àä–×i!qYWÎw%Ë0æë°¬¹ØiÝo~Ú|›–_”¤iDeÞ¯ÞÃ%ç©Z;ob¿«Ö+ôÛ¥>!ýù†À9é½&fWçi…ž)qÛ¢ÿz<ëaX9ãìŒ2÷œÿrÌxrÔ#*ró{1cŸG4Rª÷rÆ>…îQk¯ôÝËÙÑ:xÖÑý¶1µ>Nï_å°À#¬s1HK„=ž°Àa}%ScÃL¸JY¸? ˜uà¤Ì:¬1WÑhç’ðíÜ㳋Qfn (h^4bî»9„jT¨rî-}ÿæR©¤æ²à¸ZÉdl½³ìþxZü©5ÌB„Ê9rjyÿpØÃ üÙÆ=“Ö·}4Û"GDØóéd©öjA€Žgçbm æ™R¾ -æ™XÛð1Ù¨„ñLÓ,”Ùcþ{½¼bÛcì5ß>/¶Î”“ñtøÝùúsšøx)ã‹r<Èæ‹Ÿîâ-˜Üòú«¸¬+绉•eóÓVãš³|¹™XŸ6ߦeÁ+iWÙ‡÷«±’°n¬À=¾²"º‘l às‚¿À9¨Ê%æ)–õ#mýé, p#«©¾ãŒqÆy)ùôÿ‡óoAÿNʸ =B©r}·ñè/"#­“s‘Þ‚pDc7q—dzëè°ÞRǧ/þ»nJæj€RAe9â¥æ˜©8+â -Ʊß8¤¬—¦ˆþ¹€»"`f¶ ³Û^TÊR1Ë‘Qót`kUz¡šl àçùJ+~™™jÌ|ŒC§Âyž-dj1{ˆ^^±é1vŽoŸ;qÕ< «½âÄÄÇKß“‰Õ¯.ñLTž¦…Äe]9ßMœ,Ãy~^s±Óºßü´ù6- ¾8IÓ8˜Ê>¼_½H·ÁT©´ÖÜÇ«òa÷=¾&é«ÝŽ[€z˜Ø­8 -=ŽT•t/×íºf²Ê÷Œl—Ð#M»öÝîn‹Þ™ÐÝRèÈöâÔrë3ÒŽ+öëÅûv¹%âJßm¼;3ô’[ß P¹§9 +6ªYïYË#(XûõΧFÄ¿Ññ"@O¤5÷zù1ò­Ôbш…Áà™'íqh9jEvsèxŽZˆ˜² ›‡ZD¤ZT©lG„j/ÀŽ®I …þ¤üIù7)7!ñÞû7,U,1àèå6VËwHÿ»yK(¥àå-§–AC nca™œµ— ëfT½:¢¥[¡2þ ïVÊ­Ç –DQ‰ž}è¦æ›¹ÂsÖ{Bé×K£¤‚xD€Qó°óQéù’u‹'ÔácJ”ªPÓ4-Ñ@‰Æü!özy=Ä¶ÇØk8¾}^l]‰S“éü×Òy®I/e|SŽíW—x ŽP’×é ®+绉•eóÓâqÍÅNë~óÓæÛ´,øb%Mãà*ûð~õ"ZTãL1©T¨Ï{‚g*¾.$ôð`–Ð!LÝ[9¯ÔFÁÁôŽ+ãqP´`ŠEÃÏ8#BG>¢¸ÆîÒX1ÝÅjQ<àÁ¸•´E2}X;°rîcøð tþ¬kµ¾ ûÝb¤çÈõ¹~³{K¡R¬/Fû?¢ñ'ç¾Û=ð¨¡Ù+ )º9,pä›)·Ög„ - -Û1%˽%"”~¦Züô§\,—Òtë¸õàZˆƒvH±4ò,Žƒ,lˆ¬» °Ö£cI=ôK}«b¤J5çÞ)p'Ö(œ1ý¥P)–ñ” FM 0à/”nÔÿýãÆí-bÀ7*èî)×L¦Þ» -€—öá+âÜË|÷NÛ…§ÚbðTùSå÷UÞÈóò –€ž½ö:ß-çã¹ ¼æJåŠr§œdø‡ÒÈBIÓ´HlÞbþ[½¼b×cl5ß>/vn”âÔŒ–å"×õÍÄÇËèeÿabµùâ§»x&°}ú5꺮œï&N–aÌ×aYs¶“/7'ãÓæÛ´,øâ$Mã`*ûð~õâ§O«µnQ¨öqOÐ-Gç’{軵°8ÿíSÝŽ»ÅzSSï¾ûçE˜ÊJ$B-¸ÑhKº?š»5¹‚±nCîÍäZQÆÔ±0$aZ /@ö¶~IbcG£@±çã? õòz±¨W Õ]ß>WI)Ôê^@sY·7ŽÒ?rÿ¡FSâñ!·}„±€ÓüW|„æ›ãnHÊ´´ó!Tç!’L›!)ýÛÆm˜.Ü“†µ¥*I÷þø!<$3 :@™È‘;ºCGû™e¯m´ ”°çI[ª©Gè¹ä=ŸÑdÖ‰âÕÛLzE­Ýt«]ïøßhÑz`9%ª¥¥ùœûCž%×=´ù”Û"ppé[ÌDjÐúÏæœ‘Ó9=s ž›æ_À>j„yÔĬùŒ¡ñ×n=@gÀö:Q“Ðm4tK˜JrÆhqx™úm£6ŠzE!H©‹´}M'%œÁóŸ˜æ¼zN€az›Yw<] õ(êCѽB7¦s°ÿò'Œn{‘ F¢K¯ëw¦C¿ óF…:`ºéb–\\ö"§ââ›-N“î¹çñ«ѵY4k–€Ÿsüô_š?m¹¼¦<€¢ÖfÑCÊݺ\R+K»C‘ÍB’Šv, -ƒ. #Úuý:%H…Çs²j´ó‹{y½XÜ«ë®oŸ«´¨r¶+ƒJÔUZ8JÿÈý§Ú‹ˆÇ‡ÜvöÂiþk„(4ßwCZ¦¥k7Ýyˆ$ÓfHKÿ¶q¦ ÷´„amÉJÒ½/>¤¿âðûb9£çTR3î>ZtÔñfà¨ðÞ ÐRAÝ¡'‹÷d¬Ièæ3$yÎ LƒÀ9-Ó -9-ÿtã˜3.)ù$‹€iûžEjºÍ0%æÚ•6ì4fèb­9­[êŠé‚ü4à -¶qdKÝ÷þ,¥–sÀQs-,í'@‰ujxh| 9¬ýVû9WМ='0ÛR늲8æ¹cènõÜ/ÓÍãÙhE [Ö RmØsËzÒfä!ë;‡îÜñDäWÒ‰¡¨Ô3‘èF˜DXw£ö™žAK¨;ÐEÇL·E2¾¸¤ ¦â³ùõ]œ€OéF?<—®‹˜B­. ä´@N+äôWJÔì¢DÝ3émæÜ­,:nE ¤©—ømºÄ_èÏX]ñiºkqñP¡ Ë^÷o3å~‹ÑÜÜbñÝ&:Ô\3ýxqùSäÿt À’¹c €¹,é‚r”î£_'ûMìuÃ9!dµã‹Åzy½XØ«Åê®oŸ«¬(Fê8»*ëÁ…£öÜiŸ?Y=ì+„Ó|! -Í7ÇÝ•iiçÃåþN…o7ÇÍ•þmã6LîY ÃÚr•¤{_|H„ЧÈ>(ç²çîšúuoÈ£ee×—¶ˆÜ5Ǹ7Åü°¶wC®[¬oXÄn\!(Â;6£¥áë†[ÀÖõÓ>ÇMW‚äºS7ì¥ïÕ©\ »;ÉS¡3R~pqf3Vº}ªXÆC(5W¾]gÉŠB—ªâ•âfç49Äí·4óö¸Õ|i2¨¨ÇŒ;vµæ²ÔÂyãŠg§â³oz#¼âFÐüñ„0Hô×î¨$MÓ¯&()¹tâ^G¯ÍÞ¨ÍÑ:´W¦âAòÃÏá$ ¬µ¶Ïr·ãO„¨é ®Ü9#äÈõÐq b`rÙöÝö  )Ê?Ü!2hQŽÜ˜‚fÉ=V'õÿ#«Ó1r¯Ý3Aâà1㤠„ê9ÀPê¾ß\îï,"ÍñÆ·Û0]¸g% kË•}óûêCŠ" ´ eÃÒM?/-õü˜~ÞüpüìÏ›»E¤E=Ñ“z‚®ö›mto#ÿçŠÊ¼LK^Ò“5§(_›£¥Ì¶DþG%õ<ôÝœ'$_ö¦¡[¹güJ€Û¦KÂ\ç¼yà6vÅêÖ±¾ÄO+àÒò~ ”cW}i¾ýŸíÑór¾¯,Ø¡šÛ‚q¸²X΋¦š,Ç7ÿã³îØ·$3w)º„N@Qj®·¯.6Z‘‡"%ȼA—ãs~<]2B—}” –=´Y¤ 2b ½ý"uÜŽÒ®¼4É(ecºðP£~—ã #ÀÈâ²ùu^6×Y¸½2mº¹€7Äq|ù´BN 䧉º€ÆìÑí"$"ò¨.&Œœé p|‰:†®Ø§Û5è‘b­éßF~–º8Vtƒ^ÒÓÛFýõ.çÒůˆ@Ø!Ï 2oÅÏ3B—“‘-0íÚ®6K´€ O`˜kèÍ©ùE”â•éŒ\OF »mFYµnFM—hŽ;VJ+¦£‰eHÝG¿N6~ ŽçÄ@†ãã? öòz±¸W Ö]ß>± ¬Ë•޳l‰.Gí¹ÿT$rÛÙg §ù¯ÑÜÍ7ÇÝ–i9žw"É´ÒÒ¿m܆éÂ=-aX[²’tï«)ApƒŒTËÁ7tL:¦÷ßWÔ±p`éCÿû L+ª‚}XEÍÀ:ê1æ¥‹Šª VQ3ôZޱ§CW$‡Ì½§C÷KS—6ºGóEjÀ£î¥üOTñ©”ÿ§á^Iò®¸´™s×âBicŽiŸ.~+ÔqÍ ¨5[އ~¼í2ëNxÈ szÖ ”k¾4_¢Æ–¤âÒ¸$ûç„ÑåXJÞ«Ð6uÑ1t‚6,zótñmº -g—‚îv,2·˜%¹d‹_ä **'hËOð¼ˆKçâUÏÍ·°D—¢(h]*yîy¢K }p%š¡äà’.cr˜sÓsI%êçuo¸8úáYOý• àÁ»d‘¢GèŽ;©•iÔÚ¼8Hºy]ÔFú³¾‹‘Ó9=ç»Ì¤X|Î~kÔí|ṑ&%ï5ÒVé’Ö’Þ<]l,Î@¯¬±¬RŽJ)ÝG¿ÎhkÏIm­v~±X/¯ {µXÝõís:AÖ"g -aÍDŽÃ'ö£Ádõ°¯@Îóq„(4ßwCV¦¥—û;‹Hs¼ñmã6LîY ÃÚr•¤{_}ˆ’½sèz¥þu¶é=£_ü¶¸S¤3,Òaõ]eÃS7<=ÎÐØ#[úe‹)M¿pÔ®oÐ{Qušu±p ÷LRS]o&Lö Ý«¼8f‹@æP1 gȘ빷yºðÂeoŒiRÒ.,OnƘ‡ NynÐòÜoÿ÷l§…Gu!ŸýŸ -°WUô)-nû®N¯r.~»¿8f:fDLOÑé[úì•Æ,GHÔÞWÌQE1•¾!]¢EgGL—îgX 9‡nÿM ЙڣYº9µfn¼j£\ÛX¤ó/1—$ Áñ’å™j²gèþœC+:ê,ê‰Ô3¤Õ YLÍÇ\Ÿ¾Haõ<'ª.c²ÌœI9a:t¡ªí¾eE‡ÍsÔ©8Ïû¢´†»D1{hL¢âΈé‚Ë9S³òŒ<ßÝæô"£¸LO¹Õ˜,Ú8MßBxNcr–+5•QY ƒ(*î¨Ïº@A\ž.Ä"£(Î/æF9óØ…~Ôü[%QÈäA>]‹Æ¿šµï8 寇÷¾Î-’ÉÖ÷ꔽÄûc{ùuŒ¸§v8½~ÜÄvŠø+‘‡õž“傥ߓ‰Õׇ}îâLnùò©ÄÐ#—“ën!弌÷KŒ~æ*’7 )ýÛÖm:ø"%-ë *ûáíîÆI–ß6%ëiÚ¾q\„¡¼Ñ'tŸ+¦FDèÁz5 —qÁ­”¼Ž¾r%iŠ™-[‹¦ °*ÂG–(NÌGíŸ=?’•ßFþÀwó£çVóäqÀ€^¢ !M»CÂ8¥&[¬O ØŸ»’r”FPM/a\lœ,¦7Ú¢£ ÏO8SqÆ(·;t‹\I¶%çsv"¥äõ¬‡]Ä-`g¹Lú€ðù•–p!+‰!u…É›ly­9¡K".ëÀsE,а -#p¦‡ËÞ²\³B‡ô-ÎÄ‘ë”ãÎÈ Þ‚>kÂèæ@7'rà|nG°¬W©PÖ¢€Æ+b?>±àb¼x€Èo€3“4?¼÷u.ĵ®ïU©6Ž÷ÇöòëqOìpzý¸‰]ã8× ¥Rn­Þ‘b²Ü°ô‹†Q_ö¹‹[ÄÐZýùiC—ËÉu·r^Æû%F?sÉΛ…•þmë6|Ñ’–up•ýðvw‘'zV¦l†¤ŸÈC€[ÛÞ´iù…Û5ã…‚ý ŒkzÀøÄí?W UŻƗû~4?îà»ek7džô§ ™ƒ×pkTeL”Ù…¶KäwÚê˜3æIŒ¶jFÛÙö(ȳ¤»2§¦iT•ùs%ž­ÊØfgÕ§Dmš{Áã[¨Öº•á3jŠU¯þ„LÙ]Ç eÖqö™Ÿs`W‹«‡3t%Û=œ¿sÂ2ž‰Ë?À8lÂå<ºg.6ö Ù³Ü™Rõqð‡¸zˆéÈakÓ…Š¥±ͯ‡Ö¨Ê˜*³‹JÀÎ 0ÃQ+·ß£2Š»?MF%œwðíšÆi"Ãñ§Ê-Úf¡¬w݇…Xï}™+eoëk5ŠË¾ÿç¡^~#ê)BN¯7‘ ‡×´ÂÄMî­„ÉrÃÒ/ÿoq &·|y-$.—“ën!å¼\߯gúÿ<¹nRú·­Ût>ðEJZÖAUöÃÛÝE²±Ç¯[ˆkÞrSy¢ ôLî<&æ´Rpn”8A9ÿ+èU‘†­«d)a3Tì]CˆŸ1µìf¢ÿä…´=~ùÓ€gjî¨z®ÅÇŸs‰p¹‚jKËe,ÑéõÜ…Rî0ÏQ9_&È4‰”rX +æ¸F1 œ+1{ƒóL\øwwè!Š rî‰jÊ£;Ÿ^])o¥ù”Œ«"²Ý‚Ž*ç^¨Y+ˆÐJôù™ L{ ¶õg‰hÒnáÎrJEŸáÍ&¢+è´B]Hr+tþ47ªê†Ç8p}«9,éÎ$l£9Ÿ¾@­"«¹¶4ªùüœ;r…º‚!O)y!/ê7ÐY(åvxïë…Ð|}¯Fœ=Þ#ØË¯cÄ=E°Ãéõã:v~ΚV˜¬Ü¿ÉrÅÒoÊÄjw¸“[¾¼Žïr9¹îVÎËõýz¦ñÏ“ëfa¥ÛºMç_¬¤e\ÅÕÞîî¡ÕËâ¦›ÉØ­çýy¯¡{i8üWpîd‰ÆÜ]€‡(püáï)‹7*µŒÀ§/ÏX4uÀ]ÑÈ cw ˃ò€Ê¢¬˜¬+µMS:'òBÅGÎç/ÑB13"¹éëdQm£kÙŸóïPP§X¨ùƒV„P¡ÐéRJL\ˆé©Š®¡Šu´Ši,-°×çºô% -Àº3yö1aæÏtØAT¨™Ú2½žOs°Éœ7“Ño( °ž[#çí:ªYü¡üOPÎü@ϧŽ<É©ÕöÆ÷—Äá2ê`:ÌÁWŠÎ?Ú­ù•Ec*c–Ï6Up nHb—+¨I –=!ɹðEKZÖAVöÃÛÝE”UW˻غvSPíëçm{ÔwøÑ죑þ ñm7y9ßM|¯ ·\v)© 軩ÁU¶ì¥ÿ†õÿg -¸@Wj…ÇLÿþ­Ð8gÝ¡ïµë¾÷”L/¹m™»99/Áy•'húîÐca½þ°þLÖzÉ¶Ë óÓKÿÂxn»Ì2O·^?œ?›sØ>Z‚ñ²¥è³j ª,Z£juË1N ={d:o vsZ‹„ÿßEz{½C®¤H­’¹@š]6+xˆmu5ûV‰N©.®ñO>fúôé‚ÜGsÈbƒT` \¤‘0-æe~“Š;zh´ÐQ[æE Q”-›;§² N¢.TKcH]Á•Ä`]ŒG›;}ºD‰rÎ -¨-ÉÉx Æ«<øþ¢ˆš,^(yF²|ç-Ë–žÏÙC¡ÝyËå¬Ç$ -«/Ð ƒÆzêFQB™šÉ-ë#GˆÎ{_g¡\××ÊT­¿>F¬—_Ç{ŠX‡ÓëÇ+­OZV©È½£3©ýQR<˜X}}Øç.nÁä–/Ÿ†¹rù/ûU“Ü:¯¢ | ¹Î|„,“ÊÆ÷¯èÇŠezÆùÞ(zì”W"™jÂFc}sÞMYY–~>ÅßÙ\ãÍ_›·ayá++aZ{®’ øÄÍô4:Jn;_·ncîBhvÄnÄ^XH û7@÷ÖÁr„þî\ .Ã)´Î!å> ÄåL¯ˆJmF÷ââ5– -Hsdiæy¡¤Ñ¡[& Ü -c÷%Šk\*©(`Æ]³Õßâ—àòw2žÈUõNÆ»®ðFÔ?Y -inSÞ}çW—ˆzÜ÷Qý­W§Åòhú7,ÿVοýÂÚ÷a+•šäI|ηef-ôî²(F -pQÄå9®Q4âr8BΕœè ’é™2 Ê"°å‚¦ ¨é2*v8‚ºÔÕJ‰3$ôT(i4H¦Û.`MÇͺeJµ¶ªþ³îE®‘˹|Ó½(éܧ<’¹”˜CÝ -£ke©ÃǸ£ê~:æQˆÆó“‡zy=yÔ³‡ÎoŸ79©lÐ(Ë- •§ æP†¢Ï“6?ô²ó;82/¼Ë_=ÃÆë›ónÊɲôó)ÆøÎU$]6SNƯÍÛ°¼ð•“0­=SɆ÷Í=„¢¦:2­¥î¶_¯À³ Á# 는äNȪž.ÐþšÌÝËC -GKïÿ18® $鎵Ûøî\ñœ£¹ÒºkHž»›®ˆÒâz^J¤ ¬ºD7v‹Áà9fÆ‘•XÍ“rëZÈ¢SÞ¥˜»O,©¶îÁ¶d×Dn5 ëÈÝ_)˜bB7baÆ“t/Ò`3çÀtu°ÝÈ%=ÕŠéA ¬?GsdY)ÉZ«ˆ1X B·è.WZ—Û?]ŒJ -Ï÷oCÏúˆŽ«‹…bÍ*t‹_n€ËSÐÿ%Y -… h[`Yž½qËrQ„-ÐL¥¤G¨Ï…+`É‚ª,Z¨„„Ù†”‚iEE&‹^—ªFšxK—BZÒð1.%‘‰ÌÇì·Ì~|òP/¯'zöPÃùíó&)%i4ûçMo+H¹Œìßþ'RôÞ==ô²óKD2Më_Ù£ðúæ¼›’²,çóù«Hºl¦¤Œ_›·ayá+)aZ;ÖdÃûæ"‰B 6i˜¥ÚjXÇÄ\¡»Šq9ÂíFÌ«¬g}87öšu­@¦ô*åU*C²Åm©æ¶F»íz+pÕ”Z² ÷¾¡ô¼ý¡ïÖBG(ÐX"”Eú tQÒˆÙˆ€ùÚC-R­ñÑ(ÐgÊWõ¡7·Dïž.À²èL‡u.%øçyn$0GQà¬×1B›õŸU¹F.[äòMu5º…"—#Úÿþ“(pE6ºÀºštc²T!“nBâ“ 0ûE\ºxÖYRK€¬{'-E[ÛÕ?Ó¡%½ÖX¡g­õ‘K߃é?a¼€ Rjíî'ý0uF`ºU©üœŽŽÍz!­GŒ¤{7Ò:þoKôŸ.×Àe \¾í`i^)Xn@ÿdÎ9ž  ©¸7WÍÄiÜe²ãJ‰¯§SöÊüøäq^^Oòìq†óÛçMFÌX&3Z±U.ã#{ªþ‰Åæ‡^v~ƒH¦iý+¯oλ)#ËÒϧã;›€k¼ùkó6,/|e$LkÏ“; ÷ÍE2…èAGéå{£cǬ¼@÷ß •|„CÚº‹˜¨>cº2w+tŸÀÒ¬ÿ1òÀ/Yiõ.æþ(Ñ:vêy¿ç…’äÖN#ð¼ºÑøßÀ·øå¸üàJÙÍ/]Ö§w"®E‘üÑo¨PwrAÚ±¡BQ=—ûêšµ…ÞÎÍ-r|T¢]ª °q1&Í‚iÑŠi«.šŽ*Œ–HøŽ0"ä¼r|½O¦W²„،ǢXâ9ß8p+2»C mAõ‹À„AžŒ -•P’ëÀ>¶ÓåÙIÿÏÅ“þ¤ËtÉþ?µ<’Å^s:^t¸ŠîL±EÞ}…&%Ë5Çu\IRmÅ€æÀYwè9ˆ5Ðÿù¾ÿX[¢x£h¢¬,ƒªºÏM[Ÿëü©:|ŒK $%ÍÇÌd¥øùÉc½¼ž<ìÙc ç·Ï›¬huû9vŠb|ÛŸÕOü‘Ç›F¯1›zÙù-"™gõòW&6^ßœwSV–¥ŸO1Æw®"é²™²2~mކ兯¬„ií¹J6¼ß\¤&æ© j­GKj†žÇß—±ÿO—¬ŸÌ#-Ð+…z§ïu¬À¿!çŒæ¨×¤ç ÚÞ -ünÛëx¥¤zDÆw4wk/R‘z×¾_\žL?žéÐtUt`ºCW"â|áY÷£…Þ?ÓaK´‰0¤ö.F%j›õ?F~Xk ¬é.Q`蕊p„œu%‹wlWÿÂhTk=‚.?´ç¼Ìay¨5AòüitÎy¡s«-à[ür\þðX³@õº%’Ê-aúg:n'‚E+i8jÊ.Ý–þ3ë¶”²H[œ]»­TJt²8tÛV§i>ÆeÌt>‘¸ŽÇ'ôòzò g4œß>7•”=Ó™Â- •m|äñž‘¢ØüÐËÎïýóiý+¯oλ)'ËÒÏ˰¼³ ¸Æ›¿6oÃòÂWN´öL%Þo.R´L÷ŠSM_¸ÇV¾:îu r×/oÒPÕtAî,+ù/êIÀÜ®Ñò£i±G®ø“³µÕÙ±‰¾Ôgq_T[–÷Î`=ÌzgféŸã¸È]É“›#<® ÖfqVPý;§#/)¶èg™"×Àe \~¿ªTÈÚŒ±Ö¦ù e€¸Qµ×§¸Z:µåH9i«„G­M£*õ ßÛ©x×,œ =hu:dzò£9¢Çêt] !á°~€+˜ UQqãzÚÊ‚7ûd&Vkµ°cž¤(uPu)¼µX™Dòð1.9úºÌÇQ]5ÅÏOëåõäaÏk8¿}nB{;KU§Žì»É‰ry¼h¤è¿õöá·ˆdšÖcϬñúæ¼›²²,çóùM¤5Þüµy–¾²¦µç*Ùð~s«2ÿ¸KÄùqWàþãZ~䉺êÐè.‘ýw„î¼Ï‰oy@—@!†¶itl¡¯è¢‡ºÚÔ‰¢ÎD®-VjK—dñœ‡Ú}Bÿá-òPÑ»„î㜫zkö‡¾™BÕxÖE€‹:gi»Ñþmô)/W†1SHŠ8_x4>D\ö÷º•$ÜÀt/R µµéÝÓ[ÐaÛh¡ckÔ»oFØt‰¥0$]*iFìEÐó(pEu]Èm¬BEª ªB&ÛU -¢ÃǸäD1Ù| ÅèÇ'ôòzò g4œß>7½±™|ú%5ß’P–þÈã-#EŸj¦‡^v~— Më_™Øx}sÞMY–~>Å߹ФËfJÉøµy–¾r¦µ'ʯù~s‹U§‹H¼CɻմþÂ{USþ“jZ¡û?i•o¹Œo!ÿûU“œH¯÷,ÕJZûÁK;¼ñý#^u7nb¦ñ| £t°jµ@"•¤²²¾á`ö'ö nä¿ÕʶTZiW–»áT®jWÖŒÿÄù߀î-œ:¬Ò‘½…/%Òá‡ÊKnWvƒyKäÕ¾‚\PJÅQsKjÖ+}xo®•J»Gº½™K+ ³ -GcÊM¶ñ;ЯrÄkXÿÉÐq«?²»`v—àÜÕ*$ç\ZŸqJhÚB½žî1ðžq/.C]Õúâ`ŠÈ¬g’ܶ"×У›uÅóØÀ™SoŒÃ×PØR›Z‚qóÔûÊðÀójÏ8FÂLŠØõX.¨¬»áfEÜÀ,är„'.j»R25–r݈ã0oÓÃ9K]¦³QõóûØëéyÛ~Ä^»—÷“­iʼ°Â>=l:il.~öˆSdò¢ë4;¯+—·™•Ã0æëî°æd§u¿å×–×tXðÅJšÇÁ•úîõì A‘,%;ÙùA.Ù+ðLI*Psœsr@àB­h/•a-l·I¥/ã37Ÿ PóuÄxr¨šq„\³ÝÃVn="Fî¡#°ž¨–ÞYg2S½ô‡-©%»â…[a.¥$¨Öë'$E©¼e‹ß~ç×xËOÖù£ˆþƒZ[cPè Ý4ç mѣݿ¡r®uún||•ÃöÐ*-CÀ½S“¬ ú¸ Ûb‰¾¢”ÔsŽ·`û -dÒ™’gDäî‘έOçÐMIRÄþwÈö‚Ú!½ ÀŒƒOdœ©±È-MÀYʧjÑ#½MÃlá—ËlÎäj1½­žž÷±ëGlµûxy?Þ¹&öù¯,žÏ3h‰âaÓ13eñ³Gœ!~¦è:}óºry›99 c¾îkNvZ÷[~myM‡_œ¤yL©ï^ÏÎažsDHrêƨšü»Ãiv7ÙŒ£#õŒÇÐÙ¼ï¼ÄË9ì kŒ“/Ž·i;D±D¦óøçQÁ’õ cܦë¢LÍx«[Rçîä"½\Æmtå’*d eªé‚-ޝóø2—-?U,ÀÐam¶A'—’{µ ýá‹"ú"ª%÷MçBê 5sÁ*Ö]2©jߊ"pŽ\‹ŠäÞ ã’.TÔõ‚ ][ ¼z:lO{‹ hcÔŒ{±@kª[Ї¼¢Á:»õéeüXé°MtÔõÚ«ÁЭb[$Tsíµ2>pXGdÊÌõÀo;•„/Å9ÏÉ‹5ªOm%tïu÷6 ³‘eY¦s´}b1¿­žž÷±ëGlµûxy?Ù9OàëòoJ9¿ø%>ЇMÇÌñ?{ÄÂ芮Óbæuåò6SrÆü¼xZs²ÓºßòkËk:,ø"%Íã`J}÷zvm¥Í÷©Ê…j7¬¬À•ª–¾ ¸Ú­ÐCŸÅç>­À9ÔV šÝ#[’žs§œúˆÀ9SJv$}{è¬Ë–» Õ¿à;zÔf•-¥ɹ6*ÅúpÙÓ‰@z:°12—{Èåö¬GÆ÷|Ö¿Kú6ç"m‹óQÝVéBÙ­/Gr©šGûZjïç¥øŠJ€»Ý%tFÕzvÆLŒÀÐ%ÒKÙº¦è7 ¬Ã³.$—Ì òSîå ¹œ ÿð¿ÑØÁvG°q7G~‘¾’þ1å±lC׸ bí2åÒ¶òâ˜)=Sïu>þ…uXàL"mËGUyñ|¤x{g›a‡urà6Î(eQ,KLšëœ½è)ôˆ1ÕvoÓ0>[f…,}ûß>vzzÞǦ±ÓîãåýdcŽ%VÏe¢>㤰O›Î?õïôgÈ uš‰×•ËÛÌÉaóuwXs²ÓºßòkËk:,øâ$Íã`J}÷zvåøÍ9GÎwhn¦Ëz$iß,ÕcBkyëJ ɳ9ðçVXll….T‹7H¹X$U<ŽX7©'$—8‚\$¶ã{(ýöþ,`Î9U‡„\Ž€ÓË”…³’³nT5:-¼Ì}'Dà°Å¸©SJÒúø”'2ÇLèÀ½¨séµ2>pX_Ž[|þ/ O{÷®8¾Ð™¤ZY -¨P-ŽÎYvF%)œAYO¥nA“õG=ú7ÐÅ¥O^Z‡öuÐC(©öJ?¿({oŒãÏÄ (`ÃZb&iµËßU¹#—Säru{Q½õbÁà6r¡]ÑL­x àFìgn>ɺ{›†JµÉ2+T<&÷±ÑÓó>öüˆv/ï'û -夲ÈÛùÕ/ÁUp¸jY*äõÌy+ÛŽI¹Rò{ X"~ W(_¨ú*gj& º‡µÜƒôÛëÙZPí8àâRÚÅÁ‡- ¸"Çõr¥êÚ÷·Ë£ôÿ€lÛ*IÓžñS±|GæWyË5Ð7ež©µ á|à*Tsû¼¡|Z‰2i­»·ihÑuè2«¤¥Äì>vzzÞǦ±ÓîãåýŒ“fÖæ¿3‹žßýÂ>=l:gŽ/”åáŸoq†L^tý”ƒb^W.o3'‡aÌ×ÝaÍÑN~x™9™~myM‡_œ¤yL©ï^Ob´ˆÒÙ¶Dù‹ëTþ à•ÿüÏ.¸#ù -²|?_\ú· •¬Ô?LEÿµ„¤Ro¸WùÖEÔWIä¿øÖ'ÛšZ¯‘áqG“x%QÕ h$L„=8f#±¨hõe]"dÇ»ŽB’´oÿö/PówÍïW9ùuÖ *y°ý—Ø4?#ËÖS=8jHª%¼ËnãumTü.¸oì"LU2`ÔF¬¨úæË8xµ)—käàˆ‰²Ü ÚŸ’³AÚ¦m+ij½º‡× f“À¦°HeD‘(Y©ͺÄþÏ~$·®ãÀ«øA¹Î|„,“ÊÆ÷¯HrKôûÊdd=ö¯D1!Õ„›Ý ‹ ÞYJP›IÔÜŠið¨õFÍ®˜±—%fÖ:N÷¸!{œDœïe÷ä.nðÒâþ5ì'Eþ!“¨¢#»·eþ†F‘LÊmqÎuî²¶w¦è3Ã0Suî³~ RòÙ³ïôòzöM/¾Óéòö¹*H)þ5IÜ\vexÈpN&ö–p|Ø×›ŸÉ4Ï-Î+§·±&×á4?­Yl8ï7}mz ×ß5 ãØ+•íô¾8ˆG)ãAJíÛq[òo€ŽÖTÍÀ=ÁÕ#‚Ðþ%W$‘,îZ·ô·«žð¦è®V-ÏøâÞbK˜n½_[2å8@nî4,ýãNT¥´q´àF©læÿ>Q¨–ˆH–HE P§ˆ_ñDšµÞ¿»>lÍC"pÒ‚²mùgŸ´FÈÌ’É’2Y¬R.åà‚§[ài <ýØ>smëÀqàÄÂV0þý%¶‚M,À&pa¯¨°´Ð®(ª¥·îhŸ]…RÎm6ߟ,°ж"SŽÃb¸ -lE°¹¸æFÁã¹P’M#êSÍ3E­ º%m«Þ¿œÃv™¤„)-hÞ/¤ì¤©X^ÖÜùcvú†ì—Àÿmœf¦ØçϾ×ËëÙ·½ø^§ËÛçª&%x“5æþÈkj,ÃC†ƒòÐŽ­~ -&Ó¢-Ú›èJK+бņ%­¸ xh"5àY‘RNŠš[8ŶæêœÅÑ­®¨×¢ b' -LôJ!+&tñAF¤‹R©Ú^Ñþ½h„#2ד,7Àc°êD°ÝE&© ³;wh«Þ¿ºÀÇã¹:½UFE¯Q–Ͻý’Mýíº‘Ë%Xº»B¯¸U×Á=ÚKŠ}Iº¸ i<ýy1âÂmÿÕqFºa‹˜T¤ÖqæŠÿoK–ÇO·ÀÓxú!p¡ ¾‘,À6êƒT[UÜŸ.OA_T=—|„>"ë‚ê pêJ”jÚ’Æ>¡3]HXÚôÒP²¨-]~]òÃ*®”cRH²$*ÙZ²ô_s¡t‡+ÏÔõ`A—œ[èl©Z²æÀ a¡¨9ǰ•¹úT`/R•¶êê4`šl[+‹ÀÚÍs þãi‹RmïÏóý]4ûÞr¾ÄŸVÀÓß*ù&ÉŸ±e÷Ø-¶4G¨:¬´Àæ-Ø Š\bL¼PŠyœ)znü†®ó5O³‰,«Ïž}£—׳ïyñN—·Ïž…Ô³ÛÀÀuâ4–á!Ã)™Ø›™ña_o~&Ó<ÿ5Ú1¯œÞÆŠ\‡Óü´f±á¼ßôµé5\|W$Œc¯S¶Óûê5¤8$²ü±ëʇþ´ùG?í Ý;-ò§€±Äüà ½D¾ÜÉÃùɨkàUcK–_så÷º›¤»7À“¶LÙŸäû#¯Ä!ýQzÁ•ÿ!-¡oÞÏB%ä|Í÷—`¢ƒW*Ê ©‰° - X•ŒƒAš°º0·lAp"# ¥ÍŠwTIôNÕ +ãóŽ~G3UÖ#ýòRñ¢ý‘ -¢mw±x„ª‹RÔ¸Uõ^¡ç.ai«Þs„«éB…s›»ú/9,p`…­¹j*€a6å>¥üp)îC¡±Ô -Ht`Mž)kHªÀºh`ITôŽª "0Y"K üYóÖÑøs.ìÐ EÞ"gò} £LIê4™(šOž}›—׳ïxñmN—·ÏÅ®•¤ä2ÅÏÐDc2’‰“­~&ÓgÅu¿úìÙwzy=û¦ßétyû\lÌ”“'Ïá -ùæk&j´á!Ã9ýËÉV?ƒÝ×MGŠ–æ•ÓÛX“ëÐçËéºf±Ó¼ßôµé5\|×$Œc¯†ÿŽï«ƒøo*×î¥àHÁŒ» ‡jw,3t£PïôºÝÞMÍýJfèJ¡¸"àñ–,¨Â[pw3‰[áhÛù1/1AêJ¡ªÚƺþi.TBlcøgÕ`7Ö„ -k„$‹7/÷|¨ã¾ëF[8¤Vû§K!µº•û¤ 0ÓÍ;"5QP¢+Åt§æ—ÿï&ø†VJµlAï5¡Çl­"T¸/•t%‰ÜR½{IW&ýûUݶ÷=…O€ ëÁGÈ2yÙøþï}HrËt«´•ô9}é¢"“ÁÙÁº¸}ÍqÙ€µ4ªÞÒ’Åx0ÀŠg*!¶G0ÿB%¶Âò­‰»j"¦õûýT‹ -IØšWbÿ·€U±ú@1eÑHJ¬:ì%U -¥¶Âø |G+*¬-UºfyŒ^­A[jˆKE÷¿q:½ ÃD%Û´*¤I|õì'==ŸýЋŸtº¼¼/Ž$êç 5I–îexäá=™XìîáïÀdšæåHÑdÞ9ÍÆš\‡¾>nö [ôcç4k2|Û4 × Ÿ5 ãØ+•ìôz÷"\t‡dgeí·íJ|gäÞÁÄÚöŒÓr†®d5¶ÍW·RpÃÉÈ5>€ëxÅŽhw÷๭x5Ò‘>ˆÓÛkËöЫo±)‹nylˆÚ’)snõ|û+ú»%_¯¸¤FÔÅ‹G!i)Ë¡Í_ó!²¸GÕsLU7£.Š@˜B©®šQ¯ÐQ» TQWïëWtk5Ò”’+Ð> -›Ñ•bL€7ÔkÌZ+êÿŠÂV׆€WõØÂ߉ë`踄Ñ@ $tä}Ma«®~MkÌ•T"pó  -Ïÿ˜+?ý^þ‰–NÉjl½¨¶ÀÒÚ‡j<ćöɹU—þé‚ëýÊÄõˆ˜»±ƒz>¯üà†öÏ¥PâZ;×%Wr&±Uè©"gŽ#ÍCÒå eJ¬§·a˜Iýãj¸ðöãì==ŸýÌ‹tº¼¼/Îòæ°þìæ{ç8<òðš~¿üïãÃ>fþ -L¦iþk¤h2ïœfcI®Ãi}Ú³8p>oú¶i®>KƱ*ÙéõîE²D­º†À8B0w«NrðÍîÓMÍ-?è»:¾OÐù-ÚVº†É9n€ç"@^=÷þÅl,]EÒz¡¤¡­9Ï=MÇŠÞ?Ï‚ç.ŠYô/G»A%DHEÖ#‘ÕðÞ@Oö@]úg:jBwYŒ%µÚ‚Ð+o¹i®Ãq©üšæ²@.wÈåÿtÐ’#_PN©•D#öÐB¥0ª‡b&t¯yÚª"BÍ•‚åÖE˜®$ÙÚ¾h_ºÈ-rY"—/ c-Ú*:FÍÍl úLß>@C¯l˜v„ªéÊÕ#¥TÓG+…[3B€Ž«.À-†Ç¥–ë ä²@.wÈeü03*d‰ÛĈ Œ°)ÝÈCzFä96tÌìÛ¹‹²>Ж?¾¡‡‰b%‹’ µ¥—=x^"ºÄ;AgJþ«¿ ÃLêWEòo?Î~ÐÓóÙϼøA§ËËûâ\ÿ‹%I%Üß6<òðšL×&Ó4/Çñ[?vN³±$ס¯—ÓuÏâ¤ù¼éÛ¦i¸nø,IÇ^¨d§×»IÙÊHËš€®Ó nµ= pŸ´–±ÞSª›»×I9"íÝ¿{ zW ãz±ÐBßÞ¨7ÓÞº§éð ×uŽfàê; ª ¸©yI¡•EèÞîŠBu3òè™T ±è./¹ -dÕº°¶- t`Q÷øŒ(êF&“.™¬2¤¾àŠ:°“:ôX´m꺿£Ê”,%<àß ÆÿâE•˜­å9ÂÅÍ].é9Èšõ I92$aŠǘ\¯þ!…tR`®#ëz¡¬©êûƹE.KäòÅmHAÊZ‚Ùzü]¦ÇXqs£Kc(v„ªoO˜J…ƒ4ÐÿùQÀ5«®ÙQ¯L‡Õ%IÚv¥U–F¥TR›Õ»¿¤À­rfŽ^…8•£ãîW×¼¿šã!Ù…]óRÙ%¾žÞ†a¦šë´ê¯ªÃêÙOzz>û¡?étyy_œ‰ý¿±"Ê÷9Tý+ý‘‡—dÿ Nû˜ù0™›úÇ_#E“yç4 rNëÓž›“ì:+2|Û4 × Ÿ% ãØë”ìôz÷RÁp›RÉ­áu|›> {/ á„´™[ÏU÷˜a±…Þm̘»4´GaKJ”ìn€iÛÆŽƒ|Éå1KÛñîkwr‹\–Èå×vw£ææ~‡ãÓ3p£jµ Â’­¶íKÿ,G%‹‡:Žåèë¹ËqÖKbŽÖBï¿æF%qËòî¯'¬{:ðZ1I^IR9¢£øŽ·75×È­}ÔÖ@xäÐ(YJÕ6&~W|71dÆGTü[o"KÖr„ƒîáýAdùï°åKbþä«lAm*¼äôˆÐ²=[€knl­ó„ôÖâV—7Ô=4XËs9çÜVÀAs!UÁ$KñÉÑÒ"·Èe‰\¾,-%§6p!H‹Ÿ]ˆ-{=Gk¡woDÈÀ«ØZRì5µd)˜ªX©T=¢›Ûš.•RÉÚâªÈZ['B ‹QIÜÆÜ?.úQWÔé9´5ï8`3—¨Æ’ÇÆBøÎŠØ—êémfŠÞÇU¡šÕWÏ~ÒÓóÙ½øI§ËËûâ`¥ žš†S­Þ×D£ <¼§·‘õ–&óR~,G óÎi6Öä:ôõrºîYœ4Ÿ7}Û4 × Ÿ5 ãØ+•ìôz÷"ÿpü›v£3ôòØ8º½PÀ•!˜g§?6s¼™,ÕÏŽî½þ"eÜ\Їô^›ÓÅ¡?É=j¾9]Üór L÷KÊ¢]ÿD/chƒ]Ç™ô¦ä"&[ü¸ ÇIÏYt\äÀL÷¢—$kúÒ¥‘ª(3â%6RØÈ¨CÃW!55¼À¶tNòjõˆöbûi¡A–=RskEûÒ\n˸|‘æLIµÞ?Íjª’æ…R]óþ.‘;[ŠEL -$%»ŸCÕs¿£¡dÄÜHs[úÇÍ$˜4ÇÕsTQte‘[àlѨ€Êâ5Ï&ˆ4÷’Ç0ÙR©$Yƒ¾EÕ·¿£…LôDUw3âŠyEƒDÐ+*9·Ðûw"Tà©Ä°[º¼žNó$¬¨ÿšâЏ¯®È-pY—_ëJ¦’“Œ\±|×U0%N§·a˜Ç–c\MSôÕ³Ÿôô|öC/~Òéòò~Wê‰yø!k´û‚h´á‘‡—t!»{ø°[Kš—#E“yç4 rúz9]÷,NšÏ›¾mš†ë†Ï’„qìuJvz]¼‡QÿT…JØÄ¦ùö.ñü»ò¶²;ãfŠ*iø:î¿Q€w  a-Œö‡Û ïŽQñxIÃj½;ÄÍ”¥õ¸ß\¾ÕÛÝa{¨(ÙÚPÑ=îJSÙ÷ïÂ^G‡wۙܛ¥‰rûd‹¸ì¥tv»*œxé­¦Ýy²½‚š¥ã.ÚÂÞQLþ"*ß\Ê*Ü&ª?åÈaRé“FRt-v3{fÍÚj±;”?ÐÇmRâš»w 3»âRwÇý»°×È)) Âf@¡bë”}Û»K·W¼âI7nrM %¨wÒ‹¥eIßÕÆäˆû ×Ý…dj[\Í€ - “[N# j§€j“Ž›cjYÒwtÍæ,áÖnúFí²Í5µ€#܆€BQk‹û›Ý»°Û(ÇU–tˆS¹+IhÜvÔVc¸»W’@¹æ6Mõ]m¬öFÉJàQµÙlYk¦TãémfªjÓj¢äŸ{ûqö“žžÏ~èÅO:]^ÞïÊQYËÏ„Uc9ÔákXìîáïÀdšæåHÑdÞ9ÍÆ’\‡Óú´gØ¢;§ÉX“áÛ¦i¸nø¬IÇ^©ôûU“Ü8¯÷s -_à!ä:GÈf™T6¹Õƒ$G±LM)ó=ÛûU²ÑODªÕn4~zÝ|H%.<QªŒ2œAÇ•Šf˜©õ ¶5A)üOЙ¤îÌ~w-— e Z¾Z¨9+L|ø,ÆJmªf,„;eí¹Þ`– f¹Â,w°=õÚ'ž±m/š‚ NàVuŒ©É˽AßÚA¢%מëÁ/ØÎÎ}C»™˜ª§‘I3¢<4õfhªCÜz¯sÈC´ Æ&ÍÜ{õà}Q!A¼Þ}ðº¹@f†ˆPÒ‚—A±48Á”v]S20aÒ’ð™Fյ¥T¼.9(q¹·Üvˆ:UFu¢RüÈ@†ã´3‚ækÐat mkêQÝg‚jõÚ[öÐÞ*ëÈ!­=´<@c*fzb’\áT jÖÑÑÍôÇ­àÖ˜Ù)†/;_×1Ë0 Û»X º…œe«&Ózz›N q¼y¾«4ý,o¿^b§§ç—Øô#v:}ü~¿â£j.Ë Ä~m«%×é`©M¯añ«C|ÇïoëíEÖ•ËÕLÉùt¹¿¬™–”Ï•ËÅÌÉô¶å2|q’æó`Jýôºùi:->÷–Ô×јÅÚ«¢Äžu¦¤v”{Æ)þ·RJzäµâÎÒîÍvxm#V$ª¶!52E6‘>²Ú/p×¼ãÛë³&c;”Y]Ùá#¥ÁLYçˆCJ°Õj+@£ß…‘XÑŒW‘–¥G=:Ûˆ­&¸.ZZ4?Dij^¹Î‘²[Åc»îE¨ágƒxˆ‹¡µu#áÔk{pÔ¨îY‘æÔšõ¨×®”Ôú =¶FµèNg¾"ó¨ûÅ(–4¡ùH fç†::Ížù .ìT\„Òš3\9%¯.Œ4j¶F†oë¦]z• ®mÌ¡†‰%¡Y¶ÕØ:VÈÍG*áÅGJµ-Û<ýïô6²H†ó]¥Ú$î¾ÄNOÏ/±éGìtúøý~Eˆ—ªsÑh–ë¢)Ù§ƒ….ÿ3U•_â86°õv¦ì²®\®fJΧq¿žÎk6;­û-o[.ÓyÁ'i>¦ÔO¯¢)QâPÏ<ø¥vGùe/p ¥¤½k ;ÁȨ# s9rÛQRÛî(νm£‘âMñP'QŒ)j£T*?µ\¢–-jù&êx¦EË€«GÔn£d¦}E®mT•dÒz6ǃ!ÙØ1¢=~e³µÇ|ÑzÜý@3+¬°Í’¡¡ÎäjG­æ6¿{àkM­·©HH¶£"ÝKÏöè-2j²IÍp¸ƒïl­÷’Ñ´*™ª2œsƒj;ØnÎ}7¨wÃò]"½¶£ô: n!ËÜ×åਤÙz5“D£¼7ê{ä’⭯ɟŽóÃö…¸Ù߀0QMMðDÂdU¯½ƒÊ$§(!9šÌÄ­”›Ý]Þ÷ðn³8›!v¨IAZ i¸ÎÚöVËw¸¹Êém:-ľÜT*¹ÆÍ—Øèéù%öüˆN¿ß¯ø(Mó̇s.W|”ìÓÁR›ÞÂR–ƒ^Å'ĺbë3e—uår53r>A×\ìäç‹™’émËe:/ø¢$ÍçA”úéõêC"¯ÉlZ¥$³=ã6R×^£%gÔ™LJß’G-þ3êÈm^ú18꥟ÚÚHñgÅÍvä´Âއ› IÛU³~nu)áèˆ -)™+^«T6ªD؉d…‡;¶Óv$îq ©ìû±s”U2¯}Io%1{ìUåàVÂT[…k’J­t#Úð¨c$å̈ÊFÔH<´ÓÙÈÎ%îLyG#ÃÃNQ“|T“öv¥*æ÷îí÷wJÖ;÷Ø™$PATwõÒ«dlç¶F­j_“ƒk$“I%Sv4®C!žëQ=èÚ ™$QÉ\qÚ¦‘DI–”[$$Û˜#hcGu?&w>Él’LÆÓGCi;T¢m§·Ž2þê¼c~äQjl$[.a˶|“ì¶Þþ—ˆPÒZ`Pk•<+¤ðt4z•ÓÛtê$.Ë]‹Ð7_bŸ§ç—Øò#ö9}ü~ßl˱[k³£¶Ü®µdŸ“ΙXüêø£[oGѹ¬ —«™óérY³ÙiÝo~Ùr•ÎÏñ‘æó IýôzõµÇg(UûsÝ˦î×Ãù7µ‹Û-µË«Ï_u:ý*};mvÚü®ò­Ò_¡ 5×¾§m¡Ûº]A·¿‡n—Ðm ý¨_°î’{Öó?†žÆz$ ·¾'ßúß"?žãÙú§Áõý°óߊåOybnäÊ=ã:Cj;qsEÔ8SòÔGÏÛ»ùíÖúêŸòLVíÀïÑ@­YŸŒEHK;‚>fl‰ÄV 5qyÎ}â¿Hcri©Ÿ\8Ïaé­Ço¡ÀA±ýã˜;0p`Æ«ø#Êóö*Wʹ`yfɽ¯ X¢¨ôÍ| Uõ¾Ž/ŽíRï,ãΉ'ÑÍaÅ’H8cz9hFT*igx#¯½RƯMX¥$ª\q¥jµ—8@²FMÓ­š?@,·ïúšz#ŒB?SÜ¿¡ôœÊÑ÷7Jÿ–»|ú¡Ò•Ô¤1ë"ùˆõ!¡‡§kný:~Ê\Ž&¹[(ýC¨çŒÈ9S3íu~_àr \¶ÀåÛÀÍ­AÇgoÕØ²”B–ykæñM±çÛtê¤ñÏù®‘Åóöë%6zz~‰=?b£ÓÇï÷;‘à4Ü*¸›K˜o¦fb)ËÁ?¯â ˜<Ìâó¿Ñ%]Ö…ËÕÌÈùt¹¿¬Ùl¸î7¿l¹Jçç¿IóyФ~z½ú ¯uá'–ô‰tà>½B;Œu£BÏ{Ї­¦ àµæøÀÌ -]ÈRyÄp{è°r±xÈ!—µ»x [,¨¶˜¤X$ºØC¼åÖb‘ýòx -7×GŒ.7WyŒ‹¹p}|ÎaÅë+L²§òñŸb=$pd¾Óö|Wåñ”ó´_ ãsž‚óvÔ?o1RÜÃA½zŒó½ÖP¢¬×G(ýö¬3Lè9Œqg"Bð—¼sÇ÷ôFœ‹#l…• -ì(ÇñÌNn¸„—3fó·xh'Ÿ#p¸4†¹ÎÇwàÌkŠ™ê^غ=ð{x KBäx -U9lëgr@5’ùNy"Œq¶ßAÇ—‹EjÑŸÔò˜Ô"¢5€j9ù8S+rz›Njl1ß5š¾ôí×Kìôôü›~ÄN§ßï›…ÔÙæÖÜš¶+FJ®Óaú¦6âW‡ø„°Œbëí3]Ö…ËÕLÉùt¹¿¬™–”Ï•ËÅLI¼l¹Jçç¿Ióyð¤~z½ú ç¸9i²¶¤šü›bú–&¿óÓþI“+t&ɉ!¡gRážõaËi®±wF圫 NÛøà<Ú†”k“DйP´GjÕ:—T{#ÈeÞ¡Ê%rDÙÑùøÞ3c+ÈÒ·×yìÝå/­0i4ÿà4ó¤õ`xÙâ—+àò1b‰÷=hxàâ$æxÌq^vÿé@?Ik?˜¤•;¥ÄG¹|LÊ…”*to©Ïåã› ìüidÜ(®T ËÓ4÷ЇK¤-Ž?@±âÿ²_Éë:pÿNá äzŽ#d™T6¹Õ‡$G±L½¯Ì”íÇNÍJ-Q­v£Ñïƒ9ÿ1åßËBKË‹w‡~q¨¦ÜCGˆŠÀñœ=÷ñCéÉø(ž -½”‚é/Jl©\СYÏU{ÖÇ÷¦bÞGÎ+e…\¤°F¡4}\JG¶ÅL*ÜCŸs¡¤µ]à[ür\ <[²Sd\ÒæÛò,¤5ŸÞ¦ÓÌÔdYe#O}ûç9¶zúõ»~ÄV§—÷ÍÎJÒ"9Ï2”ë4g1öÆaRO#ÙÕ!>#x—u9SvY\®fJΧËúòÌf§u¿ùeËU:ßÿÅHšÏƒ§ø°×«¯0 šÍ‚nk@ƒÀ -¼DËp?pßþ-øŽ&ÿÍ~t ï5 [gò¬=ðñu®TSœ 2.Å3¤Ê…jFÔJÄ‹šzÊï \.˸|x³Ú‹üöÀoéVè1Z0e!Cv&€ƒôô:7œ+ÆÔ¥å¨÷É9SµÚ mÖ]8½V@Î ¹#j%GÎý ‹`çÀÐaC®QõÚÛ9‚µüˆ-X3ÏÄ,Æ"q³õ”ß>nÝ^-ÀÃ(p%n;À²9pÄE6—ÔÒQàS/B5ö~1jš’òBEq$*Äæ}ÆE¨Pب¨”¬é|LΙZìP'í¡_¡F<‡@Î…Š7Ä™8dëœhi'(ŽïåN)¥£þ9fu²ÒÜñ)ÏTç‡á€+•b}u œkà5gR×-ðø-Þð6²‘æe•3 OËϱÕÓ¯çØõ#¶:}¼¼ov.$Yxö«lrM‰eŸ“ä™Xl9øçU|“[YÍ”]Ö—«™“ói¬×Óù™‹ü|1s/[®Òùþ/JÒ|D©Ÿ^¯>£„—D×èŸ]yñ£)w¨(ºB—ø»&ôC—ôñº’HÃd=\LjFjÕ?A0BâùQú¬—lPÓîë)5 Œô8‡ Læ ¸RSÅK ¼ê¨ÍÈ­ -$t'KÒC_é…s{@ý]ʰÎc;Î}Ô_,NbÓq‡:qr•¾D G‘êéã› ¬£nT½:ä0'ÔÜ´²•Œ\!—ÿD+žˆ5Å­1}EI-õrA€œ[2ÕZÇ9!m;t|[TÊ\ËÄr{ÎZksX•÷P¦RÚQ+Ó¤)bTT*• Ø rD±{K¦’!½E¦›0cn¢*‚ ](¥ÖûËøEZȬa©qOùø½È( Ø0Çœùdž)yÝÎDÑXƒÆ·é”RÜ6/s&7‹õçØëé×slû{>^Þ7[e§?³X½v\Ë>¦/aâ°†í!>‚ã5e]Δ]Ö—«™”ói¬×Óù™ÍNë~óË–«t¾ÿ‹“4ŸSê§×«ÏÐ6ýµVQM7Òä'îJ¹vvÞOäJ†Çx˜€¦>IHÏÈ=¶Öòˆltkä¡Ï;Iz`çýB^ç¯FS92ãYíõysä…$+žT -Õ”%>źü‰ßÜ™jQ¨ ú‰<Âb†L+ÇÒ»ÊÀÓ<å…Tå(® ‰\‰³õÃÄ—ç£|´eªÌY%“5î|x¡dÊ¡p<ÜJÍ´Ç `)LͰ6ÿâ~,î8¦Ô7M€œâ”ÅÚý.^IEŽúÏ®‚:ºej€ÕéTZéùþÛ7ï¨p«;™ÀUŒª×~ˆpr%­:¸y.“„RJY¡B¹¶ŠÈy¡bùj¹µŸ;SôPHÎ+yËpÅwþL•ÔYªîd–ᇭN`GÄíüF…¤ZœœËQçR-BµV¨).‰·ÞȲm›P¦lvz›N¥¨yÕ¢[M«Ï±ÓÓ¯çØô#v:}¼¼o6vbñjò¬Ôχý.ÿL,¶üó*¾€É­¬¿—õÁåj&ä|ëít~æb'?_ÌŒÄË–«t¾ÿ‹‘4ŸMê§×«ÏPö:ÿ±ª¥·?Vä½Kiù_ýÈy‡ò¯ºSÍ¥áÓ -<ú´ï_,…DÔÈõ ]ZNëz4êêõÀÍÚÝ…`*KFêÔøEªÑ½vä22Å1˺dÌ-RICèœÇ¼ÁGÈÇìþÀ-4ÆÂ´£—á…-” dÌ¬Èæ€Í?€›fùÛüÙü1Û®ÆQ“yÏ®˜=È©©ôå9>ç°À•ZÕøíÅr{èBª;^>>çÀÓRëÛÐøœg’šú”ˆÐ?a£'y4ð[0ÞÈygB(OXÎaËÖ åœz•o€oñËpù¯œ\[­å)Tl'™ß^å÷€žÚN"°^¨²`ÎCÀé"”ÞÌ VèñÔ<ýÇö{o÷]—ØÎŽBÒPFpÁyJÔÀ%%ê!KTï¡X† -HЫp}|ΣkÈ#(¿‡Z@)‡5‹„‘ûh„`æeÌêä¹l‘ËÿOu?¡±¨ùe…Þ¦›ÿv¢»KÉΠñ¼VCL\°Q7¶Àv"ØTÉ­!ϤyÇVºQõú•ߺ÷¬#@/Tj3ÈÄU(%9š-ÆttÖw×}ý;z96Æ&hŒ…Ô³Bê¶‹jʽX8/TAÕ’©¶Ò«!ë¶Fag ¡*;-t|ÆJv† ‹Ð9¸ÿ[ɽ`ÆWºRm€Àšì¸ùðñÜUcL©¸5Äþ©$)õ–8>p!g5@àF­•¾ñ[œN5ùµç-pŽØém:µ˜8ʲZˆ#Ù¼ýó;=ýzŽM?b§ÓÇËûfãFi?õ¶’Òu†³xUÊô•LÔmñ ñvÓu9Sö¼>¹\ÍŒœO—õå™ÍNë~ËÛ–Ët~à‹“4ŸQê§×«ÉÖt.¦ÔJ_L7éºP®Ò÷ºÇ®OèÒ¦?ªX/Q51^hÝ|GëÃÚØ -ÜHY¯­Þå -·<´q\è<×>!hXæÀÐc|);™ÀÒƒuñÔ×(ë9õ -¼FúaÌ6š#{&Lkt*®È+UmGÐoa/·—z‰›J?;ŽŸ]<î݉ºãbsLs1â*}½/çr‰\¶Èå§‹¸ûéÑø” ¹zOùíß#+jõ£æ?dÌÕD©å>+@¡§È]€1WI²7ÀÅç¤QÒÚç­áÅÀ¥Aªw¬€M-ṄCèõ£TµˆrßA‡/Ðp6=ʸcªv ¹B¹JŸZä‚›ÏÃÿÇ~Õ$7ÎëÀýw -á€ëÁGÈ2©l|ÿª×’Å•‘Çc{ˆW³¥ éfO£ÑÀ¢Uz÷îâv uÎ Ålm í_)…4Ú3FÐG´Ðd{¾ÒgjRI{«OKdœÝ¦sÈå²1Ëu ÝÈ"ÂX ±•^0™f>ÆeCp?'£#¾pÖËëÇqÖp|û\±Rñ³#)!¨¬H‘¤ã£Œ06Y=p‰óò9QÒ´ìœß&RNK|ŸŽ÷Œ[ôkçü2‘2þÚüN¾I ÓT±ïç÷ˆâ|&– »ªsÈïwùÃαç@YÚˆq•‹mâÞQ¥ü©‹S^“:¤ö”o Órƒ\|—s!޵õßþ9WXX¼- mRþë”q½ÊHç*— »ÇtT$´ÆÒ½RtÜ!æqH<»1`üe[©Ä¡-Îîµâ¶ëC+ˆoëÜå£íe m}ÞŸóû˼ eÞ:½üå -UعîM»½B¯1¶q«ÿ"-TeC.ýÏd•ö~϶˜È$îhŸÐ %{Á¥WèšÃ32×ýãb!›6»dÝ­`˜BØHŒú(SL¹ ^> K>¡+þ8yL/Žåâ7§ë¸EZÖoFþ´vÄT“¶ÆèAç,ŽÞ?p!ak»hÿRqÜþ…‚rëæœEŒ,Õ=?ï“õJØa…:ºR æâAèJZE\²^(›xìE™ -×=Îû”‹ÇÚ†Åþ9÷š¸‹œ[à>ÄbjÏË#†"·ÍÈÝ<*)ãœÂW½~SÓð1.S!8Ïô5"ã¨âó'½¼pè' Ç·Ï'¦˜Çê/’òŠI6>Êxψ*Óù!_o¸C$^þ5AiÙ9¿Mœœ–ø>1î¹8p9oþµù5œ6|s¦5˜bÞ/.‚ Ç‹(þ›ýç~CGI™´ÓÀÍÈ~· lŽˆä8S,1º˘¨Kë¿ýsî¯çý?@¯džìQéL!{tTklw‘Ü·"EÈÓüŒÉñþƈXG0^°³Í^mÑ1t£bNݰðÉ:üŧ1:š(;…ŽÄ(^ŒBœBÏ$õörïFZHœú"„þu£¿| -])ü˜¿.ÊTÙ!áì5¶h¤±ç×¾ò;Œ_å+×@¿¢Zq)r¥"n9N¡CéÑ¥—3%÷þþ¼˜X¥—Y«rlûƒúôœYBöØû<«Ó`ž©x‡—(“FŸÆ¨Á3ëNý¥PÔ,OË#¬Ñmvᣧ $"†eÄ.»t&Î6|ŒË¨¤`qú3¦VÆ÷Îzy=àØ#ÎŽoŸ+V,$+B¡ÆµqIÒñQÆ›‚?(õò[DRáås¢¤iÙ9¿M¬œ–ønÃiϸE¿vÎ/+ã¯Í¯á´á›•0­Áëð~q‘DEç¾²£)f>þç–gxÁÝt¹@GIŲ—5ºjgÐcm¦î_.JVCë¿Ýö¼3[ÉÙ£XæTÂÓÓÝ= #ÝEŽ­\<¸ 2µG q2W£ÀôPƒÏVÄHÔÚ²Þ¿\Þ’}Ê¥PIæ*QŸ)]·¦˜þåR‰A¼ÃÜ‚¹±ŸYQ°%U‡bqrR²½¬xgyç9¤Fty¼BžÿV#xŸÊT¥¸Ì--DrËzÿ%*´Õ@‹;ŸãΗ¸óÕÖBÖ'¿¿V" ‡º™#·Q±ÿêUæLVò^íÕÍŽrL%nˆÅAjµ¤$­\ºoCŠ¿Õ¤Ø¿X -™¸Œ,°ÄPƒKèš(i;Èy0E¡ÂÁk:×Öÿèã -4“±ÏÅj58TK®TÍgy -ºkŠ]¦©$5&¬k¤¬¶7Ëu ]Œ´î¶¢>£”·@÷öâÖá.u+Ÿw¬óH¥&Ä8·Kwô£ ã23òAœ?'¡Èã÷Îzy=àØ#ÎŽoŸ+V4Œ±C3¨Y±"IÇGo)fY=p‹H*¼|ÓlZvÎo+§%¾ÛpÚ3nѯóËÄÊøkók8møf%LkpÅ:¼¯.R"m¬”t×uÔ˜¡£¤bˆ®”¹@/Ø"­wì'à¨T€¯Öq‚nd–×%ëEé9íÕhŸBªm·N7OO£Üˆ³í%Ó>ÕR(G‹Í¥Bæµ5—ûËåw)ßWyN­V‹;ŸãΗ¸ó•¸DÂ3&Çû‹œ‰“î¹y¯ž˜BÝ›{e½dÛkÿ}²ÎpEyF‘>ºÛÐU½øÔºRÁŒçRë^)G -Ùgr)%µÝ¨ÂÛ¨Ïî×D1:$†(eCâ ±P5õ -]…Ù%tÇiQÉ,´´{sÁ\¤º1ÐyàÜÐúÅçH'ª¹,R´QÖ§øËýµî—uÌE@þŒ†ô‡)\÷†‹^Yw; -Xç¶—öŸÝ7âl>;)'mGŒx3çWA¿FçW¯Â²ç.}B&g‡JwÜGœ—–srñ¼TÔ¡Ò9’ÔêsÄ(àü)ryt)ùa÷ŽÐK„#ŠásºdÝ(¨ã2'ÊøéésbJ¸äÇœõòzÀ±Gœ5ß>/ŽÎ ÉlÒImÍŠ žâQÆ›FŠYVÜ"ŽBX>'œ’–óÛÄÊi9Ÿ÷\œ´œ7ÿÚüN¾Y Ó\!ý¯.bÕòìÁ©¶Ê¼ù÷Ñ6¶¯kÙÓeWÍc.ƒ¸ -§ t£SÛ<ú—Ë8ɨ«Á÷¬D«¥V.Ý6ì3à9…¶Dûnh~¾ÒÝ™-r,æÑ‘©ëØÌüyK!ŒŽê‘sÈE²—ЕLC«ôry`‰FÄÍ èÝ;º2e {í¿KÎQ¢Vt/-ö Ýqèò›ÑTÍ¥Ö9Q(Á«OdtŸ½È¬ìõÿ.eÊSt]‹”=B‡¹Hª^-Ým7rÓ—©_Á(‚zŒ-ëý7$¿¹ EšCiËèpõhæ“u¿E* -è¡MéfkL?@ÿ]ä{1î²ú.†©ú?[o¹?ðû«Ü+ç˜ÔÛòôà,L™7Úÿc9ÏçÈó%ò|u -s;õ¼PΖè!æ*I ÑaVd,R+œ{5E$ÅTm/nõɹ©=#µ<")ª<ÝÏÿH.Ìœ±?_sJ¬:|ŒËTñÃ2N‰`üÿpÔËë§qÔp|û¼8™©h­sw®yíZ’t|”ñšˆL0äé!_o¸C•¼ük¢¤iÙ9¿M”œ–ønÃiÏÅËyó¯Í¯á´á›”0­Áë𾺈%ž¦F‰î{*¨µï^a¿2ø*Už#“jå¶žn~{ßà #ø©o|1®”cùqØí˜q8sÜCþ$ó½ä|yµ'Ý€ßî_|}Ã.%´¾Û?á -7}Ér”g -âP+èÑ%ý8ôl+öËLwGäw·rφ(¥º¬O#›öz«O#­­8 \©êFº¹:ŸWœN›§_©`(RÙ£¼ÇÄ&Xýu}à5z9Æ·¢²×zÔ -ŒÅÔÚ¤u­Üy%‰!zä\)Dz—´ºD^¨@ì‘{õDÍ”»t–J¹FöˆÜ(hmµr3ðpß=$V<µÕJ÷¸;ÄamFbQ >n•³;¥ÀÅ«qÈ8'ŒAÙcçôªÅßï1Þã4áwòÄ4!¥î¥•.97²i¯³Üÿc¿Z’[ÇaàU|AHÈõ;‚eRÙäþUÓ’%6õFIFñSo¥-¸Õn4šúт𒽷•ÈãŠÜ(%ñˆV^šì∌#°˜Ô~ -`+¹6§”À½wè7²œ‚E[1¨Ä*“¡?¯ #@eÏÓ©”y¸Î·Ù¨Çý3j=ü:£ì+j^_®J* ß3Sj¥Ýz­qezÓLYìæ€·Èä¦ëm&v^Ÿ\®fV.§Ëý噫Jk½å×–Ëtyà•4Ÿƒ+õÓÓÍ‹¸¶:o.©EJFoÀ᪥×å°öqWÙ3±#êpèp1ofÅRÉs¨rŸüj/Gå¾+ô¶^çÃ7(òhÚÚ]ÆK%iR,0E“|4>çFÕk¿tü'Ô‡Jvk‹"µlthäJÅv }¨&þEÐ÷¬åyþ{PK;ÿ§%Vzƈœ£Mk¼°•ö€k(Üœ«Œçˆ-ê³=Sæ˜c(nTŒ«óJÙ=àü„X’r¿ˆ¸C,Ât~ß Ê‰{àäbŠH,¢\”£æljìÉå·wQm÷€þË\L¹x&ÉÖ;úøS´Â[jÄñ_©I‰™ÏUK@#pµTÿ·\á–ÜòßàŽ*q…©ˆ÷sxà˜@‚«YËÈ,ÇŒ‰F™74t;hï‰Ã+Þ"Mú)!k•"{M:tnÅOV™²Û5ôJúót*L†Ÿžo³¢®ãþµ~QöµN¯/W¥1”ŽeV¨bZܰb\§C™Þ4Ó´‹]ð™Üt½ÍÄÎë“ËÕÌÊåt¹¿¹\Íœ\N—ûË3W×z˯-—éòÀ;'i>Sê§§›÷°”u%—P+Ø -½RqïSõñ|˜.ß #(•VöFö¨¬«çPÉz…Þ(§ÖO¾aGö‡&ÍÙ„P‹*©µPÙt%óÏJÈ:z4î…~…\®Ë r¹BþàüUà¼ß¡)å^é€é—o«ün¸»yÜäâB­IŸ\@ë’¸7ôJ»Ç :9¢Ö=±üiуu>­†º3BGÔ¹+Ù>µülÆ•Àå¸|2ã62i1'QÔ¸¥L¥Ô>¶/–Ã9W!M÷ùñÈ{ÅF‡ï, <Õfw¶–ÏP¾\R޹„V*îýð sº²÷¬G€nij?‚^OѨ‰+,pÏÿig—1·8 s@Æ…Z“½]nÈ…[hBv¹ƒ³ü„\TËžŸÿaý`[tÊÍ#’Ž!ÚJí¡t“(¢/"æzmýN!¶4*"ñ(‡³°{oŠâ¹3yn!÷9Œ¢jm/ 1׬ìõ蘆^©6Û›¢cBw*¹ì-tƒAÏêr²ªÄ&×ЉäÓót*NS†Ÿo³#3îŸQëá×e_QëôúørUºWT¶2±skºÆ>Êô¢™²ØÍ/‘ÉM×Û äõÉåj&årŠûõtyfzÄßž\.fR¦_[.ÓåwRÒ|ªÔOO7ïQ¦_˜öÊýðØ ÞÏéncéÿÚÞøª¥V½d²N÷1'’’¢J=¬^æ/‡ÊÕXo’ößб†y½‡Ô[ -VÒ 9§^êßF~7àRu‹Ž^RDàÈÔèQ¿ÃþøÕöÜ÷Äb“è -·\á–ÜòŸ0[iMúÝñxÆwD!I-æô¯äÎ{»ãб˜´#Ó¿r¹‡ÖvOµö~þ‡óuô$ÚÐÃ.tfT½Þcþ/tCà0hæŠ:‹À¹»ìASé•ZÝ`}x¹À\6—¢á ]•ÄrŽÇ8ÖÐÊ}à7V‹Zë^R³;£¦p.Ö¡áqCã¹Ißœ´‚ ¸éä2‹ƒuÝc}ÌÑï¤) )b|6n=ðá;T… •{ÈüxkáVïX~"ßF]‡ —Ô"êœgÝØã†îŒ4õÀ#ŒP¥RÚô!禿”]Ö‡„7ä -k½ç?±ËmÅ–)OŽXnµP*õZæyz®ž§sÍ”¤,÷¿ìŽûg{øuFÝW;½>¾\ÕÆ\Nµ‚t¿¦Û¿Ó¸N‡2½h¦,¾ìí -o‘ÉM×O™&†ßž\®fR.§¸?טž¹*¸Ö[~m¹L—ÞiIó9ÞYýôtó"Zdî'Ï*h¼!o”¬ö{À°²¼àžæFƒì¢á†Rç{(å#nùˆ[®qËçpãX7öÅoûîOÛnp}[%/%žN”Q8õ|Eß%“¹ôŒ®pD"½¿£ü{…ÏQ®õ¸ŽÏï®[qà¶T9 ãÐJJSR‹×›’}Ï GdËmJógtÆÃÎM!ÞÚ ÆŸ›ª˜›»ÈGÔ8´’¦/Åã<.rg²Ì!1h>ŒºqÆÍ‡@ÓJotçðÉ6èÔGÊÊyc“_ã`¼¨Ýƒñ@^K‹ØHZ¹äˆjq£Z­Üùì¼åå£;bèTêÆÜqä,K•v'4®2“Cå’="rG–Ö;âè*GbQÞØ‚FÇîôÌó -4ÞTâM ¸®‚ dmƒñ³3n¶-TÒÆ>B-Þ<$òȉ%M_ -¤óJ­Õv²ZÞ¢WÐs¦Êõô<«Óôñ|_ -i-¸F±‡_gÔ}E±ÓëãËÇÚœ(‹habïh1žß±L¯šñM_öv…×Èä¦ë§S^Ÿ\®fZ.§¸?טžùPÉ.3-Ó¯-—éòÀ;-i>Yê§§›¯¾ì¦{Ê,7‡£þßòÿw…î™LÒ'ƒÆ§ %h”o4Õÿ‚õ©v½é_å|_-.úÉp7ph¥ºdCO§;à[3oõûšy¿Í_•8ï·”{àÇwçñÐZåÞXÆKE{ö"`ˆJUxúWtþ•l÷ïÆÂ].O-0ó”S‰È¹JX¡²ÒZ<µL{£ç€¦™WÙXx‡‘WÍ}Ü -€—=c²=Á9sîÍ<€'¢A›û^à:Z”³õ‚ù6òß?<)b“–z¹ bIºaŠÄx±;üa‹&ÕуFEU‚Ø="tìDÊÐÐa.ž4¤\¯s³_5ÉmóJpŸSèÆ`þ€µà#xi—7¾Õ×%E”ÐqQ æUVil¶zzz] -ïÑ6 ŠTMú±(€`H‰‚ -&¬ÖsÒækÆ‚ œàë¹jßK›¼ø9/‘ó×’:iÔJ—Æ}Ú ‡ÒÛÞjÙ §‡Í]˜ŒŠèZî2¸`ÀÈ}^,^Àyë9^,È\Ee¸¸¹'z r!±^ç ä¼@Î7ÈùïxK,3§–Zaà®ÞNx›·Ãû´FkTæç\RcÁóöôü‚s?qØáóõcÁ r³…™&jiY©ÓE§¥D˜ÈŽ?ßá+(¹Éå¯p/—óÝ‘”Ór~>ï¹:ÉO7GV¦·Í·ù´á'-ù¸W⇷›áŒ(: 1¹ÔPCÌ:~?aáˆÐ§¥Qí†mWr!Îkþ;T&=CwK¹Q lwѹ¤j¾6Œ©ó–ªøÚô5¤\D“Ô²G,Ýœu4ì\(P¢¾^ŠõŽþXà| œ—Àù‹À‘ \û}°X6±EŒ_vÇ#èÿlÔ'ÓÆ(ëÒ1ÇäÖBB·šŒêZ'zCØõÞ¿-õ_ß<½ø4qñš\†,RÇç9¤¿^LÖ²GCúSÒ×WÏ5"ç2)]÷æ|‹à5ý­Í£C–¨Oc]DC' Føº€”Ãs©!¡Žé`8¯Õè¾yÂàäB{Œ¤[·QI$^Br.ɬ¬%€!¡ taé;iÖEʽ^†¯Q”b6RJZ=f7¢–=Âîæ¡€YûFAéEyà°t¦ÒûâðœÃîBºKNYË1}{g©!mÑ<•ê!SWàùŽî"kqL螬õ¤ø^M4`êÊ©J“ƒUOMóR-DɼÞ§µXrÒù9kÊè¸ï?^pØÓó ÎýÄa‡Ï×ZZµ‚ŸS’6¾õÜiÃezéÿ(\^ð”Üäò¸¤âå²s¾;ÒrZâùqó´gqÒå¼ùmóm>møIK>®A–øámñ!xg>êRª‡ú}ÏÐí£Ò¼YUý?@§¹¼Â8Ù8œLÕŸæâ±D]HBŤ‹\4U¿3=€Že¹3€Žù±´Õ‘`Hc„¿°JÈ2ÅHPŠqDÖ=—;æ8¼«;èG+œëÍe‰\¿Ä9ý)ôU¹pÊVûÌX¾ ½üúŸ -}],Æ%&çqKT‰ÑûàõX¹ð5r^"ç/Ê…aŠ éèŒ9Wû°@Î ä|ƒœÿŠ-"1:µÙ%ì€oáâ-¢-‚s°ÖÃs·B}+¸7ü“í‘з.<ÕVú:<çK-¹\ÃER\‰†tˆÅÅlþqG «©æ;=tû¬¸=ë¡»¨ëÐ5¼¿¸&j}÷P£ ¼YÌQ5j™×FÑ!¡c,çÞ^&ð0ŠP]CB‡©C/}ò -З)#žû~´=ëJúº\*ßQúðÀ1a0ñZP³D)™xTè,¥×yè¸jHè`]%l;2Ž•)¹ÃÅ]à鲌^D‰J9¼Okb©6?gNlŠç/8ìéùç~â°ÃçëÇ -¨AŒ:ñskV|ºèô©xÛ|ñó>à0lžÿ -–½\vÎwGZNK<¯‡Óž«“üts¤ezÛ|›O~Ò’k%~x[|²Ÿjí{ö·•ù‹_w³Aì a£Tkq߸;*ª®M[TÔöœ£g·*à]É¥Öj»†pvïÀÃW(¬‹ßãæn¾ÁÍ·ŸLþñRÙº$Ôg¨n}å-Þd-# ‰ZLäˆ1E× }LWdT©Çd““­M2cB'l){¤®Í60¸Ô7ú¿hí+txàhEµÅtÅÀÐa-š¹—Ë·‘ÿøö¡‹S&îG‹Çꜯ‘ó9±@%©òZR,æ©U¡xbAJ»Ó@p.–²•Þ[†÷óØS·;œ€x*"'}âÞ\¼$Ê^âGT,ê}…+‹ßSÎ à|œÿN#ª©ÖÖ§–¦X­YËÐÑCÝ´g}ø -u ¡Â}à -`ç¨PÕÚ÷Ðá9ð¬¶Ç`ñ›ißB#dE-Ô·Ð:G÷Ïy—&º1ç˜C«jÏùƒu¾‰·HºgçÔ䬫“ÅM“…¶Õè2&ëžÈ|èòo¸¸Jº¥Z‹ç‹È¹ÒJ|à-8ÈkMù&,RÁ!~xŸÖ‚ÙƒçÇŒ zÿñ‚“žž_pè'N:|¾~ÜpRucÆÉè¶ÇY©ÓE§Ï¤DlóÅÏwøBî–Ë_ÅËeç|w¤ä´œŸÏ{®NòÓÍ‘’émóm>møII>®A”øámñ’r¥†j¢TàÁ‘~Û ôIŸ}´Ö.¸óýL:>pˆ_m-“Ž©O.¼‡÷n}*ÞcúºFÎ×Èy‰œß6ÎÀ1{e‘>c ¯sÌ»õ¸9N8ºˆ¥¤¦u-× I/Ð5©æ5Ö‡„ŽdWzG`Œ”Ô8¤§crti=ëÃæé+!©=çš‘&VâˆE6vAç"-ÔøuÅy¶J!åÂè¤wä€u¦JÛ;1n`ŒhFd’sk©Y ™^Üî·£ƨÒ,¢\0‰poŒãsxÔ´ˆ*.!ÏJk–8dy¢‰qHg +tPñܾ@¼8í1Îm ^^„ûÁ"‚T¢†­°m(ð*ššèÚºôÍ•7/EwPúöí_ïÛ+}ûªÓ?yD‰mMzƒÞQ£jÖ }ø6v–ãd²>é¼ïÿÃs; I9g©ý07¾± 1ÔÊÉŠÕƒÕš2f¢tâÄÚïÓZ9 ×ù¹ä”½âù {z~Á¹Ÿ8ìðùúqÊ+:%Îõ6Y©ÓE§O¥Dì7|á½<.ÚÊeç|w¤å´ÄóãæiÏâ¤ËyóÛæÛ|Úð“–|\ƒ,ÍÛâC Ç솟—R)¶G¶Û¬¤® ãÇÞCš›ùØ:š^.RÆ·&f[3à¡Üà -ºséR¡ÃÑZOúðjqI\«ì=|mAù”Jƒz lQ ï1òno.Ê‘f¯3pŒ»U¸w œ¯ó8‘q Ûü#Û9Gn½-þk¢Œ§LÞk}xwŸS¹“¹¾­–½QÔ¸>‘s–=bËöÐsÊ’ë?¹ìÈ9‚‹³CHè"MQS+»¨åƒ…•;:>çžjö -¹D5ø"†¢Þ\†— t^©QHÎ9Q怜ÃÎU¬.Ûwÿí9/I‰tçàÂ×Èy‰œ¿\¬&Ó¾…F¹&ö;#ÑðYvî\Ê -çüKœ¥B¿ óLÞ[Ëðœ‡õDˆ%lõ’÷pÄíU¸÷K*µFŒç¡3®1÷J’î[Ñð~ŽØâª}TÜžóG(=jûO÷Bîðæ‚ --Ü›bÆ¡óª¨@%.€W›Nn àTk;¼OkiS®™Ÿ³§éc߼ధçœû‰ÃŸ¯7¤Xm RJ¢Æ·ýÙJ.:}(¡™øÍ_Hbzy\RñrÙ9ßI9-ñü¸yÚ3m±óÎùæÈÊô¶ù6Ÿ6ü¤%×àJüðvó!Yf]æÚ0Ô ¸!fì1lØñfäb°°,Û…‡Ž¹‘-X¸;!ç$B½_¢PKm²F­¥FÚ÷ëa›Þ…óiˆÉk©t° q‘‹µµˆ4f…þÇ~Õ$ÇÍëÀý;…N€Ä/×9‚e\ÙøþUšËÒPóäÏ%OˆW_6’‹jö4 -¬µ'}xµäŽ æÉÞEæR0câbÀj=ðœ‡\šÕ£î?ª+rI‰<1éá‹Åž’sϯRdïÓb‚ÐRßE‡ïF¼à¡ÒÇtF‚Ê;A7A‘FÔ•JÏPúÉr w-ý\”s…˜.rz:WL9™IÆÈ˜Y.ñÇ%å€B§f4¾-¦ef­€^Ê%­¹„Z¨Jo.ä´ANwÈéïP.A9bFÎCætr‡D® 4 =e&mD™eW+ÇÜèýÍv¢ 4ò¹¶žò¡ÕÂæ4©;Tçm -FÓë|+ñéøI.Ëä€m^‰½~ü|‰mßb¯éíןÍÖÁÆwU+x­w¤hµù"óAôz±÷§8‚©,ÿ[¡Z]Þ¼>]H¹ÝÆúe«ùÕNv{¸2íúXn/|R.÷AÛôûî.­^~\3º?Èwüº§¹Ø]@{Ö ÞC åÎQ†Æ¡Llᙎ’ݘÐÃjJíu>lÌX€‡9iK•¦WÐÉø¨é )—°E¬5QDZµ"·§d»Óåœï–hè1ò6,Gž>j‘ò^¦_黺ˡ+ä"u'/~/ç´FN[äôiwÁ† CW¨¼‰¥š¿Vy±(÷œùÓTÎ R"m€Ópú+ÀƒqeO¨ò(ÏÀ}4‡Ž¸È9a>à¥Q<çaŠªÒ›âøœ'ný\±ç†÷#0ÛiC9:(‰¦„nFÜËeøÍ¸ÄZ}üM;Vxk9 ”ç?~¶XNàÜ*´¶S ã«\¡¶¦ÅÎR=©)8ãQÌ2r%†í_É8£`C25Ûé£ TpGëã»z´£Rú ‹_þ)¹|†ó#¹h*z¤ôQ¡K)–´H[$Þ”Ð%¶ÛÉŒ9ü…‘Ž ©õÈîµÏç[㉂áÂ8©Gn,¾-S$ ž^ç[‰[ñë2(Øbý%öúñó%¶}‹½¦·_6[ŸTÂ莭>_d>'’Ý]â ¦²,W¨V—7¯ONn·×õë;ó+úþæõáÂÉüµëc¹½ðÁI¹ÜSlÓï»c˜óµ{°<ì´©¨årûmeµÜŠodé¿­¯+J¦MmndIŸª¨ò°14z8ÍÐFŽ|§JÙ¨ò9þSäTùÎyüžÞZÁ‰œoó9o‘ÕÓ;ò¨yܰGæ<ê„s:WyØ­n ÔJ/–úe±ÔÈÿ)ð ¸2>¤ÈÜJ/ò/KåIVnÑ­†é‘5S#KFäa+&;œ^1xE}F‡Åo9K3¦–|&«y­O0ñÓçxKÈxWy2nZã¦-nú\»W =#Ftð¬ù*J“w`î„¡§'åtäqŧWæ)­ž¼æÃÕ £0Í[ŸQX!‚»ö#ÛèJ OÑÃIsDÂxÕÖ›áè&nñ·Œ},wÎé!:OáÜ ê2g& à&hé·0Â"}]ŽŽ;®h-¡R"\¹ø>Ýᦿá(»iÉ'ð -×ÃVÿOpJ(Ÿaü([ˆžQâì1?x?i&àAšõÈÏWùéI¼Bµ€5>çÑ:YN›Y3V8yè<߯Põ(J\=ŸRBám§åOxLm޵YC›!ÕÖ&uëâ!V¯Óë|/%þίë§eõ—ØëÇÏ—Øö-öšÞ~ýÙlíá¯1T©VÐvŸ'´^N(¥Å‡£¾¶—8‚©,ËsŸ©Ë›×§ )·ÛX¿¼<¿³ÙiÙïúµëc¹½ðAJ¹ÜUlÓï»sXi~iEËA„þ'²|ðÛž¡à1´8Ér¨‚ZA/(}0žóHt»¹hàD÷ —H£Œšªu¬Ü…xg¸w,¬GB¢Ã`TÖ½rªawå0¡:Oº[qÞ°õE:¾§çu—ÄÐC.J,ùtÓ€J?} /óèÿTjOx‚NZÊ4ñ®8wã„b‰ÞÏ5ðYåÍŸÐÏoŸV[δ•ušKÎ3ë<-ç¼3T|/å´N[àôé.T‹ö](åYe)‘ÕŽÒÖ¨vÎN VkÆ´•ÙózK”¨h¥„rq ¡øðš×YZ“Ч ‚–°8MÁ±<»8OH‰† rØ„FM,ÿžý|¹  ÉQNµ¢c/˜ñMQ ©hR¥'õsgêu><ð`\ÜsŠE¡èN+ÊÀy¾¡¢F÷œÔ£‹6ÜêkHˆ§×ù^ -P”Áe ,¸xýÏKlöãçKìû›Mo¿þlön@­ò–\é^ŠZm¾Hiñ%@²»KÁT–å -ÕêòæõéBËí6Ö}º½³ÙiÙïúµëc¹½ðAK¹ÜYlÓﻃ(…ïªUÐÞ7TI-ÈãèÁQš–÷Ž;FF-˜È -àQ#ÜRYÁ -zqµ”2y·ZªTº@WÒ–Oé67½Òß[¸é3¦¯ïйðSÂÝùr¡hÂÖC^.Ñü9ÙôµR:YÉÙŒ¼Ô”ŽЭØëC -&â"yÍX¤óèÈϺÿr¾ -MrêÈb›~ßDyR)PÔó¤¸ ö~öU– pvày¿ÿ |‹Ÿî€Óß®ÐÔ{àãö5çèí¨oœý|Öcj¬;r¾@ƒóÒ$¥\¬‚»÷ãnoɪsS Í3y­µB5Q®ûî@$ö„,ý2WñžóqÇ€uli~45iŠÜ@š˜âˆ¹%&/jØO –hþóÞßï-çë¼cëÝex[Ì›·,†¿§øùwÈ<+ôðóJŠùrKbk!VMY¡I­EÁs¦Gî'¢á9•“´ÞX†.ˆÛQÜS, -M½/ÐУ :el¡1Í•&)YÏ\* íŒs  Ï‚)xÄú˜‚I =qppÞÑúð½4€‹JŸ^2©AÑzÔÆ”‹J?_|™ó¸ÏéHÛ‘ùø?ݧ¿Ü¨aÖ^dRs&žQçVK‡·ó˜é¼ZË艦@Ú»ùðZ Ê‹éåCÖgȜɓ5,F“:A5à t¬à±Áë|/G¼¬Óœq0Ö_þË~$7®ëÀý;…O€ ëÁGÈ2©l|ÿª×’lÅ6ýK3¯4úDÕdc‰1©V»Ñhà°·÷3νà°Óåãûál&É`¥8OüÄŠÉüŠ%5ðLne]”uçr7³r½Äú¼yÚ3m±ÛÎåffezÚr›®~XIó5¸Ê~ú|z\AͤLsï]lØ’º‡.«[¨æºr}O è( Õ:V¡cИœOÈk?òî4vsà;¹´¦½^4 ¬jÁ, ­ç<€\N[¨@φ‹Ôga#õιlQ¾GFÚ_èF)ÙÐÿ„¹d-¦•óF%¿à|x™{Á䨥ÞÖ:.†…ndV¶Úè˜Æ˜©U9¢ínŒ€.j}™> 4uÕZs9æ(§Ò¶ 鉑+´‘š}ÿ­$ù…`d®Â”²nÝ!ãJIl+u ÝÑKÈ2tnúw¾82`¤K‰û">„ /hFUåˆô²2UO¡ 'Õ“ÕB¢é9+ ·Ó×t]„ªçe]¤ñõÏg½½Ÿqìg.ßG ±¡3[Aí7y.!à ->Jjx±Úòá·;¼“[Yÿ+$.ëÎånfåz‰õù¨iÏÝI~½™Y™ž¶Ü¦ë†VÒ| ®²Ÿ>Ÿ^$3¾:)3eïMlàŸ÷}j¼™ð†ÊÕ+ë•̽7²a[Ç\¼åÜÉŒCBGÃõPÑôN險†dEÊܳ>|‘b’Á Ös>@é¿«–m±äô"+FйSÓ&Ýs‘O‡‡+Q輤Ö{K€…»“€A­¨”ASQò¾@÷÷–ý¡Ãa.ñüãœÎPâ(8/µl CB‡Ÿ[;B-ûw"]^„Å?+t½G®Èõ….ÔÜz;¾BáŠfÜ‹%€ÌQ¡,ÚÇ–a1l÷‡¡—vƘ-¦Î©ä-èc²®8;õóÜð¶è™ØoD{øyب˜§ïön>~ëªqøŠ%Ø„Y´æ¨SEÒ^+ãS^IØbúa{e+Ã2ÎÀ[ëɪ‘û£³’•¾¦ë¢”ñèy='JŰ~ÆYoïg{ÁY§ËÇ÷ÃÑJ©áùfø¾wÂd~Ã’žD¬¶|øíoÁäÐÀí¿Bâºî\îfV®—Ëú²çáÀõ¼åiËmºnøa%Í×à*ûéóéET«Ï¡N$ÒÔuܪnXï£8õ ·ªÊðŒÃJI lÞˆËéw±z¶CšÆnƒË\RãPc-ÑL^ZHè`ÝUÐúî‚qômÆE@èˆÓÓÙaÒ]/*M¶„>$倎”w„Zög½P-­a"ØK#©}v €ÜžÎ[zú4€qÙ°—!£®sÚúöΫt^ èRr‹×g—¸¾ˆèbª1#£F-dzJ/ºQ„ôÑ JÒ»äÍä2¤Ì¡ËœCB˺g*^z_^é_ŠY¢q“ †Qëu.ÿÙÐå@ÿ]ä[ÀR–¨]Øá"®£c­ùEÒ_éBM,dDÜE •ª#:äÂMûˆ>>ðBI_Øâð -•»¨òܨ@æñ8GVôÜú¬8=tLŒ*ó"aYGT ëŠQ9¯)hTD8¯^ðóýu.¤*5¢\ÐD£BÛGá.’¹/ÑGÎGé¿Äù¯@ÿ¹4k%¤\ZTc”°rÉ=]ÃF€’"³ž {bj=hØEmG¨eÜ1 (šÈ•*§Œé¢ey„ÎpJñÓ×taµ$[Öµ‘zÃú‡½½Ÿqî‡.ßO´´l ÛÂ÷k{. “ùËôªL¬¾|Øí¯Áä–×ÿ¢[º¬;—»™–ëå²¾ì¹;É®73-ÓÓ–ÛtÝðCKš¯AVöÓçËâ>'ÿM¬½ üûÞ #kx|ØŠZagrÉOVRo¾§Œ•óFœsïbÃö¸RãX#ï*—FM&“ŠÆy`zS”ëî€KzìpîFl¾}̪ä*¯¡õ—`©4xj ë,¸ ä!g®FÆUá…œ­PœûsÞà+ÓW·!'ÕÖ'Åᕹh•€7®)†*U :ÈEmýn¥ì ‘ÛP&Ó|Dóß:X—”"Ê%l‚ñÆ[™eHS„ÎKÎ=ôœöµ^æÔ‚ -Õ–V¨ qj}PŒ Ãq5æ@Õ\¼éå²?ðý ½R–³\w) ¹Øô!•Žn”]Ž0ÆýcT¤O‹ãרSòtDî Zñü‚ñ -茿x£…Jµщö¯O¡Ä­º gW‰#—L®&'«ÞO¢¬ˆ|úš®‹PN²¬k#×Ï8ìíýŒs/8ìtùø~"¥:·“ã!陟>Êô¦L¬¾|Øí¯}˜nÿP+ëÎån¦åz‰õù¨iÏÃëyËÓ–ÛtÝðCKš¯AòÛçË<Àðã*ή[ØP6vE^¥rȶ›0—¤½ [PWÜÙ©J¤^ýÃ7gë làD9S®5`q"Y;"Hÿ?,MK@­€òäòÅRRëíp|Â!•VR/òч©hz¢„¦”Ó–ªäÃ#—}›~®¤å…«ŒŽÛfXûÚ_ã`¼¶J¹ÒòwVJ¡lµoøÃã$¬oŒ¨LRs<ÀÁÝekˆ±.ÃöžFš“dȽ¾˜ÛFgÜ3iË[½gÄ|…®)æGh|÷®)ÔL¶T¾ç{Ïè÷©å¾sŽ_ŸpÄÒt ù:oTÝ="çL ¼¯Ðÿ ü •ÃYœóõ¹û̉¤%)`²5|Uâ%ĸµY…ŠZÏøøç…[¼X¼¹õ…zàüæ‰Þ8P˵WÒRö¾9çS¹×º )t]Þ:^²‡4†`\8$ë†Ðë@Wè9Þ!½‘‡ÇJÔ<õ‰kx¥X!M7Jh€ÓV+…ZÕþp¯•¨„·¸—x„ÃÆSN}ý p8ÃFsˆ¥ªtòâd }±|…γ{Ïy£¦~ïˆ~FçA„õꧤîòÝS|1ô˜þb•JÊ} ƒó°Jwª)[¼:Z™J«S®±Ö>-ÆpôƹOè ›ÚÐÞ‡×yØæ"°)Fî‹*Uó:“ùnèÕ]rk!Y‡ÖE{©o/Vˆ‹†Œè \…û2:|-ðìÞÑœ#窵¾Œ˹Ru³ƒz¦\®8Ï™œíð:‹¡ÌÚò\ÐB9±ÖÓó˾a­ÃÛŸWœKÅç4Dh¹v-ÅʸÔiŸøoÑ« 6‘É´¬™Øx¹ÜÍœœ†x>/5Í™¦ØûÌåf&eú·å6&|°’æ1¨*vx¹ÚHƒõÎöÛ8õMÌкl=¦7 -ÔÀEû`Pºø½†àrr…\.ï¼ -i¯óœãˆÂC꼤PÌ‚»4ªÓ÷ ¼f*z£u PB§æ±ä˜I—ÉüFŠ­b®z¢„SúûJôä{Ùydw+}o#*ª¶˜½…’ ïÑÑ}ôwàž©•ÜÛâðÞ‚xnƒ¢ šP‹Y†B›¢dß»É9r¹D.÷!}bÉ9õŒÐ9RK•ˆÐ!æÒ]¬R͹¹1Ü¥¤¾þŒBèRbÝ7,vxûñóbm¼6ÍQ\®²M—:mŸ\l¹èû¶‘É´¬¿2±ñ:s¹›i9 —çËœ‹×õ–[nÓiÂ-iƒ¬b‡—«x“2›ÁV‰´]|ßöñ}Û¶ß÷:iÓÖpè¨U6éwÿr©¶ôÍ\øL/¬m‹¦—€Üÿƒt÷¹ü—twf/ÅÃ*=¬½dDS¹}HÁ€õ˜‡J—äQiÔ P”¼O§üǤó/øýÚ$÷­ÌðÀ'™7í }xà¨þš½ýÞX.¥.W¸å¯ ¤Â¯Ójº‡­|ç’Û&]ïî]‘Æ•KÜÊÓKäÈ’Šj@Î+Õ˜ýŒ%fd±¤Vûnhxà&¤ÍâáF(÷Tz¥ ïäPJvîG8…ª¥>± Ï9lÅjí|xàK)uÞss± z¶|ÃY†ç*Ï"½•8 h)JŠ)󘱄§ª{˜ùWtVª¬üX­•="Ëö´Æ­ýu¯€û®¨ê½`"°®$¹õõ?ôÀÖ‡©ÂI7'…9Æ3uT£ ­…QNµËðÀ2^Q]ð²]—Ì”µ^§qÁ¨my.JÇáõŸ#{z>bÝ7,vxûñóbí‰‹Šƒß(sW)”}ºÔi£½-}¿Ã.2¬îýW&6^g.w3+§!žÏkLs.\×[þm¹M§ ¬¤y ®‚^®öá¹ñÒ|)ê΀[âvÇ{?c`yï#Ðå½ïÐQ5$§¾‰8!Awn}/0¼\j²^çÃÖ»3Ƶ†Š¤gÈ™%T³ª¥×i:À ‚)^ö€¾ñE˜®Þš‹UJ²G!Úw¡Â”hÀ‘ZJ‘€[øšsßvE`üfÛ àBånÚ‡–œÇTyEè¥ï†Tý©‘s¿Ãù%õr…\þçhãšöÎA,Ù¬¯žœÐS’ÞY†çý§z -Ù …åÀÝRD7O¤µ'<‚VRÐU(¥¶wG!çÀå¸<Yp:[ê{Ïb‰špaçÉz7^æ‘K?^b‰YACÏ$5K@¥ceH= ð°q+° µ–[<±XÅŒÚGÜ΂Äe‰{ÎÈ%ìçM¹‹Ã7#v ©óÊ$©ôÅÿùåä -¹ü-?ÛËÅT9wn½Ê.0CO'-|™3þÏåð: ê+òïü\˜ZÅã#Özz>bÙ7¬uxûñó|é‚0‘’ƒ%T¹ëŽEÙ§K6Š–^<_ôý»ÈdZÖ_™Øx¹Üͬœ†x>¯1͹Xp]où·å6&|°’æ1¸*vx¹Úˆ•Òf@ÎèU¹½…mõy? c· ,EÑå -ܧƋ{ïÕÂ>GÛå7,lÜp´B7¥:͉SªÏhM¹ÏuXŸJ‡îa.Û“ž(›]üWœÑÍ¡»P.­÷Ŭ£b7É{;£œ#—Käò 3â]©{ØËæÕΘû( Œ"PW»ÓÁŒˆÛ*:ë;˜ç³Pb ¹\Œµ?ŸãO”RíKèðYÑ„¼æ{ޏEjù -±pN}àžó*è|{ÊÇÇ.–s@[A rahåà\JëËg„®"S­åôQÃV‘² u¼ìé^[1¤`[”5¢¡3¡öÕ?€Ò½ºÝƒ>¤\à/ž9`XDga¥öåh|vôJ’ë=[ÒÑZÍ-(ô"u:úƘ¿Ïè¾”b–= o.tF³þˆŽ¯¼£w)¶ü·ÓÑ…¬qt#œÑL™KL_,ê5¨ÒC7L¼Œ¸Œ®EÚ$ÇÓ -gÍýù8·äu!Ÿ'ŸÏȽ(M¯Ó¸8Õœ—ç¢$.x~ÄbOÏG¬û†Åo?~^¬ ¯bU|ÍFÕ›^‘¢X—:í•Dôê‚mÀ1´¬™Øx¹ÜÍ´œ†xî‡ÓœiнÏ\nfZ¦[nÓiÂ-iƒb‡—«¨%›ei’îåŒÍÝ÷¿äŒÿtè(Ë9csèV§—¡ÊõÊ:“¦ȂϔÞRîÜ œ)=×½µœ—Kàòûr}F¹–ÒG»ÒtÏÚûâ°é x­mοkÑtŸò‡4t3⬡Zdz2ªÖú,Â!ME¯“o Î Ré/LEn@_.L•KTγsD#@Ï”lµ|E{‘<õ1éq#£)U‰‰Ü©q ƒÚZÄS9©gB=êY§”ÍrPÁdá>5ŽŸ_ðN¶{þ2¤\ tÕv¯±ÒÕÁºgwãrnRÓ︻oÜ ¼ÀyÉÒõ¤êqëh&«uà_á.7[Œ?VËŽG4jÔôêÒ×Ñ ä—+äòW8·B©Ö˜U4‘$Ž©óÒ¼/E18o)÷-]èL®½¡G@X/Ë(gèDƒtU2ö•íð:‹RѶ<—Bd¯ÿ±ØÓóë¾a±Ã¿ìWMvã<ÜÏ)|„ø!@®s!Ëäeãû¿7d+–èo”tËjâ›^‰bLªX) -—·ÏÅÞœIœƒªem]J6<òpTôÜdÓCoo~ §Ó[žÛ_ Èh^9½´\‡Óü´f±á¼ßôµé5]|ђƱ“%vz_$WÍ㥢¤­4»õà¸ÿ'k5ºÍ¥w„#Q¨6æÝ*xºk£FèC2µÜ–½þåWæuØî—¼ŸÿVÉû޳|C+˜œ§˜2/ZŽ– ß#ç%rþ¶\d(ÌÒç5o6½}*=n-|Cu½ÿg =ô-5Ô–õþ3BPÊÍ eiíå—Ýå€ïß%ïc}ML_ [ŒBCgÓ#‚×îZ7…ĺå/½B/EZKïß_DCúKà˜u‚’DÆJ'Ë-çR–J[ŠŠGtÖV,Ýsî…(‹êÁ*ç{ä¼DÎÿv•örß›óVsÑk [ü -–€Þâ~N•Z?ï¿‚†nç[ =€»X­‘íèZPâ]QÏ-‰uËϻ̊&Îyj9 —â=¦€ŽnX¤íBp>TѤ­»t\þQH\,þãT–W=µû‰?†±ø=HešgöÕçϾÙËëÙ÷½øf§ËÛçbo²BNJLyþ•Æ#æá¤þ!¶é¡·7?‚©Ìujæ•ÓÛHËuèóãÚ»ôú2Ò2|mzM×_´¤qìd‰ÞWÉD<æÒR7#uW¼A÷;•Ki[ÇÐõœK¨Ff†ž ”NÖ­Üqž2‡²àYéٙܖ½Ð].UkHÖ]0b²•“º¼¤V Y T}_0µ¾¸À½Ô ¯póŸ1¯Ã²Y‹v×Êÿ»Ì3””bÖ¢juc¸"ƒ*µí@èƆ¡K«i‹õ./i(‚í%Ý¿=#¼êááe§˜Žd1##ùÞm)}nxá{à¼Îß /I¥5õþSW`™{`¬¹ Œdž"7uAsAÖÒ&€îòûæë?£neÝ^¡G Œƒ1bjq|y^!ç?sE¸¦¶0ÇÌèn/Òú3,˜ŽH]»ëÅ4®Ô£ÒÈö‚sÙʺ}úKØjDP(j«o/Šüm/uÅju+£÷©óÀõß|o=ù=p¾ÎKà|¾[ -â–µô©–Àå?A–ÒÊåɆþ{ГrÁd`KËΨ‚yaý†\Üïqš¦ -¨>}ö­^^ϾëÅ·:]Þ>;Ë€¡:)*7ÿO¥2<òpPd]=ü¦2O»‡Í+§·‘”ëpšŸÖ Kì¶rzI¾6½¦ë‚/RÒ8vªÄN遲ˆøÙ5  Y šw>˜Á!öûSQnàòQþwÑ«ƒd‡gŒß ¤3åÌõpëݺ˼XLè•d zW1c–zöʧ­ÖÈ{êwï䢆GgÒ=윇ܺb SÎ-çÝúÐîºÌ#^Ђ -•ˆÐ¥Wn•ÞÿõT¬¥M\8{ER•-[ì“sôòÿ Eptô=è-ö¿¢Ï`½ðƒ¼Ø½ÒKòŒžB:ºU@õÍBwcLé1ÆPzJ³…¶Æ  GŽ<ÅÔ9åÅèÉ:ßéŠFeÝ d«õê-acWè:jY¶.i¯Jǰ¤çr¼3îtKszpKY.ÿ|÷#³§.Ëñ€·F…±múgþsö½^^ϾíÅ÷:]Þ>[+¤ìß׬«ä+Jexäá¤Ⱥzø)Lež&¿Š4¯œÞFV®Ãi~Z3,±ÛÊéedeøÚôš® ¾XIãØ¹;½¯BµêïŠù 2oн‘‘Ô"ÿeàÏ6à™r`IãN,¢e­úŽ{¸÷_YˆH;Õ¼Yãæ¿á-±ì~=w‹@ɪæÍЪ‰Ô9AÎéˆ º?ç UéŸݳR¨`z'eÚ*ÿ}#öAjYï¿þ{¢&8që/”nÀ”[é_.=AEø¹ìÏ:cŽ™^B{zQ‹ŠÕ-Ö{…U0Þ1ç¶–FpuCi9ÿ üiÀèµtÛ°ðVíòvŽ‹Îzl¡w/—Øq1+…Tº×¡”ôoõ?Ø_JE É:ƒ‰XŽ* ”¶1Úß_~JùöEØ:gPJ%(ô$ÒôîåâÞ¢"[ÅhoÙ? i ½{o kŠ‘CWØ~ÎÅ’¨K„ ê}QÉ!û¢œÔbzKØíŠf(ÃÔ2 Ñ’ó -ÉÏô1 YýØ4Mæ‡EŸ?û^/¯gßöâ{.oŸ+NjAvN|@uý•lxäá È6=ôöæ§ðÚ¨2ÿ•€Œæ•ÓÛÈÊu8ÍOkÎûM_›^ÓuÁ+i;WÞñó’³;– §ïpÏÓ‘ Lä ÞóÛ¸Ò»P<×Öµ (€©0PYa<ò¸v(h+¯tJyP?$ —yD­„¥<¬±¸™3iÈ ÁLZgé¾íˆ­dòîÛ¾_yÅVzçÛ -¤’¶f ^’ÛáVëìxàDž™[3ì¾4 ÐJß [#ÒVÞäofñ. %ƒáJJé^)ÙCJÀ\èc[uè1‘K•œ£ÿ/Ö}….Ó8ÝÚ6%ä vns­¬¦ñî1hÄ -I%¢xÀ­B¡ÜzK÷ÀÝ™¤e¡g`E (—¨ƒœ¨IŽqç–°Y‘ ¶cEà1÷Ö_êÊ Aå’%`Ü -›ö!— -‰´*ÿ²È?€ŸmB¸-mK„ò$ÀœÚÖß¿XÈÒzy„̶"påÖY"èÜÛP¥V.ý{ C•²GÞŸsI+cEÿ:¨9oé¼WoQNmj¹‰Þ]é>…J¦-è½²4ry‰–TB:zà ³¶r鿤áõéœoqÆ—À X͇—aIþ±òôÈÈŸý¬‡Ç£{ò³§§×ÅÑ4'œJÈÒ5'Še¸Èðž2ÙÕÅ_"ƒùw¾=öÂpÞ9Ýœœ—þ|Ü<ìYœ4Ÿ7}Ût›ÎÞYIãÚ©b;<_½H¦éÇ]óßnU9' Ä1WRŠä¾Ð3[;ÃD€Î*o5Ž>¡»¤(g\ÈqSé]5뺸—¶çE §jŽ™¡+oÓ>¡óðOíØÛ};*žRÝCéw‡î³£qþ3ÆQ²´±+çIwqôû'F†R(fvñ+h/(XÛ^Ô½¡;p&iÍ¥àäÝ¥…F¹úBcFf{¨7Õ•æß¿Ì‹ÔÍ6Ô§™¶–¸ÐÍ “¶‚Y _ʆ®ÓO)] 5"çq»?—­¤Ø'åŽ<Å ¹^¡¦ekí•uY›çº.³¢g.b〜G6—”¥¥<€¹xrÑ[ì¿û;nLm@@9CIS- †+Á%Bd¶˜Ž^€m%|ùnEZ çMKïUéÙ¨.úï¢Ð,f䢲Ë<÷£(ÚJÌíÚ[¨Vto "[@/ E/Ã’ØÃ$NQÀDýùÑÏzx<ú±'?ëpzz] ^8cñ+^wèá‰_dxÑ Ùÿq¼ØÛ¿Döq‡çOÑ©Åyçt7’r^Nϧ='Ùùf$eø¶é67¼“’ƵSÅvx¾z+)OÂ4µ~ÝåÏúÝ.Æ7¹Ø }æGéŽ÷l|SA͸ Š~Ü8:§¼¦ÖÅú§Ü^âóÑÿƒ‡ñMvA¹¬_øeµ|½å-‘os^J‰ÜC†Ø‡½ºëú l-•·úÐNéÿÆÏ‹COÚÖhèC÷Oi‹õ>8sˆ¬t£”Á(ÇÌa[iܼÈÙbV(CU•€Zq‘§J!ë“Àj*;pþrÉÿ }_èVÃB÷EÅÒúKèH{$Æû# )1õâ“8&tÄ›3i—) ø?“Æl¦ -™±…!À„M^iø]"Æô°áE@²Déˆj;Óýÿ.à!% -Ù†\åaÛPèq9oÝ>ÃÀUJPèb{ô¢û·Qñ-iÁè/,ª”ÍbŒBá­wßJ­®Öè—ß±Bkj£KǸɿD@Tq»ø¬Q/Ã’²·©ñ1ú 2<>úIG?ôä'NO¯‹ƒ½f4›b É®QßO†×Ì=3-/þLy~Œ€†óÎénää¼ôçãæaϰEßvN7#'÷M·é¼á“4®)¶ÃóÕ‹X’:–Y -Õðfèï[Û±±c›¡{¯N¸©û„® ‰1$tÔÛŽwÿ¶ñ-Ðó&ë}–ihÖ0QrÆ…5*k+—nöohG¡u^}P牛£)`]‰ý—(í3|Ý¿DTëç´@NWÈég8¬sŒ3êhÖº³-Ò%rZ"§mñ/·ü—ýªInÇWñ!â‡ëw!ˤ²ñý«²Å2]¥©od=b&+Q,jÂFãxQLëÏÓæ\@õ,Ï , …6é2*t/›Y“é -ÈOœK†¬Wßœ‹Æ„΀֎Èú+¦Ñ¤]âõÎåø«€›ƒçlFZ¬ºÅðç­bÊœ‡²`íºáyž×-†CoİüŠØ#_çp~Î%å±U3 -Kâi®‚JïËó…å)Мz¶ŒOó´ZžÖ—'ã¤QNƒËP[N›˜¯BI‚ߪ -¹®€ ”Øùœ–TcXºn£ŠýsÄzûsް—ˆuº¼­BW`7™å¶sÎJ>=dº'Fl{xÄ%Lë²M@FËÉùíš”ÛrÞŸÏLGôûäürMÊôµùµÜü$¥\בªj§‡{(£Í£®÷ o`± ùuK¥b ô¨,Ö^ †-¨øÔ9¬‡5w4¯l9ynQÜ^æ<F¢DSÀ]ÆŸ» d©ÁsêÉ’A+4ã”Ð=ú¯µ-ècF@µõ\Ï .V±|¦‡•Ò1ã cÜæÓ×þÐÔ¸w.+ä¼BÎÈùïä<±Í`-©FÞ;¦S)G¨Ëþ²˜µ‹]¤aFYL=\J/‹袡.[½hȤ‡]4zÒÿ3´ÑÄT×ë•q|IðÍ‘nÌ”çE^Á±ýZ—Cyžx¢cÇÞ¤ÿc¶¦çXâWKT‚.šs0ªPªö®küM<ŒÖ(Q˘ó´ÀÓÎs±PΨæ±·†¹=Äü)¯¼iÇf¾59ÍÅH„­‡>>ÑóZE3ðmÇ5&]j0si^eT(¢}ÒnÿhámUš+®€Owi§ÏiI1¦ò¼‹G8¶ÏêíÏ9¢^"ÔéòþµŠ,ÀÈ|M‰[yìÏJ>=dº&²=<â™üÞ& £åäüvMÉmû×ÃÓ™U¤%ÞüµùµÜü$¥\ב©j§‡‹ˆX½¶oÞkÁ°ú»çÐ_O5Üåœ1ÓÄ»@Þ7ÍH—©qØiº8”êGtŽýé"qIJ)y=ÂßíÔôî˜.ø¤[gÈù4 kÌ0ñ颪f¸‚…úÞ& £åäüvÍÊmû×ÃÓ™U¤%ÞüµùµÜüd¥\ב«j§‡‹TgºJ˜p*!XO}ƒ%%t††œhÞ]€WÖú1``k·@wp+sn€¥&ðÐ×Vû†·?ðÝ Ô *[?ÂŒŸóèoÕ·Ìô˜jà…ŽÐóÝŒÆÓù™¶$Ⱥ#°z?ñ&€Y7ÁD†ú®H±W— Î% múÅ1é¢ÀÂ}Öǧ‹Ä‘Öóü—.¿êòœ.ElË£I¤š²ÆBŠôÆk|ºTp²ÞŒ\@PzžgðèTÊ–åÚ½@wEimK[Æ,ИFÑûñ"Á4ÐkÝêÿC&Ý ¨SÎ^”6é™»hZÓ•XÓÅ ö¦+ƒ¦'Îzjÿ’ÔìÓ›¥¤‹9h˘rr9œæÿïâ"àMéhIß©)§Ìz5釣ý¹¾™&îFèÜf|iL¬/ -âØC?ç5b÷ÆÀ¸ ùÔþT}=Ò”§ÏiIç]ÂØ¶Ø>G¨·?çˆz‰P§Ëû×*²jmW½UåÇ¿Rɦ‡L÷D@¶‡G\Á´.Ûd´œœß®I¹-çýùÌ*ÒoþÚüZn~’R®ëHUµÓÇÃEji³ø:¦š¿‘ XÅ-í¹£ã6ãøâí6pWŠôöhXøa -²ö#A¾›×ž'£oä!“iU¥r;|øo¯äMÛ6úÈ9×èr®ñD˘òpv­¥2Ñ7äÎЈ5£(V0±ùðmH@Z9"ã{³Üã7®½EüÇÀbÊ4â–ŒÕ9M¸&}Ƈçxd¼õBž¶ -áÐr®Ö{ÛÑEÅ1'î´î0ˆRjíE%AÂ¥'J14z”áó­@FýÈ™Bij"7À"=ò_®¼+¿ëà„çì÷y3îPZ„KˆðqC|îQ%‘ø£JTgo1Æ^£¿a¯+¨Rj®Iñ¾<›¡å{“Å€›n\Cé;èT)ÐWôOËÙ=SÂV°V{]¿8HŸxò Å)@xȘ»qV`?Ä—ïO—¤<ŒcÉhn»rQï]yeI:{VÖ–°<´<)Ï Zn „½GÌ=:¨ûô1K4µº4=¤ù¿‚0‰¡§,"áGL {+ºBmÔ·¢ ²&½gùþÐM׊é¬}…fàKV»è®Ë(¡¸T¨<_Æ3«¢ÕC:Ñ+ñÉX”C5a‰zD–rÓ_á¹ÒºÜÄú’•é!ŒRU3©‹[³“ªAu]ÛE;}NK* A¦ë6 -TÃØ?G¬·?ç{‰X§Ëû×*tƒ‚a㦬 ácV”lzLÂð/d{xÄ-,ÎoÑrr~»få¶Œ}?Ýά"-ñæ¯Í¯åvà'+庎\U;}<\„4R=]$þëÞk ¬ tíÿÞ¡mÒpDNšrsI%ÀwDçâ}ÖÇg‹A)­ï×ãwPI47æ/Oka2(%ô`¹:}'tœ¸ö]h`´@ ”-k7¦š ¨²'㜠4¼ï“Ùküo©˜;miN‰†Æ»Ö/割Œ<±®¸{ï¶2°\cA[ÐGÕD4ËèÍ -[Ïó 9‹ýEšT]»óâõ²ìÏs‡Ê%§,¦.Ѽþ¼:b}E7ª®=ôñuQ )õ>w|à¨nò|L»(PƒèKÔ (×Þ.fÈzb“žx42pÆŒ†1r޵/Òñ cZà D¨×–ñ+ 1Zì/,?öÞæf€Iw볞Á¡+0[ï¹2½°õbž¡…4§Œªh ÅSšÅ°è^±ôa{¿ƒ—ø‘ª—ºö[¬µÓç¿Ù¯–äÆqºŸSøA|¹Î|„,;•ï_5ä8–©i¥»l7Ñ5+Q´ ?ÂÓ`Óe(Öïÿ#ÖËë1ž"Öáôöq““ÆA¿éï ¤·%¤Õ§‡LE@²›GÜÁ”/ÛªÕËÉåmÎÊyûóáéÌ*Ò%ÞòkËk9øÊJ™×‘+¶Ãë‹h Ù ÓE7x9êŸû|1îÇq{ÞuΙû¾1®|!0êǨê{qãÚ“%CÊcòj˜iÞ½f iNžGk½œÿ -Ï¿…ü;²ø×V¨‚ËÆô•¡¥Îe¯:Çä¸F¸§¨ùý“óKàO©‰Ò¸þ‡þPèDÖf|A¨ -eγöPEëg¹ñ[peÃ)ŽßCCXjé›’;ÖúødÑPDìË3ƒqq¨Jý\‘!çU6ºP†œ‡Y4äf‘9§WdÐÖ÷þpZ§àôgô<í0× VßkDchâæŸµ<·P…V¥åÆg‹€jʩ EÚSò\¢BñÙ]#§5rúûý–Ͻïý9èRÑzmÉ=µ¢sÉIu‡Bm/écòÅÁ6ìâý…ñEÚ´ôú2~°”ý_@¼õ:>ð°Šm£<»:ÿö#‹TQ ŸFHóZ¦ -¾ŽPÂȼOKŠÂw)ÆÕ»ÇˆôòzŒ §ˆt8½}ÜdÄÕçÒ­Þþ“;ñé–Hvóˆ+ X$ôs»Bµz9¹¼Í)9/c><™ŽèçÉåeNÉôkËk9øJI™×‘(¶ÃÕ=âVœÄ[”¶–.À <þÚL ã}Ò]ÅLã*ë:];‰\ã/©ŒÑzH Ó3ˆ~ÿ -e¢ÞÒe ¹Zëy>~Î5€=e¹Íï_¡N’ÈE_¥\›ä̹@ÅÖKKUtÞÐó laãŒÊ~ËôÙõI×Ài œ¾ ÜÐûúümŽ?±:U±%c.nP%¬Ë[ÌC)¡KX\×”ÐubUV¤5¹ÌXŸ è UÉ)X¤Ïyº$ö¹R¬—ÆñM—©>£=bž£Vs -£Aõ uÉÐŽÐ0#Óœ©E3çRödqLž‡¢×â?BN7ÈéOuѤÀ œS²ç îÔ@½¦’E)®aÍ㻦kYD`öÃû´”˜9dÙe ÖØ=F¤—×c=E¤Ãéíc˜@'70eD¬Ýz -­óõdº%FêÖ¸BÌ -*—í -Õèrry›3r^Æþ|x:3ÑÏ“ËËœ’é×–×r>ð•“2¯#Ql‡7q»ÏêëúŒÆq·‚ú; ›ä2ÓèD¦™dì]¼öÐWÈGþºLNc£aÛ:®Õ{qŸ+a5 àáÔ1©°HÝ…>f}8•[#“:ZÛ›Æ$Œ€ dTÅ.–hp¼"K!~†,>¢…K_¢ÈR‹fî€z=¸M|²”’èPØ{sž!çX6$1Aη¼âðj®®jïÎs¨9aÙ,FÌyfQduI˜ñÄž%/ôÐä]=r"J Ý1Ž´=ç2$ôàºpémîøú" [í|EWÐèÿ)É’Øææì¢™½¢Eì Ë•ç1YãŒSQ@§¦}žé™é’V(—œ´¶0…¤¨ -p•5Ï)þ;¼OKd@÷eK((Æþ1b½¼#ì)bNo«Ð bˆsVˆðöïÔjÓC¦›" ÙÍ#n`*—í -Õèrry›³r^.ûË™U¤K¼å×–×r>ð••2¯#Wqç7qZþ^¥TSÌz”TM48^á&ç=ùª¢® WNåí.Èg¥9aíGÇa;Ç'ð˜yÙ¬ž#çeúVÆ Wjò swwÂdÎzÖ"Íœó^[o©ïýY×R²JcR¦;ªSî Õ3f\ywt2åS-”1ç Ý£ù˜zžzbÓ•–éj3ÒE±Æñs¾Åª¦Tô_âœÐ‚í)Ùâî}…Öß®ÐúD¶ o¨âý¡ÿ*ò¿VΓEAíuÿ!;Qd½2fE/›õDO=’΢½ gà‹CSí©>¾¼x©9kTÁ¨gËø­(µ¢“™%—¬Ý+`•œY÷裖SÒƒëEŸQ¦÷×—¦¥§KàZJNë’X³¶ÑT¥e²\¤¥†Co€Üê -¸Þ§e- M–mбŒX/¯Ç{ŠX‡ÓÛÇ*´7m³ÜzÁ[7§Õ§‡LE@ÒåaŸoq  ÷úùi…ÄçÉåí_ö«&¹uîç>Bð×ï>B–IeãûW $ÙŠd*Ÿ^2²?vjVe“nµÆÈÊõvz>íY8Ÿ7ýÚ´ × Ÿ¬„ñ> ­áôv÷"šO©}‘¹žÒêßÍwÿnYý»¶ª'ûü{mYOå´:i%ËôWõtƒîX0û2hô Ý­€Ë—Í:ÝÕÒÚ -–ñ=äe‰¼¬‘ï5ëy¥œý[Ûfðο¿ ü+3˜›»oˆ€ÀÝ~ÿapìY,½Bk[¡ýs.TsnUŽ`-º­s¹8ëÅäËl×5ë°îbxcøBàÜ£‹Æ¶‹öϹ_ÅÚ@À¹¸£Ã–¨öQL1mûhü1ôøôï’¾ØÓb«–îq»ÌsN;)w-öt‡;ý;ÖÏuxÿR©^› S¨RÚj Ž ÝS.—½ÄÕ%tŸç¼ !ú9pâ†nÛEÚ5Š˜Óœz³‹n æÇÈŸf‹Àœ×íìÒ?çB¶ÕCJ´—Z±BW4ñnÄjX«…=äÓûpë/¨:=Í”Rò§g?èåÏÙϼøA§ËëÇê\¡£ŽßS"q|¿êð3œdºèmå¯À¤RæO#EMóÎi5Rr½žO{VÎçM¿6-ÃuÃ'%a¼w¢²žÞî^Dü%¦„”"”ÌÐ=PW…ª¨tOIþÿ¶c t÷±X¥5àn“é ¼zí2 p71ŽE!KÔÇÙÕyŸÐjL­\އ~XÔ˜¡*¶+˜>ÝE)¨>#jí.BZcËùÕò4±À2n¤†i-B5•YŸ°2÷ÀÎO±óGt¢TJ«tÎQú=úÐ(Ÿ-2—–õþ ]=qÕ½Q´W¹ ö"%É»½¨Kè>…’aõÂ3¡YI­`ú·ó ÛÖhÿ¸+YÖVæÇD+Š!"θœ»¡ç÷\±OC÷/›ð u+Uk…@º#Ï•÷ ÷ÚŠ¢ågØË#ªTyw¾è’u¯ÒR6¼AëÐS]µÜzc÷­Ô -(pKkÿX+ÏêE°R.Ïa ³v¸@@.TSiç9€NäMt«u_ ÀbQŠÃáxÖ‚*%λZé¬:#³zRJYÖœgâOïÃ- e;ÆÇ)ñðüìg½ü9û±?ëtyýX=œheœY85B¢—ªŸ8|aºèmåoÁ¤¾íöi¤¨iÞ9­FV®·þÜN×=‹“ôºY~mZ†ë†OVÂxï\e=½Ý½H©,c«N–ێ׭.oÀý(I[#èØÃ~t#Ž¢8ö».•[;øñœ+UN­\ú/QïÕZŸ óG˜K•ÐÊ‚ò`-ðŽ»õ ÝǰÙk!—Óë}Bws1ÿ t.ºa‹Ž[¥F%WÔ S¨:²7zb¬ÏŒ‡KÝý…CLˆ¤Sç6íŒCiy—¤»«[Nm‘þùÀBj5¨Ã&¯J¾@õtÞƒÞ«½ˆè3úÑwIÿµîb”’¶± 8GA”ŠQÕ”!¥R•ÐrÞ¿X€Ý\©r2@ΕrePÊc°½ØÒeÅU‹‘»ùÞ8×'ç•x#nõ߈PµbÙ¿Q'"ÑÚ6ÿîÅâÉœ5µ9±{àn,–¸U9†XR•ˆW E(‡#WέÊ1ºPÈi/´ô™·Œ²ÖVçЕRÞðóŽ•ÎÉ!im1‘å|zn¹PÒ8=f¦¡Û¾ÿçìg½ü9û±?ëtyýXí NsœòP.÷QNâø†%T?ÑAÈtÑÛÊß‚I¥ÌŸF?.Í;§ÕÈÊõvz>íYœ¤×ÅÈÊðkÓ2\7|²Æ{ç*ëéíîE -ku©™ÛœñƒžWW=¯~þ½õÈž·nÆ{6öW²¬«‚j€VP3tqñlô¼ã9?ºy»GxA]zAü0/˜W*¶Ñ:ú×y\j/Û}ø_éüi×Kè!¶S#t¥¼îÖjOwÀÓ¿"saÇ}H@zº)z¶‹ñ€ôtèæïF+êß[|rÄ ól7nC5¥û܈œe#'v\ü˱´M¡8-k«q„îiRÝË,½zy-:Ç€ŽiŠ^¢œskŠJN-ÀÐQ•Ûþ½D-otÑî;ãn-ü„öÿˆÅËà,•Å¢$lÏhþ˜ˆ`#W¥bIº‘FÍ-Iãž\º„î­¨HÌ-¸³¨ÛFàBàœÉªµrAJ7<ºøqÒBï>x‰V“6/£{: ·éóh¹Ž s£˜7J´{Î}È.!¶]£Da§Q¥à10»s^)Tn•Þ±»Ii ]ùÎЙb¬§÷á6Så8=M$VüéÙzùsö3/~Ðéòú±:·R-«Ö¦¿IÔáR†Wdâ$ÓEo+ÇϤRæO#EMóÎi5òq½õçãQÞÅIz]Œ| ¿6-ÃuÃ'a¼w–²žÞîÞÂ…§ŒQâ3úÝA¥´.:pŠã¼ èY2$tw^ 5ðÎÐ+U•¶iý0 [@ -¦—¸CUHµ¸Ðµµ»¸‘F† -ÓË - ˜jñ6Tè!À²nIÛ>Ú}v)B’"p{Öür0p¬T¨Áë7x‹QLP.Îy)¶—»Lèã¸ËmBGàVçÿï¡ÿ†£­†X¢ƒÒ­Eþc±|û£… ·v@¹$’À­¡÷Ï9°+*™åÉ9êjT8fHè®.mn€.‘ªæ=Ö»ôEà ;„. ˜Ý(PȺÜ_üp Cf)†ÚN-Ý«´:e¸¶t÷_œ³¶œ÷\’ï({m¿GäÎyȶW¡=zâÐöï¹y—œUÝàWÒÌÏpÅÃû† ÜŒ£ö!\­Ému>wZâNkÜéïpÃŽžÂÄQ´Aþãâüwü.îøk]¹RM½@+¨“ªV2öpJ©$Ê­RºÇm$)>CáG#ÿN”V)ýwNwC‘ˆ8wÊpÝÞº¤6{̲‘sØh Û<•LCË8„ʵ„v˜è߇ÆRÛ†«•¿þK ²ÆC1H¥hÞ;{Å-•*ç‰pa^·N¦è½·™jµéiò74zö“^þœýЋŸtº¼~¬þ@/™æxß“‡Hç—2¼%'™.z[ù+¸Ëy|º})jšwN«‘‘ëíô|Ú³8I¯‹‘’áצe¸nøä$Œ÷NTÖÓÛÝ‹Äê/ì)”RÂJ¢3t¦œhP¼wñ„ZÚÝ=pg¼Z«•îq{š3«Qä°ZqÎk±6ÏõÚ3–Œ³ì-]ŠE¼_§²—¡»š·rÉ*­™@‡íCCC.€Ò½Hs˜ÐÍ3)j/J!¶½ F‡™±ü—ý*Hnd×aûw -Ÿ@‘H‰”Ö9BŽeRÙäþUêvÛò<ÿ7ÕîR³·:#‚A4J½ÀÔ“Üh¤ÓÛK.â×3…\:ç2À]$âðÇÇ®‡D]R½§@W­F©ubÁ´ÐDXYW£9N߈MBoe ^ÓSà^3e7â]èE7Ês{Êÿ+ã?w.ª¡äÌ(t¡–ö(Ï­µÒB#2úJ—yÕ1*2p.šÇ´Åœ´{òNèžÑ"%t°^%Ž:Ÿ_.ÄÁ¼V ”C,­ÜH‰Ó›"8Ï®¬qËK9' X÷\)gP@W-”¬3÷ÑÔê˜Ð'†3ÏÑè¦~é0)DÌIïý1‡„BXÞjHÈ•ïÿ¼à¤§çú‰“Ÿ¯Wœ4·¼†ÿ¬×J4©ý£ âk’ÚÕîBßÿõZ‚¸œv®«…“ããú~ÝsqÒé¼õÛÖe d%yÏ,±ˆÀ§¿Î4n’¨3è¥è½64+ô*>¦ééå‚m2o™­6ªe~kAÆMvoÞ“sŒ$RGè 2/)1Š¥W;?G4o–m±<ÂÎ1Ðä’ cöÚlÔùôÀ™£9§%¸FË;ôÏG´~/mä|z•ÃWšº2r¹Ô’ïuÐYã–EgmþÑÇ¥0Ï•xŠé^…Ϊ•\ çJ̺‡¬é^:Xo"c<' é­qnú€VäYcåÕê=ès -=…–Gä Í(*§+b)g(Pó2ŽÛsþˆ©(Æ2Úùô2G ­9œOb©IÆe-ŽÀ§/OhÜZ"jüè÷fŒãv¥ñþôÞs0TîòVCn‚·/8ééù‡~â¤ÃçëÇ#-"uFšM¤öëò5êë‡}­p…Ž,Ÿþ -x.§ëjaäøˆ÷Ë}ÏÙIv\,”ôo[—ñ¸á›“¸<ƒ¨ì‡·‹‹hHÙt͹AzÚŸö 8Š©xç® Ü—f W¸uW8Çq¥‹Å¾Î€çz#þOŒÎT^Üö6›¹Ît®vúöº9t°n95êçÒo7–èü¦o‡QŽmµŒ~ÎQ¢î7 ”( ‹ÆÑÓ§/QÈ%YK”@.ÄJôœ™Ÿ]ZpÍ{¸ËÖœ—Ф”8DÐÔþ–èžrÎKóq%(QÚ‘bјY97Ôòà̵ rÄÅh•”ô”eœè¦7·äÒÐ[¨Ö8¡×àIî£[@ß>Ä ùFx™ßÒ[P)£\Jô~BŸR+ aw4ô÷¢-*”Væh¢5ë|z™ÓÖ'·™³vë[Ú8Z@'è]ŠZŸ¾HûT˽"“ó@9e‘Òz:ºh²4Ÿ¾ýC,–ó8ˆÎÓ\Lcn!P9¼¥”ȹX]>—` Sœ™„j—õ™‚V=¼÷ÇЦõmÆM+޾ࠧçœù‰ƒŸ¯W„T©kJßðQú%áhêë‡}­pƒÜòé¯Äå´s]-Œñ~9£ï9;ÉŽ‹…‘þmë27|3—gð”ýðvq¢KZ ¬ƒýa/_½úau×ö xw¾‡ÈÀÎ8/¥î}sÖaa±µ{6+ôâœzÁ e¬QèÝ'³QÍgUšŠÜqÆ™ZÞpFëÿYˆ˜ŸQ¢.2Zúü:O!ZâÔ92¨¦Ji‹ ÇUß¡DÁºXÞ#¼l<Ô*ce0F2ŽJïÆØ"k‘–X8c±`R(šÇôÂÝ¢pöÒì†ÔçwFÖù¢W¨ßðÅé'N]}¦«Ni耮5†Î ó✖Ht[hÞ„zlmÖ7—z¯Ñäc/b`½ÛcݺÅÒh‹Å­ç¸õ·þŸ¹¥…¬7|q~?¯A$RNç¹?”\ZÓqžÛ¾D1•¾‡ÑÐ[°Ç6:¿¿°G\Ìf„ *—Ü8º¢%ÖM按+…ÔqÇQ L2×`©.Œ·"×´5;¼÷G ­ÚúVð/_pÎÓó ŽüÄ9‡Ï×+F¼¨¯S¢ÅëŸÒd¹^é·ÄOÿ¸|Ø× -7HÁ-Ÿþ*A\N;×ÕÂÈñï—3úž³“ì¸Xéß¶.ãqÃ7#qyî&凷«‹4Œ¹ëO[}üi'Öä ¸5!›É9/\óÈùüÀ[¨µÜ›f ­ÎyTîEŒ©ÚÆI05xNãäõÛ¤ÿø†‰ôÈyo•,ÖŠÔËÐSY GwN¹Ä!qºbEi-íV$}çy®"ŒÐÑF3a}¢µ|#qqx"«Î!©µ2º ÝT)“.±»tè)ßÌ”¬#¤§˜GÖ #¼´]¦ºí}݃ÁÜ)’ù ΧOŒÐ9éî²5pœl7Æ" -©Dgž£ýíþ{wÿèÎÑ[HÙ8…8åzŒ£X C.%×Ñ]¦×9äb²KÆ}ô,:rÎ0YÔPÝÆîÿWé•KLMù€‹Ž®Æ8V¤ÐúqtÀ¡•†ˆ1*b”Óh™sâØÒ»J¹ å*{ôGt¾"-YëR¤&ñ2.¦Ðä{ì7\_jð,xù‚ƒžž_pæ':|¾~\œ[‚y+‹“ =Îd¹_é×L!©¯öµÂP{ðŒ¯¿J—ÓÎuµPr|Äû匾çì$;.Jú·­ËxÜðMI\žATöÃÛÕEšÁÒñš²œø·=ƒž-ï‘§72à/à°‚&7bçzÓ±wLÏ9ÄRïR>UÏûj1 9Þh׿üÀ7aNÀqœT¢ÙëLæIÚè‰bÎSoÌŒÖRšƒÀöœo.foáU:BiÄ?„JG¾´D59žA/­ŒJŸŸsL0æ×“pÞ¨ˆYP0µ€qSËôŒóJ'K[ÿöÀÑ„’ÊØ? ÓÎr¼QBdÂÖRKãd<[Þ£>·öDâ`ƒŠö!¨<µ4N –˜Ày«|ÚC‹ÜmC³ê\,²B§M\ “œ*À1VŒœs¸ gnÎ~lEœsc‘:¦E襗»E:'ô¼‰3j¸“‚uˆæžÃÌ -5î:ÆÑQ0È/¹×+äúG±\Lîºú¬rÉ¥’Yc¶f ë)ëeôJ!y=¼÷Ǽ¼ÕPиÞÿyÁIOÏ/8ô'>_?.¶§ÕÅs½Úµ ¥ß_£võ;¤à–O¯%ˆËiçºZ89>â}=÷ô-þµs],œôo[—ñ¸á›“¸<ƒ©ì‡·«‹ÔŒ¦_¤j‚‰Kê z·±˜îér è›Ùë¹UJÖ=™íÁú#ã1Žíã·‘ï&LÍÇ\-¿íÀò èÿ•ò{Œc ˆyÔùôÀ»¿[¦šd~€· @Õîæ»©’ÆY‰¢õR…¤t Šy€ÐcˆWáŽw -ÒÌø\‘¹Vñ¿Æ²3ttáìþÒÚX -Ћ'Bèp—dRé€.jc %€NÛýÁy‰iAtûv”C®¤rIŒRa„Á uÐ”îæŒA—Õ[\¤¶1¹tÑ[SA"»è±ˆƒtÚþŸº”4¤«r&Ý4Z&ä\0ÑåQ,Ó:ólQCñQæÓk…7z”Ìé+-˜f„‹&¤6f–ùµRFÐ{akÎ4…Øœ°Aä¤SrŽÿÜ*åXèÆ9AèÒnŒÓ ¸¶¢Ku\áx -Eòá½?ZHë»ü?ö«%»q^Å'@ð#H®s!Ëäeãû¿7 d+¶©i¥Ó¶š˜élD)&T„ -…‚„öìèq^^òäq§·Ï›°’MÌ’î‡,ãÒ.©ÑG±»‹€ »Ù¾A˜)(óm¨Óç£-“ÏO¸¶§Gôòzô 't8½}Þ® Åã5ÍJÆ÷õcÞ§ý’Ú)ɇ<_ìrçGðiÒG²Ë]?2/;ç»)#ç¥?Ÿb´=W‘ì|3¥¤½m¾Å󆯜à´öDi>¼ßÄØÊäD¹ìm åúËÊí—•_Ù7"ö”¸˜.Ð}¾-kþb`»Êz¦Èb,À½ß©ôÚ;¬‚-ÀÙ‹_4dÆ™1"U¼A¤Ü\”ÅZÀÞFÈyPàìSn Ù†ÜIµ~ì>ç>”н$FèŸþ#²ˆ¢(€íxsX[Èÿvð,ÏhDl‘çþcâ˜ÍßgF¥ˆW!óŠÅs‚ÄÒ÷вغ(kO—Y\¤%k}ü" «. Þý{u ÑŠr‘ˆÚâÐsŸññ©B€ˆ1‡9v5¯uÁ²Dtç -–¶zÐÕ™ -ä˜Í3lÀv¼€dqè’¨ïBã×'9ËWüíød «ˆÞ>½FwÈø3æ8a‹9 1ÿ…Ì:BR‰é·\]¨¤xEêÍ?••œÜÉÂd3îšM" Ç!×óʽk‰a¸´pßE‡†N™ó4¥{@ vøh«Ei~¨ …üéѽ¼=æÉNoŸ×q ‚`ÑékšvÆÂ¸´KjÇ$ ×´éb—;?‚‹´éò_Ÿ2/;ç»)%ç¥?Ÿb´=7—xóÛæ[«JLÇXZ<¶Õ­qnÌ^Ä€˜{®_¤ag¢¸>×É"Â[Їä¹7#,©§Ëøoâú'åYmÕîòa>ðú%µCäùb—;?A6]þËÀ™—óÝ”‘ór~>﹊dç›)#ímó-ž7|e§µçÉ+ýýîš‹ÌåÄt¡%lN-BÏÉÐÕëJ÷d2®r^”R¸žŠì1<:"‡a® “p¯.ãóœWÍtiñ—•ù%ÑJ–­¬JôL+D ‹5S߉"ä¼™SŒØ‹Ä­&÷oU,„=ðñ3¶<ÛS#ÅÂ¥†Ô—DŒi·Ì1Ås#ÛâË˜Ž‹pE#dÝåE´Ïzy±Ä½Ë¸z‰jDA'HT·X>fŠÇîÇŠñ›¿kbÙôæc¦œ!kÚc”{FÖµl!5édºGÒŸá¹R‘=L×3¦9´Ú·¢YG(YbÆ¡ãf;z•Â!¡“s½ìm»ä¹Ü"—o»ª½¼Dp]$l3°`OòñGeJ`Ç…î[VÚÐø9'(J)àd¡ †1=KX{ž*d¢=<îã“.Nté‰A\Ä;è.Пa-–º +;îÔ \áöñŽåðÑ–XÓüT!exô8/¯Gyò8‡ÓÛçMØ6ÕÎÃ-æ{Ca\Ú%µ#6«”ç‹]î?A6]þë¶$ó²s¾›òq^úó)FÛsp‰7¿m¾Åó†¯|à´ö,i>¼ßCQiÒ^«©×Þï|VûýÏjüYà~ræÎ-«È7*Éþ¸’èÌ¥ŸÇϹ/´þÌÙï;£ïg| ·€EŽ€¹'JŽ 0•Ÿµ‹¿Íñlu+ç¿Ã•oåüO,Ý•®¬N.ãçÜ[´jDA Ü„ØíŽõš:A•ÔÓe|9ÈÕ,¤¶0cï#@ÜD 5¦¼xÖÚ÷¢çÖ¨\#—[äòÍ kÎÚ\‚¤uKGeyÖ•œ?ú3èRc’¥ iÐ>TqoE|DʈsZŸF[d9!†t-©BN´_/Š Õ¸oEãרËbÞE\/‹Ê1çkF1B'rq1éÙòãÝ­>J)½ ?™æÿßQع¢ý¶ô}h|à(i©â,ç5Q_Y’¬”gŒœ‡‰ mB3ë )[Ì" =¬sñØ™÷p.oFA3îÀ·üù˜,WHȽsº»Û4¯\oYN 9>Ú2ù±t~ª@\üéÑã¼¼=äÉãNoŸ7a°¤2Ies›óù%µSú×–<_ìrç' ÈÞ_þÃ~µd7®ëÀù[…W€‚ä8Kð2LN&Þÿ9úD±Dö•;WV}n&".Â…Báë¿”h99íÆŒÌËéýtfp‰7}Û´ óqmy’tyß\„©”Q2 -ùàhŸmŒsrN k%èxj\  „Õ“·[ ÛBw]FŸÐqç¨ç-ÀÃCÆ ý¹„N`½º†Þ­³û -Ôúu®›¨^$¡ÔIïŸ-hCc©5ÑC%H”ëþß¿œð²;ôY¡¹4J´ÿœÛ$£äÓq¹íD¦-kãâ,)á^#ê“,[œBg’ëíŸçÖüïô>}‹ô4dñ¿œŸéY9?úñ '­KÿŠNÐêDT‘ d©»¿è8„«g‹þÙ"À9û¤KÍÑãP$mÏÕ?pû—ˆj’÷ßúm¡º—ñ>«SÛ×t·S¨@æX{–ã_ ±éZú—D„\²O-ç@>­y„TÈ¡54„Ú±øh JTÜþ5‘,çXç܃&"`9CÍN¹}¶4|b÷õiý™jÏÒ?po£AN1R®×Àb¡ËǰT³¿ez;ÌLÉÞ^-ÒËëÕ‚Þ,Òåöö¹ -,ãXö‚i[Ç:„ÄZ{eš‹Ô„ùqÒO,R)ÉgC2º§6@†^ê-P¹fKÿÀ$P--ýGð“0®-S’.ï«‹˜12>NÎŽ©æåñZp/èÖ9¸¦e·*¶à&ˆ9ÖÉCʺa ýÇ"öl—±ª^kƒä,Ì´gJ»êwÒ"©¸jy_ÐcÅìÈ”Þi¢S²˜˜—ª¡vm2îJ”´Ô¨Q4Ãé ;}<ôAN~<Ó 6z¨èŽ‹Ô ~{CLŸY'0Ïåjþºƒ®’k àAÝjz ˆ.yŽSôhºT³OE·f”bM—þsnÑ¢ø4 8œu—r†”¥®O}È>$eo0êºc§‹ Nù‚ö¡âÕè&¦Úr//ÏhF\Ô'tŽìÓ££… u™þX_~üV7æXÛ.ta(ˆ­.ƒé¢OatËsÇ9w<*h.>›BD¬ ³B¾¾oóŸaº[à Ò<tÚŒú,PG‰Äa ÒÚ+ö߈OEdGtç}B÷V 6€’Š`à×ÐÑ&¼|ù–Ñ\LoÐhõñ¿«Ezy½ZЛEºÜÞ>7ÉÊ8þ˜Yuëä”ÒðˆÃ=Óæaw0hÀ¾^%-'§Ý˜“y9½ŸÎ¬"-ñ¦o›¶a>ð“0®-S’.ï«‹(`H<T ®X¹@·Û†°7ðvÅË:j©çFY˜\ùé;èsí§=@ÀR9»œÓ9?Ìk,ÐMì»ê{ tÄÆÐûcä§åÜ-p‚T’º$‹Agqšs¯À…Â^ûï•,^{h,6„zv\!_wRÞ ç?E¯97=ŠuÎ÷-O顉kEï_]"”RjßâÁ+JnèyÿÀ72î¡@ÍŸ©[Qÿ,`Õ²“óß!ËC9únÎ -f¯í?Hƒ.ý—h€‘]Ò… k¨eÑ]´‘ôþÅE!Ü«Ð>ÙbáHëœ÷_¡!ÒŽ=ï’,ÖB™Î°çÇCGˆ²Ëó^¥…J©í¹è…RÍtêB ¡ìõ¢>¡£&ì™ô>¡3Ä<ã9Ÿ’ñ'p…)üÒZôË‚¸»WqnwMùŽ¡Œû_L,ëŒ?P›-†;@nvSÎîø|›×¸ùáÒlQÅAiúl›h~F×<\QŠÄ3:ÏzfvÙ{ø—r¸ hi0Å‚K›)jÓ«Ÿˆš]rÅ«3DH1ÇŒÿŽ>”ñc¦¶fÆè¸Ïþã·ã“9ñÝtÇŸsm™Zzè·:›ãO÷:nî‚C¯‚éŒÒ<\Tbr <šúL9C º§†"÷©*ž{>·f =?µ:§ƒžÏ€å¶Îr¯.‹ 9ºTD‚ܪOʬñ“G²øƒ‚æùŸ'åÞH®Fî<šÄ1®#û >†¥Ø°ÁÓ[²·W ôòzµ˜7 t¹½}n2’PÒ”’bXÖ)QÊÃ#×D@N›‡]!©,¯mºL´œœvcJ楽g†#úurÚŒ)¾mÚ†ùÀwJ¸¶Dæ÷ÍEJÌy\$o/Ò¹ôÎÐRâZÂ:.§¸éáp^ç pþ3À­¬ZÖ±,Ðm¨êµóv·ÐccÐíŸæ‘÷Ì•˜CWǣ˜¹œ œïó8ÿíÀÕ>Ó Š–«”½Ù¥OÏ"fìB­‰ ›ÉÔ˜]6„‚ÜcÖ 4ž>zT¥„âS` ùžÀô AÖnÑÕ]O¢%ºÌºic¢Úíþù/€?Ã¥S>£“>c0Ê’÷Œ>ÙAY÷ˆÞ«2ª=€‡Ñ(sLNSžK®ûhÿ97m¡PÓ¼QŒ´܃´ðxo‡PçÎ`E‚˘"k1~F%zDÒBzdècBލï/ÆWºWÑ'xâ#8O[D =k;ê­ôíèøE”²cCî9Ï ôˆ‹ÖŽzº1Y`±¬—T…úJ:~9Jn8úøŒ'¾ ´Ï.÷‡~ÖÐJVÖÍ[¯ôñ‰öUtü+ÊÀZºÑQÅ"{gKMZûÇÊ­è;ä¼CÎWÈùÏÜP”–ó†&N\ÂÂ)¡'¶tÆ„e¡ öqñþµèÆØŒ{cÌ!¦ÒË›õAÿ‰`~½xN{™¶£T±K¨i7Zö¾ˆ Ä§ihP.³j5fϱÓËë96ýŠN_oŸ»[ü™Ñl¸ÂzýcÍÇÓé”È~õˆ# x„©_ÓÑB8­+—·™‘Ë0æçÅÓši‰ýZ¹¼Ì”L_[^ËeÁ7'eQâ§÷«ƒT .'+P‘¾^ûÓ®À Ô½×ä÷HánœÛaÌÊÁVèqwšö%oØZ½ç°Þ\UcsA›ËQÿ5&t)9‘sü÷®8¾Ð¨Õ£d7&çiㆹ œ6BG­)Õ"„½Zna67Û¶1t”J å¢P9©+¦­¡¹ zÒÇWKô[X -ј”GÎ-‡ÐǬ¡æÞC¿ðÚúêŸóPzNà ÕjK(‚&}Í`-Ü„SBò”SèLšSè䨇ÜûsþˆúßL²vE.7:Ñ —4±`Ò6tE©Ï\ã±`éëèø¶¨ õ°³ DHÏÉ9ULi, ظ‡ž£1Zï‰ã«…À$ù€;XΔˠ†G½Å˜Ð:gTºAñ–6åæ . ÕjÆFT ²yÆpn þŒØrGcaUž‘GjÙ ‚²>¦¡E·ÄËlDʸ ÿœc§—×slú;¾Þ>··øx£‹Ë5%FuzètLd¿zÄ0ŒNÖé©Ñ¤uåò6Sr.óËši‰ýZ¹¼Ì”L_[^ËeÁ7%eQâ§÷«s8Í. µ<;ñö§åýOËÿz™¶ÀUJ&çý†½®¶£B—¦=ënîãNq÷Ý*Õ{àä]£Ò3ºÆû”ê­Î[•g”¼ûËe*yíH.cBc,Þw0ãË…c·ÒGÒ ÞB¬™¢ÝV,ìÔ—¢ œ#rJ;Ê‘rBj$I…îGÀÇä\ –¢ ohDE¤¾åàº$öD‚¢ôŒzkIˆ*'ÔyÆœKqæ¼RÙ_Q„bõô1 eJËl„„¢1{Ž^^ϱéWìtúzûÜmŒ èué+_ÿ˜Mo ï-dÚ·D98·ª=ç §mD3jµ‡~Êÿ -}'tñCèc -FÀ¸û¯¹¤ -I+t -^jªr½Bùp4MÕÛÈÅYS™Ø -Ý q£<&¶å¼i_órp^¸§<r©ÔCÏpC…¹wÅñeù¨bM<:^ñœ*ŸòŒöÀøœ TÊYúŠiNµL!™ûÔ2¾Z¢áEÌü6ò§WP©–Ò_¢9õÖøØrÄ[ä¼GÎ?Nº•¼¯£ã‹…ƒqëóâ8ï€ópþ3ÀJó^*ã3.ÑÝHèãG®´W ѾôÜ£#*¥" VŽ˘%H€¹¥­ž9›9[Æ’r‹*D}HÌÍ£€²e´sÞòñU΀\r:‹@yFw™'N-Åâ¯2rÎÀN}àºÿ}tlxÄú˜—4|ÑåÈ_FŒ³æôTÎ ¡”ÖWÒñ­1¢KsÉ™lK­²g¥ž>¦¡7\fã„Â1{Ž^^ϱéWìtúzûÜmÌ@Ödfk»¶-#Ÿ:‚-ÿõg@p“õ)r8­+—·™“Ë0æëé²f³“_^fN¦¯-¯å²à›“2ƒ)ñÓûÕAY—ª—é—]q´Vû’7° ¬Ð¤–¾ä ¨Wà ©KÎÃzo ”s+÷“w¸ù -7ÿ™û©‘ën$Œ#éæ~jk=Q€•9S–ÞÈEX³Bg—¾e :¥ê_6œ›k¢$½­ýØüÙ¶xÇÀ3¦ ʹ¿ŸãO\B£OrÌ(–©×ò¾o, Ön0>>𬠨‚ªæl†¬´ÞXÆçÜ¡JÉ™Xˆ)çý”¦Ë'ség‹‚7ëu>>ç¡òF}¼½?çÐyUë/h¹4½ÑŽ/‹˜è}!Âßþ#ÎïÒ %®¡i;Ð š&䜠yégèäTZÖÈ…N9¡[dÏJK›ÐY™S£Ô±‹Q³Æ.q–¤ÐÓj JëY?LìC@ÎIjß`üUúCY7°–Œô¢U棖«¼‹ ÜNÓÐc«yVÀâJ|üsŽ^^ϱéWìtúzûÜmI®ÅW§_Ó©³\£:=t:'²-ÿõg@p“õCÎNëÊåmæä2\æ—5» ×ý–¯-¯å²à›“2ƒ)ñÓûÕA„Ïe¯ýýjInW‚û9…NPêuÁGèe;¼ñý#¦H©iRÐÝõžWaJ¦ª2³¼¦²½tךhò]€34å½l:”¬8g¦žó Ð)®ó>›?Ê_éÿŒ-϶7°*©¦°U¥“c}|uÑøçvÆ v<çÒ¤O¦ãsÎ1 <>~ƒNI©¤šVœ3¦,–´Ê"PÃýV9‚ÒÆÇ. Š{CãZ~|±P<¥„Î10iªwÅ:—–1)* ÷sÅsqÓ7mqÓ— T¼--ÿçÀ÷ñv›6°é6}Ûþw­}oŽœAKüWFài ˆAXrNŸŽÖ{g†Ä¢ÐB\R²žvŒ#¨ÚvŒèø·ƒæV‚œUYÒÚ)Ö×ù–ó?‰æ_âü+Ðw9Ç0¢Ê çOÃiRHXçèí;-ž =„Ñ)§‹6¬½ºߢÏ(—¢ÖO¢ÊEAj;C_žaGM9§¥MŒR0•04 ¨jÓ‘­U@ÂËÛ´Œb¢ë&Á4…¼ýõ½üx;?â¢ËÇÏ÷ͽëìÐ÷ÁBѧ™^²B 9Þ~Ä T0åe —“×§™Û2öçÃÓ™éˆþ>y}˜ ™¾íúXn> )ó:hb»üº{ Òàn.x††V” ôoÝúp7pQ.а>‚5lNÁz9ïÿ”ô=àáÖ^ÏÈ¥ÇW:E.Õœåz)”*#­¤½HÚõªÐQ‹¤¤|4+ôÒhú˜=Ê f=ôñ%=±a‰«3 •²˜ÁFªRŸÆWtñrFt9^ œÈâøœ'Ž‹aED{ê2f¹x±œ3‚aJMa,ÒC?ÞGŸ»²Ö:¡œá¤ÏLZÖ°KÖú̘u!>£Ö·$lÚ³>~ Hܤ ÍxÏK¿›ôpC2¶½Ü8*ëjÖ«úñ1àOIßnÔe|àÞJߢãOv J­«£XpÏŠÆä\âŸKŸ\Æç<±%ê,Ô¥žýørIê ±xdDÿºÌÿöñù\+î5訢XˆÎçŽoÐÄSQZûh¨=ð9ô¦æ|WçØ.oÓJÀ­]7¸ÆækÜòòã5.üˆ[.?ß7—*V›µÖK7Þ*úô1…ø’Jv÷ø+XÐø{ —“×§™Û2öçÃÓ™ÍMË}×o»>–ÛO>ʼ–â…ݽ¶âWí¥ÝŒ1”„-ÐLZ_“ÃÚÆÜ@Ù%ŒxÒý!à8žsŠÖˆ&ËX,H!MùŠ%m•‡×QíãhI$ ´D£îJË çuWåb2™qÂrq=;ŽÒ9m‘Ó—Ë¥‘å4"© Ïùñ• ׌ê Þζ¢#ê~¹8”‚95=qæðJ9›”¡¡ôNz|D†Uµ¾ÖÇoREÏ<hg´è3c«­ç<Ã(ªÞzmy.pZ§-pú"ðVÔÎP–ã/¤:Š#t%Cà2@â~*¿X˜´gŽÔbB9ËE@LµhD’k>æ-ç¸ñåmZÆÄfÞe`ÇØ}›^~¼Æ¥qÓåãçû#Íþ̈tKÄŒéC¦×¬PãÇÞ~Ä;T0•ecÚÄåäõiæä¶ŒýùðtfsÓrßõÛ®åvà““2¯ƒ©àà׿EBªê,bÊ¥½†U‚8G}0V‚tÁÝùe(%X•KkÔ+Áøå¢Àѵ K4(öCÀøÀS7¨WOVÅ‚TΞ^ŽiχÀ‡M+Æ9®ËˆÛb^LéAÕʲþ•*ß…®P"&ìϼe.ÈgÌ‹Ç×JP®œ‘sëpgZ¤ pºNÿU±Á>#ŽÏ8E^ÑŒî©àæ½”¯‡Ç·'ƒ¶¶g c* ÅHQrºPZçO«æ -ÄÞKÎ$渔h,3rËjʹ‚ SÊJÇ`½îÅÜQY¯µì̘¬ÇpátFzY#§5rÚ"§/6)…QoF8§Çš>¾02˜x?\äà¦ù·¸ŽÏPóïábë¡ø`¸È .i=q“* ·3*ýM=šÑŒ”¼/—aÍHÁ´Jw(\¶ÅRcÚh—·i)àÑó.‰Ý׸éåÇk\ú7]>~¾ß1µGsÕBtLj¢M2½f…3Íüa¿Ÿâj “å¯h´œ¼>͜ܖ±ï—Û™ÕMv{˜9™¾íúXn>9)ó:˜b»üÚ¼ˆCeäx õ¥^}‡­É¸I½ÿ†–°ô"žºEŸhÂjqÓÞ©vUµÔº }Ìj‰Á±Ëã+αa<ç‰u1LØ´‡>~¹p8lí[t|à -ÊÜ3>ðÄ»@@J5ð®;¦š½Vȋ➶ŒJzµ¶Çú˜Ðc £’3¢#q?ïf¨ôÄ.êÐÐ%eÔ%ðVú&ßGZk{n4f¹phºöê2>ç®-çH'¡.Òsž¡\Q¿Y?»Iݵ×ôñ›”AeN`•û:¸ÄHç9«ÜÀ{?èFn¡Ú¿X QsÇgœ«YBÆ%€SΤ!—kNea@®}V¿\ÒÖyZãO >ðH£H}¿A'—®‰âÅŠqaÝ)Ú§;àôßp·3lú’è­óÓиÖ>Õ Žþ´Ejëm(ƒƒ k_.ãsž¸Î°‰¥TŠ!,e¥3˜÷þ?~¡gÅMqsÆ„ŠˆÞ‹ùñ„?¥; ûI.tÉX.Z¼žÁùñýiÞzà\HA0cf‰œhvðgô'‡ó'ä<ñÚ@mb1aØR ¡ÞDÇ—óÈæt¶šÓ8mÓ—SbRÿL<€Š[ÏøøÀJ¥=ESVºõÓç“ýó(äyIw|Ç/tÛäÄñ5Q º÷už!³(°•œ™E@¥ïÐ ÕÂ^ÎPÅ£û“ Ï–ÃËܦò½2³CŠ×Œr.€¬=ð œ XÅ>+ýxu!hÊ{Їt­TºƒÜÙ ©l—·i)Ðb^šwX-v_㢗¯qçG\tùøù~G‰Ååó¯)Òyœ¢M2½f…Jv÷¯PÁT–m4ZN^ŸfJnËØ÷ËíÌæ¦å¾ë·]ËíÀ'%e^Ql—_w/ÒÍJàÜzÇ»)Ý•ãö§•ÍOë%ðÏŸÖ×?­¬Š· E_l¨+rŸ¯~>ð?Ž[#׌ûoö«&¹q^Å'@â\Ï|„,“ÊÆ÷¯ú ÉQ,Óó”É“9ÄWoeŠ ©f«ÙhÐ-nÚâ¦ïá6¨[ØÀ滟-lÞÀþ ê| [naËö¾y} -\MÚ*@'¦ù·ÍâÇ^sj¹8äÍ|À÷ðúöD$ÒÞËáÙ6Ðú c  ooYÊG €\€0·µg|‹Ÿî€Ó_ѸAIÚ#¤®qN w”ò'¸¿¥”ï0¾§±½â3$p¿œÙj<©ˆw%¶'•!M¥@F´ˆÈ w¯çÈÙ·I93õpÄ'䬘µSÀ°ôH+‡#'0¶}Ä: ,Ôjå¹EˆnÓ8}·Љ›!ÕÝD>d\‰šlØrÈ€H ¥¶}çí°—*+mÍà†V”5ã FÔ*%DÊ*\{¸ÊÑÈ-‰íq>¤¯D­Ir[;Ÿ¬•#g l5^íH%µ¹6€¯ó^ß9d÷f€j-òák ìå¬!»7­)dõTHª"ƒ$ì‘öè•S@Sw܇ԟ¨.îŒkj+~O1Û³ñÁb­P©Ž¼@ݦ—Ïû4(—IFŸ<û>/¿Î¾åÅ÷9]^?n¶•”@Mt1Y´ûË£y>žø7ö— ÙÝŸÁTÖé Ùh]¹<ÍŒ\‡>?/žÖLKôsåò032½myL×_Œ¤yì<ùßîR±”ùË©çÓÞ@g<EƒØ päÒVèÀÉJë=^,,K[í†õÞÿÖr 16”ŠFÜ¥uËÜ&ŒßÎßÀ>(ÒÝ×)!íeº1/gyÌyèÎ:iT7ωË?+}{ºCNGé^†ò^P“ò)¬S+ôñ]Q=ù‡NßqÅ#Är¼Ì JP™ x;×»¢[ä´ENß.þšºô Ç«¥xPlóV µ„й)Ï9c÷z çÈAÅb!ÐLÒÿ±¯t3D†j!9ƒü@áœÜSânG1(å¾CDàÕŠÜŠ<‚Xx?™‘µðOYÿ†Î…z{ùñV!sXÊ1—åxè.tÒV.î¨%”ÐjTKï¤ô?¥|?pi «óµÅv©’õ¨ À IPCgo‹zS~„-*(?èç†nþ?™ÛÞb`à¬lKSd[Ü轟ާ¡ç«Ë,—iöì½ü:ûžßètyýØì‹  yþ’©ð}eÖ<ŸNR^ƒ¤Ë}>ù Leýk†l´®\žfB®Ãe~Y³ÙpÝoyÛò˜® ¾(IóØyr¨ow)Ì:_%Nµ-wÃf£¸€kCÝÀöu½j -ën€»VZ¸J¯Ð+ˆI¨X·B'(¤­\b(]QC"7¿£¥MGãûb²Ôúâñæò γnjr9žõÀÐÕãÆ,¤J’¬=0ë”Ë^)º·RÛÎ1t)c¼‚ä½#WŠ™¼Ìû)ŽYK˜) \ÜÙ´Ç=:?ÊŒã÷uÂ5fNÜ’ - ´¤C³§.jeþŸZžªò2Š=R×3|1W±‚) Ò#íèVuÏÑǺWQ¿¤}±xÍ{2“s…b¥…!è:ômQoÈ^S/ÞŒjê¡—£}QÇ ³ K=€?Ã\Hÿs—þîb”rȨ+ é1FŒU¦€¹KM[àä–sƒœó^“s”¶3Ÿòˆ†NÕ·Q­`¹leŽ OïÓPÁ4/³ɲϞ}§—_gßôâ;.¯›3Höÿ›ë3Û½ 5Ï”T§× ÙÝŸý•²NgÈFëÊåiæä:ôùyñ´fZ¢Ÿ+—‡™“émËcº.øâ$ÍcgŠíôvw3'sñ°r„Ô[UÖ¯O[Uå -ÜÀÊ! ©nTÙ@?¬à­Ð¸<ˆ?È¥õfeèòûýèßbýßxÁ ôzL3°CúŸr¾ÛH{ýø;ªîª¥½£BÚúñ¬¾£æìÁ%=´`xJY,µÚ^Ó)À}=c`~,õŽɃrÛÊDDj!+©B%i;ŒWÔ=ݱÿ³Î·ÜÓrú;:]ŒÂÆ]v¥[«ôî¢÷ªè˜îRüŠb{E#¸‹BÉ=„~8éæÿÄÖêe|¡«û¢ÄlHÃFèf;Etа˜¹¶*8»T¬í,"¨Ü@’jHè9ç=ÖǬD ÅjLÖ¢ºbM=†-šR«ó ò!›¢Ð… -†ÌŠÎ:¦’CBW¨Û´!„•‹sN“a¬¢æJ·Véã×"ñ„^[G?ø3Ü…*·rŸsv[DàÒ´$¢·d÷siºá9·ÊœehÎ 5;ç’ðÖ[Øðô> J‘e–‘}öì;½ü:û¦ßétyýØlLs~œêb¾/qšËô#Ó1tù±Ï'?zz•õ¯²Ñºryš)¹—ùeÍfÃu¿åmËcº.ø¢$Íc'Šíôvw­F§ªA”[Qüm?¡úGÞµ‚¡jõ ë¢A¡ H¤”qƒ»ˆ´À¬óßÀ>,MÇXäª[f8‘{¥FÔ¶eŒ@y)1 Ñj@µ¸³äò@-ã;‹§: - \§(×£Õ=Z*¸bLc \?3V 鈡À"1S‹€qÐKª@4¸$.ÚAëÏh-*>ÌøÖ( ¹ôˆ\ϰƚCZcà¼H¹Mã§.ª)b\@£žh)nu;× ©Ë5h% ÙÑ1Ê%¨X²iÌZ!QÈZ ÅÔ¹·ˆµ?n3g„¾& ôÈ%TsÌÌå®(\bB7P|`è´î]‘ë`ÏкiÈj¤€µåÇW#ÍAµ"þÏ3è20I°Bš9{HmzA0ÿêïÓБKq×ðg2¶Ü*ƈ1¬ -\ë4%©6Ý+t‘èvãsEÀù#Á|:[¬ïJËP6}…>eé³ÅœnÓ8}“- F=£$*ˆm£ Ê’VÍ]ZŠÅ…1p÷ýÈò š˜UX¦F£–/,iãmÞñTðñŒ”x¼ï§¶¡†Iƒ¢€Z‰ª8>ÓTNQÅG$\lRS)ûÉîŽÉt…μ×õ1¡»‘¶”CÚÀ¸Ç|žé´Ø^Ð:C«IC€AÁ¾B¾þºCN¿‡éJŨ.㨱”±+ëB—8ºôZsF*9¡Kƒ®='a:P7L¨‹ $xÆ:úˆž'‹Ö"ÍOèpQétÆ„þW²ü±¹…A¶Ü?p£‹ñ©’X°[ ¹ ”¡Xá”]ïаïæ=_AÿÎþ;ôbÄž¸üÉÖ²ˆ Ô.¯Óé4²Üísíמ½ÒÓg/úî•.ï/o«Â µ-Ó?]÷„«L‡^tz zíùÀŸWþ þvn×_ë”e¯O.WsO>Nýþ\jzfUðZoyÛrY>øêI™Ï½SnÇ?ï>¤ õ”K̺ÿ—)FÒiyEî; ¶(ÃzÇ pku¯çC©Ø [¤Ôèéò@º(ml0ã7.1Ng๠zM´Üà,9H9W@º‘–Ò8£´Pí{r~Ä„ÏôÄÐD£ýg—œ¢(.Šz¿fdÏîkEÉ*‰Z-+tÜõ¡1……Á¨QÊÀÕ<0f䋸—¨.šî+‘”œ|°V£‰f€îªŽ-£vÿ£ž1æ nˆËøWPÛôÇvœn‘Ó9};¹ ¥Tsç -™ÄéÌ ,ž¹”3æ\?QθTm……¤Å{÷Fy~Þ}™ÕYÁ*Ÿâ‘ò -\½E i`ûB÷õ±žü8ݧ5púvËé¡ô-¯ÅölcLè -‚¼·€ ¥¾7ââÊ•*Oߦ˜þ…~2td´TPd°æ?²tƶöþHõò:¢;Uåå6VÿÜî÷Ÿ½ÖÓg/ûîµ.ï/o«Ò -EîärV*Þu…«N‡>}©‹2ÉràÏ+ÿ -ávýµB•z}r¹š»òqê÷çÓ3«‚×zËÛ–ËòñÀWWÊ|î½jrùy÷!ä7R•ûïú¿û…¼2ïí^C"o¾5暨OäM[d˰ÖqÓñ-·>÷áïž32-ŒŸ¸ÝðzÐÇ¡ /¿®dîySÍÜ|ÙmqgL@q²D–'ЕF%åtz ®ÑôlAGp¼»ynXÐð¦ïë¢Y¤Êè¸eú;CSN_&÷†sH÷uN#ŨŠBo%Zçð:îŽODé†ÓÅPkKÉ”Uð :¼ã¥)gdxÒ€euÃ5h¸vÚ[†Mvï’¹¡Æž?VTè8­Ó÷DEýÝëø,wãÔè÷ €«ëaÝÏ!‘ë{üäóÒj¤ùƒ—ÎcÒŠ`‹®?zZ‘ -h–2²'ÛÈÇ.ºÕ½ñ9OÇr¶{Éóº'»¬Ô|²â®_™÷Rù¯fI³­0F]IÀªõlÏ?b8¨n çñT9=B…®֑볋D…Ö­o€cß[»Æ$ºú#Õòq1–=q“æ‰%AkŒÓšÞ@4 -zäâ»À†*Ž?¢šYFàTvõ|L²0p¡8¡í9Ý"§5rúfÏÙ0Œ:¾÷w—Ä –|ZD픥èyK£ù¯,J©9QOŠ]ööŠ!S‹ )1p­¯{OwÈé÷h‹B± ž¯-P(’exànCT9îC9”íŒMî ‘–šQÎeª½?[ JlI1 Z£²dàJ-­üŽ‹Kâ†{ŽßqwOÚÕò!‹÷œû^b’,]1*âødIÛqö]H(!pc‰®ŸÀ<ÅËY;c{D×±•–p@LZž çNãé’!š»ùKÛK¸cz(C3*Ú}Mhq]¬”°ã$|Ë×q§Š°ÝqºENkäôÍŽ+´©\BbTŠ=Ÿ,5nÇ÷üйz4Î×óielxÿ̧®‹LÏ@=#³OóŒkÑCÇ7†*=’e|à>Ÿq ŸåªrÜä2t¼iO ‰žÍ­a„>~ϰ•ŒÙÜYNd?›gÝ?§ñt)Ï8žÞsÓ½˜8*ò¤Y+ï -êb^¸Æ4ô´r.誘“.ÞóÚKÜ*2,¡Íkר.ºn ¦9W‹f4üˆºÿwÚØ+Žçù# 'Ýå ¨YÔóñYnÐYÏP–G$4Î(ç\zçÈ–r¾•[Æç¹@åº×ò!Ù2µ¼kÌ-Ç÷üpè Aˆ£ºŒJ—b Õdé ¨ë˜ÛÉ.¯Ó)²0.·±BÃæ÷Ÿ½ÖÓg/ûîµ.ï/ow=Ñî9hbbktß®:úôè/’åÀŸWþÞËÿ±_Éë:ð*>B$®ç9B–Ie“ûW}PrËÔ{Êä) -ñ+³Qr7ÛÍFÃ=ãýSRZÞœï&N®K>ÕhïÜT’ëÍDJû¶ù6]_ø`%Mk§*ëåyµ#ùIjþ[SŠóãÞOM»aRƼ¢õÉn|Æ<‘žI³°wèÞ« O™år#Ù˜¼¨¥ K?ÀD€nžìöH*“.ÈRâþˆŽï禱’Ýÿ…Z¤ìö¢1¡{t¤jä½nicä]!_o€ïóÏœQ£o.vÖìõæRt¯‰ŽyB}€TÞQË 2Jyè&*†½)F`½‘ñɳß"ç5rþÜláó–¾…F°ó,´×û‡ÔŠ"Ô²qBÇ缂g–Þ¿WäŸq–}॔=c2(ºXŸ‘Zަ\K@àrÌ™"¬•WÉ‘r[¤ÚÏã¡Ïzšk<µ¸!bN½—o, -RcªÜ€ªá‰Ç«\¡¶zádîÀYj>#È%®Ðw›ÿC…ŸÑZ6šè¯-~§ÎµP?ÇE€.€¢GPϸû4 ,tìSîðjiCh’@¦8©›ç‹´fÕ./mYÀ÷8?Í€ÌþôÑ+=üyô¢o^éòöôzLjÚÜ%¸èýñ²v)m“þŬóEÞï|þ¾äåSò©‡–7绉ëÒŸO5Ú;7•äz31Ò¾m¾M×>(IÓÚyÊzy^íƒ ‘ÿÉ8õzØ_ö¸;o®ºgCؽ'ì³ôÀ¶@7@ósu%мÑ7VÈ×Üór>Õ|o”Ž(gL0ÇC/¦9Ôðu]kŠé/­[Ÿ2Â|‡¿˜7Ö¬W¨Ä;i\O ÝÛK iÊ37¬q|¥gÈŒ9d' lŒq©G/•ÚCÿ²^N“‹ž|Bù8¯ó'OhÜÀ¨^ŽŽŽ;;ï5®j‰ÜZ…½ÑbÌ6ÕWª”>œð§QΰÄïPK®º'ô!;¿ÇsK¹Šã›‹+±—ËøáÜ H¦€À=$bî½%‚T4oÏá+B)‡3€¯¸XDRÈ€+R¡¼5bÂm(™Fí ™ûÀ:›Eì qåâ³\!ì{hc¬-fTD@å½ÙbHè~FböQ,iÏÇ„8/JÍg4£ïÈ.&¶»Æ”‹µ -{Î8T;òx®Ù‘ ¯)'ï¬õòÒ–>í¡ÌO[PPúèeþ>ð¨#‘€wþ¨Ë -…´so¡dÒ®ñåâùœ6òÖðÀ[NDZÌÓ–äxÀ ÇŒæRÕ€œKñ…>ƒ¹AÛq–µhø9ÿTç7*¿^þëåŸ@ƒ¦[q÷~x¼•ˆ|еS"Y;"úg——¶r»žfÈJþôÑ =üyôšo^èòöôºªË \d:õ˜å~8²v)m›þŬóEÞï| êÝüýSRZÞœï&J®K>ÕhïÜT’ëÍDIû¶ù6]_ø $Mk'Êg“绘VStÞèuÃjrö5p¾x‡î¢¤º1-ämsèÖXA.Ixú¬;tMÖ·¢òõø9ÿˆÒÝÏs«îˆ:ð¢3pq¶Þâ Õz±D€n+÷r‰`‹deú¬{3ÂTû ;ü!u¹°ÉžÒG• ×Ìñ‚®;z-Ùâ‰ÅUΔCа =lûwg‘„ýñ¸ç4è+"ÔûJ€ã¹å>äŽ\À( n%HÙ$d`©L4âù kæ5EåÜ4íÙùJ?õLEü¨U×Ð}[vyi+,ইˆ ýñ£WzøóèEß¼ÒåíéuU8C̳Ýò=%­çù¥´mzïf/ò~ç[@PÉ˧¤´¼9ßM”\—þ|ªÑÞY\êÍß6ߦë ”¤iíDe½<ßíÃ’³Ø¬ · -aÎÓ;ðÖ¨³õ9z`û] #¤TBuŽE.nÉEÒ¸O/„Æ®Æ+–Þ|#0ÎIû`7pûñ­ /‚XÐÿý:Ë™:7H%¦Î}ô*EÍ^74Ûôx™WOŸ©ïýã˼B5ݳ–1e®P·2îøœ›WÛAç>¡•вl@^.Jà”Gl¡ -–ù Æ÷– -IKÌ#u$òx^Tö8³°šÆãÜÅ¢V÷"ל»-érùÖƒ&ñ´(}Zø¯·ü€·¤Ä1“RßAˆÅM±ZL™ (êÞd1&tϹU&.) yc²ˆÀ¹tŠyFz)¶Çú¨³æ ¥€î €¥'}üä’E»è©](õ½hx±´|ΘCŠEÓÆDÁX,KÏy'N‘uo¢F¥L¥G›ŠØÿ›G‹¼ÆþmvyiKu%•ùi%õ§^èáÏ£×|óB—·§×UÝÙ§_©Þ‹PÈÚ¥´]" ËÝÅ·€ ~ìÞSë6Ë›óÝDÉu9?ŸßYUZêÍß6ߦë ”¤iíD9ÏwQFž6’+~M’ò÷¿¬üç_vn€©|1ÕÉߨÀáÐ]”Ť?MŸ2ßMÒwLþ³ùÞ°^‹ýxÖýpà˜¿Ò þ-ò]Ò}l”æSÉnú¿'»ÏËe¸/R¶ˆœ»Z*óG¯å¼B©u/Ù ÉyËÓÕúd7|/ÒÖ…K@àmÜEê¯ò°À=8¢}qfüÙØ" -EÏ\Ç‹@RÝ#}ÔÔ‚¼!ô¬{B/»R3æ*`.{aqTèÊtFX<º{£îj}TÖ­Rĸh •0"çÍMbRg­é_F~Z0¯3vEŠÚ$jrÆ ýŽÄµÅÎ]µ˜LFz¡‡?^óÍ ]Þž^WuÅçCª³g%¼—¡¶Ki»D@Öù"ïw¾üûU”ܸޝâ ,†Hüž#äó™©ùÉý«”lÅ2•'OVÖ#ªö#eI©f»Ñh€z¹}K“–•óÝDÉõr~>¯Ym¸ì7¿m¾Mן”¤éºµ½¼?DŠâ4¸ô³×Àínî™T7BưvÞú4å@úN,¢‰4ð,Ôû×ÀÖ{§òLz燨§£RR}…|¤¡qá\À¨Ô€:¯@˜÷t~D”>œsŸ»ž(ÑQ¡{âèý|Øttg‹›À#Ø¢'±B}‰Ϲ'R·µøÀÓîŸ#I?{hEnŒ(¸Çú˜J÷`)ÔØxtÙ6<}ø"m£aÄuKO5ÑF_ÝL÷ºÑ˜Ðªå^0à Ý+Ô÷”>¤¹x -×rñFj(½¥‡K28)p¢QtPÆ“ä½î?æX”QFtwsÁ^ä<Ñ¥÷Ýøút­”Zúú ÀyܬY-qEŠ…”¹BÍ»cè:1î }|¹TȤ½+_ ¯àÜ2Ÿý`oiv®¹/Ñá»›§¶$fbÙè¡+äëðrþ· -ÔÊFT¸€*…tóÈ©…zàã·!!ÜK-CŠÅ ´„ìüž¶*÷ w`‘·eHšW°Ñƒ]~·KžŸ(Ôž¾ù>?~¾ù–¾Ïåãןն¾‚Mç®ìUÿÀ‡µÒΈ€¬ó‡Üîü*yù–€”–•óÝÄÇõÒŸO{´5« —ýæ·Í·éºà“‘4];MY/ï)æïœr‘IŸ‹¶YVdùŽ"àÕòÞœ[>Ž]þúW&p½ÈF—Þô¯§Hÿÿ*ßñ¯zJæ)xŠô¿°¾‡[!' ɸA–üd¼ŒrUí ôxà‡sîɈŸGâÜ—v¼ˆ¦¨€uúðH R* ´z¦“'côX¦è:ÏX÷ü|H{"ÍL9"ëž[c"¯®—ÒK}üõ ª·—¼ÐÇ„îi±ìÚ˨Ð}Øë•>|õœ‹µÖœWH>‹†„nrŠ(.™‚r.Zúé"BxA¨…ú"¾zH/Ì!ÝÅc•3ë&À “QTC÷ -³¨¾è¿pÈÔ¥m‰õÐÇWº1ŸÁù+@²Ú»K_lSH_¤¯• ß#ç5r~R.þµDcö"ñî”är|…V§1ªZqDèn.˜O~¼`̇º áEÀô”ð -ÁäRCšºCç’c -Æ@´I ^|ñ#«ôómÒÏò^ -$pËl EÒ fZ‡„ÊvùÝ.ÔÃçô´€añ§o¾ÓŸo¾é‡ïtùøõgµ±O‰’Ë”.R¢…¦–vNôÑfýág@P§òö˜€”–•óÝÄÉõÒŸO‹Ûš¶Dn+盉“ö¶ù6]|r’¦kg*ëåýá %™L?.—*kÜ {×Så=ÿÊÄè -Õv¡ÉzªvÆ,s8twƒ"»ZR0ªô¬Û<à ÉJŸï†ÞæÇœöºÞb9žs‘Ò':wO§,{ÐG5F¬Œ!Y÷qûiàxKÿ[Î÷qSÞzs)‚1S—yt¡>º Ϲ·ÐÄ\#rÞfÞD½µDàÜ_³©F%:<ç|3 G®”"¶¡ -•ê^T<ÂY^ш’iD±TP¬½X¸yØ´å”+ìüaE®¾Z/•ᇠæÎøV.w(Ò†F0¬ÜGÛ q“óÐÃfÄjÜ÷ m߇8.©÷–Ði{þ pÝÐŸÈæc©ylÙ(Ò‚AHœk¼väJwܽ\"#eéW±´°¸ÕŒ¸K‹][y1ë^¢›ÓÜñ%z¼`LUC²žÚÅ^fzìvTä”èu|~!÷uî;éÀ ).œ× ÁÈ.¿Û¥û›§§²‘?}ó~ü|óM?|§Ëǯ?«Û èšçŠêc ‰oüŸV\µ½Y>ü nx’—ÇΫҲr¾›8¹^úóiq[³ÚiÙo~Û|›® >9IÓµ3•õòþpÌ9Ï)}ÔØ€äÞ±CEêp·ß¤}Ï[_ãçà|j1Ý.ÅzØ{ʲJ(ï½+P´]¡ÉzβôÍ:€¹´Le/Ýa/¯(S—zHgt­k‰LïË”ÓZÿ[äûrAÓÖè”9‡ÁÖ}z$ ‰

¼·¸TØÍ%pw–$À‡×¸3Ž‚[`Æ…7\%‚“#Ô€¾âNÎYCf–f‰šöÿнDQOQú+ÜEë)ƒÅáEÚò9m  öôBÚP¤îéYJH¹(C)©Dd½Y#Ö½ItTÖ¹æ>`=pôrÁÔ‘ƒŽ8ù—³`*­ #(ÕËïv)PÑæ§ÐÌŸ¾ùN?~¾ù¦¾Óåãן')û’‰“œè!k¥Yæ½Ýùüí’—o HiY9ßMœ\/ççóšÕ†Ë~óÛæÛt]ðÉI𮩬—÷‡ƒ‰DnvÆo{XNº"÷¬QØB…Óç Õv;öHõ´ Oj Õõ®ÈsöÿÉ¡ì÷¦swšŠ}…L_€¼hé‘›ò“œÅU^)¤Ê£2. -U¬g|ØáëÓÉSB‡o醒io4¯ Ætfì“Öð*÷M}qŽ/r/OÎ)by:å\ÊãX@*IbFr‚̾$ rKÖ[ùðZAȹôZ7IÚk@#*%3¨i߀ÆG®Ù[íùÊ M_«õ=ht•ûDRöüpHÆ+(Sß;ÇGî]ßBwÊ‹–Ú!ÿ¶¯|ûèY¢Å )rGnU÷´2¢•‹BëÛçè†Ø"y¢÷ðgÀtÊ(q¸R*¤TöÆ·#ªóhÎy&<»éó=p^çg5^0d´u•§„úW9ËUˆ”~”wû´½hÄŽØ ƒŽ@™ÝÅóãCº!¢õyüxä/蜄Ôs¾Î+àüœÿË~µ$¹±ãÀýœBšA\÷t„^ºÃ›¾Ä$«Ôe•¨yeÏH2ñâ­ê#‘J¦‰ÄŸðàn¥)kv? ›Æ9©ñ=“Nrò‚=Õ9qÓ½À5)læ£ß²¦ê¼¾¦®)Ãû3öúövƶŸØëôùþ㆒¦ö_;„²õKí¥DØpÁ)(™Êö·•ëÓÂÊåïýtY³ÛiÛoýµõ1_üd%/÷àJìô}wü!Ãõ&-‘ìë zÿZ;‚>U¾¸‚î&c4šÖ -6¹0ôvÇÃ&îÓçÞËý(ŽÎ -½µ;@Œ"U -•뮜‘µ•x5*’œÅ£¿Ê¡•™rÞUG¨OÆ—õH.s¶OVB"7ì]Ý"Öhw«DmEMòhé CêÂ6ÆéJ¯R_¡ôÇË¥$iAÝ¥6‹9ÑyR×1-þ#—ç¶Q÷±Nï-îB£)N?Z¨¥¦<öÐéGÍÊGå9«Ê£ŽE‹U ¹Kµ1rͯtNÔF;ŸÞZLR®>Vèã?#ãj‘ÑΘ ÔR5GõE+G¶8'ò–Dó8ZLï-ž[‹™Ï[r“Q.ÓûbØk}C)±ñS«1'PNNNñ8Üù½:¿b¬x¼\rRic‰€y¬`iÛPäÌâ©ImqÚJɪv±Xªâº^p–ÓG¿£šL×—Dèµx{ÆFßÞÎØó>ßÜâ­Èò_‚”Ûà¬p1\j?$%*º^ìë '0•íSðk¼­\ŸB.·ëûuÍnÃm¿õ×ÖÇ|Y𓒼܃'±Ó÷ÝAJߦ.½šZ `ÃSá±–¦䆛Û[¤Ž±A/©dÈ9ŠÄŽ:FÙá.7¸Ëù2q®;qø²­m”ùô¾Òc‘Üy„ú¤”…#z9€·ÃÙeNÎñeóqÔà‰1û'"Na Q:fãÏÉÝG±Lo,0s‘€MIë>i`ÉšG;œ8æ¹²©a»|ä+s†Ä¨Í2WÖ1iEàœ’¡ETºqò&£\"°ÎH[³ùSª¹Žkú& -K¯9‡T:üÅ y<Î!'áÀK¥ƒà2#pH¥•Ó£¶ÄsÎ3rnÿQK:¯ÖÜ|Æ¡ŒSµ2?ᡃ"1Gìü9“xÎÑ+Âù32nÓ2†óvž›ÔˆÐ‘¹˜$âHdØ;dó‡Ð‹¨„„v˜ã$^Æa.ç0—Z-¬\¼„òENê,Ë\TëÍ@G˜ñìôÑoko³ë[IRoÏØéÛÛ›~b§ÓçûNœ/áBs¹ tŠœ„Kíç¤ÎÞÍgÀ´Óøz͉·•ëÓÂÉåï—Å}Ín§m¿õ×ÖÇ|Y𓓼܃)±Ó÷ÝA$eþþçÂÅuŽ/àð‚Š¿ R¼Û8oø»òQFš:X7Šï6è5e4@çÿ™u~ôœ¨Ž½cú…Э騖ÇSþ»Œ÷TˆGs™8D®åÎ 3½T¬&s9y§ôD©)ÛJ§§"G…¾bøz¼Z‘¦ÌüõÉ=¯õ¸Ý3‚X0È0w¯T­D4sìm%Ô°û7¸ðóœïŒr Cé¥Ò˜·"(]µôˆ…5ÞA,ørncTœžs#Å:òúˆŒ ¹ˆÞñ–é9WKto z2çjETó¹æç¼¥vg”›7Œ…ê˜Z"àjˆ9åʧ!(œ½ŒŒÇèžFµñ—ìcJŒ )0ÞvàUæny æ{è¿£•_‚þˆ¬Õ+T[L™[Ó1$N\0~f;ÿãuþŒ9ÎøÎ7½µ@åU…ã‰Å–£³ìp—îrƒ»üÆKb³qžˆ0 -ao¦€ã§Qr)GikÎ6ÄhCwÆ¡ù ”R)³õ—ÔÚ¹bZÎKÒì|R§”moæþN§~ËœXÊúš4)V|ü댭¾½±ë'¶:}¾ÿ¸¡ÄDÚ*ZÍ·”({¿ôþM‰ŠÝ\p‚|e{ ÆÛÊõi¡är‹÷Ëâ¾f·Ó¶ßúkëc¾,øIJ^îÁ”ØéûÍAš7ZžÜIG÷ 85 -Õ©WàŽ—þç=ÝÎy¼¸ĺŘó>wU¡GÐysƒÝôbA§*c§ž:‘^ #LƒôH‰ôœ“¸¼b -x¼ÊÍK¬T·‹Jèúïˆå— ?Dæ=ÑP @z퉥Žr™¿>1½èˆ;á˜B‹áT}”x„êäT½¾"l=Ã[•±õ€®Ž/݉¸Ó[K*ÌŽZèœJœñ¥Æ!‹´G®ÂGÁeVèÄù‚y|;b¥úbàåxÙ/¿<§Ò$f@§äÆÅ‚Päñüá¶(’LyÌ‹š‘ ¢¿$1>~ºàTœ4"ëac—ÔTÍŽä2¥1‚s#~…\ž¡ôÖÊ+¬ñÑžžIqú€ÈÕ\é¯ ´ìp—Ü娕¤¹Ž17‚TDêã3Z"€çbcàŠÑ†¨òÈyKÌI¥sS²ŽÈŤ¯˜Š½$DôÑϧ/Røy1‹ôàO,Pn-Œ\n×÷ëš¾D¿V® %ý×ÖÇ|Y𓓼܃±Ó÷›ƒ4’¶ ”ËíA&v‚/à(§âuÔäÄå´qŽlgÚ݆[Ieé+¾Ý_~W)GoÈt¬ñ€ÃU”èh˜ªM_s®e¬Îi{Ýçö±<Þ‘/äãÑC-¢u$=t¸¹;€…^rñq|™Þ!—œ[ÀN6² õ—;C×ô„ 溓YbT'5â´Þ«Îœ &Þª1 Ô7S 'Êel ÓsŽ.dt¨ó9CKNêw8²\b‹%¹ùØŠ¦—KO[ÞN¡0Eª‡Sèœ:/)Óp>=çð–†àPå9•{å ù£©RÈ -¹0q@oé¨Ü@.ê‰Åü¶øŒVÔr=‚»°Ù+ZÑ38g‰ÙD\ŠBŸÞ\P¡zo²`.º»Ž³Åüœ·Tõ%úxkÊÐKDsëôšèòèþO©6•ˆr‰›¹8¡ù}úî?¯x -êçÌÒ[C‡`,ËQDŸL0R›ŸÔ9qó½»hª$§~ËèU`uyMh¹ýõ[}{;c×Oluú|ÿ±ÛY»ÓÖÕ·Œø†eë—ÚJ‰Š®ûzÂ!(œúëSà3ÞV®O )—[¼÷ÓeÍÕNvyXHé¿¶>æË‚Ÿ¤äå>÷ëôýæ .Ù–ƒxöQ˜Ï5àrýç–ýŸ[þÚ€¿€÷@Mm>­oÀ9‘ÓQ·žªž® »{Hè½í‰ê×çØN-ÔüuU¢µ+L¸»2E«(•^¨¸¼bp|¸ÎÁyɱréU‰þÂÌ;'tNµÈ8óF€NÉÙbB‡`r‹©uDM£€ÖˆK;caô»È9„|9®žk•>½\ sc 8^€qʇÍhJ±À«â€1¡Gut£7YŸ_éž´ÝüÖR“P9êDSj®ÈÆ!+j‘VƸ8½Ìa-a傽õЧ”‹•ÔÚa\œ“õš*õsG3ÆÀÑEâFôØþ¢ZGèó{:¥julFÓ—(€gjÇ¢ÿ°_5ÉÍë8p?§ð!×9‚eRÙøþUÓ”%ê2¯}ÄÔËÆcR­v£Ñ(‘’ˆCàZ¨˜zÌ-L)Ê–ø‘‹ñç¯<r¥®¨ÜCÊ5oeÅ1Û“õsÝvÐH¡¬äsÀEâVÜR,Èç5lP.3à².¦…VÒ¼ÕˆÆt¥ÕUjÕZŒê’óDQÊé«]²RÅ´4-s¤ÂX>㨷÷3N½à¨Óåã{vr¡£\Ç•ÊË<¤±´ÜÞ“‰;¦r¿ÃK0MÿFŠ%>v^ï&Rn—X·ÓmÏËIåv3‘Òžv½ · ORÂt ªR9}.^¤(Õ’(¨õ!cØßö!äöõ´:ÚÍÁœGâ•n7°<’T’?µÀÂòJ"6J?p£ö³¯®ñ¢ØN/sœkÀÃ܇%&óH8Âh0Gùâ¥yJYÉ¢ã3ŽÀcßõ÷·•ý9g² } žs-¤æ±µÁ¥¦-± 5+¾ˆ4—Ð…²ªÃ.„¨%ôÀ‡wsè\jì ÔCÖb’µ|ëzƨ›p—ý[‘PÒÔ‡ó”þ«JÏ9õíßô€>Z«ÇfÁä´ÒG‡W:J4²ô%ê€s(=eq)(Ý2uå¹Ì‘˳K N+¡k|xÝʹcºb¢ Ö÷ÿñ)G}‡s¨ç*¸(GûÊœ«‘˜f—"™{àšPÄÅ&ô1už¨Äè³DI æ¯D[:Ï¡ïCãØa}ï¸jî¥2¼)Âͳ•#†Šß˜‡²®ÜñÅâ5&j¥”Ä£¯´“¹î¡õ»ã2•²¢ò¡9æ]‰¥Ì3K$.|új—Fjùºª”±áë_gœôö~Æ¡œtº||Ï6Ô ¨h´Ô´ìoKûÈí=¹=yñwÀ>pz_F—,ñ±óz7qr»Äºn{f'=λ>íznžœ„éLêçâE´Æx¼Dª§÷ƒ—i}Ûz¦ æ(¾r.ê¨ã=€ -ÆŽrÝ ð"Ò· гEÄÓÄøÿÀ:z‡¥-G“õH*m³CÖZ°öЇ÷Œb|ÄÜøþ¢¶â/ãwÑ„]I.ËÅsZdD®^+ÃS®†N¯‰Ëiurý3õMh|CŒèž+Àd–”Û—ŠC±xížpD³°•X† œE×R¢è~K¶¡û,Ñ|H…þÆ8ä6áòš+z¹¬ Ãz³Ë;Ä’ÄãPá»%9D,û›"Î6Ÿ#‘Vd®Øg®ñKT(Xî{¿¥Ã],õc¨¥GÊk¬/&Y‹ŠäÐEcrê.*¼5Ñ ÝP¤aËÓ‡ Xgã^0üljÏNŠÉH­xÌŒÀ™F÷÷t³ä6ìZî#ÀÐ:RÐ+IHswIоÚ%+ ¼gZæˆ=ëgœõö~Ʊœuº||ώƉEêôƒr²eõkœ^1·7ÅÐÄçx ¦¢é±Œ§–øØy½›X¹]b}ÚÜö´-zßy½™XiO»Þ†Û†'+aºW©œ>/¢l“‡ÈG¸ØnfpCÞb’ºŠ7à)‘ÕN:»ïp¡’ÕUBz"·°¢•SÆSäEåä¯Àå¸ÌËoxwÜøŠ®$ŒýûÝî*Çw¸luê!U©fs57Þ‘ÃCì9wàˆ1—ÞGǦŸ¹:ÊÿO7L*.;b¯øá°ƒË“qãèP)G‡~hoT&î>:n·úŽ"øìí(PJ*¡ï™Ã3ž(äìqnãUm+™¯œN`ÜÔªGƲxì‘_‚Zï‡gb>ÂwÉrõH¹YŒCåªÙü¥ÚH‰Ã–ŽØ;Á¸±öZÞ3aŒ(þ”‚<®+|[Hs?þ Û«L2Iæ~ls`ሴ{¥ìo…¿Pšm‹óAMÜ«©ä¬ýø3UnA}Š:Çhá1å‚õ¬÷ÐÁ:‡¶(TÊJ‰zà<"·x¤œI+÷Qq|à,Y‚ãÒfÆz®µg}†\fÈe\þŒ\œÖ§ãæè5ô½ø¼Käšû.4¾VŒteâ¿Mølå'È`+>'P$–`Ü[ùøÀ#©¥Þô È<±ÐÁºYÜš‡F-Q¯£ Kˆ.Z/¼Âú/·ÿ] W|Ù¶ÊtHÖ‘J Gôýsî? éxQ'Õ%ôHYRýo#?LçLµ‡=¾ÊÛwÃRÙŸqtÑÌ},•`è?j8®Ø|¸È-œ¾Úedœh×e΀‘±~ÆYoïg{ÁY§ËÇ÷ìhl‰x›Æ Y¶g¥}´ßùߘ%ñÿé£Üïðh0šÿ‹–þ.çòŠ\æÈ凜Ã{¹¸Jv/œÕèºß…‰l_c–(S..ÕÒ—=oèfýPyEÜÐÃÞ]Ä"Ø…Ò•K\<(˜Ôäz¡RW”>C.3ä²@.¤D[䊱oDÃ{ t®-êû.Brráç–Všÿø!7QõèæÄôÆÿqó'ô”)X=¢DÃ]$³¸Tz‡ÈeÎÅ-àcΉªñÖH4d‰–ˆ³·*tTÒCŠÅe…fY™,ÆŽ‹".;8wÛ‰Ðÿ­öæ2¾\Ðsêåâ!sEõØüýºy 5ñH9SŒ+ZñÀ¹Õäº×Åi·’â”k%­ø–?Î…JÊæ‘s¿S¨PNÖw"½ßo‰¢…èq°ÈTbÜ,ƤæRS?…Îÿ/sÅ_ß}¬€[’|°Xä¹Ì‘Ë[¨¿Q.pÊ'5Œri¸ ÷Õ.¹P½.3’|,X?㬷÷3޽à¬Óåã{vt$ΧÒϱ,»³Fk¹½)KY|à-˜ŠæÇr¤Xä±óz7±r»Äú´¹íi[ô¾óz3±Òžv½ · OVÂt ®P2Ÿ‹‘ - hÊd+V0¬‡ÝqC–™«£Vý)Kê»Æ°öΤqÃy9ñV·ÛÃÀvËFâTŒ]GôŒÝ‘û-O…±‡¸µ@èIÔ%txKI¥Ÿ=˜‹Xqi.žå¢¼l™¾|@TV/tº²öíà™ñ%â–’{Î=ô";¤ýï;”лùÀ#ã‹)Z±â²>³®‹ƒ¬è¹É:ëÃË¥M¬ÑŸ·xäSŸñŒÁ¢ïŸ×\}6~ûûU“ܶÒ÷ïºÀC?`Ö9‚e\ÙøþUHʲ¨‘CÛb_%U)‘4 5[F˜qc«àr¾AÎÊÌ YÆÄ’u àZ°ŸAã3^Ir2ε1öŸúQ«¦ ,K?>3@°æ[¬9ˆŒÀ˜z­ç€®,—P¢åˆ­bk$p.½§ghR„Z1§¿aË=v bÞò—!¡ëÍ|«MÇ´F²CXĂᚓô(§"I¥Îî=ô £T+öëhÎ+0·”¡Q[@·ú—I´¹ 4‰À¥nPå&¨c¬©Ì§çéX -ÄÍËu.ñ¶ן¢Ø·ïOQ÷%Š^~üZÕf(fÁ‰uÃBɧ:½'Æ×ØÍG¼†iÔËeš|ûòär6“r>ŒëóÃÓ3«J—zË·-§åüÀ)e>ªÄN?o^ƒ©à<° ýݘÄ7¿êZ–u%K_ÉÒß~]¿–e=­ -®~]þ,¯ ‡4ßI#CŽ2}?kð -óåc ]>]®¡Ëú–½BŸÆžØ»+ÁÈ¬ÇØ«¿YƆŽÑÙïO¡öeÖÏlú2ëôôÏ"ß–‹(õœgÞ*¶ŒbG¼÷ôñ9Gæ#>ë-磻 ô -RÞÕ#Ë%ßêžÓ#«Õr„-îýïý3s”\{W°`va=FZÊmêó{ß@ÿ2òÃ\=Ê5=B逮{>ÄZ'tG,ñ‘-ªkÎèÅaŒHùÜ%³Ò5öQî9Þ]¸˜÷:^,1þ¹Ò ºÿøP­žó(jIÙ qsÙ²–QÕâxÇZ2@G§„“(€WÆ”¸Ý¤oÐáÇPŒþøoùorÄZñ·;¯€7â­µbÌ1„€Þ2æD„"Ø7h†)Tî·èø:¯PêlžA縨äã\*4ä¤Ù¼é–)îÑ €Žñ/©Îµàãg?Ÿ•D:'ðP·z¡º^äõgN Ôq#Ô­_€oóŸa<-ð°mýÖ5¾Æ „=ë ròÞW2@WÀÆ}_.|_çoWÔkR¥§u¾Ÿ¶ö—Ë#Œ‘„rº AuÙjÒ1¡Ç¾U«¦ô…*‡h}wèѦ[nBäÚ>¢—=¤¾¿Á¸iÊQz©ˆ½`èËÐé0ƒ0;ÂÕw×Kø Ö’33¶B=ðýÕrœ¯‘ó9Ÿ‘o¯Pl+0ŽÙ xùøR!@Ñøc¥ò_ÙžC­–-_S+~ׇ§<´¢Ì[©eÌ”K÷G†þtº#– ÀÕQ~|Ÿo€óS_Ù{à Œ%<Ñ‹¤„ž9›c”Ó”khh½yI8ý¥‚iI9Ц&­ÌåJGm§hÔ¶ºÅùr è¶å-£o¤)[4³\ -qÆE?|¤¼È` ¸T¼E 8šöy:äøs¬©óerÀxÅ瞢ַïOQö%j^~üºá¤‘×±(Öª7œ(Ùô1Uý7 ™uù°×³x‹H$Ñy¯% ãË“ËÙÌÊù0®ûéüÌU%;ŸÌ¬Lß¶œ–óo¬”ù8¸;ý\½H4´y(¤˜©¡® #QïÀÃ6Ô+ðÈR©ß›íø9¯‘óï³Ý…ñŹOûß_,a -¤ýà6O_g¶[§É<¼ÒÈG»÷§i` ÛNà9º œ¯ó8xÌêLÞ{ª½÷¼»\霵äd¡±o±>&t!ÖLëË+tmà´‘öÐúþžŽ1…KÎ6­±Ã`/˜ñ]=2CëÕ2þe×1ÑÒø -\B)²)ò1]‘ÀMúM`Î1‹´õ1wxµåF-§Zÿi­ªG»ù>riDGä–GD®ÂzDnÙ}ø‹ðf“ =”Žª½1fLoÄ ›AqSéC.á/Ô$ãE0”ŒŽžzŠæ\-$*g”JÜsOã|…¡¶Öos_F~ðéfíW¢£_=j§ìÏð•‚ýà_,•°÷òÇ2Î×Èyœ?¼VT®G$–Gl¡[/–¦Ø\1¡Î£œlšâ˜rQpn[3tH?wñÚz¹d€^„·üeLèÁ:–„ÃH„8kZäšt'"p:d’>‚õ¨2êë¥Fke„n Ø,“`*¨°œÔ#¿°¬­1L'¦ëótH5â,—±¸Çõ§¨õíûS”}‰Z§—¿nX1/8'Œ&t;ë”æW¬¥EEÀ0·ùÃ^Ïâ-Lëå¯d|yr9›Y9.×—gV/õ–o[NËù7VÊ|\‰~®^Ä óü"Üx—xÚV?o{ûyÛ¾VvÉÚ7£ÒÐwSæôIõÿ}f·ë™ýxÜÚ !î’“>£–ÿâcÊ ´öbžòhPeéG}™rzúgûóÿ•p»ñ‘x«w¶Þý•ò+7¼#– S(f¯ò.©ôpK¨,½›g°–ŠØ{âø-JÀ1DS÷R22áÙÛV{Žê,Ζ3߈Jý±ÎÂ×Èyœ?è,wsÛÓÍ ?oý:¼»ˆBÁ”îB@†”Ré -Ö1ÆG]1I¸\h cÄ>¹dK9ʽ§¯¯©çäü§ÜÅZË©óÔ±K*¥TzÆÃ^2BcDöz†]´pŸ†ÇZÑbýüxôgQOÈxH\Ñ{c~öÇmŒ {S ˆ©×øøŒhíÿø¸Óö&Æ=­&d<ï.+E5Ù -ZCB·q’3Þt¯ý6´?ôýµ7‰çdÝ¢vo/S”“žôý-}ÿAÛl>¾©7P7>xŒò5r^#çßQ…ªNê1H×À°ñéy:äÐ’ár™$Ü¿Åõÿ±_-ÉãJpߧРʨPÀºà#ô²Þøþ/IJ´$0‚=ý(*bVüX嬬ÌwìõöóÛ~a¯Ëׯϧš_››_-=º"uºä霌éO‚ÉK^_ ‰ëºryškr½]Þ/k¦%å¶ry˜‹2}myL×ßUIóý$T~ùýtfË9’Éžþþ“ÿí ú» WÒÌ=+G~ ,È…ªôù%p¦ÊÞ+ØÐscE^öÞˆ%·B­¦>3¾xÞQr¥æ¶GóÁœÝMKɽÇxP/\™öFÜ ÑžV¹gyäz–7:ù´õ³‰ ‰(yÞ²,£·g`’ÛôÛ3B×=ðÿ#|3…sk'ãþ“‚ï3E5¢µ…]©šö¦RõzF :\ 8¢YA*Þz{8:îÒp I%×ÑÂ׿ä!­ -“Ö¼—;G¬9Ú³q Ésré1@Í™¸iß¡£K"pg÷€6+S -‰ÛHŠô£3ÃkÙ“Ã!E%*UðS·=ª Yqü¦öèø‚Îq%k†|tªX¦æª2úôAäÌ)í9•!Õ0hBÅýŒés¸OˆK¯á£—{²W°CÔÛ‚:ñLìÚ'ÎÓ§Pa™!¢¦6¡ºkƇtXL^ZP‹•Mú‘?<É…Ì’Ä"¹ÍЫSÖG®4.—éV r/¯Å ïß±ÕÛÏwìú…­._¿>v®T”ýRJ#NòLÃ-À%Oebõ§ 1Ñ7¯¯…Äu]¹<ÍE¹Þ.ï—5Ó’r[¹<ÌE™¾¶<¦ë‚ù¥2¿ü~:Hu«óШ©²s7àæ¤ Ÿ $akÍ™JÖ~Ü ÜQ7èà}ÕÚ{ŒÐQu¹VèBmÏKÊô¦íŒÙq¸¾€é–Ëž·³êŠéá½¾ï‘î‘ë=r}D®WäûÀ3ç~ lîîÕÅsÌq„횆F+0xµoÒ×2ýOﻃ2ÆŽQ”KêóWžqÕ=èC#£ÁªGlQ sé5=BÕÃÚ.äÀ´Áôá dQRPÓedÂ}2úkšŸÆòDÉ=æ(Ré³Åø¸öœÏþŠ ª¥îiâ˜bžˆÅzi¿?Ûmhâðb²°o˜–Ü…×'ÜúoU\÷¦Ð˜n‹©šîÔ|P–'õ5G-j}ÍÇD~²;Šålýø~A[\ Ér!‘Ò›ÅñÉ1†š$¿”š©©<òÜ©¡rÓ­"¥B2ç×¢TÑÊ?Þ±×ÛÏwlû…½._¿>¶nè·¹…’t¢U¤N—<TUºàL^òú¤p]W.OsU®·x?/žÖ<ì´î·|myL×ßUIó=je~ùýtšRYon¡BÌ -ã±7’IZ¡ãÇ{7°§¾A7G§´~\;<ÖšWJ­í…ÞQknÞB¹»µêˆEÎЗã nµ×—„™^õ3¤ñ ·q¼ºòÔ+p#«åŒóŠa$Y{W=¾¢ƒåZ{²Œ¦‹9^à#êŠÁæÖ@ñkÞ(!i„ýíÒ´Ào©–˜EgjìÅÜ&{î!í9ˆ^亼Âã&Ö˜UWâÜ#žè`KJ­þã¢Dš6\KU4rç½Y4&Í ‰Y Yuì º‡„.X"}Õ?@Ÿë¿£.àÇ¢Œ%ÖçÐÐ .GL¢ -m‘>‰Pt¤‹šÇ«9€K­=χŽM[^q|Ëe$-G ¢©ˆ†EŒ"-ý Ÿ.™8i_ó ÚJ9;é=r}D®XqÁül1•Åjé‡ÐñÀ_¡,AÉ’ÉK‹)‰<ý(ä ²BÙs¯æœ"ªn;Qn,5WC_–êÔø)5âV/Ó­rØßùµ8etÄÇwìõöóÛ~a¯ËׯÏû­ Ÿ¯0¥4ÊܵP‘:]òtP&FŠœ/åö„S0ZÏÖ¿ -‰Ëºryš«r½ÅûyiÍÆë~Ë×–Çt]ð]•4ߣVæ—ßOqÁ¦Ó¿V½ô 5®þ~CGôÒ —1nC}C7üÛ8fÕ3%Og ìcœÆ7p¡¤Rã=ÏÙsï3"ð\ Lv¶E:‚,™„7t\Ÿ±B7Œ²’bÊbÙN1 WÒ’éBn­—Å5‡K’Ú3}|EGͰE¯³EmÚ¡gúk[Tï‘ë#rýí°õ)f‹bŽæQ4·ÞæhQk$%÷-:~Í™Zã”ç¾× CºEðÍ…’Ö~ _p+T“ì‘|ÌÑ_H!Š¡£êžCʹ±{<žO4õ¸hyds·èFÅTCBwª\Θ¡¯p¹bA©®ÄžC#ÌÑZjȪÃ窧Þv€>ɺáWñ,Sj»ŽqLi,”ŠÅ”F&Qëér|Õ_’éd£ê“¨p4i½@ÐÉ\ìz£ŒõÓ­bÔr]^K¥‚Ó~üxÇ^o?ß±íöº|ýú|Øšáæê\-ÏÖ¨ˆO—<“‰Õ—K¹=á LޝÜþ*Îuåò4×äz‹÷õr]ó°áºßòµå1]|×$Í÷¨†ùå÷Ó1J™R®jx¬Ð™²•3òãa-µB¯”Rî¡ÿµ¼ZÆVà™R•=º %c7èVÐøÅâx»š[ÙHãWªÙÏpGJì}ð¿=R¯¡Fõ$jÕPŽúŽ.m«A¶¥wU7¯=Ó‡oÑ:µ¨õj.½¢ýðФæø1ïé˘UÏpÊ~†[¤GGÕ‹¦½x1¦¾ÄMF^à½OFãK£SõÒ[ÆácþK=CÒ§¹QÝrã—<“ˆYÈþT’–Σ¯ K²|F¨{E¼.g0ýГ[/èªßeÞ·é_#?é‰Jë‰>>n%ΩŸEã ºsØ\d­ÆÌE‘nc½–.z\‘ëÒ&×m¯æcÎD ßð\ãkK†&æ¾E€?â×'àz2pnðå¥6„9y sœ 7zù˜îmÚL–÷šHµáý;6{ûùŽ}¿°Ùåë×çÃÞlªõRJCQžsb‘:]òtP€@Ž|¼àL^l}-$.ëÊåi®Êõvy¿¬™–ømåò0WeúÚò˜® ¾«’æ{ÔÊüòûéÙë<ïÜ÷þ·#‘ò†[àH5”#½!WÊVž™3ð¤¾á6ö€¸s°¨{Å wá7øÝJ 4æ¾¥é4¸‚ážx‚¢ÇãIE_æ>"Pp¦,¾Y†ò 7ä°ýžö&|Måž+£ã¶ÊýÌ Àd[Óx¾jhuÃφP•‚²Ÿ€üðîÌ”‘cÖ\šô5~v&JÞ|xØm-íÉáDq˜Ú(FµpD«!WÓxV¸[ª'å¿ùs—8¥ØIâT(TkçÈQñÄ©—•\ ¶Òýá+þ?ê«%É^E˜ø ×>BÁK;¼éûGLR¥.K¢<åñSë«"«ETH$”Šôÿ û½ÞÁÖ¶ Z™q'(M#OèUPš5RʸÄL•å^Ékχ»1é£Þ“ÀcUbM§á0µÐñypû\¦è5p½®ÊðR8¥§M;¸¹ÔòŠœ?½:áTÂZþŠÈ­“òo˜€ç°Y†EBäø-Ä%c…¦5ZÖþDÏWÌyÂÊ¢f«Sç¸M9ã èM?Æ?læÛ{Å!­xÿ†`_¾¾!î;‚Þ¿ý¼‰­øl÷“{#ëv/¸.m<ê¸(#`lÿØáLá¶ÿu¸oÙOn»sR.Ëíývæ*’_6笌¯mÛr9ð+-å¼F®,Nßï.R Œž§0vyœô¼âV}–ßõ+©òQßXJ ® Wîó°~Îj·š©o\ñ¼—TãUÒñãWWè?h;p§Ö|fKšwá¹Ug–´}È(Ôf3ý×ÊòØO®€‹”#M\“,•L}îCä¼caG%º&t8®"÷ž7G‰}[ž_£Wû+|Ëó¡+YÈ+ŒË'z˨ç:ÂÍk* Zð§4¹LÆ:g}yºX@Z8RJ‹ƒ/ËÈzy0e K©9Ý¢5Œ:„‘ ð /™õÑŽª¼B_žŸu!vIÙIQ¦Üy&Ìú®+oÎÃI9Æ Ð•œ_ỞÍ¥Òc.–o£x1ÏÈ•ÑFk?Œn/ wÈõ_É94±7Ÿ/ÏrdÜÊÌ•õI.‘² )I³žÑn+¡vÔ„–„ž8ëCÎMEë—h£*f¢õKT¨ˆäæ„z¬×KÍ9‡¹ñl3d„ár$Œ‹A/Öýä­S~KÆÁæ§cmLl²½×B­Ž÷oöåëâ¾#ØéýÛÏ›ØFÜÀ½ÃÝ—‘KŒG7El¤ïüðnÁnû_C›ì'·Ý9+—%iôræ&àoûÚ¶-—¿²RÎk\Ùâôýî&½âß[ÉðÇ4½ã -w“’Êj|@3Lë©Ä`‡Ð1Ótì§C‡ók ?ÉlìÀ'ú\¢ è‚ÞQY˜¾f‘F™8Ò—5³ŽVÖtž2@¯$ÎGЗ$ Ü©IÍ \ÏÉuÅ8ãó8ó×ÈüéþúÒÂT}IºÀ¿T9–DŽVÊì3ôõ=€¹Ïâ²<ÍæÇ+Èòü Ã(¬ÏÒ²>Yàt{‘ŒrUì‚ñ6£¶U“YЗ/Q´Pæ–SϱðžÓé¦U%³zdפ º¨”#ϵ$]๊kJM‡éêÕf¦ç LWÕ|EŠ>Z‹flFLUmnFËGƽó\ ËS%*±ðQy®©,JZÆáœÐ{{…žF‰†Èœõõ™.¤¡9™ž×¹Àèb¢›ýâ òÛ èrýwZ‘P±6Ï¢ŸËs½F®·Èõºk™gÈxX tùæA%bv-ϧÊgXܦ}&KwŽ™ˆK?P–%邜7¯¯¦Ë“Qžsmäί(Ò'ë9x.Ý_݈þáRp¿ñŽß½-Pf*ÞO?Æ7¨æù½* ãõb}ùú†°ïˆuzÿöó&4†Ɣ厜¸Þ›P—:îÉÄÛÃ?v¸Ì«ÛþWÙOn»sN.Ëíývæ&àoûÚ¶-—¿²RÎk¤Êâôýî"ZA€ÁÊè\ÆÂú»C‡)5›õwa-Ø¡µ#̲ã·UõYÃ2°Å!¿–júºÊ:û_š!ëÁœ‰ž éÁTÙSB_BÈK¾uŽÈã5và•º÷ÙS'   —³X¾9†kªaàJ]ºª&̹R´6÷¢õ7*åA®\H‹%4‹Ð Ës}àèŸÑró`Í:Î1·y¶XŸ.Èyo)âPs“£ynIèÖ¨ÖÈ™uxEѹH×7¹Jæ–S]@—q&#]”J×£Ñbͬ Uõ#}Yº’÷Œƒ(~[fY\wn™M×úÀ[® -ŽóìÐ@·À‚ô|IèhE×2¶"˜.•:ëy†"5–”9Ç4ÊQçö¿|ÎA–¬Ã|Kãz$ŒËBwžûè_#ÿ pùeQŽy*sΗçùè¢fs+Z?ãi©Âd#ÞçSåù,™ýyßbÄ|„|MMdt¢˜»ÿúD¯$Å<À !1PxGlo·Ê8ˆïÇX[¡Öd{¯…ÜÇû7ûòõ qßìôþíçMl§¢ÞÏn•¸—-—:nÊÄêw\,pÛ_ R+ûÉmwNËe‰÷çPãÌ8'·Í9-ãkÛ¶\üJK9¯qg‹Ó÷»‹Hƒìz(ÕxগýïîÀ+E9È#×9?š×nhÖ=•›Þ¡;r~”ô¥ZÞUÒ­÷DãºBKÉ(-Š=–e§€x#îž±<[¡bIÕ<È[$½®Ø"­Í²>Íîˆémâõ·þ+ÇàÕµÏÀž¯ -ÔÍf–'€B¥·TCãUïÇæHÑ—´-©°eýП/ŒFê|?ÜePt&e9hE+ -#Üy/2güù%úе?Æ% -Ÿ[P§)K”©×žÓ/qDMh»”zçyžËQ¤ ÌÜG3¸¥z¤.kò¼Ã$äy%™}Ëú°J¼¢…~SªÙ–%ý(n1ÏsrnTšem VZJÃe# ýsµE¯‘ë-rýCmòâ9‰žØä¹¶¹­¯‹‰-®{K©ŠÖÈõ|MUTüHgèë³¥P¹<3¤Ü1ÊÙ+F¹ç빓5Ÿõ|}QlĵÌÀ×§y¥Rí<ÿŒœ—ã]“çFÍ{ª­Ô$NÞ*…·ÛqÂ~Œ¥@î¹m¯9ÈXñþ ¡¾|}CÔw„:½ûy—”îâ›±¨SR\ÚxÔqQ&F+9?üc‡K0 ÙþW! ÙOn»sR.K¼?Çg®"ùesNÊøÚ¶-—¿’RÎk¤ - ùûÍEÉô~îyÆ<ÿw—ƒ¸PWÿ|Z>M vè Eª!æºuRë‰&+ºÔ–ÉÛ](kG˜dCâ`ÏäK¯²^KRº4©õ<¨…¶”<¯dZ5i+jMsªK%éq¤.kBÇBËlÖ/R¡N5Æ\ c”Y_þù«JÔF9åëseŒ¼mVÅåÃãb"J5ð^E%¥šƒå‘TÍCo…´¶œ“hPÍ9\yJEO«.àyˆ9ô5Éâ(Ñ:—è_'ý7ÀŸ?Z(Õ¢‘æmü¶ÌýyàÑñ›_Ÿ*°ŠÌ³²¬œ©•’¸>p#ÉØ*U ΗoÌá:g|yàèùì=¡Šƒál‘ÒÚ¢s²Ö”F Úº q]ëì—Ž 0&£µEÎ-¸òõµÅ‘óž“,fuîŸ È‚œ7öYYÖ'‹P4N<_Í?e„ë‡hIºÀpÁ{ʬçòæÐÂ*íäI«ÜŠ"ã ÑN?ÆÚàjض÷*¤êxÿ†`_¾¾!î;‚Þ¿ý¼KIk­žÜaŸ»Ý»P—Q\ÿaX&¿{à ¡¶ýµ„ì'·Ý9)—%Þ·ÓåÌ8'·Í9+ãkÛ¶\üJK9¯‘+@ý~s‘†âgÃü’ÈíÀ±ø/÷U7ï~…>†H<»rÌVmÍaÚS\>¬ûýmJ3ã‘([Δ¬{I“œfh4|ãsâe[~ãâ”Zè¸ ¸"G:åÐV¼þƒ\œ§¼å¥ûä<:VÙ -—=Jõþ¬DLu07‘˜pû 9 ÁPóu`8Š)Szù¹  œGiÛÆþqÇô^}Æ -»¨Þ¦*f¸{YºuÐkÛèWjÑÝz~XÎËŠçê?Eƒ“Žèww/¡á¼¥.}Vÿä¥6E-„‹Omº?åûg(C©mD?—r¹E.säòAÊÙ‘'ƒšˆA¡Ø2>>Ç/ àò{ÄœF>Âoí/,ârέœw,Iè–ÝêSX`·R1Ù„bàCÜrŠ]BGŽ&DºÁ@4¹îÐèm¤[ôœý)úETVJ‘… µ«‹p¹ãô^s” ·’Þ¿.¢%RÞ—£ ÕÛí8,—ÊŠW´åÁ¥X¢IèvkQŠN|9¤†¢‡,&i‚º5ŠAh“”ïNR> º IW¤±ÿp1 <8enû¹ýƒåWcå àÈ˔㠹¸˜æ„Ç"ÃSŠº"<-sMå‚õ®úúx­/¸jxùñ¼ $SPBŽ|â% -s‡O¬ÏÄÑÅo —4\—ÙqâëÉi6Rrb=ç3õHºœœ&#'õצ©?x%Åc0Òðsöâ|Ì2–¼R¤XªÖWèâB([л’ßÖ£h ½[)¸Ç±¸åKûä¾4É2empNÛ¶ÑçBÉ”CºaÝKhS´Û¢w#‹”t«ÿê’óÚÄØòÓ7‚ --ûCÏØêÿ ÇÆ@ZF¿’¤ý—Qx÷HmœwQžxÅsõ*„ö+[MO¦ÜÑþ9Gõ¯û9$(ÇÎ-„Kr€o°·p£Í~N$Ÿ-F:,W -²%Œ}Bõ†–õÏF¹E.säòaa,+ºØ}†bÀtH;·¿¸` Òª¢qI—•0·¡â2E›¬›uº àÞ¢]Œ0.þˆú¿¿º8ݰ%Œ}¦hpB‰L¦ht>¤­þ¢Oèv5½še›6=¹”CëugÈçr™!?L_²‹´ÒÝMùQÀ-K@ÅÀ^e¸ôlѰ …ÚôÜøîÁ‚qL&ãÍhI&KRT³Qu‰.kncÝëê©©XÏN}àA 6{ž›]òðî4<Õqð.B¦ÆuñNJÄú —}}<áÞ\6¼üx^Ð’‚'ÐRï)Ë`TÎõëS tñÁ3È% ×eˆwâëÉi6ÒrNëÓ™z$]NN“‘–úkÓÔŸ¼ÒâÇ1È -iø¹xHÉ•$d‡þPhê¡©;„æÿè,¼¥eo„¦Þšºƒ œYÕ·vÃë€XîìÃ~‰uþUèoûÓ3ôäüš±þåXeý}¯ôñxÙŠôb7\‚eèV¥-¤7Êz$')·†cÿ$Ý_ÕQµ³¶s·2&ŒÑn%Mvà M9ùÎÕan–r»æºH»ì‰KB?f¸šUE ‚¢Ÿ5µ(u]hHF:Õ0n5ÎÝjw½‹Tßm͹Ô5é¸Ô(á¶­"<Y”@·j\jÀX….ÎÛLÒh·ú§¬m í¸eY FKL‹U¿…p1ÚWˆ ,z€šFŠFŋᒬ†K4›¢°ÉRd·†ÂµíåŒfgpÙ®i1ëpíqÅÓ ÅÃ(ÊÜ(¹~ô2Ã+ðó®elj¯'§ÙÈÊyˆõ<œÏÌ.¼Þ7ýÚ4õ篬|ûþ8TrF -â2èøç†çúJOøÃpzüãjLý;¾7O¦8dºñ _¨ÎÓƒrç*eœãý©ðyÃ8œöœWë¶Ëê ua`'XÍãüKý¬Pž6à;mÁ಩§mõÿDr?!7úχÿ'å÷ endstream endobj 12 0 obj <> endobj 68 0 obj <> endobj 333 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-07-03T00:35:39-04:00 - 2008-07-03T00:42:04-04:00 - 2008-07-03T00:42:04-04:00 - - - - 256 - 132 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAhAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7Z+WOpecr3VPNZ8zWl5Z uL6JrCK5SkCQtboDFbOCUkVHRqumzH4upIxVker6h5otGuJbPTbG4soUMiyTX00MrBU5NWNbSZRv UD4z9GKpjpd8L/TLO+CemLuCOcRk14+ogaldq0riqJxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbNNFDE0szrHEgq8jkKoHiSdhiq23uLe5hWa3lSaF68Z I2DKaGhoRUdRiqpiqE1f/jk3v/GCX/iBxVDeVP8AlFtH/wCYG2/5MriqaYq7FXYq7FXYqpQXdrO0 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 v//Z - - - - - - uuid:20547E781A4ADD119EEFF96D7801BC77 - uuid:a7a9523b-0c40-7d47-980c-c2d7a5d1ae87 - - uuid:0742cf20-2206-9d4e-9e3d-e542f631a88a - uuid:B7D572641149DD119EEFF96D7801BC77 - - - - Document - - - 1 - False - False - - 23.000000 - 12.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - Minion-Regular - Minion - Regular - Type 1 - 001.001 - False - MinioReg; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 54 0 obj <> endobj 52 0 obj <> endobj 57 0 obj <> endobj 335 0 obj <> endobj 337 0 obj <> endobj 339 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 405 0 obj <>stream -H‰|PmL[e¾·ìÖ»9»È]•õ}ï2hÐ…9ƒF'™Î°n%²A -…ví¥]ùè½£ÃÉh Ú[ -Œ¯•BË(EØ2ç”83&†á\Âtf™SÙßnwŠEÿ{Nr~<çEJr ÅÑÅÛ»Æê -s‚âÉßÒ*Î?9ãûnø*ôÏü}^²Ý×ïòƒáÁ†ú.h;`Üj*׫ e Cª—Tš€dн‚þšÀ'‘òfZF©"ý€¥¤qó3-¯Ý  ·¯ý"›(;s @¡×äËS”ª“dºot‘3·ù‡ËrÁŠHi7Š›šv‘-m¾fô±Åð0”ìn7E™Ñ¶ßãçn}²ôá굌¸E_V¨Å²ó.HÝ›G"ÒîÕf{næ>è1}SƒÐÖdSǾ¸¼[9¬íÂAHý\­‘†úƒ'aÏIk¯›5z¬²wÕø¤³Ý„Vîã~‡2£J©!573ë_ÕþÉ@LµÑ²ŸƒeÂ6.‹Ë²îßtkÐñ]ïým“7Òö’áÁN—¸½'lnØvÜmw»Ü­íïò4u4¸É[µ§ -IW$eÃF±w–øÜce€ÄÂ^B¾ðÕO_Æ!+½sgéæ(7˜1µ=C!ÙXàt`Äo1uÊ]6½ÃÃ{š½v/ÙkWŸ.y¹UF˜[ðq¡Y–}‰9[&¿XÒj4ÈŠË •ºò¶p…¼Þm³[“56«¥VVn¿z$ $Eì\žioá°l3‡Å¿@é©1Ô†6HMLN.Žè»à†WQçŸ-CABØ(¡çê])Š£;ˆÄ:c+Kü ÎƉwªO•vƒ‹wφ ä v.o6Ç·NPcQ %HÓK uZp(¹Ÿ×@êÆÃûè-´'r¤ÆXž nXkL à MÎlèL395ÀRcUéa]ÇpÚžc ÓC}¡+çO§«ÉáƒÛBÀ’N$ËKšpú]-±âO5ÆÅYËYCI­ï‘Ü'ÔðhW÷> endobj 404 0 obj <>stream -H‰bd`ab`ddóð‹tñÓöÍÌËÌÏÓ JM/ÍI,É(üfü!Áò[ñw߯'?°Ê20LÙÅû=šÿ{’à¦K„@jêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&100222ˆ22°=ÃÀÌàËÐÆp–ÑD¯~å+×?ü^ÿù{Ë\QÝâïúßå¿Ë/þ®ÿòÅâßú¿åËÿÖדÿñå·Nøo·ßj¿Õöÿvû®ó]{ÿw·ïjßÕ¿»ýÖ–çë^ôcÂýåŒßSo2gûqBôB'ë®þ¶t©?NìÁmm†­r%ß,b7œØ6á°Ômì~¥þUáu@ßuwýÐê\yƒyÑwÑï“LÙ`¦.b·kxøz—öíxvíßr:¿•µ«qœž/züÓ©÷g>pôþ>ÂÆW¿÷û¹£ßU/0~ÿp›ù;ûOÑìß;X'ÌÝ8k‹ôwŽýžzæ±.æYËæ•È7NnèijmhnihÂÞú©Mó×Vn•>Ûs~éÇö-;rVê¾ï³ßùqõ5IrK¾;°~oa›y•¯fÖO¹Y¿«~·™{¾›í{ó¤?5ÓÙå8WŠÿçáÜÈu“ûG‰È÷§¢L«õ‚ endstream endobj 338 0 obj <> endobj 403 0 obj <>stream -H‰|” PgÇ7ÂÆU4=X·%Ù6ëyÓ­V-½Ó¶§â·UAP”*H‘¯˜`>ò€„ˆ„@ˆ" -Š|@üD¸Zµ­­´v::wȵsz7½gí:7·A{×»éÝìÌ»3ï¾û¾¿ÿÿyÿ œp8þ战Øõ;mO•§*äo†+dI[ÔbYªÄÿq!Mrèyú93˜ŒåÕ@ÝÓ1ô5©.› ’—@ÜûꜲÿBý:EF¶259E-zCòkѲ•+ßZì—‹Ö&)¥¢èl•ZzH%Ú"—(” -¥X-MZ"­•ÉDQþ¿T¢(©JªÔ°³ÏAD©*‘X¤VŠ“¤‡ÄÊt‘âàÿÛ A8샼ÎAÞDÎA6 ÈŽ$:y…•‰Ì@9'€;›q:`M¸?ð{ô7’;:Ó‰-ÆÊg½>ëÄìù³³‚ƒóxYÖÛ/ÐB-'å)S/ÃqneûîÊl«n’/‡u -XÏŽ{òBß³c{–éÌ‘F¾)…v•Êo-©iâ»{Ž÷Õ·b°™ëfx¶¦B©™ŸQŒ–л ·“IA™E\¬(ë…îsPЛÞBoŠ ‚P|òÈËàá~zïXÛejìtÿÅ{‚©ðÞ5Âò™øÃ›µzÿ,ði;ÓŽ =)±öõ$SÇÅÇé_š¬F ƒð·0ß²¯ã£ôiÂRo©©¬À*lŽ£.r`XþÞžˆ”ŒÛ(!ðÉ;ŸÉ–,Ú²ié>uõǪRQÞeýô'íÝAO…„)}ÜdûÉÞEÆwM~½´Œ[×yzÊq&ÙªŠS§fj1µò€1‘|§°ñ®“ºwb·Wò+ÛQ¬-òæ´k5Ðwº§å¦ÿN¥Kˆ-òȘta–Ln:H怅EvTZø~d9v.i3Ť0 -¢™Ûf7¤Û)|•k·k§[ܶ½5Mm%¡¸³Ê«­Ò9r›øyǵ]ꋟê–ÁƒýÉóùÇð -ƒµ0ˆ©ââ1¦ô;ÿ%gí´èfË·ºÒdc©ù¼+Õúí|mH„‚ðq:P"K¬5Æ£vw…÷»õÂÌÆ¿š+BññÜRm¹ÊŠU¨U–<2,,>!Žú 2‘A– -Þ?•Ôqj°³é„°­¹g µ+çæ¼ƒ¾ŸÛVPG6=è¾rb6ÂbB%‘‰U -,1%3¿ˆ,4¹¼=öÏ›G©æÑfOƒ³;,ÒU_ltPGÒ” Yϧ€É»eZ´öhC†!(ˆq˜‡ÑËè½>°­ô­•T ÷3x€vØŽÔ†_*sVQòî™e&©‘‡žmÎÛXª¶iøÉ5}™#äÙöO¨ûWG„Y‚±CñB|"†á Ãà2„}Ž9—LSy¾tPõ+¯îÂεtºH—=KJñ>e} óÑÂA?ÒiÀa>ðt@à÷ip‰,UŠÆÈúwÌïß ôÐσ)˜_¡ø}KaaY¹-,-~/µ)âÀüÅ‚ßv‰»N^èpÔ Ïvõ{»X+³–£tî/é}Ð}õÅ<9Kô9î4]z.{Zk±*‡Ëâ$Ýæ"'eŒS2H¶\“–¥ÌTaâ$U¾žÌ7xÚ(žTù8]ð,,€ž ¡DÜž=™2&{¸ÏZf;j¥¦NÂêS_ò™u[#dé‰Âµ;Å —˜ ÛòK¾qýå[!ßaÂî-’F‰ˆ©:˜yÖç­Ç*«UØI³Œ9¬¡ÿq¶~¿c4d}Ÿ=‡È +ø]3Wͼ›³AŸ‡Œ†’"R¯rZõ”ÞZ`6™Myº’C˜ÒchhöÕ^ð}×ï¹Õ|Usû‰=´©ef³möµ»ZØRxõÊf -Ÿ¬Ñ/·Wcöê—WÐxTÞ$&7mÇ‹©ø}ª¹¿Á"¸²dK!Ê33fý¸·XÛ¤ Q&Ù@—A§ðÈ€· U†gä|#Ìý¨Ã%[¿-ÂÛb™MDƒ©-ï¤ë9\¯Ôâc²¢Ä[Ü×»ÚÎ6ák:™ÀGrŒ©ÆÕF¬N-«N"ã"´ÉqÔn±**F°¾'áv¾0^‘™_ª-ÍnP{ò1|ì”î„?J{8C‰ƒ¢aar½ÖY-¨ª´Z+„ø±ÛžÁ†æÆS-ƒ¥w0gI­¹Vh;Ú\Ñêì8Ãç}ÁÞ¾¤q€¥@ÔAð6Æ€åNâ(·òJÚZ°‰þ‰ñ&Ò}D#)¢ðg±ŒݤsiÚÈl¯Qº”½¥þ”[¦SþÃ%¨@'\‰Î 2[mÌJ¥Ò²£“v®ÁØXÑÈÏßÞÏöî-Œ-ÜËç1ËŸ#ÍAÈ„DÁ ð>‰?~¢'دùÔ(R^´+[¶ßƒv˜;%dܺýQ”Sº»š«HkYA2‹ü8Š1¡›rÝ,2Û≧ۈ½ 2iSæ™þ“]'µ-I¾cÏ ™(c}˜ÇÞéy0÷Ìó{áƒuNÂæw¢ªÿš¼7î!]Ųìbê ³J­ßŇà¶+Íþ%ü‰?Œ{ɺçf Ƽ0ë¤?mWF¦Íb[¢‰4—N³û.ý£[âT9™Fœ’ë>Hˆ\]R긊N4$:³I ;¯ 2tâ¢ÃYkGÑëµæŽƒdü†i=Ó\MV²Z T2³R¿+‹Ä›œ6rZÎG0o;ü‚MO¸¿¬?Š™ð}=ÞH6<'}Qô†©+wØt†|ƒTëÑܬ5pÒS ­’ãó+² %¥*{¾‘+ªÖYT~}»ÐîooP-ûÞàÐÚ»«U†dˆ‰Xwò!ŸÁ[+úUä@`ä g³T#Q“áñëwâ#c—^ªßçÜGXÉ —ÃBÛføäâ¯?Ø"#CpB¶MþŽßÂòÿËàdôhsU&÷‹(oŸoS‘1éñÅžH ´HõÎWòQ°Z¨xøÛRC»=Œ·p¥BeÐì]—-K¬é™<êZÀuÕH‹¹§0I{§¾z;ù‘¼¯a£rèhÏNº¨édë%u¬MŠF;O—7Óäï¹[$œ¼! bs“úr^Ds<·âä1:[ëgÆ×ånXa¢,žŽ!9ª‰[`ĆCg:ÌÔáôÿû!ÂS|­]&”œÊC ¥˜*£²÷x)ÊD¥øí‡dYVd`ûlAÝUªõ÷®sýºhžÃ4fSu?ÿÒš8„’ ‰|9%9þôå; ž¼ÁÄÃ]1õs[aa±‘õÐÎ¥ÖD×êÌzMIA•µ(WÞ¡î‹{„uWõë(í¶½š> endobj 402 0 obj <>stream -H‰\ÑKkÃ0 à»…Ží¡8>!F×A{°¬? µ•ΰ8Æqù÷“ìÒÁ ‰?[VPdylžkÈ?ªôÆjÓxó -á‚WcE^€6*ÜWñ­†Î IÉí<Û¢ª@~Rp -~†Å“/¸òÝkôÆ^aq>¶Kí͹ÐÈ ®AcOzíÜ[7 Ș¶j4ÅM˜W”ówâkvE\ç©5jœ\§ÐwöŠ¢ÊhÔP½Ð¨Zý/N?Ó.½ú ->œe4‘OÉ'r™öKÞ/óäœ]$ì2¹d¯“×ìMò†½MÞ²wÉ;ö>yÏ>$bÁ÷ʸtê0<ú¢nÞSKâ5Ä^pŒÅÇM¹Ñeñ#~ˆˆÐ endstream endobj 401 0 obj <>stream -H‰|SLSg}ÒöÉ´ -å9mç{o±NQ¦qÈ08†B:Fˆt 2£¦–§4Pª-ÒTŠYeLHµLÓTÄ®üЙ¦‚¬*A42aÌÌd°çtK6Üûð#ÙšìÏåKîß½÷䜓sq,6Ãq|•º(gWá»ëó SEІ5šÊKR4Ùi©© ¯òJœWÄ¢dÔôìÙÜWâUÖzs è—‚1¾÷•Ø‘„…!.ÛtÄf6.­dTúuÌëéé©êf&«Äte46K%k´0ê -½É|ÄdÖU²%&«¼œ)\ز0…¬…5W ¿/ˆ0 £c*ͺÖ¨3—1¦Cÿ‡„a¸ð°¥¿["èÂD˜KÂŽ`Ø<^ƒß‰Ùs.fJT!úš‘1²78XßJ‹92Ôè »ô¬Ñ¨?Ðe -Ò2.ÈñnÀˆàÿ„|àô3ˆ²"Uæv+¨€ÆÉßÑÁX”VŒr„nrå@l C$Cr1ä ­´¬1Àû×­8ìùSƒsËÈVµM}‚8*uŠ6;õŠùÍÒÝ Î-õ” ‚éWCó°BÖåË¿Ááö_¢_KvØÄÁÀ•Qåý 6w]~ºFMhwk5„_.õôzž~SË -ÍÑší”@<(Å3¿Üz¬xšI)8`)+£dÜm¾#’Wgó“Eø3d»U,Ÿùƒ¡Ï•á«eEù¹ì:Ýb·x»\~¥|ìÆ8»vMñ~­†íöYhG ×è¨çê¸jgÓÞä8SKX}![H9åãPxwÏ„ê Ý,•O_ñúÏ}â!|^w{‡bâ½Á×vï3—›(Á X=Ä«7.ü!‚»sqäz”¸%­E 4eýçCg@šñ܇û†6ñ*)êœW‘C³Ã†¦ˆÓ¨["ã†áú8È¢8L HÄ\,©G×Å.o¯'¤œÌß”VZ©e{Òµ­\cm]íIÎî¬ùÀÞÌyÏI÷*ïLøûé‘›]w#Šhn)lE\ÍAêSP‰á¤Ä 9€Û£pÊŠ_¢°0ÿÖÜrÒàTÛ Î""P…¥>J8ˆŸ™…%gM"Ìj«s£4¦¬˜þrÈ¿ò³sÁ¶ÞšÿžÌ+ž‚e—;\´»Ýï -('C;¶½]•MËZ«.Uñ—¢wB¿M^:*ˆª×9÷rj¢Gñ5»F”P*IC9)h'ÂÐ;„¼ÍÅ=qÿìO°ÿ èVÖ»Å/¢›šÍø2gý&Ÿ‘?€&!ußþfª:\)£å3Æš½¦êjÂf;fÔ*-€Ø‡7‰ó»‚”üçþÀE_«›ðúÜN…üÁä®/ÖP=¨ÌíÑ\U„:ÂáCvžÅpÌF pè)©Õ üñ‡ûüôøáöt±ã°®€’¹ªÀ5 -׎ ƒ÷…c¶“Á‰6ß5”·~2@å‚Q(q+ŠIJO±×ÛÜvê®@ôƒ’Ž®„è'3÷MGÎ{oê"ŠKµ5XÌtÝq‹Ã¨”ÙÏÎQgQu;l÷Þk”@ÝÇóv”:Ÿm{ùŸÅ‹úãž¾ôÑb<&ÉÈ€K” endstream endobj 58 0 obj <> endobj 361 0 obj <>stream -H‰\“ËnÛ0D÷ú -.“E yo »¼èuû²D»jIå…ÿ¾Ž ëÐ$gæò‘îûÃÐ/&ý1íÑ/æÜÝìoã}n½9ùK?$yaº¾]ÖVüm¯Í”¤aòñq[üõ0œÇ¤ªLú3tÞ–ùaž¶ÝxòÏIú}îüÜóô{w|6éñ>MýÕ‹ÉL]›ÎŸƒÐ×fúÖ\½Iã´—Cúûåñæ|Žøõ˜¼)b;g˜vìümjZ?7ÃÅ'UžÚTïá©?tÿõ;å´Ó¹ýÓÌI• ƒ³L$¼›:´ß?Û»Ð.²ØŸÀ;rüOÞƒ©>IUr|‰ñeNÎÁ¹—älÉìȬd¿’_Á2²–[ò6°¥—…—¥—…—¥—…—¥—…—²€©i¡i©i£&벨Ër]Â'©kt¨ÑÑËÁËÑËÁËÑËÁ˱.‡ºkq¨E˜YY¨#Ðêt„:¡Ž@GdÝ'0×J°VB}‰ú¬+‘ßÀÜǸ¿Â}죬gõÊzP¯²^E½ÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊõW¬ÿs‹,‡þFÉ6êõôâx‡[h>îN{ŸçpmâU÷7¥üÇmžÆÉ„Yx“ R›ôn endstream endobj 352 0 obj <> endobj 360 0 obj <>stream -H‰|”yTSWÇ_ï‘¢DÉãÕ¼d&/:­"ЍÕ©µ®,b "0E¶Dd–`ˆ¡(²'@1„D! ¬#›êÊfµ —ªE±#§ÌL—ߣ—ê¼èxæÌ?sÞrÏùÝwïû}~÷ûýñ0k+ŒÇãQx}âé¾ä㨸(eœóVµ"&*Ô2ñ+å±bëÔÙVˆA†_L÷à¿Ç°¢;øt²ïøÔ$²|—ºYŸ¤ŠŠˆTËCËW¸º._jy¯”oÜ£Ü&÷KJP‡Å&È·Æ…*UñJ•B¶g™\¾1&F¾Ã²*A¾#,!L¥á¢¯sG%ÈrµJ±',V¡Š–+ÃÿßNÆã.ÌÎ -³Ç11[ÀÇa˜s±ÂÞãc®¶I€}„c~,Ö -ËŰ÷9l̳ÁÖaþX2v›çÀ‹äMY¹Y5[=ãgðÿn½Òº÷Ä›ˆùDñÀf•M—`– û­åo}i»Ð¶nÖºY³#f÷Úií&…ûç„Ìy27ÚÞÎ>Pä(:OÊÈó«ê^PzêùÛeó¶Ìë{Órú‰ÄV² --·7B)/Vó HH]©¾}ºô¶àvIÐÉp©†«c6“›lÒæÑœY«Ô†iâ£ö -„Þ4À»¥ü[PHÜC.Q>€s›¥‚­“FÔVdÈD*ÕØ`î`Èê96J.#CbªÕ2aj#;ÞÈëÚQ>(ª('#¸sœáž à2%ýA‹\ÏpÏ'ÈÅY -6ì -9®DîhuTAžÀ…?wXXÏ€SC"lBÎRaž™m«¾È†“|ØÄ^¦Frk¾0è²"è53›ÓüuºZ:[C%‘o^aÔ”ôÑOÙ®íšmI^)´0oˆ-í籂1>¼|»ªóHkUǾBñŸ#ê¤(€€õà‚?™¹úÉã€AÇ»4Ñá2/×Ãðö–ΫÒûÇüæ#ÞâõëO_Ïí‚aêöÌYüóþúarVÂ(eª £`‡8>›©ÇIuð“Ò¶kuj1Dæ]±ù9%Ç{ióWÃÇ  êÑưÌte6­ÐáYl)e ¾DFyBXš×—ÀÔ 6‹X¿IÏä#°Ÿ–QäúžÖ”¥AíŽ^pCzÖûZZÇéû qûzics¹åTï°drýÏb™Þ†|4Ryïü÷’É-H$ã„ÞJ‚Ãa}a‘žÖWèK‡.%¸®ññB|&9Ž"'GG£-õ^‹lÜ -¯”2]pBlr ûkËÞDÑ•IVYGÞ™^Ä&SdwþC—¡O@Þ1îÝvô)JFŸrMM‡|Aä ®c׫M Lmû_G«O© âw¼¼ýÞ•¢E¾€ÃBð{ؾ?÷Ä"‘«{[^ ;þ -÷Ùcò̵À¶½åq°3ÜñVI€í“Ú¾û `ׇ@³%Ü_$þùÈ}(ÃáCŸ@_\®?+…å÷=ÑŸ²CkQD\|~ÁfŸ1¯¶è´@8ɵ“mPÓ’P+bKëÈIx £èµtLÑA¸ŠØ ÊÖ­–"ÑÍ•¢Õ¤Ïk—ƒ¹9åI¥ûõ{í¬3ˆMý¦›†Ã‚7‚;¡„ÿžÐo‰òôÌÿä\ÏÉÀјYXýœn†µ¸p)×Ç2ó ì\þ+\ ¬ñ¬Çÿ–r ׳LÕÀ£¯Â 7›îé3.\ˆhóô>³(œuE[Áƒ áÊ`ÑI¶z\[˜•Èíµ ý”²9%è@(½wkL´GfZl"ŠŽLõ̳†S50ëë > -¼BÓˆ1ß,BOž9C3-4‹À¿lìUj¹êdG+PLâ‚”€´:%RyÐ?'›Ó·–ë¬^ùª2}­o0ö}zÊÅz‚Œ‡›3xqëßt—{PÓÙÇELö·î4Îò›´$¿NîhYDZZÛu]±[]Eå¡°yÉ›@€„„Wž†‡äAÈH"<€„ò`q£â[Ä]kE‘Š[뺎•­ÓçâNÄéNÿhç÷ßoîÌ9ß{>ßsÎõÿºõÉgp1Œ=ÎfŸšŒ‚ÔjÞÍj»¨6›Q›'®a£†ÐZ*ºí7“¸]àD–ö<~_A‡Yð3ø%Ì…a(~„¶"úŠDÙh;\†>€aÀè¦#ƒ nýl†pÍ0Â…m ™ÜM¶Š,umœ0ÆŸ'KÝ럧¿wB€+ñÆŽÖ£U™Q9Åz­¬sÿÃq?×ÅFÖeVÑÐ -—1:à'Ó|JcSÒ ^é 1 ×2ñçÿü‡V³h0BÖ"µBSéé¥èOpt/E7© è&•ƒ˜M Û››x™¹UiÄQêX>½[_ÍiøP »+¢3Öy¸+÷EýT¨¦%C/mØüN¡»ÀÇ÷äßwcós“ Ì«Åý6–53¡á¤T<ïÿ -Ðÿ Ö’€ÕÚDàÞs!ƒvß=¸eFeÇgÉYªŒ!?>–o¹•ÿW?„Ëf >“8¾{™)Óû.1§FÎßgá3 ¦°è`WQp¯ò\݈zXªi˵þ¨)+O“C •ÃÑŠ¾¯|YÀQN™Jq³£˜»Ø~‹–¥ÿ8)'okiŒgî ÿ;{0íñ‚[W»ÿÖú¯¦oB[Þ˜¿6¸Œ½N“Oµ„µ| ë{em‰µ"N°Fz4%صÑ Âþ;ÜÖ †`.™šþ?†©uvÿ+k÷ml0|óK¨$Óß®­nÈ›fdæ~÷yFcç›ë'ë—BäP«x^Ekm­T,d°÷ÄíOˆL›OZm”¸Ôº^ÍM¨ÆJAòÔ5¹±Îqˆ±€Ê¶}²wKJ"#î`¡ìPÕÒHâ‘ANh -Uµ&»›áòøfÿüb -­³¤5e9'%ùÕÕ¡´1ñmv‰ÿ÷‘ ¤w~þσÃ^ú1i‹¤‘0ÍŽŽŸ¸EÒJás2 e„LÕìª-j‡”ö…*M¨¤\­ïn¶°Î žõz.`*j>,¥÷œ®RX@M:o­¨ÃÝ幩ŅXʉN!”w ôèîv^ΛîÎN†çiÍAŸ.’ ö èò}÷<üðaðü[@§v«I2ðéb¦ìø)nC #½q¤b€èñ5]s“7È}iÓÇsg¥¬Oût «–ú¾£Øê• !ûSqÙ0¾è ›žêí}£Øפo˜°›+bÑG{ÑÇ_q€´B(/"Ø\çl3 í_‚W¾?>2ôˆl˜3pWCÄ G'ï´ÞwzA¿ÕÑÞEt8Ê‹-¿c¨lÒ4é1üŒÙh4™˜m[æ¾È¬ŒTÖž«·37Æ_~Öwç&‹vW|=¥Ä¿e ZKI…!ý³ðàÌ™'x>'E^ v«–DâI’<´™BþÖð„u"j[rfˆ8”ð›ÕÌ­ýëD_£™u®ÿìÈÈ-r­-FeOe ŽGÇÇÁû*òd„\etiAŒî‡‡a4f«WYÄ„<¼¸l'Àû$(jñ':_âðL˜¾q^މNG{¦7YµÂÙ¡Y€<¾xCI.7½(‡ÇÃRR3óKZªø"|7ä™Ñ‚ákH£GEÆ—f’©‰zU“R ~è„;n‡ylOqkni;ºž#ÈL ©…‡b™ûÒ.‹X‰yâr¦Ä$p Xø= ZÃf3w?Íyx~6ô^ÎО!VŠ=ªËÊT4Úf†Ï‡_±zÚí˜ÓÞïfž®>-7³ôÊz¥^‰á×Ã[TænW•1”<È—qŸ+02ASi¡KÐfô%~p½NùKpÂ?>š˜‘ÞÇÏÂ_˜èZŸ.×uaøƒ‹.¸®œ ºjrÙ€{c‘œrD¬-²Í$}çôå/Ñ'U] ÿ*(/Ú2 „DT#/1E_²wnÂj©ý,н¾–t¨ü‹â²pPzáW€ÿ ‹ÉÒxi¼8žACÉœŽ à¦W!·Õ<Ùÿ’|ÿ¼†nN—D\ÙhÓ’o™)ØIé×{¹osbÌa`PÚmcFBW'O'õz/rQމMb3á|ù— àßeøËéÝí®S õ”¨­€ÈdsU€¯´”;šM|-µÄϸèD!p×¼?監ñKe"B"ý7áåÕÔ•†ažxjÔá4Ùkr¼­™®åšŽ3YUÆbm«Ö BƒÆ€ áž›1;¹'Bp¿ÓpU)‚‚:*Z-EA­v´¶ãŒŽí>öt-ç$Xµ¿šu~íßλßï{÷³­µ¹xvïÞLJÇÚÚÜu.Ô^å.«•¦â"îÔ{Z+X6U%?qÍû·°KK…é”äoˆ¨g¡¤Þ <‰Ë†žIN'/ ÿÄ'WªâTå®õ‹JkÍö‹Ïìèòy?8¶Õ‡ÆÔר=ÀÓVqa’,’'+ü9yj²÷‹(„óÂ,n’èŠm5å8¤“Ô^ÅþãÝ$’E¼ØkÉOV$RîUƒÊodž{(˜z0>.†ë&Ïè§°ÇñDôˆ!NO¦œÔ•œ|ì¾é™©º†þÇ›â7S^¨‘â{%ïp#–Sʪo#ÿò¬r ‘¨©uñÆ„ˆ? …´š»ÈˆÃà÷e=/&Öï‹×Ûí¥|)”Q¾$‘«s7kâæzãHœcr3GZá+1 ¼EÙ5øArµ"V›Ëœ®7Ô~mébŽ6QOÆ' I/ˆ§î$b›¿óŒ9Þ@áôoŸõq(\<ýp: -óÁßù[8PŸêwª…çÁ°O@}~ …û£IÂQ” ëf4#é…pŸû¦{Vx*%P=+\ºv÷ª_˜ü\ ½NÙI„u÷ÍÀŒ™x‚ØÉÈ> À£¼û&¹˜µ¡õ{}ç»zØÇ»}źµwôm6¹–ìfÀ7&§›ì2‹³Ì -N6&Eâ¥døFrÞþ<´P«Ð«AŒh|§Ÿ!µOƒ–SïÚ§Óª n¸Ã§’+zB?‚„M·°v˜L,f˜jªK<`tP´’\¸’ _“.v¸”ø=‚ÃP›r"©DÌTïKS¦jø2f™¨ÁZgi21ùäúCO½K«Û¤BEs¡ÚŽÔÌÅâÊù†B«u˜é… ¬]ç®-ª\WzOŒ c—o³fxÃË„izu -›þžEŸÞ†ø•C©ÏÙÄ‹áõXOu^E²8žJþYÅQqqÌ™zCWÅEÏ¿™Ž®ÊŽºv´£Þe´«C¯µâfµÄj´š,6£Ýh;êÌ·¢Ní›d¸}%/¢9Î"#¶’v /VAòxðÔø?ÇBà%ãË/ï\oWÕoõáiÕû[X Þ†Ö:™ÄÅ6jm%N›ÝVæ(q ž’$o*ˆç¥‹…8o_A¢”Åõ¦²™„9¬dANF¦ÀÜ‘ÎÖXµ% -*×*d¹,AÉ™ì@'Ãü¨õ4¸œò"h‰*(tr -Ë¢H _gHD{x" Ö× Xñ3ÐõCyc3B†ÑZ`¸Æ¸nûáµÈFZ¦Ð¤D¦i[Én$òˆ;¥ - ~}£·§?ÀC‚4ôæçÊéï§0ññ6C+{O+B1GDbäª8mh§žiÃP‹t[нY@¼áiÑûñÈ$d‰°;ÏêZª\µø9ßÈÄàyŠ'2ɰ@¢×Çmÿ8(©qÈôƒ&èŸÃˆšF7‚9.»ÿFÀ%ãܵ;pþø zêjec#«MZ-Î–Š„%lE)fLásÙYSy‚ýT\ÝÕÿO?†^.Èï‚”Ûx{q« ió¹]và,ÍH(à I&2º”º{¡‚Úi§´…ç¥ã>…ub—‰%Dc‰l%çl&ƒ©zÅWõ0¨h Åú' -ó;Å€½ƒ»Ï_²õãªJ°„» xi’‘Übú+ZG¾s.˜€¯P¬ê$ƒ-äërjõÔ5ø[ÝÔz»ªêšXD,ŠÙ‹‚µG˜ÈNã¤r…‡¨ ±ËJøªÎW~Ò[•?…ƒ÷¢.o¾@¥N‘ƒEa;/À댾^·ÙÌÖb¡"ÙHD g]:ÐèÊŒ¸± À®’#’l<£Ø+jm£|ƒrÈQy 4´^9cÅòJ„Ÿ’&ËbùñF5¾¾VUïöV×2[ëk«ÀjÖçQ)u@[f,2WMUÃ1i­à`â^] /!§¥ŠŽ,½›ÃÅéF?Z­§|{ó,\v7„XáŸD¡Pˆ—èìªÂL}ª89s· 6•+àúmz¨yTxš²Iç·)z/á…MCF‚/?ä"?*ŠÚ³>vý«,¹‹t?ß1:ò³oþniîCÛLÉÉK «ÙùK?¼ÿ·uýƒ¢i¥Á.+ä’|På5pqÃf‰drÅþ,> endobj 355 0 obj <>stream -H‰\“Ájã0†ïz -ÛC±ãÈ£Œa›´CÛeÓ}ÇV²†mç·ïüúMÖàèš’&Ùf·Ý ýl³Ÿql÷a¶Ç~èb¸Œ×Ø{§~0«Âv};/³ôÛž›Édš¼¿]æpÞ ÇÑT•Í~éâeŽ7{÷£áÞd± ±Nöî÷fo³ýušþ†sf›Ûº¶]8j¡·fzoÎÁf)ía×éz?ß4ç_Äçm -¶HóeÚ± —©iCl†S0U®Om«W}j†î¿u·¤ŽíŸ&šjõªÁy.¢ï¦6U‘§¹Ê[òüB~Q^¯ë \ ðš¼;²{²?‘Ÿ”ë8Ôq¬ãPÇ1×!×=’ÁÌu)wC†sIçÎ%딨S²N‰:Âo ¾%ŒÄÎÂxIñ%¹ËrF`îE°¡›ÀMè&p“gò3˜žél…ç)8Oáy -ÎS–;Ð «<÷â±OOOOOOOOOOOOOOOOOOO7ÐËÍ£5´ƒíwßµ×µåR›§^C—õCøþ'Lãd5 ¯ù`µ\Íô endstream endobj 350 0 obj <> endobj 354 0 obj <>stream -H‰|UyPgÿ†9ºEi”Þ±pZ§g1Ï$àjPWÔ ` -"÷9ÈÀÊ r_Ã9¢È5äEqEâÅD’òJeMܘìák«­r{”ªÄýc«»ºª¿÷½ßïý~ïõ×<$°@<ôðtsßê²ô‹è¸hEÜrEl˜yÙŽ¡xÌŸì"¶h¾ ýÕmá„ ‡­ÀÏŠæ Ì·ñ·1ïÒº*âÕÊèȨ$Ù¢ÐÅ2ÇÕ«?Yf~:É6„)BÂe;Õ‰Iáûeîq¡ -e¼Bœö‘L¶!6VæmÎJ”y‡'†+UÜê;~Yt¢,X–¤  ߬”Ëÿ !w!‚‡løÈ! Bvù^ü³‚•‚Á˜ðSá¤ÈUôæ×â¹3$–¶–Ù–÷fÆÏ<>ËkÖy+Ü*ÇêáI´Xl­³þÏì”93؇„ùÞÞ“¼>¨ç÷Aƒø3¨ŸÄ¶O ޼Ӱœ„V|ªÓ44Ó³oo§|€&òMo,,3Ñ´ Oáü˜ñÕÃBS^±.HòúClGÞáUz©†Lت’¼¢¯$L'¶6y£ÚM‹ù/ßG<k>³fnåɪK5g# ¶Þ š¼»R–0[øäÙ™±G°X{uÉÖ ®iÒ펭É“mý—¨ ÓîMŽÛ¶8Ó{<¼½||qFh¯3å·m  ,×Àrœ|_Í{ú+b´ÿÖ–Dao뉞!êLßþ=ž›C–FÒ‘²†öÒfŠ?3²xYX¸¯O`gC"­-×dé45©ú4}z±¶:OmPŸ¤®CÂMð¾±ûö¢ -º#vÕ«1Öà õUGI&¼.,”ùoÙ™‚Lt…YÀyÓ3ùuà*†B'QdN–2Wê¥ʡׄí.*‹r*º%OŸ\YÁ,pÁ>fgÙ³öì2üñ1ñÈÓ‹ÏMá…l…ˆ0¨˜Î™•6½Ì&rüÚ+X¤óËØˆw‹F›ŠK®S ZÍ~¾„uû3ëRª±Q•<ñ„ü?CPv¥-Qª‚¢ èà5ÃØ sùˆ -¦Œ½FŽþ4¬—ÀüM€³ ÙÅ.,¹ÂþΧ0Ãh,©j’·$°¤kÁ.T΃ÍÌ„xò8ËwJËKÒÇк µNI¹Üšk¼7J`•o‚/Î1Ò^>üLÃg¬çB‹Iä[š^õ,ü×@˜ 3ÝÁÃÖOÃî{]嘡ߑ=O*¦, -(É­¬žW=P}ªª ‡¢Úˆ†]Õ1uAúÌ}BŽí -ÆC\$ºÃ†Yñ(Nôá¹ÉpNÙ* ì`!ùœ{Y.fÑ¡ìÏuÜVcäO“·*ÛÎÒ#]C’ëFìj¤…ùükÃÁ'’—Îý¬TÊvˆÈ)96®+Ïf‘„ØsNÜRÐTZ,-.­*‡Ü£3×wêw—¿åtkgjoÎgc~÷‹Æ:uiFÚ˜^©¨ðé.²ÕßÔ“wO¥ª3u ÔkQ|VáQ5*ÊÝ­Û”ãÆ,UÃU­Õ5x]mKÕÕüz·È̵ÒÌuÏ„9Ns¹iïù¨ SËFòSl:8#`IÆ0sáøDvwD³´^k¥>ËØ“€'©µê4I|_Jƒ”TÕËŒEtyoU«±7TT—TP=-I»èHL®Z»ß?÷INŠÞ#ñ>ë~¿~¤§¥_ª(oŒ¥]Êlêµ½–ÒdÔž¤É.ÖR.V'« ’£ŽŸî®=Ò^G7V¶Ô5Và„A;/o€o[W -op‡y|ØõÊOì®Y¯ ÌÆã°«9…yž’×°øg³þFÁbnŠ|«~a±¤ä,í~:,]!(­i,¬ &/ïa­ØÙ»<½éðÂä] žcÈ­¬‘2íS¸=Ê3Á,>c„8&J® ¡ö-í -xÃ_ö´ve† Ї*ŠóŠ©šãM}\–Ö@UÁ†8*tK†ÿvÚco”›«„EßÙôë+§¯ H‰jíUüë”>œHadJ&Y• ¿~/NONÎN¡‚ܸ)8=¨;ÒfÒ„iNéKñ6ÍM€Yâ·IE&Ka\ÚÙ®Òম+l×H÷AMF/,½ŽBh2M - mhHR6`c›ÅÆ áM›­Í¶ôdyÓnK²¼ Ë›žc0Áö6ÒÄe—»¸4´– 5É„öŠ\¦ôÊ&¤ £y¿tî¹ç;ç|ß9·NYZk¡ÐP¢Ð"8gí— ¾º@˜Æn?;ÆIá{ GìD$ä[\ƒ4ï5 nù)8·œ ß„ †‘äï“÷S«Öƒ³è);züuD‹½®¶O4ñÞµeˆ‡âðï4kb¤z'Zÿ:"F˜&¸êÅpȱ¡æ†ÖgÐâIÄî¶fYvÚòÄP“l¿'—ZürâlÜúG ]¤—ïÕTéE ¥^]H}BOý«õå©Ku„ÁhÖ«E8ŽÔ‹kà<1Žisô#Á¥ž£='#©Ék¥²¼½Ï_ÿ]`£î6›9L÷”…Ф¢LEæ[k¶ÿ¤Ã×äoˆô7í/Œ«1õù e&q#-ÁËÜóʨAc]“ ²Œ}D«@(Ôåí¤ú{ 6Òh H³ZwÆ,Œ,HŸ±Ø îíYœ±ýL&æ¡J¬VËÕáBþ|ñqÝïÞ~ Hc˜¤éÁÍ‚$'ãÀ§‚dýûú” -"Œšk«6‰Èo†à¿¹²¼œ}ä?Á²žÈcshž;OžLƪ¶À³b´™Ä¥®"ÏÂL dƒ~•~o È(3 D‰0kc6³`ýÌ…qàªqYëK¡¥&Âß°\µ]e7z”mBùÑ× @ÙÛ;ØÜÒz„ý ÙÕãêu%²å”sÈ›y dmª´ZLZai4S§6êJt…‚‡\8´ïŸf5aò9(£ÿô+þ34ÁÕ¸ÿEöéêõ(:%…JZ#Ö¨uE5a›â¾“˜ú#+PØÂ0ɱ…cÛ㸠â¡3©:÷Íw0>NÁ Íg¸f -ÞâCî=Š·mܰR´âÖþñ°êˆB.ÚŸ_p =}ô÷±ÂÆÙç}Ï©kš‡”#Ô­©“ßÞHé{§“Î -w‰"áöžÈqå»,æò.ã•,Ut!rþMLd)ÌÆ~‡Ûä®e õÄÏà> endobj 359 0 obj <>stream -H‰\ÔÍŠâ@à}ž¢–Ý‹&?uëÞ‚`ë4¸˜Æ™Фtc 1.|û©“#Ý0‚æ&¹‡¤òõv³í»Éå?ÆK³‹“;v};Æëå66Ñâ©ë³²rm×LÕüÛœ÷C–§‹w÷ëÏÛþxÉêÚå?ÓŸ×i¼»§U{9Äç,ÿ>¶qìú“{ú½Þ=»|w†¿ñûÉn¹tm<¦}Ýßöçèòù²—m›þï¦ûKºæóŒ_÷!ºj^—Ä4—6^‡}Ç}ŠY]¤ÏÒÕïé³Ìbßþ÷¿-xÙáØüÙY]nÒÉUUVË”¿¤\ªé»Æúýs½H몘×érÉ\"¿2¿"/˜çóߘß×̸oµaÞ sf:¤ÌyéÕž³…} -úö)èSh˜û è3Ð`4˜Íæ@s€9Ð`4˜Î@[€-ÐàQv¥èJ9W1W9W1W9W1W9W1Wõñü!s®b®²+EWJÃü|*»Rt¥ô(<Ê®ægZiÓÙöxÞÑ•>žuteìÊЕÑoðý¿Ñoðý¿Ñoðý¿Ñoðý¿Ñoðýÿ÷¯Šæ…0üPf?¿Ü·¯yÚÜÇÒÜÆ1mó–5ïØ1º>~ìjÃepé*|³ ÜÄ(® endstream endobj 351 0 obj <> endobj 358 0 obj <>stream -H‰„TiPTÙ}¦PèçCxïµqA\Æ∣Èà†HelÙA»›E@Yd§¶fˆ j*‚b@éœQÅ…™1£™AËÔ÷˜ë$éŽe~ΤêÖýñÝ{N}ß©ï34Àp7w“nóÙâj»#4*4:ÊÎK ׿ÌcÅ8kaˆæ¡¼_&§{¸s1¬¤kì5,³‹V’x‘þ“jSô¡#òÐà¥dQÐbÉJGÇKõ÷g’¢e’]GJY¤B²5*(Z~(Z ”X&‘lŒˆxéQ -‰—L!“Çêª:„*$¥<à€,2@.‰>ø¿˜0 ×uáØLSL‚aÖ&Ø*.¶ÃÖaØz s¶ÄB1,ҋð óÐMŒb|l?VŠ coðyøoqo< -ïÄ߸Üå˜qâ9“† /p ®·œ'ä%ñø!ü¯JÁ+££ cKã}Æ?ÎX?£wæÆ™¥³Œf5 m…§MÄ&I&È4δÚôŽ™Ù5‘©è¬ˆ%’g‡Ìþš\Dž1ÿÂ\1ÇjÎñ9w-Ü-,Yž°¥~GµˆWŠïYí·˜»`níG¢‡èg(T¨?Î*0foʼnߥžx -”Šl©«m=/¯ —ËCCêçB;íh–›˜«ÌdÊQ 2V#‹‚ŒÓ9……j°(ã20ä_ÊÕœ¡ª -Ãh¡ó´oþôB- zÁéÝC:¹Š‹l–ì@h3…6ßA`³„.¯äZKÁ 6PP ÐÁ:Ú ENÖëèòx.ؼ¾°™‚Í;ÀÙ¼¦“ã¸ïœz‘ÒÁÀ¹:Š:qhíåÀ¤9Ab'J„)J@I~„ŠøBäfCä0ç6šMÕŒ^}Ly^–ÉñòÄâŒülº=­)êµ?2l÷!Zè¾}x?œàôC1é'úô*˜…À ÌT‘çëkÛZ×…†–‡¬W´0Bd2m‡W†óÀ„Ði_®…þê˪šÙ§Íø…g zÆô -ÒN˦–ÿõe-ZŽÄ(Ðòe ûC´Ô¹"ds¹ÂR°½®`6>àŠlaކm«¾¡IöÉaŽ–ÍïÇalœÃ.4/½¨¾TÚ!/²ðRÍö#)h°ã>{Õ5ü‚šrº»zç>yxíýye"÷Bc[ßøÛN©½ËjOWf§ÔÓÛC̪®C_7H¯‹ ûÛÀ'ÄKX¢"ÇÀw ¶í±-frùÄT‡¦áì©rAe…ZSCz÷¬ðñ‹‰Œ¦·U阫;ºnŠ{.Gxlß.C¸?S¨äžm(i/G†Â† ¾”zîŠh¨T2ÇŠSN¦f¤¤¥§d¥d¦ä©Ô©‚øªóG:Ä:EÀ®‹µÕIÒü€£ŠVó>*¡Öð?ÿ·ºÑlY[¾-¢—¢ù¶ÈF0XEö¿½ûóД õñôÃÜ» ´8L=âÚ GÜ‚ŠöÓ—Ä ¸±u™Ã>°ÿî%+%÷c/—ÅÃ'Gê{þ(øSwCß05±ã{dí§J -¤ë`Òy§´úM€oº!/¿øTO8ìÚis2 ÝW%;*ø Ù"C$§ÐŠÉe`¦§`ÆÏ.‹‰ËH§·†5‚äÅÈÝfËöŠŽÒs…´þý+ÒÑ÷˜Ùv²¾ š9]ÛZÖ.þ¡c½K¼ƒ=#,‰eµ)¥¢ÖšÐjueî?îŸæ+¨åÝ©È+ƒœgÜ£ÖȽà˜Å¸šK´M@À÷ô#ø§—Z|X[Ñõq¯1ð¸¿û>1I<€cì[òZ×Ag×CÁ!‡·sn-cTWý­aš˜,}ÿ”ÜîÝýÝPóµ›ç™‘ûûÖPk÷ú»Ó)‘äàƒ`öܽsãe†xÐÝÚP]T,¨Ð”4×QãÛ—J6;®ÙzÕw$DG¿/âXŠ .&&JJ!ì±Ç;ZX e7¡¿ïx ‰Ï9ÃIdS_IM/â[?錴‰«MÀCfÈÜ –Yßs¼º2¿¬†Öv„¢5 — %a–°–}MNiå-?~„IŠ• ;øŽ¾¼Uûì óÁÞ°ÿ?g]ÉÞþèu=4ü¤¦Â0ÌéP»‡‰}ºÕÿ/_ˆžQ¶ýS~¡>3D£cþÀoè%´:[YOÛ‘GƒSQÌQUFªŠŠmHPÓ%-âÖ:eð÷ ðÃŒÇWñáÔ.­g[}ú,7º9®¶•êïjª§Ï7««[©§_Œ¯£ í™_? x!øé\¤lgMãðÀ8ëS25¼ÉEáÞø±ð²P¦¢À÷!Ÿ¥elK·TB˜†™ç—ŸZ^yÛòÔåú‡êzøó759)ÔY)³Â³,æ³d.ïÊæ¢/yB˜Ÿó{èo‚¢&ˆ& hÒû5ñ®cš&•üñŒÂô“ ÷|„§¥;è=œÀÿfPÝØÍÜni½þjʱwE9­‹öjÙ“+/¨ëG.„ÖÒš°À²MâÅîdU^~a.W|*¯E Æu[v:~åg˸ñnG‘Ä»·ö |žK€㜬¹GA_I-ì/-‡ãDW~"´ì?Ù$’h˸‘õ‡´›B[½¥Ê^Œ¢Ñ*4¢UG ðÏßU52gÚk•_‘çYXûúH‘¡Ù/‚Ù …•À -¶üm0ñ›uÊ^ÌùßUÕĹš™9.©Ç¼¼3ÇÄb]Z«=Gª–Zk‘ºûª(¨ jµ²”˜ö5»1„!ˆ2ŒÙÁ ]·b]°¢b£Ï>ß³r´ÏåÝá|éñMBÔ.§ïÏ™ï›ïw÷Þßï~ÓÀÞ®õ䈲¯ñFXÞT)‘'é&9{„$dCðAÿ¯¨Þ°ãâs+¦W£Ñzm%ÇÈäfôÕ:[~Düh}ÕÄ)$zû4EÅJM%Y¢L‹v7yúH‘´ô'ÃÆíÊoceÈÆÃd¡ÏiŒl^d­úOA ƦôØ´TBš¡^CEDë-)â‹êÐiýŒ·WérJÅ¥9ùÉQá»°À\­j65R°Zƒ¡Ft œo”iåâ²ô‰9ŒÉ÷QŸR÷î® Ë1xÈðþºü«\“µ¶í -L`‡íL#;®yÎ<ÔÒøt“¢µ…G+ëâzwéx„g/ qšŠÓÓÏ_ Ëñxîá›ãánC,Ø^3à fŸ ·ÿ&˜Áì£ñÙn~ÁxO,B‘'Ö0Æ6¤ZBNoéàš`̬§? öõ6×_ü–)è64RÉpAßQµU›Ÿ&÷ݰ’»SM ÿœàßåxïw©¸ãD§îtvý¯…‘›>"Œ0*2ÊP ì®9GòÙuîü’lÉ [Õ÷•…9JDæ (õ4Õ*U¼2Jž»VMÈ ›Æ—HÍêM¾Ëxß õ> Òû½ tl£·3:¦îA^Zí\§§råð/ÔækÁK-ðLÆrp”ç° 5kñæÃ×z:O>Ìw&·•ý U`&X¡ð©ñ¤±NTÐt°¬ËÀ}¡”áµÖÌ‚Âo õ#‘B‡;Ø=Ü=\†µi­ÊJ)±O¶'=ˆD ¸Ÿ&T/RÇH2Bt\ÔJ_–Ÿ¸WÝDhê4'Ÿ’PĹn -»ØQí}3ñ.—oz¶±‘C<ö/ÜŒBR4 --A¢` Ñ› ka2¼Û! MæÞŠAâð¢Oßš‰Æ )S8› …Õ†`Lz‚F£xpN-ºèá sœïó`;{‡³À‚ 4ÔROoAžè¯q+cwšLYâ¯k)Þ– -½¡\üÀòð"¼NžßÕ±½FT·uMÉR -™dXßû½žÆßv÷;,ɫ̥¡¼ÎŽŒ£ø -2¸Fù5j#uýÆV¿ðŒðÏbÅI‰_¨·QÁد“X]y®¤\,ø²&¢-°nóá¦ÀµÄ^ÌP]œZ.g|É­Ñ Ç¶õ¤"¾>{‹<#±}Έ˜¨5Å+(T(Ãú_F'Èx9ò*_é±Á•fiòø 7@òÃZFÐ× - Í¡%ŸI,ê} -FA(˜Fe3‚ŸnãüŽ.«/h\×p<ÛòÍ÷"AzE«+ÄL¾·à¨âœªUÓ”cÈ,È2‚¾By¬i'…þöñœih P éâïâ/ÄÌ!çoܰà À;žÎe.×ì÷<›÷BŒbÓ½oòþÔØõ§ÍâG†âs³ýãÂD¿XŸ¸’Zº‰9/Ž·å|w›„H—{õ¸WR™|x,ÍÝ„Âcx“TÂë°ÆÁW¥u-w‹ /9µ¸S†ÒÚÔæ¬”5¾IËg£äõH´V}a’k9u&sKA½Ñ‡F~NµWYÿ~;â=@úËh ÁguÀh&7y¼ …‰ÜµZÇÑD:vZU¦´¾ŽFŸ æ²é,udz[1;ÔôBZ1Óp¯Ðx±ˆ‹ F†×jlê‚ìÌ`ß´ `½ 't˜À†–±:o)†ÞsìöæžûÅ~”yÌTl3ùÖ9çxgļ8ð[vÀ`îA•ð€ÁTfµ÷î±]i»XPzÉiª‰2¼U}XS”›í°9`ë¼ðÁM·6ÛÓê -‹c‡ÉÇå»g”Fm{`{à‘ Û|¢2.?/•D˜Kmï:‹{ôåLç/Dsª‡ÏVsÆÙÉã,aŽü«±IE:ýMr˜ÄoôOŠDÕȵq·1g8Dˆü¥Ø…A?Ÿü…Äçëô“")p•Ù](‡Ù힇í0ã jæUy祦iTFVE‹’ðfuSÜAQYr|ñNꓬՑÒT")=;3‹Lµ¦——ZòEm%Ú¾¤:kãþ.ŽÅä;“‰õriì&2äøªÞ'[ÛD¦]e±*"ä¾Pž•*£¢™ÎæŠýM•âJó9kU1Á¿š]ÏòO@äþ¦dÏk7!÷.ÞFæ.OßœG$ã—ՆݫIÇy\ÒiË=E ø3˜ -^³þí—‘­ÓäˆgÆxïò2W0E‡¨ÇÝÜï >º8Ô ©W•šb¹ŒäK²/Àãÿ^íAM¥WÜ,†{wµQ¹½ÉÉõÕÝmë*­»«ÝßU‘± ¨<}$>gL~-NìünÞR8´YIŠy½J PÁ(|….ì¸ÂÍÅ¥™qy"pëçpOZ;Ývº§_•l']`OPæ†3ŽxÄô -z O¥)jªg/ -—&Áü­ª,µí$&Q<<ÍD®7¹Ž×ëQ;r¨œQ®®<Ããˆä·@´,<ÉrŒ€ˆ1/÷¢¿â‚£By2±ý½ðó -,ÖƒÅÐ jÕWèNðîìù“?½ð=šMóhôËÕk²¹ùt+ˆÅGL/‘GÓ‹5ùpW{ÿ›§À®™ƒŸ•I|f]ØmpÁ½ ¯6è5Õ(½¸ß.«½b±¢Öš:s-ÑÕ!ÛIlܬ2•¯2ÍU&½YgRVËlÂÚt]¬Fw,,:‘UËŠSŽðò¢´4½’}¾áªÑÁGO!ëšÊA¸pjhÍyyë~Ht·IM>'?ö -6ßľڂým‹ÛϽÇ&¶X -&‹Æä ÿŪc5ÑZÔf¦˜ÄÖwÂé7‚ú#>—’ØÔe±ìPF’¼T©Ë3å×d·g; -QlzYª4RP‡Ê T9Y¼°Ë;,ÈW/Ÿ¯³Dñ±—ã— -‰h™ÅVÛj³›ÈÒZS™ø¦]Ñ)¦HˆE/ï¯÷„lÝx8ñèïâ]#ýÎ>znÿö5îÚÿûÎzÊVOÖÙZM=„³K«h';ä™±¼è„U|μîùƒsbÂb\^`£çAæF1õ2¤Ö•ó¾-F>Õh>ašE"…4•W¡Ü@šÛ{kûtèpKÔv’Þóo“&$¸Òc’ˆŒï¿ö–¦ ;–$@9ôo!œ¿Ê–ÏÄK?6Ü¡øY„ yN³ óµÅ…|ìN|Nœ4^‚b“ÂùÔ‰KñôzTð?Ù¾/:¹®ILr†<ιQ§Â31.lÆžàØ£/t å6~ Ÿ3*©²DC(‹ËõrR©Ï×3 ô&…}›X}›FÀòU7›^ÏPÜÀPTÂÄCÑ„â -™¨(‹X»ñ`)XpwðnC‘ÝHr6Ã…áÁ×[G˜N>„õ‚phiih"¬Õ…r ‰ U©Y]‰6š«©zž-«U'âkg½¬Fý8« r…ø{9ëæòså6àÞ÷:xxœ!ÔÇÏm8'¾D|9vöÙHǶ2Öz¨­×ÕØ}öT§( ƒßdÐÖ+¯*)®Y’fï…lLºJfQ©Gx‰™‚˜[סº¦yòà>Åš‚¥¶"Àò>^]Q§‚³x÷žö'‘H*3N†i§÷ÇÝGnk**«øû”v¶Bš­’é É™‘_ŠÛ)ðM“Uâ3Í/Vá^ð<ñH|n"sÈ>E‚“H¼z›R‡Hµ9¡aS%fU!ï\I¸×Ül¬oçcÁ-pPVtbP³±5UöþJ«°#±:¶¸\UáäYŸè9?ÔìFmôñXÄî)V9X bÀ›^ ¬¿ ~öx«o¢y°\?ÈHÊM"¤O]£Õ+•Bnêúä_ ?JM|~쉢Ã`¬ÑdDs¤¹V¤+i Ëé¿ûr€Ü"þŽec:"W1ODùèÁ*÷ÀÆÎQÞ¾¯{gÀbú–o«÷Àíh÷´ý†ÑxQÉ;EöÀ¡i+Ö)‹Ò¸²mÉ+²v@•LsÀv¶w ýVüJÁZøc¨(l©4Ûô\ìlŸ‘MчEÈ¥"}©5,¤_ûrZ`Sð¥|*¡j]>8ØB¯+°ql¸Î½n(7Uº’îÐqšï››ž ¢ØÔÁ=¥e»T¨RˆP/Ò—í=\{ÕK¼O£¾u™ê¬bQ±¯¤Rÿd¼Lbš£8žŠ©@jÂÝ’6^¼¢Ô‚…DAA6´mÊN±-¥tß÷uJ ¥) )K¢RÐjUR\õà‚ M8iÌ7dHpJ \ËpŒ88äøê;P´ -f~DRûK/SštV7j°ª­ 9ï*~ªû‰Ÿ&å„)±1¦ˆ#C`žÂ2§”Þ°(g;ެÁøy -g@Ïé‡U³¬BÕ1ª¦ûÇÉ ‘¡Ð2ë/tgœÃi§qš]E?¡àÜà,úè2!ùfk—ô 'AÈäwÀØ´ ¯óÒ©JŒ,¤Ä2È]Î?/8ŽF}§ÖÂáºù#qæâôDbŒ­ -‘ËúJo3+^5/°AUþaʨv]%L8ž³» õßÄÅS0auåi«kßQ  -á«ú÷ÿÇ.ž FÖ•Õ7ŒçY…¡Íp28Ì …Ð(kñ1·sŒãQ¹Í¨u{P›Óî6z4ÞaîÌekƒ¾^Ò"¨¬“Tk»)z±¾»•)Þ³Ë=¡óC£ì?˜`E§údA²éQ{­¡Êöë4Iš_¼¿Í‘u ‡uŽ6ù=M¯†Ñ?È÷õXnk¹-‚ªZYVBx¯®íÀ{©K >I2c† à>] endobj 67 0 obj [/Separation/All/DeviceGray<>] endobj 321 0 obj <>stream -H‰ŒWYsÛ8~ׯÀ#¹5‚ð®ry+vâÙMRI¬ª<ÄS[ŒD[\K”#R›dýö’qg£Ñýõ×o3güK­SYáÔ¾š}VÍìr1;»º1jÙ*«T»lfg¿C÷¾-ì¿ .îf°ÅÀ_ø‘Ê"§ÛÙ—àuÝvá< öáܦAý5Œ‚ü§±z­F‡.þ˜Ý<–ÍùùÙ«ew(7‹êGw~ýæúÚã...Ôåë+5Ktœã!‹Õ,Páâ?³7ï`Ôð±ê•²^)ËJð†/Á"œ»`]©pždÁ­‰²}è‚¶ã>(YUhƒGîw¡5ÁŽÛ+вB}ÿÂ*³Ù…IðX7÷¼¢ä϶ìÖ,†o8‚zYndb‡}‘»åŒu)§WaüxÜ”uÓú©ªM÷¡uAÕ¢Ý6L×íTK4à<ÑXgnµãû>0 -ø¢e³‚]Ö8”N-P‰¼“’wìÄ;‘xGbûFM ƒŒG:ÁưÆ_K”Qoja£à'ë†q‚’BÛÈŠщ©.Š”|È­Èå:Êb tjbÄQð€+„E‘Õ‰s1¬ÉtJ+ÏGQä}/¦+î¼ÒpÕŸ$Ã>y_°P”ÍÃÉ… - ÄXÉ‘ -_‚ßÂAÂwpY@øðF-åûöí§KiÞn݆âÒÈh“Ž\*¾B@ Žð"qÌJ×¼Wo:îÝÉõŽ< 7XrG£¡ÍQZü„ÁV‹Â. >¸Œ?ã¡ï&Áwîukæ_8ŸûP"ÁÚ"Òˆž![{ÏÝv[nÐP›Cƒ1¬I½©OÝÄÝ õSá›r’ÝŽd³D=Q<ü†âÃJ9|ἿéPcîb#?}‡x&”%Úx#rÙ[OÕòí íÞ@Ð^×÷ðÎâî?ÇQeušÇÏÂPÎkV²Úë4U¹ïíé%ê"õ÷|"ðÌ P¢xàUh#­Þ¡4€aŸMf¿ãv»f(`z…è°Î)F37%?šDf†µìãíã@]DÌ™ÑÑQÁïbä¬×CL=ÏÞ‰åà¿MH膙À ÷kB»>F‚$xgÿ8FÂ\¦‡‹—?ˆk#— -­a«ÝxnðXäaª`Jfzv»h†³»:貤% Ó)bÓ9gÚ!Àš²‚Ô@`bRfkÓ–Q=BGP†¿¬Î€…ËÒ·&„NíK™†· ÏðÝ„‡ú‡*Ï@y| O™qpØ”¢Kb'ãÒF]¿û ý<"rÉ€$qëE‹OrHçýU±Ûìè3¢, Æ9Ú]u—$KyT0¬+n÷ù"*žN/ÇÒ¢Z9²yËóõ (æùTòpCöÕµ°fZ›úÚ&n8ßyg´¿±,EX–yÒÎNÙ?;bÿÌ×<+"þ (\ŒQÇÕR«b¬„Í3È®-1Ãc¬×¦Øn¥N¤ü‹ÕDŽU•Z7N/ƒ_ËÖ»ƒ³]4 -oþÄñ+ IÄc (xØrH £c$î—.koCïXùÏÐ~ÈYˆµ0u}Á -k|CM´;lVÜÝÔ\5rox*¹ íëÒĽœ8èòH[ËÀW68K—zutÚàš„M`ö—Ð ,»•Zj×ò¶Q ¯º±ý²`` X(&ñ|˦$Û‚0XÝ$ýBïÙšŠÆt( NJ,ñHà(ÚújÐYªáC±qótFÛ±ždDºÚ°më§esQ`ŠE§8¼y‰ympÀȇ©»“ x )ý¾ÄK”<xXÉ>#@“î]wðÞ4òP‰^yÒA,P­äÉP M’1¥BcZ®¢M»“»Ãö5Û­›0Ã]»¬9tÊi£ç¡9\–!`HBcÚ¯—}Ñ….Z2*õ¡ïQ…/²zx“ÅÁ«Xµëßsh>_ðþ]ÖÙX]5ƒC½ôXvkjP†nf©7es~~öjÙO.ªÝùõ›ëkgŒ»¸¸P—¯¯<˜ÒT(ŸJÿ7ï`Ð(ükÕjb½&ýÛ0ñ§ "lp ©Øè—@Ità õ›þ9„DRéy.öU‡p$ŒŠç……àšž3ŸÚñ,%ü¦‡Ð‚Î7@ÕÁ?`Q£ºBÞ|6壱›Á‡fÈ%Ô^&õU;´¸6Au~>µ bCÞÇðůOœ|ûöÓe¿é¨zô´“£W†9N##ÝpÕÆ;ŒÆ§#šS¶àfíG'E{åGo“2îÍbvöaS.«Õ‡××êìÝ•a´}œ}›¨ˆTœä:Ï”-rµ¯fŸU3»\L‘×Ç@$/U£ ø£æFkàÉÊ?ì¢LG.Oœ`cpÙ\ö!Œ“ã6G«€†Èšß‘[åg°ún«ÈÜ…çž -(öŸŠOÐ)fŠA%S8%L® “úy¡ñ¢¤Ò~xILÈ),D-–Êj›«y¤£8gäí+2ü -ïÀ‹KÜ{#°æ\JuH¹Ä4ñÐö…^":ÓÖ é¼€ŠËZ«‹ØÅ¨_àŒÎ²\x!ŧÓÜ…38ë"·2Ç8Rè$Êd¤ 5€ƒ½¦ÿB©‰ú®bõNõþý¦¬ÌƒëtT$ Ž³ÚdàÁå–6ão†LÕ+y¬£(=0йùk„=ïJ+Šå\ªã"H¶lGì¸# ŽÞK¸¬‚Áo°‚ðEΩÐÖÆH08Y=ŽPYBÂìG+öÙ Úb`ÉIèûޤջÆGØÇ™cŽ h- Üäb õ"Ðê}~‚›¦ÆßÛà“,@ªñ—¤\Y² J(°„ù[S1Ð’ÓŸ\c1LopN#g„Œ1½WཤvI¸õÎóïo~hæðÖâo+=¼tëñI …\¢ì’d}Uúˆý×:ŽðJ7]BÒ6UNòìP•- Õú¥ÕÂn‡ÊÚ•™¢áM;¨*-=úþ ’ö!ùþrÌ'h)ÓC U¨‘”i]LÓAÄ2-$ÝŠ%®ó±Å'#•ú±Ã3­íQú¬.j20òr䨠¿/°½IËè«…ªÏŠ &´\FQé÷w9jÛÒ ]뿱n®=N1HèK4 ê -·ë -å GÇZÀOõ¾· î­ð&Ê^ÎåueÇŸóáa8(Ótuy·L2%pCnL¼¶¼£ê/Øéë1¦e¶Lk¥×Uûo¼Äž)e¹opKm­sïóì6J–­‰«Ý¡|Ýs›æ% T™¨„ì6ßï+oø–^"ííkó~ºŒçý;ïË°ÖÆ {ƒ²T_’¥Þ­(SZ£0Q*æþ¼ò?&í½ŒWÄkóá·.‚Æð£VeÌArX=b§³ž–i¼Ëú{%)‰·ê˜å+’¦òuÞöµÈá‚§nB[A­˜ù#…>^bÏÍ¡æåh{±p–žkgÛx7:SÿýMF¢rié’å†ÁUF$¾üïÏßþqùÏëgþëq‚’a„­ÝÂå›ÔÄåGZŠ2È,·ùço,±”×W£\:Ûë“·ßÂím/ÿ•¿ÇËý™‡•òýyãíÓî¼?^Ö¸._Ð'ú?o»ó/7©¶•½¶àKO{à/÷Gž,ìënÀµóåJÖf÷óLoݺöβ(®%ì/+™Ý53òî]yòÞå¾²¯hLø'ö7ôc¥»áÖÆeÜ ”„c¯Ü ¸vž!Éé«¥Wî…[—{GRWš³J¯Û´v]¡6ÌúŽ÷Lž*’mì<ãÚ´vÝ€Jª›¹ƒû€Ã>O…‰#tåe¶Še«Zm÷N¶ëν`kß R­ÉÁaßw®B¡“GbïÛ´v]!†Ð\„aoܺöÎЗ!K’±!B$îÎÄ‘wGèÊ{ -ÀR0ûN¢Ĺnm˜mÓÞݦâÅ ·6ž¡dÞ:ú ÆcÎP?àÚ9AÍÁ„Û+÷­3`¼ÙŸFâîLIw„®¼çÒ¨Ò¤UJ‡å†qÖ\¼:åÖÆ#´V6{ôëS±7î…[OÀ…ö6è)¦sOèÚ{[ܾ~Ìí­»×Î+Žùüsn¯Ü ·6Þ g¬¤¥!B0&ݺò^"¤ à!¯~ѵ÷‘(;ÇÞºpí¼@@®Î^f830ú€Ö® d÷<‡>+Íý€kç µÄ$Qƒ?!÷¦áÀ¸lå›PL´Õš_Ÿ„W§ÜÚ8B®åÐöü”¹Ü ·6žå½5í<îûöüh±¼#Uü€kç±1¹l{ëŽÐµw†@¡m^ä ÆÝÉ8òî]{oÐ0áùÓ±—î…[¯*˳çÇ«Wpí<åeØ3u`•Kî~<“ç§r‰ƒrÁGø×®5ñV.åéŽÐ•wŽZŠçÏÆ«Snm¡•’]c/ݺöž% ·*æ¨hÜ›Œã. µk©Ú¢ƒ!·÷í\;g(9äó'b¯Ü ·2ÞäÅå¼÷‡W¿èÚ;R9y&öÂ=0kÓ’‚Hé‚¡4äOˆÃÝy8î]{/иîmÏ…âîTyw„®½Wà²óðÿP(îÍÄs'ØÚwƒ1<{Û. {×$k¢6æWd¹+tí=AN¥ÉAÔ@ÆÜsVK/ܳ6][Ei̼L·=w|*“ÜUË3w~*“8(|d/ìå¹LÊ¡kïUÖign{ã. µkiHùÇEöÆ¡+ï13îmÐ×Ïcí®-—'û³ÅºöŽË£›múõ³m/Ý ·6žñæuâ\qî„ZÛ&ÈÄòÌ - g­Cqo&„»×ÎYÞ*cíV æŽù×[?óÑÎrGèÊ;ˆ-òù3ñê”[GE^>°\žª¥OÅ£ÊÜ ·6ž Å’] ¹½tGèÚ{Z©îëÑž½<±ó;¿±óC–iôt/ÜÚxJr›£¥!B*îŽÅ‘s?äÚzƒbÚlÒ£æÜ݃îȹne\Ž DrmÝ,¾~нz×ÎH2Y,tèT;"×Ö &éÑ*w;®éÌÁØkw„®½´Ì´5{ëe`Ü´vÍr¡hÍÅÛw„®¼çT,—wœEï(s7ÜÚ8BI‰vÿ¿}fnñ®gH­´“‡bïÛ´vMB[ÑEöÆ¡kï 1¶rþDì¥{áÖÆ4|AŠPò™‡Û^º#tå½DàœâɃñêZ»NPƒ<ê!{ãŽÐµ÷…ˆÏŸŠ½t/ÜÚx…ŒŒ·½r7àÚ¹I ù䡨ûv­\Ó²L¬.âðê]{O¢T 5¢9möÊ}PkÛ¸–¥9eÞ -Xz|*•ÜUÌ3z~Bt|d/ìå¹TÊÊ¡kï5ÕzòP컀֮YîlÍEöÂý+ëU^¥˜Î?Ù^rkã ‘ ¶½r7àÚ¹³äÕ¹#±÷íZ»&™­(¹ˆÃÞ¸#tí½B LçOÄ^ºnm¼A¥åà—›\iÈŸˆ»q$ݺòÎHN¢“ãÕ#´vdÅT\Dboܺö^ •›ÃÖ×ÇboÝ ¸v^cÅÓ£—wL1ØçjÝúÍûß¾ÿ—ï?þòãûß¾K (Ëb½Ä ~:›ÇË_/+„û¿Ï>œJ¾?l||†óê1€ *-˜â¥`Yð߯¿³ ìhÒמ„“¬2¡®Ò!ðO8ìàðBluÆÚ RhÛtjªëòcnÅ'‘Éä3VŸäk@ëpØ¢!OÊ>5n´ôY” 8ØWémæ±9ÙYN¦9kõI¾ Ó@CHdÈK—M>kõ¶#é=™}V—h“]zM"ôVŸ¬r·”„^[ƒÄB1Ë/ ½ÃÆê³€|»‡­.I_Œòl1Õ'ÅR­a}p9n¬ ™-@kõY@¼ø@ΆÀˆ¦@kñY¾,±œÑ«|²|¨¦ÀšÌãÃZ}n³ã* ªh\>ÞÞacõY@–1K —l” !3­Õ'åÉPÛ`‹3$²Î‘ò2Á€Öê³€’9¶8C!+å”.æ)l­> (ÛÒ`‹ `²j 3§­Õg Ð2*­ƒ¸BÄdâkÏâU(HëSšàµ·”^ñW¥‡M>cñY>xxpˆ³Ö!R7ü—"oâå(5»K÷YÍ8DÌ곟åKãà~%|…šy†;`¬Õg3´:ôÇ1šþ8ØÇ‹ÏâÑ2¬¯â(ƒ~´n!yòL>cõY@y[«ƒ1PúÓò'GðŸ±ø$_‘'K4°ÄC³ dß1­Õg2.[XÉš£³ìŸ9eY«Ïf¹On[x» -‡˜Ì´VŸ$Nl±ÌHh1S–µú, ÜxÃè.Çò'+ ä @cõYÀ&ŸÅƒ1å¢c›c µú$àÿ©/—$NJνŠÚ@!2ü®ÇžxÿÓ‡”TÉ$.AUõksàhK%A‡¿ =«Ã6j Ù]Ó°GPp/Ÿ®ªn¹À®6 -}-0f¢{µŒ²qmé[‘3Ȱú8Qp/_%‰Æ±5ø:Ú#úÝ‚3 ¢{5‹Õ8¶ô­Â 2¬{á­‰¢;kÔmo˜µX1`ËE÷2õ÷Íš¾Õ3vú=`@Ý ˜tÛm¦—b ¨GÅoÝ X´ÎŒsK¥ 7’§ Šîl”Z5R¬€¹U]„+¢;[Pöw¹òeF%¨¿ÀЭ‚à^ îåÓ2ÊlXA¦Üðe‚V÷òJ1N©Ák$S,¨‡at/`Óà ʲ‡wÇ©At'`Ô£R¬{NCœaÜÃ0ºPGqïFŠ5Dé°6¨ Šî”ñ[fŠS@Sp¼†MŒ¢{U6L/wù:<çPp/^Õ9’ /(T*:F -Ý®Q÷òu5Äv ·!g\€ ºõ¢ †M-o4uÂeF| ¸O(Öhä7©KBõWÔëCýPt/ .*±®9츛ÀFѽ€ú#]Œ « €¶ŠîlTs1Œ`zÜ“vŠ;žÑ(ºP¿Yônµ3¬ÁJ¡‚(ºPÍ^µÎ9l¤X¼@>Ü˧YŠf†Ë_NE÷ê¤ Ö5§N9à ó ˆîlJ6¬¾Îˆ€Æt¥·0 -îåëÔ¹F0Ÿ 3œq£èNÀÕÌ5ÃǨUf4«¾†Fѽ€jV²uÌe}«€ k±“Aѽ€ -ÅLñbÈì6¬ ˆî¬$Õ:çîFÓNq;š2(º°K6¼ A<¹€b;ñr¤ÐÍìa~¥A'‚{ñ˜z †T¾„ë/ã-‡¢{5¶N9=5"NpfX(º°èª5T>¸…•¯Ã%‚{ñô7’uÊ)ßA‚ î_Ý X‚ºåjXý¢ä+Dѽ€<¬ˆá°v˜áš ‚(º0©Ù †T—Ô3„#÷òåqñ>P¯Ý‚g`«8à ºpX‘df8dT»öÒ(º°SÖ1—MjeXs„€ :×ak¤\«‘bu ‚\‚è„5ˆ¢{…’Ø{¸eauyf÷òeõ"lúÀV¬¸GPt/à¸ÅðºG TÀŽѽ€}@‹MA¡Ž{Ew¶@­YלRœÔé@Qt/ ë²êfŠ90¬PAÝ ˜¨Ä`zAÎhëcèµPt/ .‹j.b‰¨G”¯Á)‚ŸÄÓ¥ˆ,#ŒSã˧¼¾!5h_ª¬,êT›ç7nÔŸ•RB“G*kßèÃI+<§µÜnÇ[„ñ˰üz>èX«Y€}:vàµL¡„¤;P/©Ô’D¡ =C<—‹çþ|]xÒó^#Ø3ýÿÜXƒ’)Fu&MôAb\.=(£8殦¦¥±9Þ3'Ÿ÷†¸ 2Š0èT"mÁÖùÕå²·So?ãÁ¯M©ÙòVÙ…Ô©÷”„çÑ,TSc2RsïÞ*éÕš=ŸåàqíŸXl²ãºiú±b÷¶Ãqh;ëˆKd -±é¾ýž|hüTàþþkxmþüù°¢k?X_9ºwTØù‹3{9§Ù< ¶^É’$‡D<î—#­£¸ôižl–ÉúõY–ƒŽwµQF3EÏtj­YpØL/f=¯êžEÆá½;¶ËÿØ„ßØ™'µëXCE«ždÙÃ;•ìÐÒŽÁZhÍ‹¢ÏÜ$g gaŠ)YÊ®)/+v/…Í|åênX6þeÕ¦iizN·©dÅëV›z2cF8qSdé”ûh•Ù§o/.$éÖŽYN¹Ì8ù§ôCÛê³ÈZÔﮪ{˜u3N'Qñt£ý##{¥V£WXvS¾3Ø^_”ÒõgõYæ«4||jHt­è?ãb¸ýó|õ÷ˆs~þ5jß¶ç7ï¯Âýc·ÿÕ÷‡P·ï¬>ãÝíþ2<¾n1~"^ê!þÙf ¶tÚH=ÿ4zöêIðYóq»ê‡çqÿ€ç;|:ߟ߼¿zÂ÷çCaø´‚†êBŸuOT$—ÃF]× |]Â÷eͼÐû²bêÇ* ·Jý*ܳâEcê½tÐ¥gÀãŠ<¾ÐãÏj~òYõFjH÷\˺IyŸ6ðe ïlÒò± -¸‚g×|¹ú¤{ ÄËQÍl‡âO¶éf0fO©_{Ö›)´Ø—Ñ&€ àXFâ©ó+¡Ïº õ¤‡Å©ÙÙ=ã7V_{Ö;S %ï\iÈtÁeäŠþedÕù…ÐgÝ+•¢ÝÃ,Ô"çÿ² Øê~!ôY÷NYB<ô»x8þèFr¤—ážï‘ô¿|n4º\W4º”]—«Ð/D>«.Z&Üë›Ý] °·” Ùµd¿ú¬{¦s<4_'œ€s)ùÍ€±O¯„>ë^¨×šÎõêv'­zÕ3WúÎ.½ -ö¬w£&½~p*㘯/À† ø)ßx%ô­î)视 8ð^Üüº&ö¬7S.’—Ñù7’g—àWážO”XêÑHÄ¥òííÿV‘_‡|V½·rò¦síþ¯ëßý–ê×!ŸUoS“Ã.=±ŠœðþUdÉ~!ôI÷(ÄPNZÝÿ‚{¹ú¬{¤Vc?,š?î¶¢_…{V\¨ŽŸ:0Ò|u`8»tuc¤7Ì…ÈgÕ3å®=Â¥iJK±šT ü®`à -Ä¥”PÉXóåBè³î•R.ýäpt™6ŠfšK÷ ¡Ïºw’Øøƒ³P }Eó»á}õ~!ôIwÖ8-æK˜_×EŸu -‰›ɨÿÓå½¢Ùó¼ëöÈß)öËpÏŠ'êAø°\Öä²!ÿöZ’wD¿ú¬{¡Z4ÐOŽÇ7àß*ö ¡Ïº7*\Û9÷ëÚJî×ï ß~!òIu #h<Ùªøèð• ::\Õ~%ôYw&É1}pÍÔ“8á·E³‚÷ì¥òÝsîYñD¥ž,—?ï`.Ã=+^(Ôr¸¶Ä¿<»¿ö¬w¥.%]Âvm5¿ú¬{§Úk=yclQz>}¬¾¡û…Ð'ÝS¤R¾9ÿˆO¿ø¬¹PfýðÑt\›Ý²_OǸñ5£9 Ë>¹T¿ú¬{&iÃàƒOx]ß¼.{®£ ‘ϪWbýÔQ§®ÙñVZy™ýÔ—K’$¹ D¯Ò'€~@r=K™iÓw˜Õèþ[yVõG x 3K¦álÚº§Êó¥G`+åP±ïC¾º>ESG£Ú@'aRþäÙöÐß[’iÓî:õ8Ïz`?4ê9øæ ðS›ÖÈ€Ù{õ;Ë(i>øhŒ ¡:ß }õ½ŠM £» ðD“F.¼·‡Ë6Ü«ã& ÿ½yû³äýmÇwá^ÇþQ›·‡ŸŠö,9ëÎPH߆{qÜ’ä>ò—F®Vÿ+aq'ôÕ÷,Zf{r*ž+¦¾_IÑ„ÆËNè«ïURÒñæl|ûÄxe¬ï„¾úÞdXÕoy)S_LïMÈ—Lß…{u¼KÏVïŒçC=0â!À¹‹vÁ^ýžÒÆè·íYŸ ×C©èov¯P|Ù }ñ½Cô¡š‹Jns…UÌe PgågÇ¢Së;¡¯¾c ªÞ6*¼WgmÔ8¼žç›`¯~7Ñžû›±Ë®Šå&v±3#´DwB_}ï’J{o]†.uB×—M—mÀWχŒÙË›Q÷*ÐÔO^¡ï½8>ðSínVŸ‹W9—ÎEÖŸ¡q¾ ÷êxËwÝ™Øå„ývw–#y9¾ ÷êx…hFwšJª³¼s/ãÖÍb#1”ÐwB_}7)µØ›èlû>ä«ëCrjóÉ]™Œt½·á^ŸI’üdÌýÿ§–m¸WÇUfv[+Ϭ£Æ"]Gžé¡¯¾éSÑ£6ð¨f¯­£÷zô•5º ÷êxkå6wñ˜ûö&z%¡oD¾ºÞ¥)~ì wQ°Iß^£;¡¯¾O)ÝÆ¹ëlû>äg×[RÉeêß?ü¹)÷êxMZo›ôŒÌÈõ€®¿Ù5 -ßB¦o„¾ú^eš¢KM%!|Eø:”ÌÚ¦_”·B_}7¹¢S Z¶Íµh.Ãã0—¥‘³úêû­î°•ζïC¾¸®IZíýÉö?½6BûtîÕñ,}"‹%œ2ß|õ¼Jî¹¹^(šW‚ËNè«ïMfÎý¹ñ` ÜÉ.»`¯~wéã~!ñc¤¿Ñ5šBwèFä«ëS¬6´¨á°«³xðù@]NðÇÑkÑÃh,Gø²}#ôÅ÷¦ÒÒèO͹Oß»éì…Z߆{u¼H±ùæ.ª‡j‰e€Jº4´F7"ÿtý|Oßþøöoßÿø×}„_) ÛYó”iíP>&ŒöׇBúñ ÿŒþrî_7ß“¨µy© I†Aß¶&‚ÿþù×!:2ƒcÒA¸,)ãC.᲌Ÿlù—¿~Ó¨uL{ÂÕyOWdŒym¾Vyü¯|zâÃßñµQ>¢äkÒ›Žk>“<‰}(ü2)âu1­z×e¶BŸw£|D=È7¥v«×|CR1ÂW1­åcêÿtßC1tÌyß)ZšÛ»øb‚Gµƒx'æ¼~œ$i£õ—2}_¦lŸ·Ø%àg˜tû€3ÑþeêQ@û<\Àž•8Xi2õ(àøˆù—|ïÃ46·ÒõAăx3!÷âñYê´ƒÓ ©Gógt¼,’{&x;b˜z°JqñÆÇ÷ð–¡x®v;¬¨ó¼x¾Éñ:ß¿L= -ˆ-1±&Àfl6d¿J‰z¿Ùœ„–¾&€&µÑÍÔc€5á³Ô id¸‹fVT;Ї!Ö‡óÀ ·Ã¯ˆuÞÀÀ«lºPi¤ÓqOפÕä¾îPöºë…½.U„”×5ÑDôí~£êQÀ)Ùª³à ã‹ NÔÊU*bJvb|Sñ(_Æó2`G†f%ˆ^i 2õ( î´–œF)©ÀŠç£=ÌÄ£|&]3 |ݘ´‰zpHëÅ}áÏ3ÃE) QâÔ¨¥9)`DZxb¨z0KžÝIYøþ™ÖÎRUV¸p7AØŒAÊ2ŽçjGá —¢wÄM±¿Ü[V0ø‡·>ÑŽâuÃ;ápàTv"Ù£ø) QÎ ìðÍ›×啉ñŠâL3'ãc² >Ó„ÀÄ£|Eªy pb6°æ½KÐT= -ØÐ^„½R@ãHÕ°7€ê³8!öIñǃL=ˆ!×¼+nþpèzÂdIF÷ÕŽáÕ$S«ûÀŸþx-‚åÐhSõ N‰Þ¯Ÿ ¤› ˜ÑB´‡™z9©Ìë1@ŽgÊý#ÚQ<¬ä„4àvƒÀœA3>ò 08wøLôÇä'Óâ5¼`nîëZû5_ʉ¯ÓŽâáÇš¹¯ÛëŠöœ¨GqÆêõߘ¬=ªäAÛƒˆGñ w„^ÇpðÍÁ`EB¤ÝÁÔ£€CFuRZyÌ×B[§©;Ö„7ÿ¯¹ýxbôy‰t.K{„d‡®æ_'æÅ®2 -í_¦D eçÊú¬¤›¤DO$¦Ä%;¦ÓÀøþCoé|fêQÀ!Ú¼ˆ ZØ‘‰ùaÜA¢¸3´: .ËlâÆå ©GñYÝ ERæV£3©G žÑ»âÊ'¼ž1MŒW ÓŽâ5is8 ¼Æ{¸WþÀD= -ØñHÞ‰ÑÉ`áõ(à”’‹“ò‹TmÔÁÇÁ‰zpªèðR R<ï9éaâQ>´iõb B¼±)m¢9S@¢¬2Ót_¸Ó+K¢Ò)ÍÔ£€/Çà̘,H›ðaâQ¾!VÔyaùĆŒ!¨Ò!ÃÔc€-%Á;x|ªlËrãcâQ¼,¥™“‡ųÉêŠGùÀ ^DŒ«,çÛÇ33@¢4IÝÉCèס´ìàŽÁ_×—ŽÂu™5¹¯;ç$Ý>cóªG§Œ”çE -­ÏKÂä§Ä3 -,’Qg8·ú©€Y~ÝÛÐ.QÏ`…½¹V¹¹¯«ÜßÜ]\]»¿J>p»õ$ Xgœ•m÷9ËRçë_.þ¼¹Þ:ë7Ÿ·Îon·—ò§Ûz»ùjû—ëo/$'ºìåë×?>yç›þ®o®›ÈÆp÷k×<ˆ³5mQݬÔ>Ã¥zä$œqßúÇT(¤rÊídƒ ¤c·‹$è]Xý›wo»‹«ï?ýpsûã÷_ÿ®»z÷Öuo¾–‹Òœæ7j¤Â†ˆŸ -Éf”Q½.I:mßVÿ¼ ™’Ä¡*ÚQ’¾•}”½ø|{ñ§îîñ¶Ç]ÇÙzWé.­±ÒsÝîe™œŒU_,Z¼nÃó_¼Ž$VkÏOx^¡5^?³áDÕ+”=ÍÃù„vŸ1˜OÀÕÐ'ð¼OJ¬I^½X½øüjŒGŒ§ -¼ GŒ§c8b¼ §cJÖPI§Æš‚tÞÁãù„vj]Ãx³/Áu^±¼°¾pÄx]§ÄšÙiñÒêWÏðÄp§$¼,Õu€õÅ#†Rž«á)χ•Xó¼O`Õï„GŒ¥¥UÚm²†JŠ@‰nZæ§¼®Ó0œ"°ê‹E‹×mªßuOEž¥°ryXßÀú¬?GùB‰°¾xÄPŠ`Ǧ°ó´§².rCÊ#R^Önt†,g AG w ‚oÚlkJWs¤æHX”/1Žýb5”áÉï„%_ÀYFÌ6šíêM×j‚bÓÆ À8ÓM-x} Æó¼ã¹’GÀéW‰_€X'Çê“NÇx“ƒr61•4E|òì°KÓ㨠-Ÿ†µ¾êÈŠÀ«/1àÔÀËk`]W_<âè YÎ@Īáu}ر)ìüñ©¼ µå†•G¬|DmÑfb²DÓ/ £áÕ®ó4]ª»ƒŽñjÌž¥°r‰\ßàú®ï#\yñˆ­Î&ðBêxuㆠœML%Mû“‰ýSħòªOè„>gb¬®ÃËJüÄ:ëVí:(Zvl -;?A{*ë)7¤<"ååºâe(%€Ñª‹­ë ž¥°ryXßÀú¬?7éÂÅ^¶ÑähWo¶–˜bÓ1ÄŒ ´<,bKÇÄq‰¸©ü‘ -v÷ 4 g¿€F²`¼òjžT‹@Ì`ŠÀ¢ÅÓ/T}'F²F¶Åàýð/õaȦÃûbËP -ù$¶à\·»Ý™ìj%†×úŒlÝþª|-ïnÞïÚª?1|£­Äð^*D©û8J.l,yö`lü ükÜI@âŒ÷䀈ú…¸ôZž&~¾SÎs{\¤©Î Üó˜˜Û?yfxVUÔ“ä‹–˜`óQÀp2†37v´~óı%Žcâ¸DÜhEn÷ ±ûñ Ç3±cìÇϧò¹Ïåæç_WÛ)ÎÕ{>™”ËšªÕÐëy“ç¿F\z}œ]^´(?•ÔûéååžÌÏ¿wùwþ#«gËÛìååËãë]šÅõ×¾I±<.Iš~¿¢žØ«?DÍ(¦œZÄ|˜øÝkò¨õ¶G¥«¾·•l~8¢“#Ô3eö¹³¾-W´¼¢åmÿSôÖÔö|þÅ›8ÉB)äÐ >Ê»9mûh'ѰôùÛ{#GR5?üÛ)°h‡úê‹• P´ê™+GßÝšäçhá.M‰¼n7u­‰uM¬÷ÌÀî€×&áˆÁr‚•œ´Ö[X®`yËÁH´`Ë8xòŽ(zÕ(¤Øø†ÑkLÑ[Ó'$†;/kÞBöL™ýv±<ŎÛ:<ãm¼SªXâ d¡rKߣ¼›fØGÛÔ‹Î x<1OìÈœ³ûí¸]žxŒŒwÊá•J8bÄÑ+#ðŽ"<ÿJr$9E b8••œ´ªðɆNÌ(¦Ü”÷pu¯†g†Q|îÃjRìN|ËPCš:°@ƒ‹8b¬,Y(…ÜòïQÖÍ0Û§íXÈÿ“w¡n",懲dÑ ®köÂiŒW½Q6¤1VN`e0^F`é›ING_ÀD ž¼cJ45 -)v'¾¡+°2¯G`éËJNZ°g‹`¬£/~‡º™*ð¶š:GæœÝÏ»ŸqàVÚ6<ÿ‚ÝBp«Íeó@‡G ¶ã° nâ°Ü8mxŽÀš8,ÿ:¬þ EËJNZF8[5CÖ¯2$G’S‘; ͺƒvtÇjÿF²èˆƒ'ïXqˆÁ<Œç8bÄ‹)zkÖ‡Ãi v ©¥ý(‚#˼®†·çàˆ±<Œ—x{NYÉIë@ê`®py…ËÛ¡æ²y¤âu€‚ÑÂÅbqGÓ/‚ÁN ¼Òã™2ûŒ±ãý‹æÄTƒ#V£b÷ô†9T…ñbìöŒB2 /…Ñ$s0ž!ñŠÜÞðFÙ¼ô&®çN*bYKEü@“—…RÈ­îs”wSß}´£¯OÞq÷2|;«gÊì3FÆÚÌX´bF1åæ´N÷n>ÜŒ-ÀôMŽ$§ˆ£/Ö´å.Þ^ƒrX6`ÑBu^,߂і‹lK檕ßõF[ŽOͱ<þóí{ -–çU)™]ž*öãçSùÜçòaÓó¯¿ÿr™„4'¤+ÃáòJ uaQ"ûù—Þ~Èók¿½üèIÊ_ÞáÉüü«—ç¿R¿>[Þg//__?éúÓüK–wÔj,‹F’¦ßµ6œ(†¢@Œ¹ˆ©üñ7Éõ7>ø&ÓË7™V“’ V ÏNŠXñž•u&öñÝVî[ˆÛ %’E'8Ï-Å©¦ñQÞwh}Îõ½¼ãAô•\b3Åñ•—k^^óòÇúÞÒ¿b‘œyÅ™8ØÆëïCâþã%žÆÉB«axvŸ¼í™ƒ b¨ Tr$I®A»¼ïˆ*¶æÀíÓ·Ý.á.$¸½ŒçF -W¦Ø)qSà¥p:’œºßðæÀ<¨MW}°ŽP¼M§>7Ü{J^¸=‡·5ð2Oã¤3çMb­‰uM¬[Ä·,ñX'âI‡Ä€«.%F]Ý6 °ÄE‚E,XÞ‹1À²ƒT&«œ#о$9u/g7œ:,›#³ò"}§¯®Ã¹B§›1q>‰¯N<‰Ñæ‘ÍÆb‘œùÖMwÂlÃ#tET -Ž6àŽÍx4ãµ#‚‘ãÜØwñNï@ŒV‚Má"Yt‚³<40Yhí磖؄Ýgˆæ¦Ã3\+ÆklxÛ/&ð&ÐDZ¼ÆÅ DŒ7ycÝ¡Ã^ÐPVŸˆ¬g40àfNJ1óöÖКX×ĺE\)¿ÓË·;BâjñÙ§Øòñ•—k^^óòVJ|éç`°FŽsãȨöÅN/Ü¡ÃEXO_°ô…›8¼Þ.æÈ¬¼‡x´´þ-Âyб |¾`<æà¢B}"n”µs* h -cÕ5¨kïòÄkÃH†³ÖoÖðœ‹ÖÏð$FlLNµÑ_Þ»0zÓÂEbŽÌÊ‹`;ÖÎ@¼áà2bìå¾µÇÈqnWÞý-Œe¼£ŽoËá•a8`¨ÀÛpUìÔ´Ýh×…Ťv!NlZûLZ–µ›þ|ûžæ*·<­Fê—§ŸÊgýøùT>ö¹|Öôüëï*Øõ%ØÌ—Xk¡×äÉÎ - ”Cçõ‡ìò¢Åü£'ñ~zy‡/dó‡_þÿÊêYÊþåÕ—‡×Ïyùaþ ×_û&Äò¸$iúý¯êSžm—Ê_R+6w‘ïÆæÑ¯±9$J¹LJƒöCR“jEª+RÝ&uLÁGÙÔu÷Ø{IÄ,q“ø< Æ bPSÆJNB öFÙ^ÁrË+XÞ!­;hwÚ{´7Ý©¬KÍh8áîôeÝ8mi|ååš—×¼<}옂Mb>¬qoW(Ïé¶mŠÏI|p}´P4 #V6¸åUÙ 1š‡•jßÐøÊË5/¯y¹R¸ûÒ¸,æÜ[ß[#é 8qx›Ù+eõ¼áˆ½;ccchŪ+V¶6†zOâ´¥íɼ‹ØxЦ +Íð¶b@ÓÌÃaÜC_Àî0tí¢«¤Kz5'ìV-熣-Øf£Ur;δÏÙ¶Âå -—W¸çƒsvyÇûÞ͉R´Æ1±¼ïˆ*¶æ’ˆq\ÇiÇ"6¨ØÅs\ÑÁó0XªAmcÄÚ{™¸ÜÛ¿_yÏaÕ_8yÇÒ¸CñI—¥Ñ >£Æ€Á†µ˜áVØ%Ù¶sXkb]ëñ:ÙöhüÑâÀó0ҪÂ…J¼aF1åÔ"æÃnxW㣠-?LúbùoWHÄ,͆öª°ÔIJ&–iË¿·ÌA#ÆkÁ€®€K6¼kN½RVÏY¼Wá=§«®XuzÀ=ç=‰ÓÖæ8Ýž­§¯`&- 9Ë·€‚•ÜŽúû¹A«p÷oa]¼ó/V<ŒÊÐQÛ äƒØæ´Åš6®iã´1m•£wfÙ25ïë{!ÞÎ^­‰uM¬Çˆ÷(üXÄPfG%ƒ=F>àí7•@ÌÒØo•äöË&¹mÂûœBxüÌ €uŽà#d™T6¾ÕIË\‚–I[ææEö³èÏ­žžž’˜kb¾ôܰe‡DÃîoH ×!Äͧ½‰¿µÆpYqnŽ7‡Jb]‡vTÙŽ®R°JÅ*}]#oµéÛwÖáÆ³»¶p=ë*” `)†¥mBk“€i†³)`Ho -¨ã8oàÖ>ûÐwxÊúx„÷ÎÆkçç´»Æ8‰†Ö Ñ:^ÓÁË<ÅÊ:[”©CêâæŽ–ööï·¾- ü ˜hP­p+Ÿúîª/X«d!Í’f1”°6N»$¿þûã¿À4}ó÷Er¢Ìß~Éúùë%?õ5?êòúû_•ìÒ¢ƒRÒ+äúÉ%“› _$“%¦/³˜Ö^ÞÞa)Ú‰bùwú+Åøëw)YûöãËëë“®_M¿dyG©Åò:kÄáòçÓfŠÎLüBªÎÞoV~´YÅ·Ï2VŸeú,ýýÏ2b)Znºýè­ø™ØĽ[ÑßÍzqŒ:¹M\l§A¯s|Oã1âv_QŠj€4æÄ|jùx-o—vÌÃÏB)ÄfF¬Mˆ[´kYŸgÒ¼e¯8“†— â-YÓrʼn9Ì××î®Øp+ù+ƒõ=·ÆÙÏÞÝ•TRèKI,5±ôˆ å=Ѿp9:RûćÉ`œ‰Ã!Eœ44ßæ¯Odc«µă?€Ø2%¶M¯ž9s»ñlH ç -œT"…»„ðò—C$ H¦1«‹6ò÷®ð–¬imŒ#v5±†’iºb‹6«“¸Ý,á³çÄ8Š®IºK>|»=ãLâõ¡÷…¼Rñʈ¶€"RŠí|Àmá<×ÜoGÛ§#öwÞÖH†4E‡¤±RTä -ÄÍŒç -¸ÉÌc¦Äí<ÞCã1W´}Ì|ê5ÌQ…»þÚ†Ô.Ùð:G%•Ô×XJb©‰¥G\\$ƒ/WÏsh ÖäS¤›»n Úµ¬M'J¦é„ƒéŠæ¨Ý†×ÚÁôÅë¿LâµÑ—í²Fábƒ5‰¥ –ŠX†ˆÑ;Þ‡×(9âtºâÌbdGÀ4JÈh«£[cudkŒy·¥-Z«„qÔm–`P´€Ý7*©¤~Ë‘’Xjb¹t6D‘mƒÄK~>Á´Áé 6q6RŠM7œ ò›å¯RTƒä¼†"I8‰÷$Ûq8Mïf;÷ÛÙØQ§Í2%n{wm¿6m@Ú6¸-Œ— xãí·¨¤’B—XJb©‰¥G\4‹A—öò,®@ê¿â<×j•‡£ÅÛpwnŽs;?1Cœ \×'’!MÑá‹·dMsß‘Ø2Ú"^r|Í仢éã¯]¢x[/ÝÄ'²Ñ7Ò­pÅ Æû»‚£#µ±ß„Ž“Çx®Ü ‘Blj¼Vá[´kÕ}ÿ²*±èî»nCâóZz@FJ¦™[LœY=swò)øÔˇQïM —â…,·zÄ7ÞÄá¹kêï ¨ Fl•†4E‡CŒ—j€SGÌ!’„°ûvþÎ 1+à| §1"1Tgû; :&ñÚÐwIÃ5ú‰ÛÜRKE,—Íå_¸ ó/`þžÄ»«KŽœ>Œ×àá\–lx±xKÖ¸ÝsbË›ÎQt¦Õ~Ìj›Û>Þ.'‰Ïζog‹bÓ[Юe}ïB9pÒต-S⦇wÑxÌí. “hΓqÍÆs´|ÀJ3<ßÂeGGjcŸø‹cË)Ŷ+ηÁŽS%ÝýŽÛ81Ÿzc”÷Ìalÿ†H‚âøOcñž„5ebÍH¸ ¶y jȯÿþøO§×²|Ÿ¥yýýñ’öó×K~îk~Øåõ÷¿Jü›­O³Öª«Ôëç—Ìô‡° _$“5¦/-±µ—·wXŠvRcùwú;%ËýöÝâÇë'•¿dyG©Æò:³r¸ü©¶j~–‘˜ù}þFï?N‰$†t›xékˆ‹Ž²ÛŒçO%Í3Ž¢±Ì3qJb]ƒx‹­Z°JÁ*«|°67*“õÜŸ8-YµfÕž¶uóv¯«xÝ;ï½æIÃ|+Ü$^­îíÄ_ë…æ´ -úÐx²Ã3aŽÛ±®+y]Íë.еe˜¡ÉËžœãfú°¯à%D®NQ P‹¯El–i›öîYãÝwr™Ã\sEÌqûC›<¸pã(dØ ÎàVKmÜÚÏ'ñÄpG`»)+üÎÀîH§h·ø¹õi¥¤•šVz´u1Ä$ÓjWÒ1—Ô]F ·˜O}w^q޼տÂx×w8ÑvoÃxÄÑAºC¡–2ÜÐá xÄ€1}è±ñµ¦†wlöw¬þƒ7tp˃ƒ!N¡Å$Æò0 #Їƒ2ÜÀ‰ Ä6ÅÕŽˆ7‰K…µ ÖŠX/ýÅ,v^ÌýIKb­‰µ§q½˜GnŽ;‹Î¬s]:CñˆÁ’- %±®A»–µC:´3ðI¡ÊŽOÎq3ÅÞi¹¤åš–»´ß»°C9‚S"‰á¡mò»9B̼×xoâÒ\sEÌ—~?Ã;1à*0Þà.˜¨-\ ãMÜéßµE[q,³}woßѾ¬³}-¶pñ+Ö§ÐÒøÊëJ^W󺎾/­›Üàw6Cë -\WáºKwØÐ’ð~ƒ«:xqg0YϱK¬%±ÖÄÚ#.Ü=mË=‡ÆfûËCJb©‰eÆ#ÄO¥1±LÝÝœ-·ó8Zb#ýt;Ž+ðˆáʦ€c£VØWÇ›ÄeÙÔ‚X+b-ˆ[eSÜlŠÖ¹ëTâICj[QÛ†-|“x-o3Ô¦¶®£í(k‡tȹOT‡áÂ Ç p)ÆÉ‘·ùí=ÿ×àÝý q -͉; uÎ DŒWÜñ\7ypÄb”¢š&ñV®(ó˜ b®ˆù2ÇpÛ­£% ‡Ï,~@Ãtb<ÿÂe`ÃL‰$†Ôº”ÒJâùgÃü4y³+šÄï)Á%1×Ä|yd_Ãê€[Ž80YÏ-G|LÝ0ñ­©+ÒcxI¨'™:8bŽ‘4¤Ð%Îâ^âmékçÍÑÚÎGK5¸ Ë X´âïõ´Íh7Ýqçe´Ûe„×tÖ)ÍðTk?§îìgðúâeÞæÖÞ$>Þæ@L¶{írqÓâ±»%›a'8®ÀéìsFX$mÑü+6PÐØH5›âjâØÍ-ˆµ"ÖŒ;çpËGk—§¾gþžñhõKÀ®wsÃ]¢bgcWc-‰µ&Öu»‚ØUÄn@c¼¬Üy1’†º÷îŽ!Þ§ÙЀŽÀ¹BÃ܇›ùp@m±¦ o+ŸÓ¶ß´é܃ûýáÔv½¶X¹×}9Zb#HÞ•¹éì~unH¬s[·@Ä!PЇ–É¡xšú&¯ø{×Åfòn:sh;YÌœÍÎþ®1—Ä\óC5†kÁbfWì¾;Ê à‚˜+b.4nE…Øù’kíŽ+¯+y]Íë.÷›Ú–v9ØX'ÚlàcAkóÿ -ùåßÿK&¤åÛâÉ›4ÿ%?ë篗üØ×ü¬Ëë•3ºá4ÏI)„\?º4=+7šðñÅôßYŠéEn;Ö^ÞÞa³¢“˿ӟ™‡ðúÝüãñíÇ—××']¿š~ÉòŽRŒåu‰ÃåϧñáiCÙܽÓ>™¿Öw­ÉNJ‰ß„=šé¦mjML·a˜ôXêÆ@ÆiWÝÃd<0œñž—¨â(œ<©·—ÅVÀµÂ®v°QÎ1[ÂúÛ–8â Æ)ÿ¤·vgo×\ñ,qÝ9tŸ€% Œ£°8%MâÀïå’K`®¹î×˱”hw 4KÀ ^¬¡Yn5«§ó‡ãa4`±J!¤nßÊáM'¾› ÝZ?M¤¡cÙ!²&vWòó·\#Ãv¯Cøü$ӳ㳥ÿÙ/ƒä8nŠîsй€@p#øY&•ï_ŽF#±“¦»»Ütñ{ek4Óz‚>þÿHº]zæ.FE¢¬?qc‹—¸±Á ‹WÚ­~:—õ†6¥r­”%_ÀŽÁ:0œÃžW,ŽHrèÔÊÉR*’á -»X]¶ÂHËV.¤õ„;íÂXk¬ `ÝŒæ¿p†ëxÀ—Ó¯r"UY>ÍÒŽŠ¡‰Üm³ìLdgPÚE‚Å;6Ñœª¨Ã53¸嬳•u´ëB¹~W;¸ '-®,q¥Å¿r©>‰7ÃxšùâC¹ÖŽëžÑÔÐŒfiŒr.ik»¼6áSŒVܸؕÓgŒe´Z‰W|à&ŒV|àšž£"±ck·Én9¸…CÓ¯d&)Ùp€Ñ,MC"É¡£áÉNs'‘gcE,Üʼn5]ͳàLîÞ ¶zor\~üaŽ7ü.°6ÀºÖ=ÀV? P{­!­Ï8a,Kƒs8`¤KH9‘ª¬k÷´ekp¥Á•®|⾌àÂ-ޱ¼.ÙR¡¶NZ`YËmCËþ»Ç¾Óá -;š$ÀÒ­~W;bˆ‡Õ{áþ粨q\'ŽÑæ WwJ}g -a0ðá:ÉýB‰ÖÏà€á$×€±.80ýjL”¼¬÷³)õ‹¶pÊFnÜ)”ðÀH!™ŠyÂñßpÏæ·³Uîq´}jèó&’ÖÕ0Ý6\±úé<<.N¬ìž‰£mÞÚëX·€›¹ï~ümד” 4a¸+MÊõ§h÷ÃÑvzD¼£æ‹×ЀúÃÕήûmaf©>‰×§t_4wbT$vn²>‰Æpu­=ZZ•DH›GÑ<ÀPaÕ! -ã8„†û{6Õ°³þîQþ¼x€Ãs4´Ì°úé\€€/ Ö0ÖU„6]¸…Ó`”sIàxxÂk5âÜ £Õ6rãNI›ÐÒ°©cM6×EcÇY´ëÞ Œv)×ïêV´íÄ]¶sí -.‰¥$²äëö{ð²ëÄ8.€ãð Ý›h -†;/<Õ'ñzÄ]‚øqÜëîÁõ)˜kÐ#à€ÁL îÐsa¸ÚwÈ6a°•Ûð¥áÁV6rcª>hÁlÕ%Ü6§©>ïO -w GJ1¦†¸ž"±®#ßþþí‹ É×Å)³¿½þµ>ì÷?¾Öç~«»}ûóŸÅ_ÏŸ¡_÷:,f¡ÏÔ/áþ+ -çÏ/î×ÄÛ,î_Þ?nïŸäáþƒÿÞKåð|µ~ÎßßþøÿóIϯî?äñ‰vÿ×Y×_ï¯õPÈYÄ'$)»’I.ëÄSZ~½vÅꛀfÉ‚#©oñJ¦lÞ!>OÇm°ZCl bÛ¬ÙHÕÎŒ5h Ô;ÄGy×hºDw¶‰4ZÇÕ¦œíg/J|b1,B9•žŸ¡†í¾ùöh«l©Ä0Z ïž;á5f+%Ô6:ºBn7Œ,—n.oٮᾎ-àÅ׃1qx¢XSfr®‡ÔO3±Ñ.ž‰U)‰ö*Ù„ÄÊ…¼ÄíÓÂZb[Ûq“!;£ø‘Sëª(¤ž‡{ð‰ª°LbÖ«3CUˆK— p;% |¡æ{õÉK·°]Ç#Yðî¦Í7cñ2Ï&ðTQ2eóNxœ§ŠÖÚ¬!¶±5ÄÝò•XF‹¢ÁÝsjô›P­Ä3adÁ‘ˆ-°:ñÕ.‡+'òT¿=îÞhXw…òËXÖ)—Æ`ó…“/^žh™¬ÌäÌ£‰ò¾ˆE µÀ£SR®Ë‰CìN–Kׇ«˜·ZÚlœ²‘Ëèù><û[‡—spU"RÏÃEq&±‘ª÷΢‰K Ì£»ÏÑ­{¦å€)‡×$°º%’=€pqŒwgà&1^IÃËåë:_$2es½xmÞYCl bkˆ»‰'F)èvYÓ–X—Äú3g¬läÆÃ/Ðà ¨?c<;ƳŠÌT·¯³ySãy1ØõuØò·ÎZZ[ÒÚÖh›ß¡¾=6¼qÁ?xsZ75'Ë¥kjñ°âÆ|D x1§A©hˆ⣼³Ýp/ddpÛ†wÑAùÞ|58e•G¾Õ¾–âP¯Z7ùö÷o_LIůK©}{ùk}Öï|­ýVŸuûöç?ÿiØÅC}´–Jt1 }þé -ß©?ùã‹Róöm÷/I·÷Oòp§xü{ÿ5›W›·/ŸÔþçOþÆãÿuH’o-ø™kýcªSÔzŽM!”Hžu¸Ùie ,·­]9õ@pr÷Ø#žo_Ä3E¿—Wb©ºÉFŸ×YgüÑ aflµmqõÃ-bm‰uI¬[ÄËî²gÆßë.p^QÛ—pˆ•EËÛ^1O£-Lœs'¤§Ü<¸Z˜ Bâ© ¹šWHÑz™…íÿñQ¿L§Ì;8gL¬­tµHžµŸÀÒËXZà8®Èk4 Ýci§:çNx4Æ[â¸$Ž·CÆf ±-ˆm±²[êéø ïðùf&);ÎŽylnëë 1\Ü™Pá^˜²²áÍï…«ÅœXwœwÖÛ’Ø~Š<\ÞiLd’†wŠO;¼ä™¢ïغyˆáòÐÙÔHCêm™¼ZȵwJ‰ä¹wŒòÇ€¥–%°4æñi¢XD$\(&]‹†Ýˇ²‘WÄ™uíPœ1š±iÐ -Ú9즌Žìäî@e1žáˆáN%Do»T1Þ+”,÷ÎÑ­m×1ÚÕp¡ -Úõâ ãŽEÛ¡k‰mIl[óm”ÝH~¹ í¢<·ç5¶NYˆ-õJÐAÞá—ZcòÀº&õ=¡>êM!ê'1? ¾,X—ÿ¼1¿Ó¾¿|ûüäþímâ÷×?‘ÿ?ƒðñ%7ðÿC÷LѹãSnûðô¬FZ D 7cÀ2ïÌ5lÖŠÄ{jÅ®ùŽUÀ¡ t{ÄÓã‰oñ.âŸA ud#.!áÄ]µaÊÌy“X[b]ëqã;‰õ3ÖI´çÅñ(ïmÃÖ¸`Ÿ¬¯£½ÿ¬ÎöYÕΫjù<8#qºdN£_¶jéÈ“¬3‰,¯,xå6“ÈéŠ{¾‘Oé2.¡*”Á±›wEU*˜âéÍòÈ.œNÇN`-ªÂ¬Ü Ìât½'”±°¶ÀÜ«˜<‘f¬Bb]ëÄŒó©"!±(H)‰ˆ…˜K¸y×s·|ÇRÂBŸoóò•Í| ’Ž8c¯@ÀÖ‚Ãô“øbA‡ºÛõ2¯o4Ä–(A\@[ÙμçT1ðÊÀ+ ^ù1áH…€E" ïeÝ i!)9Pµú~sÚµ°GT çÓý÷çNåT›† ¨U66mrº§ûn>ý6ôr¶?üäÙ–Î#Ò] R °Æ­’v¯yEqÛMl§é ðe,„`}ór„Gºñ²28FMb žTð ñT—ø@i'X€´é&±ŽÄº$Ö-â¥ÏÜæ’KÖ/Ø'Ôpý¦²à|þÀV@m"5.ãÁùbN*ÚéEígnéºpÂîãÖ¢ ûq ñÌK`G|º§³¶|ñœpñ¬Z¦'[¼|ñ‘ÏŒz[ræD{—Ð)Ò¹±ôë.˜ñ%½"q>kƒ†Ø6‰e$–%±l“Ÿ$~üuW#*(×Ó›Û›×ÐKM¤Šf`f”ˆ8aJ§»@òÍ8_ÛtmñaªØËûqæ›Î‹Lñô6`Þå󉄪(@:‘:ë’X·ˆ—½bZÓ+qÜÛθ°D:¦½¼><3Ýhㄚ|»”´xHK?I¤õÇýò«: ñãu)ÐÔ^^ÿÒ?ì·ß¿ôÏýÚ?ìöõ¿ÿuéë} -ýT(‹ÖǼÜÇÎýŽx}âè)ÜŸàB·oï(`åþƒÿÞÇ®æï¯ö÷Ù·o<þþIߟÝÈãã,ï¤íöçb2ÈwÑigpvœ>ógd¨Ht2í‘•°ŸæîyˆïK"- >`©’ð‘E"›*RÅF¾Tfw@mAOˆ'›Ú ñ“6aÚ<¼5h·"V­ø EH!@‘ˆv/ë醖‹ÖÁzu¯CZ]ÐêT¼e»:–à|n–­gŒ¸l#NXÒL1Ø»+:…ÆÍýøZI.-pén8^ÒVž«Ñf[…þuö‘qèÂeR›Z -øzóí­Ì=‘"X r¦Ð¨ý«½£?sÈ%Ôp3 ³@CS›$žij2Ë‚Xfˆ ¡oŸH×™qºäHx"¥S…‰Òy/ï -í0õIÚÇ_öcœ oÐtf¨H™ˆ½5¶¶u‡z0KØ~h§†‡{èsë^}˜A…·g,#±,‰ekÆGz±T«QÉÜ+‰Õñî.ÄVâ& NÛågz¼kqèx±€j˜tŸ;wÄÎ5 @ÀWäMx×å#–‚øð/Ñ\>œÎ$²UµZýô‰vÏ7TDºs#_Uc¯`-tᣀm7°}ˆ¥Kx¦[:nÔ‘år!@‘ êhï„O¶ˆ„¦Ö* Ë¶†/sÒ±; ¶ÀÕ OúÚŒ†ŸÝ:övz80œ±€j¼»¯ÊøØ ¨“ç‘qB«HwR¸NÜIOÆÝØãu Ö±ÄQO¨Š|›—ÎÜL­„—ÇL1º<#b^ómbñÐe[ÅÏïpè (Ãàj“ž)@sà å@›ÚñÃ¥—¸´9Ü„1—k¼Ú<:èp÷I·n¿mZ¾tËì¨i·}çÜÙa,µÿoµwܶ§’"]'ó‡tÛ&È@ZÃù^--²…q¾Äj ÕÃè‚‘*1¸U@—m _G™Ž!¶ -ýëlÚCÀÞN_¸‰• !g"vÔXÄCú{LbX¯³ˆÓU öÚ0¨ÃŒy$æ%1ï›ñ\pÄÄ©‚#ÝÖIq0Ö¨\>_huA«O Í€zÞܶI5Ìl› IJ – â\§F.Z6mÒÒnÚUýîUo4[¸3æmºEëŽ æž©Ö³óø¨…ÄMû½ñƒ¸ôìÿúåׯý<µÇë" ­¾¼þ¥Øo¿éŸûµØíë/þ~¯f)`b¼˜†`}LÃñþ‹p¯ˆ¯Oý1ûÓ\èöí¬Ü1ÿÞOé¿Û·W_Þ÷øöÇãïŸôýÙý‡<Þ1Nãñ¸O‰ÛíÏ™=×vŸ ƒµÈ>Wª+¯T×À>7þš¼ë¯)àÒýuâ7ÔÇkêÛðÏÿúÿ×ÂÝfhÕ뉤øv0­Íõ­ØÏ¥öÖ¿‡KDü–­Nø¤éwÞ‰ZE}kQ¶Ô°âó¼âóŸ[ö#ú©e®ë¤åÅÐ÷°¾¼ccÓ¦xÃMãFàTødݺiÔTCâW=ÈH,Kb¹½gJP«yÕô›ÊÅØ°jäbWÔ®Ýwšm“xZ»kÄCïž$~tû±m =Ø´XË£c©µŸ*¡*ï:Ðê‚V?äÖ `©ÛŠÐ‘X—ĺxÆ‰ß .Z¿ù‚¥óÝKç+ÀãÊñ€Ë \¾m‡†R'q¡ñjµÀÔž¶ˆÏÒþ#âÄÚÙÚ=r¶ùìH8˜ñ!±wº‘Ä ¶.›4¬5±n‰µ§áÊçª/dû]Õ_ã»—¾ÆÖfrôäÝùÝrâ}wm ö÷DIÏ.?౿N@Ùñfì™|dšqNå5ìOžñAÞ¦±e¦sKGY»6<¦†6m&±ôTWûÍlXB$‹®%ß‚8ÊÚì=F1µNÐåàqÔRAKjäÒ@N r}áÝñ°/Õž¦Ú`¤)7Åp˜õó«s’t+VüâÝPó•IByþ/„š5lYÃÒ©7õlµbÕ «ÌV‚'vÒ+cÓhT‚e2ËöÙ§„}J|ØyÛõoÛR |K¿_Ĉ±°šA™œ|93¥˜{ó}¤úºÃâm[°:2çZ´œ¯x- Öº3gÙÃT £Y„S2u§/]-c®ˆyCÌ#2¶@ê­]FÆœEßl¿d,5±l‰ey¦Œ-«YÞŒñÌMÇÔìðÄ\󖘟JŒU€àœ P.ó±?c­‰uK¬½W¹]Ih«®ZxïÝàóJ!YŽ*ðt ˜Ñ“w¡¹yWìmBŽÏ'þÝ °·}ŸOœåàO¿ñfº›'Oìk`odý—|û#Er!ßÿ^^˜’¿ýý{yÖŸ}/ýYžµüüûßÕeÉ·';§¶™EÙøû,²_? »ôë—ìï£X+­Ò‡åí žÌ¯@÷ÿ®Rœÿ+ego/¿ÿüö ÷_Öâþ†z÷ŸË„8-ÿlúlyG.S%Prå¡Wî³²~WµA{EÿÔqk¾Ü6#M9ugüØy”·¥ˆP ÕŠðÙÒÞÞÑi-Zñê†W—~kY{–©ã³1±gái87:®6ÊÛѯT¬²a•¥§_6&9vg;|'|6Ûíõ82Ûöõ(NÁô+!“XÊ-ȇ="J<³­ÀyDŽ`É Ö|\^}ºŠÐšW·¼ºò‰P‡ qXú>Á¦¥‹JŸø2©çE¿»ígñÄöE¯MgûØ»á¼;ó¹€~LÆ×®]'ð–Ɇ9­çÆSb¨]¾@ÆsV)³u G P^†W‚%2ZIËä¾xóÔ0’E°iÊ ®2c˜¶—pCnŽ–Ñî À„C›±x£¸qÃU暘·Ä¼<±÷`Uv,CƒÊc0û…kl7â¾v‡O¢>ñÈ„÷úd¢¤Ö0³yö[kB+bÝëâº}‡sD³ß¨ÄNZª¸šG¤[X4ç;«O$ÆSD»[g‡·ÎNÞ:ñk±, ûÕD'5†*åˤV=ãìP”àãnÛ™ß$i;lžL]_·×ñ]½Í·¥„+Ãõ3qºª‚Ïžq­b®ˆyCÌË+%Ž“}Ým''0ŒfÅe´Ù†DÑkÓÁ>¦;ì¹ç_@™ÄÒéž;ñžk:Jì¨éˆãU¹u¯åƒÄÕ~¦áõÂ|*ð­íHÇ‚á*\ srÄ9)ŽEÚ²pÖ ž·qµ*´"Ö ±.}UœxÁ W×€Ž"À»ùpìªa¸ -÷Õ0¢ßò¡Oo7SブkZÞÒr—vjjÀl\¡Œ·+£µlAæ [ÞÐíT!ÈZx<­8GnÀǦ›#™öJ®Áˆ®7À[HʲÁi½xYát=…N?,jsEÌb®ˆÛ¦æÒ pépŠ™0‰¥Óµû;««ï`ÁÂ9/£•3°Û®®ã³ùuëú|™Ì`Ékfô]MjbÙKx›#Ä{µ­CUJÎh6,Á!Ù0\0³iÊ©«ˆaâ^mšðËX°¸@ÑkSó¶àó7.¯§ÑS=øÑ`ÖÕƒ‘Tá…²Ð}WåílÜP½Œ~YoŲ•WTƒCº=}Ü Œù´\ááìP¬!"Ua”¹âi)ÎÐ -ºDE:0¡Î ¨àÅk¹œ…8§V»˜tÅeò‘ûóÕšW·¼Ú›ou êá~q½È¥– -¨>x(-Ú¢ˆ,/ðÚ¯‹×·á᳿x#Ä{‹·ÊØ3öÙëØºªÐŠX7ĺôU!ÞCµˆÛÖ!ETïùªgßCqW ó‹åcj@ó_058 + -–S¢è¥Ñ'g)w®B!ÖfŸ ‡‰OWoAˆÊR ÷a”µC:tZ´Hñ ¸˜à€b‚ÓzT4¼ìþ!ݹ <$à×ȵ¢ƒÝ“mÖx'žlñ¶oý’®5±n‰µ7ßí¾LxgßpÜ7„]5Øa5ØÙj™ÄÒSíáÑ#È(n̸ª:\ó–˜—gV§h™œ#،ٌ4åÔ%žqÏ'†x_¤AÀCPówµ;¿ñ<¢]Î%±æjJì¤ßËL‰™[¶ú‚6síC þpú¦Aùg¢—Áî -N·î{z/›8ãˆÔrŠvw¯¡Y·ÅÄkNÃx÷¢*lÆâ9ŽÏ+>#"~š&Ñ“©;=4j^®xyÃËòå$E Apb0˜½_Ë{kã®VÕ°h]@;3œ‚y˜s¤äÓZÓ"9®h}¦Ëc—ßþ(6’¢Ýÿ.™ìöñ|û^öç_ßËs–‡-?ÿþwóÝE2Î÷zâ¥,I=‰òï“ÈnýìÒ¯_²¿bý­ìW™áÛJ`ø•âþßõCI¿ÿu}ÛýÕ·ßóöóúüû«ëAÜ.ãá´üóŸµöÑÖ/ÑÝ?çk=úžùlå²Måc}NzEƒLªöœÑJ…*TéŽvuK1îNvâ32Ù ¸,&‡qu æçÈ90vÀ4û”%RghÝB±ÇØÅeâ(Öí‡=pMË[Z^žYPJ܇”c—ø¡J5uéPü·°•W iÎÎ$–Äêv‡g\Í .«$žù£ ¾£ÞA8}×ðÜ=9“ÍÁ…ðíÓ­XYH]Ò5a¯—ÆœKñµfRœbÀ#yñÍ °è„H9ù†.I —mx ÇÙ(:nO -¸£–Ö¢ML)1R^àŸHDÎ{á -_yM¼×éëÁèì—Ar7…÷9Å\ $°Î|„,ÿT6¾ÕOY‘ÃN5Bv ©jHZÙÏô|‚Þ{ IQ¦«‘½l[eÀWyÝÑ&Ð<ηçÌa,†k¾qŠN,!p{Nõ.Ž •«ã_·”m$ÕdPLÆýñ>y뼌×Ïs{§šÛpVUÞ~ÆÜó˜'fÌZ¡ Z ’KÃèŽö~öðb‹%†xK¾­óò²xîÛÛ{Ü€»Ÿ( hÁÝ÷ÅÊH®(mgÄKå‹îxj—{X>Âòh×Ö:o¨]Ãæewwô1wÄ| æ)bÑ1ðSîð™Í× ˜Œ‹ï}.3”âÅÅâ¦#ªPå1ŠŠ`6N±öŒHÒv²óî-›BFöF‹—‡{.†«¼îhã]-ÓÈÆËöÜ|?ç}‡4Þ]ÉÄ„hÞÝtWyr{Žçaw-kÛ1#·Þ¬º"V–ÆxŽ­± -pm_󥊯ØÊX+Ô@®ÆjP¹:|ÇÇʹP}§ñµ÷ŒÛämòB2C)ú>V&ªPeheñÖ,^Ç3ßPæ ¹½SÍu‡UãíWŽ;b>sGìö‡pÄmိn'^ -ÙKãUý÷*¯ÛÚ|™8Ž K. ¨ãL.=q9—Ñ|»ßcr¯³úý,µ˜K^ƒøgá¦Ç{ºpîSQª ";O7¼¼jÈ~ƒÍ7’t¹ ð¸NJO+GZÑ®ô16¤âdÅÝ|,X§)ëÎE[e¹±Ò,ÒAïÂŒ—h\›|+[ GJµx‚x!¨Ë±ôJÅ$£˜{b>ócÅKØ rurã–¢7c¡)e—x½±=UÐÚD4b¶ªn Þâl3a÷_'QÓpqÓî†KN‚´à8îîÓ((ƒUïBºçŒ£©‚5µo¡¯¿©Æ‡„¤ -"âeÇU9 -bN îª -j(ùFë—ñ²95OËnýY!áEöÀÕ…i(_éYåÈ*#ù.=Aãçö$|QCJÙ:â^×>þøó—_k{HJ¯¯ Aýñú·ö°ß~ÿÖžû½=ìñý¿ÓP(‰_—9#×Ã4äíÿÏðåa,ÿü`h¯Óxù1µ@K¿?Ѫ{«<ø÷Ÿ/¿§`~{,¥¿ßþú÷·'½ýôò%¯Ÿè§ñú÷ö 6ÂÿôWÚ4= -+˜éýÝ“ žóîß³VÄ`œØðïœëÜ~ƒ}»¶*bÝ‘ÀÚV°ZMxxä÷S‚ø°B°Œ–mR»3Ëö¬v ”šõ½ß²=Ù¬´´œqåp¿ôgc¨Ùœ ¯(V o¡V®t³“}Ú]#doÕÖ÷™–.Ó$°B¶5&Öú‚BUÏy¯úîÆ=㪠µ–8…—ÛÑ‚²¹¡¯Z´œ ¡ãb÷\´—ûÉ«ç+t»2Ï¢ÙX¼ëQcT†\Û;8ˆ3¤Æ¨Þ¢ÝP»‚ -Zí<‚»BF=0éq©=©Ýp 2$ÍçQÜOJâ=€£¥[4àx‘Œ][»Ü N‹úR ‡ëZ ˆÕ°ôÀr–ðÊSHHÙ¹„n–ÊlªØûõç`Š)Å‘®)TEG -W­a0Ù§š$e@òrbèÊ+ˆSûW‰Q{YÛg­žkvOÇ‘W¸ò˜ÈJ€x>Ü[¶^ u±EëcÑ,7ÞÕ­IΈÞÓ!J\Àef‘ò"œý†. çÝaœ;ܹ0ΞýV¶Z6›ÃB9äÚÞÃAä@¨›÷êh]%(H ¤Ö¥5ß°ôÀr–p·“À¯[~®dçV»™rYJu‡K—a÷—q+ Á09žð†Ê=*Q¹C=]±Ëcý®éô ×sS+t~I¬Ú±¥í¸”Ô8Õ[¶;s"öBø²?œÛîÒf(YÏ ï[ƒ$cW;&<' 8š†£¹µ'á°ëLÉsÖË>¬nß tV„.2('¯ó¬^—Êl 5›S¯Ša¸kO6Êpö‹*p¸4fC(¶xeV¥ßxÕ¡ÑfáâµÉhÁV Š½ßÂQ‡K\F8;£ -X‡xíHWäÐõ°Mr,8—@N€xîhÝ€©ç¥#/]ðgs´hfmŸ¶znðä„g€¥–°L(x$‰éîL+O8A%tN¸-!÷do¯’j ÞméÂÙW¶º;èj8Z÷aS¨ê¹ÄU8ƒ½:[wÙ P7Kw+*hmë¥ï°2”¼]¶Ÿ¸ q- ¢_á¶1Ü -X¡ó¥ëúÎô„ÏÜleA‹×(Qò&¼Þƒ©Ã¥.=ƬþJHœww…7g¸”‹VÎ$1»)·CÃOz0%@<¹;*B‚¡7àí/wJ_ á™2 9Àw›.µ'¡—Æ?q§Óø¼>èEàŸøÚ–¡¦¯Iæ =g¸c‡k“X@ zÕá~fmŸ¶z^Î:‡˜žqé€å,q¡,MÈuóp¯ÒzÒ­ ’ËùåvGé²2”¼ýZèfáò"×ö>¿„vè—:\:àÒc¨_S¨ê…Û -cX¶h -Rëù¢ÝQ·a&ï¶L Æ^˜m)dϰBçP<­ÝóûraG6á0ËÆªPª{®­‘Â2gÈIó{–›'2 y]án575Fu—ì~ņ ¡Øö기‰‘²c -w+bñú µ'áÐɤ–#°<†¡¦—CM?J¨…æZ@D7_> 5,H äÕ†-þ$GEPIFÉëæ÷ -‰pz•œ ¡WÈîX•2mŸ¶z^Êötté€å,IÔöÞ«.°Bž;¬9׺™O—û0ÀœÚ·H9PÄsÖnרg¥#+=.íÚ³u!ØÅÆÆP³ jÃ,îvnº¾õ2”¼}º Ó8Z¸ *hµs7»çÂÒ¯$COW»änØpÕ”“Ž€¥–#°Œ€W&1×"º9‰WN8\+Tõ$¼bß®¢~”Á† ✠!I  . #5‡`î+Œ)’§ß›ÁrUZK wȈÞÓK\Àe*Ø -T1oÙM¸Ã¥—¸ô†[´›"Ô² {-ý^J`%(Ië—1ì2†HjˆWq²AÒ|žk&gÔ0ìÆÄ×¹™— L/а—ïÎqj©×2þòkÈ?Ò^—íÿåÇëßÚÃ~ûý[{î÷ö°Ç÷?þúWlÚÿÙ/ƒäXnˆîç}Á$’kÁG˜¥Þøþî¶þgy"+š%WJÚø«%Wë5”ÈL(?n,iÌnÚ®Úm5Ü?ˆ„üóE õ1ûK&a¾ýõSá|÷íßûçlµýí»ÛsÿýñõÛ;½½ºÿ’Çý4_·)I¾ýö·ÈÊ÷ØÏÄÒÊýùë¢Ý_SwMR_¦ÊÂω¯fŸRr{ŸO¦]¹-Üâ?$õˆW+çF,‰·'žÏ¸&Kކ—TÁ£ÓuôPÎ*ÃÙN«áyq]§@à@VŠ§ßƒétö|5 -…!쬞®»b€ i¬XŠÅ¦8É#qö¼ö»Ù¼¬Ü(˜ž=ߥĕ,i>›¸×ÄÜ1ë«B©„rv;_êgíìË6,8 ÏYë€mlSÀLÚšäÇÙÄ—Ib´Ñfª,gïÚ¢¼ÀJ7 FÅ‚{©};Ó~ªÙݶÃ]2<÷>Ǥ"³zî.ìæðåÊzÍ«“‚'G<£à×ü«ôHM$–<Ú£7 }­ú"ÍëÂ둉)KŒCbë‰mOlCâEÒ•ZÛoPo¾+Ôð%e›…RœHß˔ɅX=ëÒlrÂ3i¦±îˆõ6¿Ù(&ï`»"±ÆL•ål3[µp©RªæmÜ ´/e0-\u”’¨Tç¼¼d #kPÙ5YÀEƒ+¼±R‰ùtâxxƾ‚ÛOÕkçÈøEUàÔô”ÈTÓ€tv²Ò—²2tÝØ“Æ=i.52¥”çíŒlwÆÈ¬¶°McW“¶§³Sp®8_KI˜ÝÖð# ´gÕ=«ÞÑM|R ¿ê'i `õo•I5¸aшe9Àõ]¸]kª¥œÕ%>,‡Ó¯6™*ËÙ¢X$a¼sBYHÙk“Ý|­'¶=±æ»Oä™ ¿“ÈY(µ!ãt°þ‹§˜ˆÓ T%§o7;ÉÍ ÒB²QLÞ|»ê;I;S}µãÕ¯N̰ð$ -)Å”ð—«hÉBòâmÑŒ¹–ƒÄÛN`(%/ẽ›L䙽³ØvÀ61b)Lõìƒs¡$Ðxñ$ h1g®Ù¬l$)xWÆQ=öýù|‰¥ -rÉBrOÌìá-×rx¶Å#–D1Šsg®"^»m0w )gw¶kÊï~ÓfxýMÓ‰3{›v‚“½4ßX©Ä|z¶-Lc'ÃKa™*ËÙjX¤]¼ê‹UrðŠzUJ^V\óÚ„ÉáT)Us[Ùµ¤‹–Áígš][8£?¾fdŒŠÁ± BUrÂPž‘e£˜< wÄ“ã!ÖŽXwÄ:#a.”$މ/3c LÌÅ«“+Â"6`á ,O¿€ÇEHRr‰Ïˆ¹W‰ å¬nÌÞ¹ †›q -Åë•35©‰Ä’gjG‡;0´—Ž·HªW!.iÑ…½¢j`¥$*õô²¾ÒÅà΋X©ÄÌ8Ä€§fŠÕq<¹w3Às#ö÷Ž©:¾äÚ¥D¦š®ŸnX§¥Êéæð• ¥’%Í8Æ«‰)ËÄáf=±í‰mH¼j¾U)y5²3ÝØÃÆ=lý*úÊE ®½ƒ%X«L$–ªC{Ô N$Õèžô1aJ¡zÄWìÛuÿ81e™¨g/›_pÉsñæzTCÌéöóÜll$)äó„Ð}†Éñ>æôt¼Y(Eõh.™ö¼ºçÕÑ’­$VRöºÍ*[ØÏt…wˆ[PD±‡†•›4~·fëýWÿþ¯çÔÞ$>¾¯B¥¦íû¿¶7ûÏ/¿¶÷ý³½ÙíÏÿþñ·Þdí?í½,°í¦ÑŽƒÇ4j¸i¿úÇ‹êc÷—LÂ|ûë ¦ÂùþîÛ¿÷ÏÙ,ãí»ÛsÿýñõÛ;½½ºÿ’Çý4_·iK¾ý¶O|*¶ñk›„ÔËÇ’Ôöë¤Ïˆ/û’+iɧÏwaQá¸>'î’xÆñ_±RÕÍñ?ŒX;bÝëÌŒ›Y­ž*.§áH‰ÕQĪŒZJ\”‚DÅÙ:)‰bÏÕ®H\ï[Çq áWjìÑ}{§±p’2œíe‹X!ËÕ›íÕ qÓ¯yć{w8ÝÕ€ô —Èpn†×ƒ5 c5w›;­²s´éùŽ×ñÖ~¼>|µ­ƒk>Rñ’£åš‡ÄÓ[7êkS¼ŸÇÕð•Ì æÖ€SXZ„{ð`WÕ‡w&Š?‘”-ðûAQE9;(l bÏÈ.XÑPsFÅ‚ëd«tÛOW:bÙËm¼i*P±çdÐÎ6ßÕáT WÒ’ëÙWÛ—½Xˆ“”¡~­çµ=¯Ýúí¦>©àÇ_¾ô] ^¥ß…e²Ü -*P™„ó P5.”¥lQOkxTÚ§x]À9/ðÒÎóæf§EßÛvõmÃóÝ6V´ûé|Óˆ&¼2‰ffh¬Œb¿xÚEô¤mÓ€ ͤj}Ö{Þ¸ç·÷­aå²%´®#e³o¾44)FÅÂX×!V~ÿÞ,‰·'þÇ~µ$InëÀ½OÑ0L¬}„9‚—vx3÷x¬®® j¦P¤ž¤Â3›îúHªT*‘™¸vß´÷}Ó<ͱ]Íqy®»5y½Ž©CLÄô6Öq@U„s7’w¯¸\g&H´Ïc•x²p>a¯;ÅYŠ8±S„›ºˆyg@%ݧ®²å1*´GÐ^ÿóÛïRÀŠÝ?gâûç_ÚÅþøóK»î×v±·¯ý»a#ÝôF ¼a‚LXºÝµßÿöÆ’Ý™¸½E Ä·3oLÜÿßî‘Sy| -†øqøýõãJw·¹ŸÑ3qÝ"yûû»ù–b·®U€¨Ðó-rö9ŸâœîܧØö…÷9y‚µ›lêÑÒ-½íòú9ÕùéT ¥ª»—Ì wˆyƒ˜'¦* -Éñ2Ý›” áP'6€9Ž]÷Ì-SÅUÅé3wÐ9‘ñ=O?MÃ'6tø½FÇ|¢¹5ÇÙVsaª¥mŸÊïÁ‰K ˜Õ< cx29œÎ}frh†Š:öáu:a(W#«@’~—ìb€Ìã.q(™OU¶#sÉ‘’¡V7ê®°‰ƒL^%^‘âˆu­] ‹{5ñ í^=¸ÜVHŠ—«á<ý’0¹Ü.¨ßˆU"Ç—P \JœÉ Ψ`Šq¼É‹çnŒ³ç{¾Ø'šŽÝ†¹ž"È ¬‡x¯?C»×Ó\í(&^û9A [^çü×w³pJ×ÜIfãP8­¼ó*Äbòm:€,Õãö6÷hóm¡=±ìIJ†œHvËä!|´L -d‡ÝÎ&ñÎÃÁÒ@ÆÕ±²Î¦/3ˆ_‡L€Rõ³|´ªÇÒi…¤èùÊë[Qb€ÌãTæ1oóñyÇk›ªƒô˜ÕÄ3´{õàv´Åd´w.Ò9 Ôb¯+úC¸Ôèh±ö8­½‰[Pœ*hM¿ºÚ¥Í‡¡uâ@ÎÆ(w™<Ù-g2y¯ïRªc_;‘á¹áª8âxý=šŠ3$f¹.ëº{˜tµ;OÏѧ¹/¹…”½.qÍ®ñS)"Ô¾AjÀT,Ÿ%„ZݱÞÀ‘f¨¨ž|¬j¤Šã6|l?Ú ×õ³ -Ù$’‚sn@ÙÛæV”p¼žŽcÎE²×$öâ½râB%gZ,ÐÞIš@µ^¾cüÔþJÃ$È<æ÷X"Ÿª„,Õ뼹Ǜ·xóˆß½71`V·C\‘w¢Ü®„no_*-Âq[R6§;Ü7¿=îÐm—!èáÇÛ;ÍÀ -yˆ÷|¡E°šÆ ç2…' ©…*<×·‚€){ü^R®U ’k-¸ ¿IŽïûœã -Ùĺ9ÊÅÕñ‚ήüpª Ÿ'ªB¨¶'Œ*"¶)ÕqÁ08UКÆh—±N -lèÈ÷šÎs°AX’$CÄ“¾q ÈÙmÀ šZ¬ ƒQÁf•âÖ¬©$OÂgØCÚ-े!‘«àµ²‚³Bi5øê,ÖÝòU×ÏJ»Rû™0ò ¶e ¾/¸Q -peࢮ„D¸Êq¼\3ä‚ÇK"gÅœ*hMžŸ†¸ç9wó—¹pª©HñtLV u—ºsoýx¦fþ—ü˜± ޶Ž_µíÿ¬mÂ@\]Ä VŠxC§ ‹SWº€‡ÚîH0é¸È¯uÊP$GZïâqlíÈ‚¨›º HIᦎ Ber -f×€¦_^ÙJ’ØÉºóÒ¹ŸºÚ!®ÄufêÂu¶pµ˜“BÛ<..@½$fêoà ÙÜܸ‚ÞŸ/›› lÂ%&9žéðG7»¶u˜ÊŽ€ýG¤bŽÄq¤ÆÆ©‚Öä¡]Qá|‚As7¶uÒ#žOTÅí'qTmÉ ZÆ^HáÊO³OftñYĽ&æn:¿Âg(Y/öá½*fœø'ªçÅB ’òë¢î=6a¡ \qtRÏJ{VêX/_8„¦ìÍöèdsŠ ·T(˜ÝR¹˜ -’Í5áh®ïRÁaV×Ä$eaG³§U‡£¦û1ª¯$k9qì6`‘Œi¨À9Râ=¾û ûC-éê¾pj‰LÑjo­€IC¹Z¤cS2BvÛÎI´gÎ7œ"$‰ýß‹÷—Û ðO.·p·¦@òU¼ZSËöž©E„K:¡ Y›Ó-—$Žæ‚JiÜóž˜o/ŒŽ€2HŒÐzÄo¼ÔóÒž—:Þ!íûŽXe-`.‡Rƒ`ZÛØÑ¤ç•=¯ŒÔpjSӌى¹í¹#ŠèØ\–ŽXvÄr{0— ªe\~¦g|y.”ÑIæ5g¬ œ¯H,¨À9yÎvÔ×®ö‰¤ ˜/öáÓÎp©Á­@cº45Nl•™Á=4Žvà‹•ËU€ÅV2ŽûVävñ]t¦¸*Ô‚ã„[‡Xr%OÃ+‡Ó± ‚RwËY§x~iœék±R.ž"r‚dKˆcÍö¦ÈÔ$Ð’¼qq/`îˆyGÌ·‰pV‚Tj ¨‹7c¡fçç·ºÖ¤`GŒ¨©}ýÏo¿—ömsíçbŸ|üô‹½ê?¿Ø[¿Ú«n_ÿúwWZÅßÖ9qi»QÈ›¿7¼ÿ†l—Î÷oZjÛ(îß"°ýùí K ¼ólÿ½ÿ’ÝOí¹úíãÛ×oozûŽÊF±}m#âzû{—O2sûÜ ²Õ—¥íÈ.܆"í‚«ro…œ°"n&d+åuçkæYk 4ßjæIxõ|OUDµ;Á]º+,”zùÒu¼ïª°Z-›”>qáÎY.¶P.OÊö&kVaˆ­#¢;ã£*~B{æÝh% rŽ3ß`MBññìçx¯¯4`jβm²?BÛ­–;_éxeÇ+Sóµ‘'ŠÚtÌ=›ïÞ"f®\ß"$ dJyÌÒËžXn¯ æp3æ&P[wËeˆ%e(íú*A‰7=~Œ£N’=«[~V¬Ä”[3cÖ ÈcQL›ÛxñÞרŠ"œ¹qmÐt‚xK²Å³!¿²ÍÙñGRE4sD()ËP“3~*Âm« 5¹ª8§cÓà ¢®*Hj/<ñ¨ã¥/ý˜°;ß9©›wë%t@ <˜É1žñå-¨H×&´tIJ#–âp›ÍÙØÞSÆó]Ç'¢KÜ*äêôŸo%!Íü:OáºA—¡H¤BÌŠ§ã7…&âyÄQÞ¦º»ë½æfÅ3‡­Ë7}:Ûžw.ß>q@ÿ¨m¢ -¯S,«' TÞ…¬¼×ˉ;Þw•žb††âFòzó§aIöt®n±\¯öÄ3¶Jj¯#ã€5;÷çŠÄ‚çš»&Ÿ§ŸÏáf§_²Z[£âšÚz³BHª^p¼ñRÏK{^Ìv§ÝÒÑ–m™Ñn- „ζ-9ßdUѹæ6ï>s]>¸Äsþà;šÅœº9wŠ"~Io(¶ih€a´ËZ '»Ù:'` 6G+Éñ‡óTqbˆ³qÍ6Î øuGçÔ¾} ^i¾’2”¦—ûï/¹iÕZN±ﮣ]mÀ5Uøût§³íÙ|»kn:Ûôƒl›Y{ï$í zo"@týáhsxª†›Nµùææêw½Ð|uÑ9I¾,fÔ1\#_éxeÇ+ãåjE’ðj{8Ó‚ã…F«« 3cúºxšÉgÎrùuñ«vJÖ9©×Ð~ÐN·ˆg´§æ†VP½¾Ÿ˜Él‚ÑÑpgÅ“[w}“àJj-qfÌÊö¦2ÖñBÄáú»f@‹b«D();q·äâ5‚’':Ðt@gš»Å#´¢©nÓ|㥞—ö¼ôó¼ûuÓYR†Ò®o˜'öµÆ@HmèjÓÄ—»ZÀÓ.šGp¨’%‡PF¾úîèx©ã¥/ýàuÑ€krûVÄsgÓƒóÝ.Êçó5Ÿg¼›ŽÄF'ÖË‚#\ÁÄ’ÚØØÖp¼à·t‰ÙÞT®¶áS}B€jËCg›$žq¶9Ÿð …sËîæ-X€šB/=;ÅÀÕ¦¦ë‘V+ðÒÜ[O¿¬T¯?9Î,ðr•¡©MË÷ú‹#p¼ƒ# §…#® -œpL¼S”ŒãF¼ÌŒ% øn¼¢WDë˜B¦Šz¹Ž;Þ÷ÜIñîЀ[K˜ y}âŒ6¼SÜ?¸jçF VÙJ œ« šNt‰eˆ%Y—`t\mÛÔ#ѹK<çj.1Z'æâéø—z^ÚóÒm°u'*¢HÃ<œï¤"fæ+±ìˆe†¸ZÎÑDj,£aV|<X’ÙÍñJQ¼oélß g 5ã ¥ùþ³®½¿®Å[¼,)9‹wV:7?Š×1œ±56ÈÕ¦Ã*¾zÄÝX+¨^ïm'Š¢ZÍL—v§– -«™IqH“m[ íJ³Êá‘n -:ÂÚ©ÔíïOÔ@PPÇÛ¶Œâó‡fuZØË¶3h²ºIQ@D½¹®¨„xM=ÜŒÙNÀ&Éñ‡%=8\ã‰çÁ\-\?ã*˜\W[8ÜŒ8IŽÑ!$%Дôâùž´qB„ìáͶt¬eÇZ¦¶íAë9Ù‚Ú ¸m¡ôû?öË ¹‘›‡ÂûœBB‚¬s„9B–Ie3÷¯úÙRd³«7ûW·ŠÐx33öHòçפ -RÍÝÆ¸›öÜýÆ TÿÎØÏ8Ð’¶î·Qu7´b}Ÿl°ˆäfÃ|'„’ÝmñI<ÜÖO¿áÂå/)A.äµOâ‰.¢xÄán¸pÄœL³›G÷ûƒ:bZSGìn@&oƒÑ…÷ªû&­'­P 4hñ¢!^ñiXëéav$±³zÅ}Fb#¨Å¼±—wsYŒÑz1é0RHu Ñæ©gñ¼«rÚnÀó”8Ü•nð¯®Ø^ÌÏ5µC—F…*ñí7ÝCÜ©é.éˆeE,#‹#žÆ•!r ¬V% -ñö}4Q.Ð|l‘‘¡&ø°˜èp©Ã¥.}â¾M›Pi7ÒÙ)ÜUbŸ˜ Ô¼ú>%±T ‘oWœ©1 ”ÌÛ¹öTc;Tc! Š9)lyìÚwKühÙeÓÄ×w8Ë΀µÒ·Æ'j¬ -Rm»=WŠ÷*ìê+€L^LÜY±gÅ5+^¾®—G‘Æ‹àxÇF¼.€HÛè<÷F˜ãŒ`˜Ï¾Œ:ZìhqE‹Û´©€¯ïÝ Ò¡`pƒŒ Ún¿O5³.Þ†Wš¹ž uq†Ú¿¢`zú`-’m9_W¯[&ÜdŠ Y#µ…pÃOã@ñP 0J 7pÎ@‰½æpDw<Ò»Õ€µR}Ik{Mq¯‰ ‰Ã\ñ´åÌ`í -dq\`µØV‚=£iÚÍšür^D¶/µy<›hJz2ñAnà|Õ×¥=èTû¥7Äw;S[…R=3Ì»5™K:¡´djr¼Ív_ßñ¥¼ÔáÒ -—¶åýN…óRA r¡íÌ=+¯YyKÛ΃ÚÞ<ønˆG©›@$WÛVêYiÍJ—vN*‰ÎvÃîôõ{z`V/Í&ô/)ƒP={¿­ˆ‡\üÅBŽu¹P© Q XëéC÷«64[~»-âÿÃ-⑃³éNy¯ïpR¡dq q ñ±†ˆ¦ñw¦}³L3ä´}MãªÅ‘wJâxGgEH¹xÑŒÄf€J['ö¼¸æÅ­ð=2Ë ÔÐ=ã>ô•žWÖ¼²O_ìˆqEŒ#úÆk”á¦.`I çŠ@-B s mÉ - ’›jêROLkbº¼Ò¿ZÛkÊvÏ£qUHu ·O“jdÈäõµ#6ó^uÝlPI§OÜîêîq±NN[|ÂîF>f¿eÓÝÞU7ƒ h`ئ‰ÆëqäYøð,­¬he€–ª³zËxF}sÑM Ÿ~jൢ9ñ{‹í=ÄÝj8kÅY…*ê,åãˆû`ó±¿8JõZÄT.¦äÚ÷ ;Š6g äî‹ÃÃìÙf†rÁHÍ,Ü a‚F½u½Mãˆkô†ºàÂ5´€7'‚d T*I¤šK|Pé9hk2½¶ðpÇË+^Ñ7\ ¦z=3§$6dòˆ'êhHNZ´ŽÆ™Á8{Ä{çlà CêzÚ -•@k-Øy¯šÅ[ñˆãp ¡dq¢c||hNàuil'›ôIJ&–Ë®¥1®ˆñ²½4Hk{Mq¢}ïŒË“ÇJ,K“Hާlk‚`˜Ý¨˜PcËPÓÙ…¸Ã¥—V¸ô‰ën»mDJ‰h“Ø@­ýw˜™ã$ ’NŸ¹Ý&v ™2y¥ír@ßë·H¤¦mYv†6d´Ž´yÒF1]þùí÷{õúë¶ïS…„·ïÿhöÇŸ?Úçþlvùù׿«udÀ÷’R¨èJnôªƒååqPÛ_XË««Ë—í"jþ÷Ž š—rû{ù-9åûwÛûô¿—ßþ}ÿ¤ûW˹½£Wãöï¦ÕËß«§È÷ Šæù €¥û¤<$žoRÚ³€Dådàw¤Åú°v¿lÐÞ®Î}Ñ©›ò>wÙ´å=O˜õ-tXëK‰Ÿ-Ýe!>}æŽL iÁnu3׆‰ÏÜPË¡Ä^D±KÔ–.6Ç %•{Ýâ]FäÝZïj}ã5Ò´8i¬Ü:r âpM8X¯ µ4̾+ÚéöU(Y\âOpOÌkb¾¼pàưX´®5Ö5GV°:{ã8â>ˆ¥#–±\¶Ûg ÅÑÚZ¬UÇ©€qöBm¯ºh÷Κë‰t~¯·Ó³!𯱲jZhÝ›h>GDJ³x'†DsC&È…t“XzbYËq§|7žëÉí‡úþtO\J¼M<ÆTiégˆ™Ò ¶F6ÝI|}‡3yíŒÓ²¤Ûé­ýHKs;yÜ»âüt uÇÔ7"¹ûîCaê‰iML—¶K²´dñéS×w êˆiEL±Û‚î;[\áM݄ĜkÛådàw¤ùµ˜£ ]ÍíäHõ•E~èðøb9G+òñêgwÞÕ—ûX:bYËÆát¸c‰!—íñTmë¼2H|óãCW¤Ò|œq£*¼±ë†’ømR-Þ®ã”ã”Né¢3]¢a;̤ç•5¯li»Ž†uýhˆ¸â¤šC|†‡<áêkË5çMÛtþE(YÜøýà^mgGsCZh½E<ãz“ U^ÚÙŸ½äÂI¯óHF\m¹‹¼1#±q¸K.œÆb­ #"6ùrÝí¾å»â¨ug TÒé9ÑóRÇK+^êôõ‰£ RY$7'æó0§ÒNŽìmè½¼þjoãNmâ„¢õ5i¯ÌìtâŽxا+Ûsœs´öÏ5·NN—˜ñ¶ã”›ËÉ6îp±ÃÅ.n/Èe€ö)Ct¢âö`ߣJĪÃ\8JñQJìy÷NŠ=)®IqƒôPè2iºé[éyeÍ+û&m$ÞkÒ8ØB޵,ÂÉK•–Kc{覱0'ƒ*êhœMw÷}HÜ{B:bYKGìÇp}yC#~“…œ8ÒšÓ´hëÕ‡ 'Ž£Uàx9,ÖÖr$W„*—áªg rfpÂEÛÄ Ò^™ÙÎM³c½[€µR$ïR¸S.TšIYö›7q3:"ÒðĨ.ÔÂÕàp¥’±#¦š‚Õ42 ·ê8Ø©Á9‡ó±…[Ð%ȹqsÈB\7ý;L¼¥ï¯ë]•´hßúþ_úrÖeÇyÙp™ìÔ¨¹åBr´½m™}]Ø6‰‡Òá‹$“Å¿t¶{?PGL+bêˆý‰«íÞpÊûŒ“¥h‡+露ËrîI·.–#Ä_Ëx®ŠV%´¾<Ž¥#–± ÇZwœ(±7u“Ñ’Ê¢­›j3ú7ÚñðÜW'jŠfc3`­/ÕøÉ`î•EãÓëÄ/bÁâ˜Fª%Ë 2„’ź…‡ÏŽÓs¢–¥²ỉo_@í´‹W4YA%²1'ÇBáÏ–p+A*E*-&²§ï^uÑî74ãâ'ÐsÂ^eßgʼn@.äùö“x8w©úV[¦.òp¼œ°UÔ!¾=›=wÏEÜ»X:bYKGình,€VíJL)SGœÊõÿüö»´GÑZÝõû¤`I®ßÿÑ>ì?´ÏýÙ>ìòó¯Wj´ëËpiVíÌ5Ä•|wœ-ŸÛ~výüÂ’ýý²Éq,Çð~Ná G¢HŠ\Ïú³ìÁlúþÀÈù«˜)=X¯ ºkQ¨tú§>³‚Áˆ÷iÜf œoïÈ ùŽñþ÷ý{¶4ôù[°üñê·??çãÁý_xy?Š÷ŸÛˆ¨Þþ<,xÔ· Û2Œ¶]Ý~]”AËoâk-Ij¶‹‰;Þ§âw"HmùÚOVìYñÈŠëÕ³ek~£9jÒ·È„˜SsbAW¿‹BÖÒ#ÀŠ# ?SvÓéPèžSjGÇó‡u Ÿï”C¼ˆ£¼Ò>)‰§ß ‰[Ì”·²û3±ôÄr$–ñ±Ú`GŒbü"þ¡ÚhQv.Ç–[W[?°IÇf ¢8ðáÙ*6Tije·å}›Ðð6ó –Õj«\i¼¹Ø ‡˜œïŒCH,`™™p¼þnçH¤5ô<훘{b>óˆx­¯iË?® o9ck—Î"µ:¥ÖêÊ8xù'TëàÄ@‚.íéš.¿Ïá4pÆñî]<â€ÎV[Ž·Ë›ÝioK¾»i‹ÆvuÒìx±ãÅ/ÞF^0Ôp‚Tëå™­×uÄt ¦ Ç»w’2E"æÖ=ðrg[yïjS…ÕHÄÒÚRŽ4c!°ä%ù-ÝM*ԔƪØgóD $Ä8ÄŒ ´ Ú!þäÅž¼Øñ^®ak[g—ß»…ÄáR&ƒTÏ'®H™S¼.-Vä~gY‡³SƒK¯×™ŠzŽöÉK=/yéçù.õ_ShfætŽîÆMúÙÌ“ŽXÄ25ßxÄZú¹ZÃïS-4à|´z†–N¯\zljçðÎ A|¯q6=íkú;§DÙIi[6ª ê^¹%œ (Ç&ºOjxfÆÔÓ˜ffO³{´kÇ)ÊD"–žXŽÄ2šñ1cÎxÛS,yýhKÇkª­ƒú‘ât¯{‚Îò¾LœPj‰­8îÁ=1‰ùvjéž,vñˆãp!(V,æÄí8£«áE¦¶4dM(bÚÙÆž ™þŒ©m‹¿&<®žoªbFÅ?xp¸"PÇá¼"`¬bhqtLUAuBÇû[…$v¹Wôª˜Ë¾*4ê±o4ãP)Ó´z°ß~ÚŠ¯/·Ê‘¯¶‰³~¡… gjB`ÉSÄŽE‰´¶j—®.J+g®ŒÆ‹lœÄñ*+Φ§õu2&”¤—¯[î1=à±"füBI@%yŠXådxøÅ„-˜b`1Èd‘²"ØÎEsáhæÔ^3ê»D²"HÖgÛª!??ß¶V†’¯öß•fP¥@6„ÔRãZà÷C}ÛëJrúúÿ°ÒÃÊVF°GóÁ}a¾ñö-zÑŽ¼UkuâbGàh“¶ïy®Ü¯ÎDí5Ã~¶…ŸÅ;/‚•Iby¼ã¶‘Æ!0õÀt¦ðqÝfñbÝ2’—·Íúz­€%Íl£ãM¡jrúÃY1 œlj¶Ÿ'‡£9C-M(ã Þ˜“3Õ–ÄÑ/§ TÉÓïéUKÏ–-›žvõäÀ -¥FÒ¯0!º¸;ôÀÜó˜g€Ã•3¶áÂm“nœÚwÑٹݪƒU R®5ˆµöi¸ÁÎ -E¬GÛÒ‡é‘ Úªê‘ÑjÙ¯X»:ÖH -ã°šMGÅxf¯®Ìp’Ö%C…±2”|µVò*¤D¸fÐÖ%è—4ÖgÀáüÌ -ùÃ,î3Ø;T< âÿ¨ŸÅ¢)!TPÔ -XòÐx÷)fq® ¾Ÿ¢Q‚çâtôÅ6…Þi2??"¶”@.ÀÆÞ™vz½ÒÕöŹB}Ì÷-"þçÍ éþ;ßþùíwioÁòø:q›#¾}ýK{«?þüÒÞõk{«Û׿þ=¤dÁ7‘åf8–³àDYØýw¡T¿lÉ“hŸåö×Ï·o/o}1ëý­ßþ¿ÿŠÜÆóí«í1ýöòÇÇïoôþÙýG<žèñø¸ývTo÷ðÔà3ÝÿŽíQ-´½­sFHÌñ‚¥^Bµ@2ÆHómžÉoVôšXzb9Ë9âë|1c© f6$Þ¨¨ÞO¬öøk ïÒü!+ç@ó•v¸$oÝ>Ä-DŠ&O·„“âmÝ ŸnØî¥lãjƒ´*qÔ@†ÀUÆ·OjX+„¢ÎŒ×uî^ÃÒËXn®¬5GÄÓ1·kÀZż®]®ºm¹bÑrñlÏNÖMd„š(Èš~;£ó‡É×󇞘:b:Ó ±*H5÷–;­Þ4ÒïGÁÈèÊw&.|ëeÃñ‰±ÍG’k …cÌ^^È=ñ”¿X¸r txrº¿²^}µ´OTxÂùD¸Ã3^0s"@)n0o–uñN9®ÀÉœ.±er„;Œ¨ÛÄ>Æ& %áÕQ·rÄáê™A/ »ÅÞÄx;µx,@¹½W·¿‘&Ãù‘V7P,ú¥\uÃ#^@B9†ªB¬}W¯®lK:ܱ¤V+_M|úMþA*`jc¯Ø¦hÌ»`ÇR¬âmÝÉþs½Pá¾ãN—øgÀÍ6O¿=ñÆÎ"Zpd<®û¢¡4Ì ÁÄ=B—О>6\5pÊ ­†I7ª bèwGùª@Ò|¹E¬ì•Y9G"N :qmCnñbùZÀóS2Pb÷ÐØ¸óbyK'ŽæËš–;è8ŸÍø…¸BuÂcÝ™ÔÛ±tÄr – ;æte½zó:Þ©#É¥PIcgÛç¨S©æÆž&~ÐgwîS¨!`j˜A’êè·ó‡É²æùÃBâPú xUVO[Ç›±V(z}j¬#æd@|uU[µtñL­ -˜z¦¶®¦õÄÜó˜gˆ¥‚šE*ï&@5gL=1‰é܌窚KÌ -šÔ1¶-Ua ¹âX“3ž9ffüê5°Z9NçD€RÜ´Þ‹±ãÅ/ÞÆ^í%A¨‰â--^zÄó‰pµ˜·§Ñu6<=㧇ÒJbdHTb'•ë;üºà hmâò¨[hlá.;Î -ܼ³b=mÅzuÜųb+ ~cûîkÜó˜o_ë?)ŠÇ÷s\œ „}+^5c;=ãÏ”Ï&Å[¼w^ìyñÈ‹ïÐ&æh]›¨’1ç;­ˆ±M|PZ¡èõ½2îÂ[¬â/ÑðÊù*Hõî¤ÎÕ¦çû”ø,¯ë÷×ÕñÆ-«ÃS™áÎÖÀªŸÊÖá*`ê©¡Kåéª6Neîˆù@Ì·™T6PO¿Ë·m®Xú´ -óXÒóÊ‘Wn§cæ {U, ’x¢SÄä„gñSù¯!p•±£m£N(ÅMŒõ<Ãë;Zƒ´*qúC´ù†ëÀá6î—£ýšodG‹×ƒ9S^EÓ®öL+]³S5¯§éÉ¿=1˜ñ\v“à -¨/ŠU#ÖÓ#VWÆUñê`^ºxY9Ç!æ”AÄõ¶ï¢ ˜ŽÀtˆbmÚ…»ªª:3bLÌ1ˆy†8ÞâÌèMãÖ¶q…¢Ékm;× ÕÜž¹%±€©9›·¥WC®èô nÆÓ òlÆÇæ6Ó5_]ª\ïÇ ›[¸ÍcD âqŸß¦Wp6P/óN¶Š1íœ"üÚ†`R¼­[B‹§gëê7œ«qº¿²^Î'=Í÷‡r‡{ð6þ@†Àu¢ýHO,GbS;b<ãm"5j8ÜiW@+¹æ#0€³éIà·'M°z·è–{¯‡ë>$ %a¨ËN iv7oGb«¾W¬">Ð/:|¼ŒwÙ AJ%’WÄóc±{"zwÒ†ÄÁn%%¨ŠæKV¡Š:Es]3îg,±ˆejÆ T'®}fïúÈ -Ü -²G¬§‰õ)ñBUH{M’H ΋mÞõ›GfÄ»J;âÉÄ›!þÙÚ<§û+ëÕ:>ËëúD5‹älÕ€ÕÓðŽÄ\´x¾<•†òý`É4ªilj“¼31·p¾©…;FÃ'”ruèx±ãÅ/ÞÆ¦¯üD‹9ª -¨×Ÿv+5*˜kd<¦åž–´<¢=ºÚŒ†_¹A±q.ï¬Y9G² ¤ùr›XØ}ðþô·ò£­mvÄ™[-ºëÿŸß~—õñuªÐZÈÛ׿´7ûãÏ/í}¿¶7»}ýëßÃ4,¥¦8lîYš{öÓàTÓ°|ÿu¨UšïŸX²Ç4îŸf öï·'2h¾c<þ¿ÿžœòûWÛsúíåßßéý³ûy<ÑOãñq›ÕÛßþ¶âEš…¢‚”ûÏÛý¯™$ ]M¼0¦ÚÆTÓiÆ -9“G|–÷êùZÓ°TOï´ØÓâ‘G´ ý³ÝŽXÉ⨬=ÍæyÄvóUH˜#·«ëg§·-=ðY\Ïr+XJzñx;Úa³Âî9ï*!vM˜èòù®\¶¦_Ä«³x•~sËaO Ð~ÄÈ J©n²-r²¥YÑšCâPúmWÛ‹Bè÷~¥&âHþÉúo¸[ˆ*²E"ÖæÃ‰ëºÞæh] Ç›¯4b¼ÜÔÖsj5"“7â傸™*0ç‚î½¹-ISó¬aCí’¶e³tu^XÉ­Á‡Ú¸x¥Óì—ArÉ E÷>E_`àL$€Ö>ÂÁK;¼™ûGÝ-JY -BU5]ÉHP\‰¤ºšèÿØLv‹Ä´%¦‘xþŒ=¦I\mÁ“ h+³‰Þ—‚{¾Ð“®jpqW£0¯¸u o]6/&swQ -ŸÈw9²uTW#WNKèfî µÍö†ß7õ˜Ak=lF§ÝaþE6šCÿ]lã¸øÓæiæËÕ¯Él8Ë©A¼5绞?äš/)2=M^˜òõ¸TŽFêO£fÚ8, æß=8ßÕ(üd+ÊFL½Y›çz›—˜«{b”ÞWóâ\í3]V#A°N³»Ü¥®æé²†·î,ï»´×eµ„wî˾´û-{ϰ2»Ç]z+t®™ˆ­A‘µÏåô›-QrP)Ñ|/SÄ…[—/Ct…ŒÍ5ÔÄE7ù,îç¸Çùn†øÍ¸„iˆ¹xæ!îy\˜Ô=Í4Ê=+θ6¨h–eë˜hú•»Ò‚ ZëÑ|ìE¤~48nr &‰„3v/V mA«?š)­™{E—Ù÷nàÅ7¼xÛK?_ýèˇ&öF×Êìºq•~óùCºÏ(`ˆ¡†¼Ì_ª˜¯ŠâO[œ×t6õ[×Dò̘̟f‹ˆ»ÎÙh+h ³Äj´ÝSem³Så¥óÍ•ƒS©!ݵ õ\8jžgyߥÅÓ´±ri7m®Mè¦-ϦqQ¨•"âË7íÕ¤^¡+F¾°à|“9Y/@Ö3eÞ„ŠH×+Äg|M"b÷áÆaÛ\8ßæ%Ë qöe¾Š6_K—|¨`'ËCœ+«1¶ûkj4ßï¼4òÒ–—ÆùÎOï¾uD”GÔ}뤇3^Ø<·nÝi€*²9•2]Çöº|ªøJ˜ cÏlÜ8ÑI7ã„D<·Qëyˆ¹0H‘L~¬ºb¢'lLâ^!’(Wäó -.”8Ôñz$ßÍãâO[ “ÐzÙÍ}*Z”6ßxqäÅ-/¼Ó·Îï]§0¯·ud ŠôèÞ­6_U(ëwÁ뜰{xžàºÚ‚Ä& ­Ì¾u/¼¸áż¡†ýYÔLЦ–)aš?Íu»Õ\Í‹àZ@0œñr ç´ËìzÕÂu§­m6ío;_.-< Ö¸„œJ k\¾Ð. ¤5ÕŒ³ÅqSK”Û¹¸±‰F6q–÷]Zt‰ÃcáIºp›xˆ/53‚Þlv•TÖ;t™-„Íx]ã_Œ÷+”ÍR®v ‘H¹+6 JPéש˜w*ò©‚ŒÁ¸F3¾ÂÏÚY8ÛÇeÛ×ï:³ÍGL^5­åb͇мí^‰yKÌ·¼" R©‚ ƒPçJi2ÐʆVÚÐ'„€4¢eÆKÁ°†^X¤jª 0k`lK«‚t g|zíÞ7¶³¼¡ °öíF¯šB©|b™8Lzÿßþð©Û'>2ã_¨ZPëªéiUèîñ8'â"j€J{qG^ÜòâmçÔ]è¬ÐºD‡yEWË׬cH|¹"Ž…ŸØÕ R°qÃ|iä¥-/}è|ó¹ZghÄ‘G¬¸u]Á´×yIb«P Nw¶ñrÐ@Lbºí_2ãºw9^)Ig¯ÜçQC>âqDÇ¿ð #èÍ"â³*Þï±­‹5œM¹\´žÝ.½z±É¦vÖ„?'“o®PY -h)³—íìt£Ù²kŸx.´¼o‡Çø»ã÷1œÃÇX??dÛ¸t¡½#ÖD[Gò˜q¢A Ôggˆ+·.Ÿ„R[ß%–‘X¶Ä²G¼-F8ã†o?¼8,F¢Púâ…ªÜCªã7¯+˜Ö€xMgÊlùî]²ùæ*Ÿü8‡qx½e#@æ}ù.cÁù*#‚TÅT»öpLŸ's1@¥½ù^V^¥}Daþ(5«sŸÇѸ4@$Ùõ‰iKL·¸6¢uè’¨%´à|¢Pév£ÓFñ>ñYÞp¾&Yð›8<ßýq$¨ý¢É¥ëEd½Y´uËň{n×àÌ­èjÄ Æ%ظ%‰õþ[h¿É­Þë#\ÎÞº^ÜðâmßÕ2KÒGÍ/ÆŠŽÖý5Ts¨!_L˵l©h½JÙ·Þe–ëý Ï–ï€{$Ÿ}çåzw Úų•œ›­¾KÛ>âþ†~÷ÇmFToïè„_~KC­Þžxÿ-Ëø·|¾–Aâ—æš6–øÑÒõð~éšö—.ª¸Põˆóá?oEGÌ©‰É$EÀp&¹šøˆ‰–Ç&Ž˜*AÊÕÕñ1÷ļ'æñ©^ÎŽ9a»F]?~›1õÄ´'¦c3žQÅ#?V¨I9WäyiBëdžeìgÓƒ3~yÇÀ+¤#–±Ü&¼"17ÐÖPÇî¶Ž·ª\•Ð!~åÅž÷¼Øñ^îl -µÕ ŒÇÓ0)¢;âZ,›kÅë…UÙÎÍxÆËs²ö×HÆ8–“*$»Ú'ð(¯;Ûp%>T)u †YÞÁl¹cå+g«í¤I¨%T ¸º³]Ðãeç Ì^U»¦ø<™%Yùï3'.ö³Ï¤ápLl`Å< Ûa ÛxʈŒ8T…ƒ‚‘$ÜÔ œcE]´à kËQ"Wo*–žXöÄ2´‰£¼î|3$vOÜ’ó-`ì˜ÚYãí¬nøn§ïºfþ&·`nT…š”㈂!g?›ßˆ©'¦=1ˆ÷ª˜16_±¢ŽsòÊði‚èp±ÃÅ.ÞÆž/3 ±\XÝ;Ö©Žö)dKZ ˜¹a±ž4¹'í %œÙÎ*CÖ@ã ¸uªJ¨Ê.Ü$ìYÄ’k§2TbgÆk‡‹¸p'Ñ 7‡û(+ž£õNcÛ2ŠKûs˘nÀ×oD< ¯yêR#j˜{bÞóí@ žš°[ÕZ8£[~V«jµ -äs΄“›‡=í<‚ 嚯=qÝä'‰ï¿nìUŽSs³RÆúLŒýÎ5K_¿qf‹íЉÍh:Ǻ™­¯[Î ©º³=Ë;^ìxqÇ‹ÃùÜŠbu‡ÚNšzI±d¶UÙ”3žï:ý!œ†9·+ë¥ò,ý†Û6ƒùCÀ&ÏÑÚþ6Q!–‘0c+=ÙÅz¥‡Ä `(›¨ Èêå¡q"±Uhá|5qÇûµŠ%#Cë=®O¼Yñô©[ñ“k\%H¹æk£nï3~àáTA–A\/Φ‡ãN‡ÄÒËŽXftœ -ÊnZ°RXóâ¢|a>3Só ­íŠ>j¾¤xu?ÓÔ8µº&s™ºÆ)™¸Á±žEpj[])8Ü:&g<³uO+—VÀxÜ"¤‡•=¬Ü‚Øï3¸þÞIJÀµÔ86Lš!1aœùrjó-Å!î,b² ÏXÄsM˜ªªgÃkšš -]Þ„ñðŒýî­NĪkœزëj V‰pQOÂÃA´º3~SÅdxÌÈø¹ðàÜ®¬—ÚÄÑé~šªÆ( É5µ£¼Gç -ä;ðIãíp±ÃÅ.Þ†b°¶Èe¿óèáΣÃñJÇ+;^™o<ùÆ ÎH’¯ ås#NÀ²9:^qÆd ¨¸ªX¬Wþ¢½²ì$0›8mËtvNØ®Q·´¿¶ézöÞiÛ—ö™P~PÚÅ `¨Ô¥aR†J,^°Ã=†ÄÜóŽ˜§æ« ì5ŸOUÙ~Ô«›åw¶¶jˆ¯Š³f|ÞºAµ -ålU c8'kõ5¼ž"¦³0vÏY7öÀ3¢xn¥#QÈœÇ¢àž˜÷Ä<">sÆœ›M 8•â´w¼ØñâŽNØ¥ÍÀœpΦ‡ ^Á -&NtŸuä‹ ­¬MmÚ…Ç#ž„ŸËŠX‚˜=nƒÃ6ÕÞ]1($»Z =í”x?Qƒ àLW[ï×nÁñˆµéXB©B ³qéYfƜەÕ%>#”Orµ€j¨JÅË·Õ@• å:NŽeZO¬dŽè -lޚѵÊiâë‹{†Ä„qfnÕ (ɯo¢žXöÄ2ÅY‡®Ê–Rãù.$ˆpQgŒÇ»çS‚8W ¨(_Ø{Nua†Tñê&ÑñbÇ‹;^¼œj¢÷iï¿ÉÚîwwçË/ïxyf¾©µˆRœÌ舩'¦=1#ž;p®EX…flW[ÄYŠøehWglwŠ"Æ -V=A¬xàbY0ç Ì^mϦ‡-X¯>pJÀµ¸r½–Æ)™ä8«7P./«vÀMÝ¥útûç·ß%CQ½¿N‰òËëßÚ½þøó[»í÷v¯Û÷¿þýŸ_jÑ»a–öh7 ~ýù,m߃’ü|²ýû2ŒíA†öa?ÞAóFtÿû–œÊë«`9߯¾?|½Ïë³í#îoèGqÜFÔ¾êßÿË'Ͳ5–ÒNyÍÞO9½‚]¿åäBÅ#·‰ß;.§fB:$žŽÔ1ñŒ…>Ú’Vªb™NÚŽ‡¤ñŒ—1Qbnw¢ˆ¸mŽÖÚ–C|”÷=ÚŽuj¯ù<ú­­u'ޤ_Ujõâåý4©Aš¢ùCU NŽ"ºÕfºzW›)—øL©®¯qjÕÛõâkTñ䌅[Î…ÒqœdèÃmc”•ﳦ*˜+B4^.fÕËåW^ìyqÏ‹·Çgík»¯Õ&•«‰{KG,;béˆ} gXž&e³//–ì=‘L­•‡H9Ìlã5àx‡qÛäBôÉÊ9Ž“qÙîDN¾uú¥ž˜öÄô±ú}i<.ñz3&¡æì´ž³NܹÄÖ®LhÆñT¡”8ÒŒ !¹íý´dþÒ:æ„P‚õ‰H]˜4ƒ†RD¬ùÔoÍ ¡ú0…Ùç¨Ö¦ˆPíÇ,±§ˆÕæ«8ÔÎAÕ€µº±1§ºµË('N­í¡<8^*Wj²xŸøîÝGˆ»|p‰¹#æ1OsÆæã˜{nÄ.v¸¸ÃÅÛ°Fä¼-GA,˜¡Š:Ëg6=,}—¸Ÿ®tIJ#–ŽØ­ÁBÍ""…2ç—UîòÐègL1íˆibÆŒ9Lq'a°P†F•!…*>œh+>Ω»fÆ_ªø„*îÑf[‘œŒëÜŒz^ÚóÒíKeÀÄH©9ZНB!$×~O äS‹¥ RÜL͵‰õB™”åCGüdï1 -ækdõá~tÖŒÏÛ8om8ã ›g'<°á)=¸¤ío¡vONùá^t~Ì=µÕ R&Bù©˜ë=É{?5ñç˹>å#ޱBÉâú/VÄõ›FŠáfÁ´»UàPJÈn‹Cà0;‘ä_aqaoÖjç”l»'áxÄœ¤0žfé?öË 9Žc¢{Ÿb.`¸€ -ÀÚGм´ÃÝ?âW“¦\í°«ƒ]Œõ79¶s€ÌD’SˆÛK• ãø"]/­’–¤˜±+è;gæUFvå™ÙÀZY> #1ļ#æ)bIv -Uð"‘“½ñÒÈK{^z¼?¿Wfqº à¶•_’<Ž–¯¡IÅd>‘oŽ“ù„"´Tú² ô„Æ$úæs5ÓtÄÙ<‚À]ƒ†yK½‡Ä?öŽGbÞóH¼zó [˜utz*Ö{1õ»ãS+ñÔ™ôŽÄšº.㳇ò6@õè½áÒ ½‡úÒiâ§#|™¾Ùê0«@IuB/u͉ÛHÜöÄí\ÔÑ@L;bzÌDÝö$ŽêÚ 5fódÁ!¥%;ë„¶Í;nl—Ç̇°…AL?5˜º«.]8³5à"ÇV|bçþÎL6Á®½[pu\·y#qˆÛޏÍkÏ5ùˆ „~|Y-¾4 e+AÁÄ<óž˜?—¸ä è|—GªþÃÆ€¹ÚDó-éyZ>‡HØ&LA˜$ÏT°Û–ÍÑæ½ñÒÈK{^x—Ó¶íê8Þº6ò¶=o;Òwï3¾öžOèÖ$–Ïð…ç»:L€ZÍ×UøX`Ù˰ n'Y:Aꦖ¦I8¶pß~ˆ;Ý$Ö÷à–+åRe†fË /à}ëô‡ƒm›²²PÛí,Jµm©ÌL XŠ&J¶¢àÞASXkÝŒ,UÕIW仆gçýˆ¥P2SKxy"§â‡Æ<óž˜?UãtÅ’¶Ó3¸‹âéÍ[Îý_›Sn§óΞùÜâ¶#nq\…³T5Ö—|Ü|¦ç÷Ø#f¦á+Ô`6ÚZO¢Œc“¾i5ܱX&´_m€êÑøÞq(œû;K¨ñUÄãÚñ@Ì;b~ÌØoºâcÖJ¦ŸŽXЦš -)¸y….Öø¬ÂÑDpIW%²RÚ¶u‰¼XJ21—ðÌÊÅmX¡¢„·Ñ5#|ímT¡å±S&Iä ¦ŸZ‰ºŸ­Iä»:¤p¶1v‚OOÅòË.ßTu;ÆàÞÞxF…Ö¶÷ýõ˯Ú{ËëëBàV_^ÿÖŸõÛïßúc¿÷g=¾ÿñ÷«ê¶ÔR‰vbÈÛR{Ù~.íßo¶?_ÄØ¾@èxÿü@w Ôíá/o¿¥”úö*8âë»_¿|{ÎÛwÛñú£¯_w‰Xþ'UYqKUì QÚþ£|û iü iÿAÒðA.ÿÄÉrв cD{ÃÒÍÞGV9Ðw–÷)íé†nÖ -VúÂ=¥½c¢àüp"îcõ¹&ºÿamy&‚[ëáïMÄý*¡`mh<O»Úsâq*x æ1?ާB:(OÅdnÌLEˆÛޏ}Íä°ÚŸT/¾ã'ôŠ~> -*j<]»Ÿi<ü“¿jõ5æX¨t?^mÇgqCyûP£^S'æ¬8a£x îg¹"Ÿ kï?EkbÁ -¬¨InÐt!D@æÇ)×Fâ¶'nGÄû”£˜vÄô˜H9u¨˜IâRA„ƒ¾¬úœMp„œj`·,jÁMS¥\ƒæÚðŠ¢öÑ&¡P¨y¢2l - -ŽNEĈ °§GžƒƒÕ€°¬.˜W»AáhŒn§ýØžù1çÇQ‚ä«‚Û{‚Ãnˆ¼É1ž‰¼Ù± õÈÃåc|ºTÄC‘Ž˜½B««äÒ1®}ñŠ/ÞÇ4>ÉMªErÐJ!`¡ÕÚ^9¿¢@ʉ*›`VŒ6î—F^ÚóÒÀ{èÁ­ké -f:Gc0Æð´»_ÁÌçR*ˆp0Cû™.˜OÛÏYÞ/AËVûsºôÿ÷ˆu¡I,¥µõ7è•彪×Cž®ÏløÊ*Áf€ýÍìR5 Ž«4¶Ó[¸x ^$ çûÌ\'G¯Â î˫ĕ•8•¾ù¢Î -µD']Âdk[\0wÄ2ËŽX&ˆ…zÔûD‰Ûž¸}æ'+ñZÁ -3|lj`pªA_»#q†Ùzû1=n?·q6) -Þè¸O¯îÄ‚M£†¹Â'¦¦8ô ÂõwÝ•AÀBËæ…—hA¨Ý,’4Ì|W¨ööãºZßKûƒfòa¬Ðo»èîx㥑—ö¼4𮦭XhõMw¡Gä»9¤ -–Å—èÏ­1+–õ_élاBÓyº?#¾´{gŠÐÍœM¡P Óù~úækðù.QöþΊ‰:qFŸÈ¦±‚º{Åt“?Öx†ø=5êmgyõó‰/Ô'Œ ¡%ê½aö÷§Ý`Å“#1cÅsK+˜z´tw«ÚmØ}¹©]Hì Z=çÓebµE¸AáLº®vH”FÞ6ð¶o›ñbu¨˜Ê&2 D¾:!¥‚¯áwªb†•¸@±Õòž÷ë$\¾áƱÆ+n¤.\¾ÌÈwq‚`|qܯ÷¸áòà8mÄïLEgÅcoC,XƒÍûá4òÒž—ÞÕ> T½:Ûô ?#¾´»+–é{Ëô¨Ðª-&Þk;«õ5§ÌðuY7Ï%G¼u ¢uyºÐ‡µ»¶D[gk@|Ç©`S(Ô‚tÇ>‘¯%l™ AÕ˜˜N/O5 ,Ë{ñ•Ä -XìØ+îClµ?©,ϼ »qA¨½ /&xgZ[|æKlÄR¼QH|Cgsc´Cb‰yOÌŸJ¬ÙDF+ζxìRã¢yú$}:ÆC™›&¶/¤±²J@|Ö(žÎ0¤}¯d6Põºz".Ô·!4ËälB šË±Æ†ÇÜéãöž ±½~4g€‡pVÔƒ¥£‘—ö¼ô8Xº+ƒƒ ¡E´wáJý_% Ž»uølú²÷wV\­ï.8æ6.Ô8]•$èÀÇÄ÷¹:Ò•)*ÞIwó £øª»ŸOHÅ~$QT.oè ·®9TÊÏ=—NÁ…6q?‰… ¼^K|©ÆéÆXP ©æ6”øIâ Ä¼2ðÊŽW‡Vì œ)šˆÇÍ -¼`×c¸Mp°#p­!ñŠùýØIÇΠÕëÁDÌòÆÜœ¾ñü®¿–ÒsÛf‡ÄSû3U¨6‘s·©ùê0[íOê¿P"Ÿ¨ÐªéZâ½Æ3þ+i,¡ -®Þ¼“ -‡>QX‹»Úý|BêË;_“CÌ| F…JýÇýòëÖó__W~yõ[Ôo¿ëOýÞõøþÇß»íèç-¾¸|fEwZÈ›^¶_ƒKû÷›íÏ-¶/zããŸ@0Ôíá/o¿¤”úöêÿØ/ƒäVrˆîçºÀ`@õ¡0ËžèMß?b(«m³æEV«è(øÿ•%«ªü'3à)=®~¼|Îû»ûŸxÜÐNâñºNˆËí÷Mk0–zRRýæõûÎÿ#ù´ƒÂ‡JýŠo¥p¸i°;­ð¸i…»ÖX7À:ãž…ª{jœ ³X-YÉÃK2PÒ}Þ'ùÿAÛæÿÀ5§H»Ò­9*i_ºÏÖ™=áþòº7Ôn±úXg‚¨ ÂeéL÷˜[`Þóx[R~Œ¤wàÏHê—©¹#"å¹fç»XBÒ=Ü"ÀÞë_ÎIâh×ê5Ô³°+—Z°Q‡žu݉Ã6üd#ˆÖsص^ÓSÄlj›v³ý3wfkPÏ9΀µ|ÆH5 ö&|=I /VDCûãFûN;±Ñ2yªá¥ö0ZhlO2.\ÝA±!¯¶¼ºåÕc¼/&F¸L¶ºïT4<\Òöýá(nO ¹ª¡¸µ°§NW îD¿ -ĺG+íÑ:°`•Ô±àw\jqi‹K î0ß^Üአ-ÏÛu¦›ë•æ«óâ¼!ˆÀLûrx|Ï#‚hfÙ=pÚëXo3Q@Ñâ4öp\R½[öÜ(brÀ3ŠX6À2o%Bâi4àIÞ™¿ªà;g/â®7ßp©Á.€.û¥}"æR㵞ž±³Uðj9D+Á¡:¥$…ºÇõÎ7¿XÑÕOž£ãí*ësÒàœ½¤„eK$û9|5Vö”;ªmT0ÂcÇQí3Ç%òjË«[^=ÆûbB„C´¾¬A -H6ª ³Ž»8Щ!T“”Š·Ë骻¼=z3ëLw‰óRL`š™0"0S¯}èwÒ|gô« °n€õ6áfEÀX†ûåeú9—Tï–ý -ÙLxºòŽ', °l€eØ \´“ƧMøLŽp53¸gjçï3ñ]fËšSÚÃtb¬®¾l\0ŽŸEÛ-Ø,•ðÁ|[n ¨`ŠÃéžè½su²ëF@:>oבoåT—a¥¼Œ£I®çÆxzÂËCfl9pìZ¯Ñ0jˆ9ƒ¸š°3 iŒ¼`7ÈȽ}ó$s8ŠÛ5†)ÛÀfQ ?Ué gbZ<†jÙ„±§† n%Õ»Åw·™nƒÖ•ƒ4À²–ÛDD`­­a¡ãC¿ðFr\.Üò¾®Ø¸K zC’áÂL;Q»’TíKòwʾKžë ’J¶ÞJyÒ);Ëô®ØÐî“¿.€.û–Ðäï¤fò—`ÞómF¾ÑŽ[,ÞPÁŽ`©¬,c?³2xICk˜ïŒ5h¬`NX°—œp¢úéâÂ{V²…So 6þºÖ@ -mhi8[ɬtf{1$ë8îç\µ¥Õ-­ŽæzfÁ ¥L )w²÷b°\Ø{ª= ö'V.c¡@V0Åá„_n<·Kô%ì€Âà _g[3-Þ3ˆÃõ|?… -â»è·ºP–¡~§;ÎX3ú}"Hì‹ ä™V¦H&Pƒ.°¤"Òqˆ£¸Cÿƒí:„eÈ9I éÛ0ÙRõ -䥀[Ž,¹¶Jò¡$^‹äS%Q@ÑâL˜]ë5½=ãzg.Üžá.š¾°¶¿Ñ€%Õ‘l©"ZZjhiCKŸ´Ýá"X*ù¾£R‹J[Tº -ę֭±;’™®*P²ýh{|Ç#笙cX`ÙË pQð”÷£âšÀ(<\/¤–-°Ü¾2+Š€±ڇȀ¤W;o%CA®C×QƒÕ\+H ¹^iÞë’+šÃL^<«:‘ÒØ ´xY» -ÅíCe$†Ûdu˜ÉŠ9)tµ‹TÒJ)œXÑã-™‘š'0³ÞAû˜î‰+æÌJñ,( -—ýnÛä|g›6ÀºÖ‰ K* " UïêÃæèØ+ZY¼µ-ž…Ú3˜Jœn -ç’j•¤NO¿܃öX޶«*á2+›$,ÚÛtôië]¿T³^ÁžqPfç»Xᚤd‚ºº õûÚŽyj¸)P²áž9 m³¹LòÎl.SÓý&.&T T*#Ý^%ÓTê’E¡<7Cé:Ù±¶Äº%ÖñöÄÍèáɉ‹—k–jÍ—Õ÷Ô&™¡<ö—Uit˜¶ï4ûjGÛsCÌbž!þÕÔë7\?3dûðe<‚1wUqAb¯Ÿf[íÃGy»V0Ååó=ÓÕÂg7ï("¹$~»c@¬ ±nˆu†8ÖväbÅ¿r;zÑ#Šƒq‰Ô.Ar÷u¼Â'^s¶x}B2ƒ'JC¯˜ìl3^17ã~òûr¹ŽOTEaPÉ6$žnò{Äg&ˆ$†”yL¬-±n‰õ15Ä´!¦ bö -ŠÞ#>!¡[=HÃ*Vù`ý>}] vÚÏ=BPÀˆ¾pç˜Qo¾œ'æ{b_›ëÃýùx¶^νóRËK[^º=?m§öˆT´wâ.G­½ "(é¯ñ./)(¦Þ|/ff’ ,œa2)öÅ@‡GÛ…­½¶~É\#~€®k9gN7 ¸¤^S¿P'ã’@îÑgo‹e -É€Ì;[楔`I|ùvyfúÆÛ'Âìj¹>GJçî{p¿²¬ÖïQ-ô”  ¤9Ðic+#%”ž÷^-)"ÕÇ@F–P¤¬#mÊïä\û{„0;ANÚ á KK,[b¹}aP°;ˆ.?“3žY~^%ÎEzÞð© -m‰uK¬#Ulu….` Xûs/íðfîaj4ï Ë!ˆ¬PQA¼Þ̼ª:;;‘ *Ëùýe÷"y÷•z¨t„J·×ÞûK·Ê`bH ©’Ó;´Óö;n”3ùöªQ&0â@ý,bk·>Ã4Êx‹È X«ãk:廬`Y½‹Û-ãT5ýaEÄóàj ¥†r´hË3T±ä,`jŽ„“éiSÓ§ˆûرK‡Ø_qájDœP– -YÑûÙ§ hìØC7Œ¦‹û3~;UO"~\ÎÑo¼¯\DNµB•ö÷)3þIÝ'dªiµ(NÞ‹:A“¸‘÷ Ü#æ#b¾ äÚó{¼,?¼žã9Ux,™UAÛãœTóÜíªZÑ3æ ÀL -RÍÝGtZO%|¡ R¦G^¨JíÐþ¿¶¯ÿó·¿×ö"ÔÇϹ @Müü·ö²üó·öÞßÛËn¿ÿë¿ÿ·bPñ.6«õÈc~0aéN~AùëC{0qÿ6Aiÿýó‰šî0ÿ¿ÿ-›#ý´=§~üñõ×›¾¾»ÿ!'z6_7ŽJ½ýû`D´¤;7mÜÔû›žÿKNošgÿ’×.Ý´ü±Ÿ ÞñZŠÖ–§V<ŽW´Ø÷ ‰smŸ)i1âï;»‘±uM.Ú‹ÜèÂ@åd`Fô9~ßÚ¦P³ƒöl¹Zéô)·Z…u€t–Õ§*8Õ_·ÕZÈÔú»ºM_Õêõ¥m4 îÕJeuZôª±Ëm¬Š{·ÂšÇÞpᘙI‹•È­µU %cÊæÖ´½9bá¹O„2æWzÄrD,#ÄÇ£›aøÕш*¢Žz¼tÄK·AÔ]©_1]]x6<§¿ôD³ˆ*À÷ͧMÜž„4Pc‹wxœ -XI.Ç+.ï½ð(µßí?PÿÉP3záqQÜ]U'b­:ÆŠæ¨a·`æ¤`ê_Û†þ@ ˜ëŽm’à™cûå&((aT~âqœŒ’Yt¡#Þþ,ÆP]vw¼·PzÆ.c­i<>§õ»¾FT°šFm—ÒC -XóxM+â™zÃsÆ~Òð VÚHk‘¼m‡uj¼yH3Z{QKÀ¶1>¥‚w§….?²³äº–P@²ŽMlK(fPmœjûäp20£Õ_%“ÖrÌ»µÍwbî6Þ `$PB—ß-T…̵}¦¸f¶™~M¡ª«†³ZXibÒ>g'Ôñƒ®û^i ¤Þ‘íÈoR0MË­÷ºY4 Ú1÷ˆùˆ˜Gˆër†c]2U@!~Žøñ܃è°-Š·`]' ˜«ˆÓ;èi_©ˆRŠÕ@>\ª×Pˆ­BuwW7‰Ø»º^ÅÒ!–b™p6F5s,=b9"–ÇGÏÜÝ+´b¹º¦]Ú'T0RÞ™A5—âý–F¼5WTPskÛ5rUÉddЖyAÂ9ZbÀâ ¹ÝÀbÍèYÃY¬¤Ü!åR"-j ªNþFJ=R:"¥ÒK3¢‚Ö4¶Ü÷ìàJÄ$€mÊ-TÂ¥ N@Ø·Ûï+ÛfÁÅÛœ¥fhª#Þ¦™•ÊÀEÇÞ» ÇLhäj³ÅlxusüúWמ¶J«÷P¯ˆ©Ìða•ÍsµÝÒ8Ru(† ¦Ž¶œA5A æÕü^ʉÀ(­¶à«j1h;sl …¦<.=Ò#–#b9‡xF/*„T·àÙ|û@ Ž”ÇÁÐæ ]´—Ô~Ë®~7³ßp†¯OrB0L%ÈÅ¡€ -zhw¼¸pˆc•ΑãhÝÅQ–Žhévêâ¤Ã+¼r_\±wœk-â¬\{(`ŵ‡%…gN¾?ea¼~s^W(‹ˆê¨¢MžÛêú[¬@Í–hgÙ]o”ñ£^ö®êøØ¶ihL¨«ãøªp 羱7á¸êLË÷âdzZ¾ú#øçgÆP½h[rnïâ Ô%#†EÌÙmgû "^b0"(¢FIä -V“—Ûµß -UTûÃ!1¤C,Ä2‘¥"4Ôâ÷c­É ¹îâ¦/÷Ì Ù‹åK:D‡•;¬|ÀÊ·ñµ)˜únv•N'Ü‹F©Ÿ¼¶œ !¹mCETÖº\ÃW¦FnÆ1ÇÒ#–#b"îðR‡—xé6òˆXh9˜‘Û(7k;Ä€Å3³`ߣ6R5 †6H¹ŒKú[Gvœn3Zð§[±wœk›ïÙ”p﬊—jÚÉÕæõôt¯/ˆpˆ‹ T¶îÌ·RM $©g¶Î)å†Å;É«§3(¡Ëí7ÞÉk[¿1ãé·h{ÚªÓÌ.KŒbîó1Ï ®µ=]ŒÛ‘c¦˜³Û~7ÔqUàZ%ÇX@Krsî›cîó18>VµįªZ(/&LyìlûTaQ(UR g UÞsmŸ(½ÛËx¡ -Zm¬êÓ1ÝNÉ÷ÝÐ0`­%Ç Í‹¹“ ¯eF\Îïi‡pC£¨6 æ†Æé{^|Î2ì¢Í ¤¡ôm 1àrНD¸\Œ¡r9ö â›áéÖ>n•ÿc¿ -’ܸaàݯЂ ç<ÁOÈ1©\üÿªP+{Í©–œ¹5tY—•´3T«Õht¿šÚ µ@óRe«amë±Þú&,Ù-/GܪblmÄ*Þª¥TCD -›çŬ±Š!ëÏØr!&<Ý¿'ýùÂï¬}ùþ«bß®¯‡á‡Çßû7”Ù¾¿ ^/{\üxþ㜯îñ¸£åáñ¼òÃåöÏa°+sò=רA+˜•áfólVÐíäïøvÇóß‘Ä$|±@(T ‚zÅ8X{nNo‹ÿ)â Nõ^KÎ]CÄósÊÞp-USÑìYLÚËg­úºZ×^B;qÔÜ !ëêQ;ª>àWjÔ¾9 OÛrÄ|ßåu“|Ú´½Ò -î³”}Á.´pgâF£ÃJ'£Úh±¬ž¶iJ(5¡fÚh¯a=ÉÃ9§¿Ì¢w¯¹ërÑšq"S¸b†¬@KŽÔûh"g7mg™ñÖ -+éÛk1ÒÀH#;›1p³œa+Û*ïJ&`äÕÕr·{¡ÝnGHv A»½l¥~Âúª6oØØ m¥ãNEkp=¿÷¯)P}ì£! ºŸÎ8Þ™8iðʯܺ·—~K‚ZÙ6òA„R$Ìè§^^0Ù¨.Œ… rÌîà†ýôÒRnæpÐÕ³¾èaË@…|EЂ«OâWÈ€Gô{™­,\ÿ[4B|vÞ:Üi!äÖ5Jh¶ñ`y ¶ñ[mðꯎp»Ÿör3WHa>[ö%ý&síocmÑê­öÐwÛÞvr=)îïî -b9"–['ñ ÛiÄöë¤Ê­:†d…ÌRºŠÎg«3°‚&Zž'zpÊàH7Šä8ÚsxqÈqfÈÅú›ù:ˆScŠ6ÇÉ$±\ÃÛñËž®öáïK©}»‰c ì¡Ïáwf–`S úØg3³åÚŒhu󜊘D‚¾1-K¥‰| aœ0¯·÷ãXR×éxÊ®;Ý‘b~Ñ"Ÿ8«‡ÕçRΡ«]/³×k„óFn¿Í¡byy瘩 -…¶Ðymoèh[¥wràЛ1ˆ7Ú-»Ú ÖbÚq»Mœ‚`Ù¤opqÈœC~G;ìÁ«Ó» דâœvÅ­A@žvòà ûÆvˆ‹AûTį6$†d«ëFw¨…6QÏñ¾¯i V`µËî$–ÌK¤…†ÚÁì>ÒäÆºg¬ÞRëFž¶WRÛjÖö3_!ªµ(RïY¸OÁžnq. -Ù-\“ÝZ:3G¡ýl@[>jRÎaÅxÇ;h¾Ïå\+#pòòycï/Ä/‚s采kT8c ‘Õ»bj¬×‡ü^¯Â 9°æ~@ŒÇ­&´A¬Äzë/ A’»žºç[ãt†ˆ×Üv>ÁŽ€YVûðLŽ !'ë«â2Y‚Í­„Eオ(ÕŒ+2¼Ÿ£ƒfë϶ˆõˆX{7=¸¡{à9Ç0¡î’(êu´Þ×f6‘LÝ´ ÔàJ@Úœk¡ÓÐÓ®•ß%%ð0û¼»Ã`òyî¾§±Æ¹‡r½»ixÚ‰ºÍ ¹X?Wn·‘ì>– â}œ -Ejøí ¯zЂ«ù´)öBË®B%\Îw¡‰œìg.F»¾ýN’«“¤$'_Ífi80òê¾9ËŒ$š¸i›â0qC»âš86Ê«õ{œ¸1ÄñÄep¤@×Ìhû©ÂÜ0Üux’ãUŒp«‚­^I²Ú‡§v¼x¿ô#HP¤„é’Nkxy^+ Ø‹n¤aR¨c5âY&qµùmñŽmŽqJàš£>÷/µx鈗¼]´cjóZQȾœÞ‰g -T!ö ˜p—K–¬Üå«‚êVåÍ ´xYÌñ$wd,aq{çW[´zD«=~enäÇôìŸ X (i€/¨_IܼWÞFñ>E;1OfÅÜWÃDýŽðë—Ýë§H”Ðfð;I»ò?ûå’$InѽNQhˆÄkaŽ ¥dÚÌýÍÄ윙Ž%Š %£ŒœžU×'3Ò íp¨T¾’s†¸ìO‘» Œ5¡Þs—½ ½Û Sá AŠöÒÙÈ„G²ì“fC„jžX£ÙœÁ¥Þ~iNl6 p´ÛÏk76l’»Šå¨XΊ¥§xj»Yîóä2®Ø-פˆD6á«©vcÇ U0F¼·ã¦5²(*w§ïÔ†«Í _ÉgïÍ7@IúY¶NúîE”-Ç -âFþ4ˆÊw÷ñAï[¼È=<ñÛñQßΟòí(àÛ©uÓùêA¯žôêÈ|‰A+ÑWÞïу†`ë+^ÂR¯À¾#»xÄon\¡Æ:‘Í÷êtïÎß `¥,Ñ"}”>PˆR&»¬õu§ý´-!@Ñn®-˜ldž@(¦ý›b 7`ûXJèwlÛXææ7E´ßJ¶m3bÖl›@å»7mªwQ!DïN²© ,@¦;!/Šôg"fW0MmÁs- O çà†AÅ#nƒb9)–7`bÝ9g?C8ÚFy¶!ý’{åléüòÒywÆcK÷ÙŒ÷¹1÷£ö%±¶n? -Þ¯êAÃûwÑðŒowÅ~·g`ã>SÈQ±œËGÇLJ„Vìi?^ƒIC|<芿˰R²yLxðàè·Ç˜Úâ <’r^ÙØÔ"-Ëõü:НêMͰ¿3xÉ}Ì 5€JI{y’â«—Í7Ú{3µS’á§æöÍÜPAä+Õ¾dÈÖïáA÷Žô°ôêI¯~Œdƒyve¬èßÍò ¢òÝmqЋ½xÒ‹}ÿ -%e¼¦} ¨»ìb…½&oe»Ãb/G(L7súTü-PT²ÃmAüݬ0¨=É÷P»á1TŠi6ßÕ -ÙjñdÛù;Œgýüó<Ø8aˆC¢ÉQ±œËG'ј9èˆ'ʾvAxd|Õ/ç;¯‘9X)Ëß‹}üRíÕ]K•"HÑþé6ªõå¦=8ÛçÖ¼Î^Aá¯Ü¶17äDÉPº°3ͺcÑ›­= ïŽÞ©ÀŽP­Þ ;³ÊÂÔÂn†ÉIñ ÅÁ,[¶%Ñw+d³@œ¨]ÈéëN7=¨Õ“Zš¯’m5_éÎè°’íwƒVÊæûC±ëY±öŸÑl ÒS4Û t *fWÛ¡Ú†É÷î²tpË-¼b; [¢ø¿ƒu1¿ï†T-”yx’+¾ß¹—ÎÓ`S0•‚m?W°x¤¼Þˆ -÷«c“( 0úv\¹;Œ±DN•è˜ÞpŒWŽŠå¬XzãÙÌ›]Õ ‰Úg^£v¥öcÔž³ðã5ø¥~3!j•’\FwDÄЄS6`¯I¯è6kŸÂ]žû)~\ …wBøzYªSÉJãêpo®8)ñÉlW¼ŽˆÒL›´o¹CÔ“¦CÖ˜Ú¾Ý=ß©\¹ÝŒ¹6ŠˆLñǵCîö…ÛîŒ+f™…×Ì´ -"_‰•ï;r -¦’Kzx¿cn»cC -B1MAx-®d£ö:ßhë¤(¸–Û›ã2¬åŽÀö[±4‡ï8Þ„ŸÝÊ™C€,AŸ^ÂÏ^êA°žëˆ`-hw§ÄTþ!(D©â;\ü.b -xñúy¿£ƒÝA-Òþ˜DÅWõ~âáð Î‰4ªõæÞà``¬ÑuƒõêY¯~\êæ–ø¤›‰@EzóMˆ;@ÒÞk)W®×RŒ2^‘{8ˆú#F÷—#¾*7…4·š–Ť ›Ê<Øc# c€c¦xE KˆÂY -è -©"‘!ÄBÌní9¸ïWÈÑ>E²›<µ¦›Æ­â¼)Exœ?„ÖâǧþûoßÌ€¿}ÿ¹8–ï?ÿ¥=ëïÿø¥=ö×ö¬_ÿùŸÿ¡>¯(߇ÀˆqBûís QýñM”xŽáñm{o«‡ßÞQÛ’žÿ>þHiÿ™¿ýôûûž/~ýû“~ÿîñ!Ïw‡ñüºŠ¥´W\1ÏÿÅ<ì\¥¯x!CXx¡3°StËQ±œË×*ÞíîÜ/ØÅŒY²]DŸÛ1˜Ly£r–Ê@Xú¨¶  :P‘ÌÃ3P­\nº|¾„PÈ’ãó0ßáT{¥¸†_N5Oç»Û$Õ!½±«%Š—Ì5à*©+ap’,&VT‚q“`ÛK­`’!÷ aZºmí9ByWJTÓ®b=*Ö³bí)>gðY~–Á{ù׊؇[ÆÀ}üËn€þ_öË&¹‘†ÂûœBB‚¬çs„,“Êfî_¶ä2EvÔT52Þx,%‚Þ{ãñEüÓw…Àó=ÐÑžk•TÂòÔØrÿ#ŸðwÎ1Ðrl8ÙºP~syñÙ‹ÛCy®õÏáNž÷Æ{¨E¤ú±»H,—/Y€stdj–@»UíöÙì!®>ÿ"–†Xffœ3D{%1WÄÜó ±*`ìŸÑ†}d ’cw¾Çû𔺮!d?Á©üÎÌ|Ÿ*—5/V¼ØðâÄ|Lr/çN¦]”"/×ï‘ÄÞü—S9>Mº=âƒxzãÖw5W#0v=x¯‚‡þ;§†~G+jÑIsÀ¢EGùˆ¹·mG¨á0Ýz»á( ‹Ý|;_ZpPé_'Ô¯»#H”;Äg¼á8 -D%ñâÁ6Ó¦±œ¥Þ|O¨agŠ@„<ÓÏÓ(Ý]FþfLjIÆ·ÜS­ýXUxjîþ\4‚h¯ Ÿ2™1CÊ8&žtâb©ˆ¥!–bw}‘€³ôˆØºŠõ™ É_³ôGÌh€IWßt{ÕûÿH W´d8åñqžŽ–L²:iíî:0eÅØ›ï§7pMÌ-1_^Ø(Ér²ÞŒO·q"ùÐ/å„¶¼éI¬ º¾›Hlxñ ÷óö3Ž -¦Ý;e[gà`c>¬Ÿ=¥cíu´SzèÒ&ÐÀù•ú}îÚô•oŒDým;_ãqÖ(C‚ˆÖÙ¶J¿“¼ëõË!ç®~Ãn¯W•ËMTÌ¢.YBaûËþòkN h·Ÿ3bºþü{y­ß¾}//û£¼ÖåÇï5_‰ON%ìƒ瘚aðû0,nï†Bþ|`ÁnÃØ–VV¾¾=#‚Æ éöïö6«Ÿ–çå·_¿}ÿþJïèú•ÿ±Ð·ïË(_þhø b¢2› €Âò¸¬`]VR[VRmöùíÃÌÍy«pJU8¥&œ®_»ç§òm;qï·ë‚õº¤v]Òçz·´Õ{ø^ª¤—éá`½3dQ¹OMÛeÁzYR»,éòþŒ;ÄXKE, ±TÄâ?P -bø¾ jÜ9tÓ) ¨ZLÛŒ—*^jxib¼½“"¤È6$暘[b·t['D¤ÎÒý«³`ÝY>ˆ©&^mdÅÒ÷¶ît¦¶)BºÆÝŠX?_W¦æM¾œÜµˆèjáÜ…'É–‡ž&¾;ã½îÑ¢¿–æMk„?WóFLêÊ'¢»dvx°æŽOÜ”´ØÏØß¹á1ïŒ#úÚ¬K <‚+VnXù2òÒm¶/•ïÜhûáe´Ü-Zpuf §0&½ª!®®ÀE¾ªa\ÏND¼yCè(b›M9D_Ãi;3¤{}hxúÌX¿uÞN9NÈroóNæj¤ -åa®ö¥GŠðæÃœÜt4t¥„|õ†å›v ±ŸCÈ\)Á_›tGìçÒ,º…,Ú¹4ë½5¯T¼ÒðÊeœÀ¤ ý¨ìQ/[s[ü,úåè¯AÄDãN&5±´Ä2"®4RÅK›Á5-·´|y¥ Л H…F5ãiE,Ÿqp§ŠàÏØÜÅ]tS%‚»šFÞ\ññ¹¡»g¬Cý>yndÉÖÓï Ï >ìÅ#È®jÈ‹Syïd»ÞëO Èr(k^lyñòX Ò’l¥Ù“7xëdî2Ε†9ù»3"Pàäd¾n²Í¡7ä-߸«Ýâé|[î¿ÉÛÅé¯ÿ’¹»ã’§Ä s§aÛzZ/0Ž’p…;S ú¥Ý›|ɼ“§ -ñ%߯›ó“3dÑŽûFÓÝóÕá²IE, ±\ÆË¶É×INîŒÌ]gç´uvéèaº³¯oÀÛÆ½ÔЦDüÀ"|š¿Àð&an,8zê:þ¤›—2AL´Ó{v¶úäxo¬ó=CoÅòuÙ–¸l”‘:U½Ê ª‰©%¦ËKsÂÛqáËÐÌ,‡¸G{²I扖ÉUC×Ö¡n¥æ•–W.»rxF¹ý&}TÌ*çÞ´õ3ö–nj޲£*ÜÑ*ì1ñQ3>RÇW¯ûñyš°;w#ó×ݽ“¹ër%7x®‰¹%æ}Ä33~@œ·“Ù‘W|]tË`]ÝHQA²å×ÍvŠ·›ÉîöÌ_^ècEÔßR„y¢åàiÛ8z²]wg§³ ÞNN‡ÄÉ]U÷ÔÌ8>²ˆÛ›Ü'»G{h;s'aôÖw˜Ü-]¾Î8zjÁ)–Ïu¤ -®‰¹%æWª‚r²ÜÕñùfL& º3>Џö -ªˆ©!¦ËLܹs·à)î’7AP¾Zñx¾Ó61¶â™¥ë[1'oÆÆñjl½ð¸œíêPlùu7ÅÛ­»òƒ Æj˜î`¶\±rÃÊãÙ¢»šf^fK÷|÷džàÖ -ܹ—«,#}œe»µp¾eY™ëÃrn;i+gmæ{`9GW¾ ×v>γ˜ŽŽ2wÇ¿… žì—ƒ·ÉÁKuð¥ÒmÓlõ¢ÕÀs‹Ö—®«ñº32?BŠÒµV®Y¹eå˨Ci»äïª0`Í/õ‡g‰ýE›§®Îññåv|õ}êrËWý.¯¾GòvY û!f|¬ˆÝ™qßÕRÄæÁÂoÛ&¨VÑi³–D¸üù˯™ ß~Î ™óõçßË‹ýöí{yÝåÅ.?~ÿ«ÙdRÚÔVb?–‘Ô“àn“°¸ ŸBþ|`Án“Ø;(_ßžA£n¯~ýw{—Å/ÞZž§o¿~ûþý•ÞmäöŒz·ïËŒ(_þhv;ossûòF"ŃòIß>Im´§GlK9m1fíïmËi¨ ÷æû_wûÄ{y»Ndã`¶»riálE .í‘ÀZþ—ù!Þª•Ž–í$‚ØE)È+iw¯Z÷ìÚ¢C%,WCML15Ä4CŒ†±ÿµh·ÄïEûFü\Ñöf¿XÚ@?þ@YzîðÉ;Æëý¬^œ¬p ôÀ/7¼|W_~†lÖUï «¤7õÆ­Þk§ñÜ\pÏ„+§]6aÛ,?;r4Ë`†«[åa‰¡€‰¿:ÄÊ‘4æqµu“3žÙº©Ôx aÍÚñùœ˜CÐÞŒ+âiÿ[óè–›M»ÕóÅãˆvVÁC˜qµ¡ œyœsOu‰–xf¾}b&„”<é—c‚COÏxýÆeˆ_x}Î$]ÿÚ í/,n>‡&³»öCF@„âªKLÞt3]B*biˆå2±u)É05žºAÜ85ˆˆÑ­¿{ÎW*sB`=5œÐüµÊØ2‰£[ ØÌq - AÇÄRKK,/%vØ%Ü5x^¢¦Å:>rÆ”KB[î• GºÛö;ã?u$EÓÝ#Ö•Â’öޤ#*ÛÞávå›C/Üi‚ÃÙŠmT.gY’’1¤4Q,§•°:,È„Ðíé”àêÌ@”݉ W³Ã< c×s?h§+Ãò"i":&>ÏÑéoÆ!Rûïiji$Gç"(Ê }â©Ä%5^Øtžq5oiìì¤ E°Ø¿3Ïgœ2„HâÛ;ÝC\M³\sCÌ—‰ÐH©ZU´³”ž( 1;)=ϋ̜{úµÝúµ{óm!±4Är™PD`°ÜÛ¸ÊÕ¦g¼¾¸ûó…ü7ûÕ’$GnC÷>E]À0 ¸öæ^ÚáÍÜ?¬.iœé(ˆL'YAŒ´P¨Õ]•zýêá}ª+ãƒÃ€²ô[Ú6Ý=ÞÚà’¥8V±e8ó×»½n¹YÔ=»¥U Ò„cs0´dÐòÂQ´P¾ê n 0‰S(W  -·„qmiÜE;è -Ÿ(<‘øåŠP,»—¶a= X(ƒÕ3É-Ú’õ)Ö#b=#ÖRL Rk$Q‹¸$Õ15ºŠµƒ”Hé„”úHãi7ñó§‹•pˆ‘A†_Q¿ð°å¦ˆ” ¡œµô®m“!$ŒÀ²Z¿Óü*TÂÚE;ì¿®í\([a¯%ׂd¿›ÍG{k …R‚d$s/mE'Âûƒ$Î1;ü^îé+u§¥ -Bèqº0‰ÃëŠ »å±6dó7Ú¬v™Ýäg™a·‡Ýñƒ©;Â@3{h7ëa\2 ”¨•Çâ×Ôz§Ù‰Þ±cóé a˜­¶F^Å}ì5&¹20wu;ˆwD·z@¬'Ä:€XRtÏá÷²jýHSkOâþà µ·Wv`}ñë“}¯ˆ -Eù£µalFøµ@Õ>".ÁvKs]¡Xv‹ïŠiy³<‘~°ªßm˜!•”»ü+b=¿Ï׸&10V»lkæÆrK>Åûõ_® Ú| RÐ"ÆF¨µIÒ"C¼Ú³%¿Ñ!¹@BñË[®8ë"q.âX#®4M4,ˆ@5;ÕrKE`NæŸÃ ¬j#ƒîf΃Z馸xŒbߊ šK8G7 ñU»h+¤ìu÷5‚;:—ßxGGHj¯JŒÚZG ÷–FI·;.¹X5ø¹äª(Џp¡Ì5ƒˆ|41ô€XOˆuÄÑÂq,É@3{޶àêî¸[©Ôçwt̽E{ÐÉ K¼´ø±åXs.ÜÕBì¥òhÒu1¯¯ˆxÉÁ•@ÕÜ.ñ ñϘÎñö—Ö‰kÎqÒC2Cnf#Ÿ>\³yh¿c¥#V:c¥Ç}xZ{wm\Jbýd*˱œËc •1'û¨?Ü[ ’˜ÄéÓ8¾Ê°Û, d®Ë{Ä<~¦2V ¢ŽO1èië»0WÂÒë£ ·\½Ž«m©ˆx­'Üþz÷Ê1UÃ9c߇G÷çZ¥19^Ñ*ït5®VüÔ Ëü®V„ Õì Æj—{„u/n¬«ù'H©z©±ÙÎ`cP+ªp¨ƒ‹(ßh̵@­QñD‹I¼@ÞÌ$#h•'0Øéòaô3#Žçj’3°v§Ü¯üÿzpÓpż||NÔ01H­.â -VÎY̵¯á}Ê#„3ù63J)ù€ ²¿ó»ðÒ /=Fº•aß}åVÎ`å -Ø[·†mÖÔJ&°ìEñÕ+ëšî˜j]” -(âEÄ,!L½³h6®7Ä2ª áÂ{›…4´…H]éóú-V»ˆ÷ë‚L“”ÀRê{Ù4´÷Bͱ¸jø­Ñê­~ -#puµ;áÊxX·õ·Ÿç–¯N³I–Ðh+^ÛÑq»5™£…ìTÃȬ¼ÛÇB¹.1`QíU¬o¹=båV>aå·¾|íùS¯ÛL«Žó 2¨øö0ëâ&úY¨ŽÃ֮ʹŸlÛŒ ɘÈõàý4Ì–¡ý©8n}§Ž,¶8V¨ìúð†³ êêâ35™C9[)À”#ñ‹í•äööM¯..÷â‰W¯ÀWÈÅ­lûcnZ'_IHæóevߪá,ß1ľ|¨¨ÌßñÒ/ñÒãÇj˜jhŠwn¬à÷&bFháixµM$üm´W‡˵BÍìU«)±Òu“‚5”q\7·\* HT ·…õõFK*ᅵ䊃ÜjQ¢In?ÍöA_¸umd ‰½Æ°]þ –~#Ó#^=ãÕq¯-´þX«öó»q~uûㆳ!”{­Ome)¥ÔOM-P- xpÔž„¹7Å´²ïРzÜî¦]ÊSuj –‡‘j¦¼z«ëmE=iq±ñÝúeZÄñIª¥6É­G&ì·Þ=l!\#“ÔŒ¬éHw”Ý·h/‹7¹±ÎÄ+kùÔÆ¼±Ú.WMâiw3oàZ çâœË·¶~­Õœªã½;–Áäèá€wÐ}Gðò/ŸðòÃá4aÍ!LWçñÔ€ÉSÅ<ÄGŸS…?Þ -.ÞnÓL¸4®Ôßmû,Í$P«b÷èôˆXψõñÑ£ $ˆ'½HÖ÷´‰øž G„a{iF‚JØ·‰=ºšh©^kŸ•ËÓ.NÁÒ@ ¬¹+pIŽvì•B’Ø»¶ÇìÕyÓ8’›J{’zh·“n¬C‹6‡3+ýê0±ìülsHR3³ŠÖµßAÄŸ°ßö$Ì=ûÕDçânU‡,Ày Únr{Ä«¼z«ê` -Ép¹~g&ivËä^«¨ 0‹;„öóßxe’k…š¹×ÏäˆWÎxåCn–2äZüÿ ÝÀ›¢ §R^§Y M4õ Š{ÛPÂ^¬Hu4í«ivZܤ¤¼vRAGÝŠ‡¥©eÜþD¼Ý¦^„X¯&Žns¸ØµMYmü:´OùB¬-¤Ôs{¡}°¶6œ!߇ÅÁ„R5Œ¨ß©r9J”oçZ]â­k¼u‹ßGýïsÄŸì+@FÉÅ-öáN ïÙ‡»2ã y°4Žýl›èYÏ HQæ f%•ºÍñîÃ;·¬¨<‰§‰µhi™§èJz]«™|Gã7:2é[HŒ¡””ÛŸ‡¦K´ºF«—Cë™pÊ -RëvçÙøôLna¿¸#0†áX ¡î(ÂÃVŽOzjÁ2yxOb|B±—8¼ø5s ¹j`XÏr]„Aì¨e‡êœXñ"˜wÝž`® Äu…¸î⸩¦Q7XKChÚ£zxÈíáXÆm!(&YÌõ@»Àº« ¥º­PÐïQ·b.­ÌÀít¹fõ7[nC΋¢P©dj8!‰eWVxe[¥ÅµI2߆›­–퀽1¼ÒAôÁ¯,˱lòûK#¯”ÓAÔIÃ]OÕÖÍ€U^êÁÏ6É5¹ƒâüƒ«`Óƒëej‡##/“X@š¥E}D‹h jiñ±²IVƒˆu‰X׈u 1¹D|{" g„àùärÙ•ãÂÀÏœp ¬O÷ù.ÎzRÕF,îâSƒ¶9¢ -+4$žgÊi‰§‹g¥g kã¨gm;‘w{ï6·û¼7ç¶€3¥¸¡|Ž_ Væñ†ù:Ú|óž-QÅHþ HЬ¥óm¼4VD@×$ÇD¬ñ;ÛÑz®"æðà¬ñ,8®KÄu¸nqÜ55Сx;³ÿ®øÝ§ˆÔÑš‚FlLähÍÀU¶Ñ0ˆ'ÜNP‹¥W׿ùìiÁ©†½D*cš£¡e“³[O'´“uàVÀìüFÙñÒLÀ'n6dkg‡êœp¼@ÌKļFÌÇ×âºB\÷ Ž´#1†i=êØx¢„Ób@š3|¸§˜˜jÊñ‡&v7áSsƒ+ôm_Ç%¨@ÍŒ˜Â=½ Y½==Oj jº3Ž^ÛÉþ@¡!ñ¹þ»Þ{®í“Á\¬œë]WQá@Œ™ŸõPÄQõ~¬˜±{M7Ü€ˆÉA¥n/£Aò¸…",u´~u‰V×hu‹_r;ì–FœƒGßÄ,º¯$J8'Ÿë:óÕ‡iÂBœALΞn½lAJ³ÔÄÆnâ5€ò6âa‚Bœ ks(b>k ´T—ÃmIî>1äô ˖ŘüN·…¡ZËÂb@S›¯ýJ ÄQ7U±»Ož½7Å4€ZÒ'G¼N¿çu‰«¯…àø±WþE7ßz:„¯^Ej'œÔ´r§•GÃÐtp¼ßžpŽ,/Wï̼ òtôf<:á¥Y‘!Pj϶[ íܧ·g…œð NÉZ6®pœ®ut -ÄóO3B\ýù]b©ˆåF,Äèú¤ƒj;›Ss;ĆÀÙ@4%ãŒÑi–;Êø<7>oñ¯÷´EÑ Ü#о2á·K„ÅY¼gm“±¾$®+EªˆÓ8UÄ?Ï$Ázæö˜qo W6Ÿ8'Ÿitº‹i«?ÇÝžšÔ«Ã›iᢠk¡Â¥ -—n¸ô×…=åŠÌ‚¸)¼Ù\ÿO»P³¡™µì`šyõ×¼‚‚`ô‚l·Ùb‚œÍu¯aGxÙu§¶óh õœ²ËË'O¿;¶…óê¹H`ïÊÜ®àœäh¬cû¼ìVC{ã¤"–±ôÌ—”ÆÛvµîk5O<˜­$†‰“;:š ’[hØïLà€rZmÁ“!È@–=3›4<_—8Hyu1ðÌÁV€ ¿RÁŸEŠº -ÞX°„œÅVÈõJb± γ4ŠÕœTÞÒ$ˆÊÓÑ›ñcðÒhp—xÝe#Ð5|xé ï³y{ò5Á…ËV϶«y³Í¥MZ^®Û™FF8¹j˜_>ÑîY¶ËZ6ÍœCsK1ƒX|·YÖ;7¯¬×rè;ßü…K@JÎy±åŒ1AÎÖ>ß>´ß™uÁ”=od¿×%d[¤ê}]r†­ìvX:¬·[ « ‰ÁP›þÐY$=˜X$C‚¹)b¢7Bd¿öîXÍN -ä³üAH °ó›U¸tÃ¥GÓz)A2iÇÚ67&›‚˜8ÕaG3;¯Ožçg±€RÆÕ3®×®On‹0&r:û,â» ÷¿;‹r]íkSG\Þñ QHÌÀQ½j¹YíaË“:6Q9qç|ן‚Hnsß0ìŽÛ9å“‚W,7 ;6NÑ3âÍÊeIe0¦¥Uxæl æÕjåý)f+!fst[¹o'oOîs_ŸXÊ«_Úx~¥»óÀºƒR7çÛU¼tã¥GË$j[¿Ýíauc¢òtlÕÉÞ+n©õžv ]gÞ²m–¬%‡Móê¦^KE,7bé >ËzälnO^µ—‡ÅÌh;¬õ*AHy±=ÌÝ8)íŒÒ9ÄBÅÐÔ[¸ÍªºDó†;šÃ«ÅkÅÊ”[VÖ;ׯT»l×j„dyLÔ¼}'…O,5»wX /wîÙ¦ o×yjèWL¨­¶°_ÕsÙJ‰ÄL§ÐUpŽ»XJ#s}l8×^;ï$5œåcBšÔÛ´aæñ $ù<Ëvkâí¾#fÀÈÚ$N5qº§ñ}Ûzôðî\;Ë{3ä¤N?ß³G&Hãó `úÃ]»=¬¾v*9¤áåŠ]¿åþö÷L€„Ïï C0úöýßʇý㟿•Ïý½|Øã÷ý÷VýSùÈðŒÌˆQn“òC¿MÂÂõkpyß÷/,Øs×—Œøøã ÅkϯßRÊ|þøî·çžoþÿÏOúó«ë‡<Ÿ¨§ñü™çÇ¿ok­åØ*?TJ[ !ëkÙ=86O­ÿŠñ­%ˆRâþ5é_5?לT´r£•&í÷ÌÙ›ëÚV½§-Ïš%ö»¤¦•;­<ÅMµðí G ÂÙšóíUî„rßZ&ëµÁåǬUÄïöîÛ_œ¢ö6‚€17‰SM¼¶Rµf\J¶àA3f-%E¬=ãîÍkϸoóÜè/‰¤DÑûÄèðËùŽœÏù¾«U%È[´TÓÒ–Z´ÕPJ6&^­ßY©Á±tn§F·¯žïyŽ&¡¼ÓÒ¶žO:š„ )i;•?¢™ÊB¥KiõßMü¡Ø.`¦Åóë¿Ù\CÛÓ"”܃hKâ“,‚CˆÔ¶à*šeásÁJPšñyÆÆ)ÓAÅ2„DŽO<ŸÑqÅæª¢oƾ*X@oóF÷®©ˆ> »ŠÈQS[Ûl[$rÒ¹RDgýéQDªˆÓ8u "äàØDÜ9bxTÀ? ŸW~¢BÌÞ :êÁ 1|t¤Üï8dÀÈÚ$N5qº§1bªˆéFL]ħU ÄÑ ¸i¾÷Å…K P£cóˆ'Vžã6s„ì&ƆG HØ›ð`åYdPŽÏöl'zÚ‡'FH )x…}GO;*–#CŒÎG£³mNöÃs¨ƒ×~§ÐNt…ãÒ˜5SnŸ›½åw¹;pÍ«—mª* ²áAçÐq3ƒ\oýBQHE,7bé˜1+ABõŒmÃÊÃzÍ¥ã8ÚÆ*Î+l ¢ˆγˆGUìVË !‘C[m]§³­?Œ8#Ä‚|ކY ¨®–ð¨Iüò½º%9Á\É·óŠë‘o_̹ÁLy 7\$šföYwBà Þå98Ýå¥'–W-º½R‡+„. ‰†ž~·,–(]wØ7dHIßs÷¸èÑÄ»ÊC0¶keª‰Ó8SEL7bê"VàìUwð¼*Ïšy¤?ôÛ]^ÑV¾Ñ]ÔÝ7ctÛÊû° YËèéw»Ì0A¯Nî¤ÝPÞgé ›Ù'=R"•Ï ®‹m¸i$Àœ½®³`¾=®ë«á¼”H )¬¾ƒ&¶3Ö œÒjELt³Ã®7PA·ýî8ßÉÔK‹ 5,Q!æV5ë5á•9¸·› N¶r.¶k®nVz—朎3$éH!esii˜veegSȼÔÕÂBR‰å5óœ Mçú퉥 âÊ7‹ÁS¨–û‚€ ÒBÚŠU*V¹±Ê£©Ž@ÄnJlè`ˆƒ+]–îË¢3*\W¶ÂÙ« ?ì¶{¼¯ìöì—M’#» „÷>….`\ûï^ÚáÍ»„©ÖtË!ˆ,‹ÕAÎx5ý£Ò|B'2Ígä}Ìéym0 M¾Om'pÂ0„×#V6`•+‹ä¬ à ž©_pÞ à©³- îýÓÍZb;ÛíÔÆ¿Ø8¯ ~õ4KµñrØÑg-ۼ栘ÁÌûüñL ¾/Z4ã&âC#ˆ¸ÃÒÍ8´à‚`Å£¾³¤*Rÿšh#—Ð Ul·y÷ÎNÌAx4: º[Clb»è8CÉÔ»2Þ æ©Q§ ’ûQ7-9Fªa«˜ÃìÒ;à‚†DÎö‹W[^=òêí;[š0Wç’ —3d»úê<k¬`™0¨z0â%›;:Ôë3">ËÛq‡¡é¾(Î/Ÿ”ïõ³70-ýº3ìýºóÞU¤‰ë;aH<ÇÓ¨øib7ŽA)‡·Vïèûr /¤ Xñ«Ãyj*À.ñŒ*ü{'ÇvVv°ûðé£ãùŒÏN8T„KTןò m3Épã¬áµ¯ lÜý¤#æÀƒâÁ‹ˆé4qÜ%8k˜sëmr´èmfÌ <…}ø¬CtüAV=°ê­ë‰€0RЉ,…@ï ûl[ÕnÁ°ŸåíÎwŒ6T%HlWw´†÷¬©þ®¤ ?PñÓùæëWÑÀ /¿Š&ï¥"È -bRá9;ÜV!‡æ»ž•‰ß'"¡ù~IA[b=ë­#…c]!~Uט"ƒ˜S景xáÜ_µuæ»Ý±S9H)²‡ 3{2 ¥Ü•®µ¼väµÛ)éŽäÄ éƒR¶Mr­Þlž)’-žÖÃõ½ë+‹]}[œå Õ°UKGÉiw)Ûí¬žpeúΛâÝH«O—:Ù—†kÃ3E4Ÿc¸6ø/St¤0$²ðn›3ã©þ[‹r¸yË9Z3Šú$Ÿ8*bÄ'^Ußíˆ)Abëoݧ6Jg |¸Ù¸Q_¾qâTA)ظyÇPK<”ͱG$®ï„ak_/96kíRM-ÔH÷úþ“–Prýú_ùkf ·ÇÏU€RùøùõÍþö÷?êûþYßìöç?þý_þ“MeШ&¡Ÿ“(xÿRÿÆ_ß,IÜ¿%Šõã §û$ÿÞ?¥ÖüñS(D?^þøúó>¿»ÿ''Úi<¾®3ªöŸ‡D­?«ì•?é}ª‹vX1…¬IÒivbö ƒ¤dω¯q¢±Ö{§ƒå’£OºoÏNøE·ãÒ¥µ–ÖŽ´Ö£Ù_5%ÈÉÓÅž5_!¨'X ß†v8û¯îVR˜ñž~gz`ÆPëõ«ýˆ%[í°eÜ‚É!4eÝhÄ¥Z1S¸xóí*¡©>›?N°o¢}«¾Öƒ‘\"þdå–•¬|{]ÑfÚÈž©«ÝuŽ™T›»S¿X.sõH€ÄñŒgŸ$~üuŸkXAU£by–·K;¦áðÔp†¤¡ý®—J4yØÛ¿ˆ‡›p_Â#–öª©¨;7í4:;àÐÓ¸žEß™nïäÅ~åÁ¥¾“]ng3ëŽbêßëÌx¯‚&HaåY0àÄkÀÑõ‘<13¡ ‡%x= +$±^‰X¤×JùñôF‚0pÃˉ'.]!p!ßHÂìPJu§›ð7,2Guâ,oWï5w¥äap,f{ªÁ)õÔðÎ|ϲþ2Þp'FÅx~E{ï&ª¯ÃÚ‰'çï‹“3sÍ7ê‰,Åëk¼ „½€d GüE¬-±‰µGLÅO‹Â;X.ý¿—Ó\"ƒ\}5´ÜÐò–»´â°äà$z8ËÚÆ½B5hë^½4Ö`¼ ð` ¿kiRŽúÂû¦¬€’vp­¿aûý ;l¿—gr1PNÎi 7ÉÌö«”Ê Ä¸t‰‡KÚó<ž)ˆýfÌ5)œñZ¡h€C?[q¾¥XX!&ž©>žÞæÎPÌ`JñYI<¥=mÂKX ‘„ÏN·khÒÐÊVn†¶U_ßÏ~%;^n¿3·*hòP_ÄáÜoi#‘kXSδö+jÚÈÎÅ%¸€dìoÜp ~î~RO<'6Êéê#ã·M É¥N?®ÁëÍw«»H‘Èù:1̼0”kÄå‰á“–[Z>ÒòkÚ¹‹ÆP0œí‚¼WX즆:ÛÚî4#;=ݸ¬‹€£Fa¼œ7°§f#ÝA9Ò*ˆn!%ƒ$ÖÃ"Ë&Ù†·Ðz­a¿°Â`)¾7é4qÿzSÃHj¾ícÁâôñô>2æÙã/xÀy‚’‚ã½Îs˜±6Äz Öï' -RPí‰7’næÅ©©žDº“+! sPÛW›¯¸Ôw²Ë]xbÒy÷X —Z†‰£ÓOkâÚêåí,oèµIX¾Z³h¹6µL¡æÓrCËZîÒÞ•à÷Êý·:š‰EÂOWJÜNx¬B„ŠØ® ßï#¢ÐƒÏjâ íñÒ+•Ñ¥!E1õýw! #8¥^‡à–—¼üz¾ÓÜ p¢ËûïÄ+.(«a½þ \ÓØ="ž¡†Ã|­¡µ­x{ýmt­–oÊõu8Ðt¬¥µ#­õhgºÙ^ó•ì xyÛ™ºm{õ3‡¢¡βvH‡œ7$Íri+†ðvµLÜ«tK¾øÐ<;áÐ 0]~dNT„xÉØŸ¯¶Äz$ÖÞ|›ƒc8,<Ô°ç’¢c¨œœqdáŒÇ4θ0q¿¬¿§á©>ÁP0<†Vt6J@.ve¡œ[=—KëïL §·15e”À!þ_wþ׺³_{PrÈ”£<^nϤ¾“]>߉‹–¸‚î”›õÉí!žKqM;Ó†XÄ:@¬XŸN±«-¨a«í9ܺ/U wögªh&?Hüøë>¿‹2EwÑŠªRg,^r ª¢ö²¨¯¼•+)¨jD;£¦áiÖ°øˆ$ô~p,c÷Îîéê#c’Ä”uöýl³&¼Ÿ—í'ˆZ-M‚SñÓÄÞõ´1âpéŠB.©t-bX}O9?_xZªµ§PhjëéXE)RżƒƒOÎ8V…2×A}UL nxùÀË·^p(g’«ºI´n¸áÕ5b¢~ïQW4JŽ)½ò,k¨Ýbªá‹ÕZV;²ZÏͦžVk×pÙ¦K1Pä;­Fœ‹0Þ”Kºø€û{¥¢çhÄ×ôÊ1?û•ˆëÓ)‡™¼¢* -:oD¼]vÜ›fì›ÛB3®M¢X_ÇËØ±bª÷Q¬ãÛš3$íŠ7gŠ‚Ý£Åûäå–—¼|{]/㵆Ö´62ÞLÀîýós™Â¶Û|k8§’÷ѯd)¹¯ˆuˆK:¦0ê&7¼ÚðêWòþ´Ê –¿“–ÿÃ~$7rÃÀ{^¡!HÏyÂ>!ǤrÙÿWc­½œZÁäD¤ŠÜäbK²H·ZîF…6žÐÆ6ÚÄbG…èv³éœ¬XRö_ewªnBHíB¹N=à %Šz‹‘^d÷íÄÔ²³_¦"ÀJ“wÏ«p]°2uôõuèU²›|Ä †±&(‰ÄÃqBÜekŸHØ".¡cÇݪhWà›ð+ðVCÇÁΦ¼ÓÐ…ž„GgrWb¸ÃÆ`)·“=lØ"„y¢ÂåYóD´íBb›_©ñʯ´ø=›YâÏÌLí=ž 6Ìäý†.ZSÓŽÐxj‘« -}·ŒÕCLŠ–{ug,\!F=^±Çýòk&kørͽYÞ^ÿb—ýöû»÷«]vûúÇß§µNÅínÁ@'6ì¯w6J8>…üýI åÎÆñoßN (Ÿåþûøœl÷~{õíÜýí÷Çï7½?;þÉýDÍÆý±±Mùöç T;Â&Äì¯s:á@¥tgüâa3^áÞxÂ;j@MZ´ïXc5ž±ÆÛË"Š -BRvÔ0Î?kÄ}‚X!Yénê·Ó?{vš®ZøéNS9ˆ/»gC»Ï­Lè‰aE£73.ÙC€9X—øÂ6Ù¥a72„Ùãw±€#M 6tû¨T ·®Û"!šË1ª]µOÒmµí×QIÜ”û°ÔˆåŒX^*áA¹^«Zërq£ª=î©=Rá•^¹õD\ÂÜÚŠzÙmpËV>aånw+h›y™Ñ«!ÏnìãS±­Óì>y¯ÇoÊ AÝöpyԦ뗣ݤ¹½Ãu¶‡3{¶¯›"2Î‚Ñ@flóûäÄÕüví?‰£‘Úi¦vä·+à|~sżÕN´“"8$ÈBŽßkó5EhqŸ"~žÒ“é0“é5bàÐíF1£­D%ÒÌ™(£WKöø½êh³‚Äè9D¥†ÎÎó5„¥D'åftž®áª!);ö0.áF:°@ˆÅÝ2ìí[ùGŠÅUÄ ~¯âu§ÍÔ ~C[O ¤0¸ò]¯RkgÀ4Û"*¼O-qŒm2l¤dÖ6R«ìaò¼U%³ð½È>.À HöyZw÷ÉGE¼ÅÛYš¥†JðLbJëéji~$£+ŠÅLhL³;ðH~S„T¢·g\Å;“ÛP XʽiWWwU @"ºQ7+0rpwTÌ_-ì¦\ă&5b9#–káÖ#^?+öÅ~S±V©¸Q¼Q‰Pµì·wî¦öÔÂ-Ú4¶õK5V:c¥Û+õ»M´*@.Nm¸ëýÊöV͔˭Txå„Wz¸EšÑ ã -q'»=ˆû&ÍWC‚B¾7ŒÉ8,zQ¿o'œÂƒ@Äîz±ÞÄíW#ö£8Èž3x]]Øç8ÚMšÛVÑÉqâ'9Ö Ü±rv˸Ý{úœÂí=j½'&WÆ£zÏÈÁ‹1{mâbÞÍ:Ѽ½¶lu -Åÿ¾6Ä×Crmb=Ž9e‰4²çPQH¦†æœuʶgÎúÄàÎY¶9KÉåx½¸ ÍÀØÜm¾¯(¿&=7.FQü_tN”ØíêëuÊBÈíd[hàØÔ-^º-‰8‚fqwŒõ3Z£,âéøo¬ñÆ3Þxk4ˆ‘h8ø¡±àÔí§áB@ŠÓ÷¸©‘“i·r¶šÔÓñ©»œtŸ¤rÁ4›ß«xšbÉÉzš·K¬7q›¥F(€êñ[-GüzËѸ‰ãh7ivšûœuîYŽdñš;½Ì±69æ -1ŸsÇûåÜ¡ãÂìísWñ6<¸‹]×ÑÐCãD¤#§Í÷ÄëjßÁâ1iýòkÛâý5[úŽ×¾Ø¿ýþÅ®ûjwܾþñ÷髊ïWdV=`Ãr§ à¡2kúxRB¹SpSÃ#K<ÞãêxAÄ´è|Ž?ÏÐuü‰×'{'qÞGÇ;zE<ÒßåxEg˜Úˆ¥F,gÄrãžÄûŒc«*ôV0 þ|§yÄqφðc#|GÌ=›oæn¢‡»9¯ˆx«ÚfË`˜ v¤¸€–€ûÌœÕ}`Öv3îæxzk+9̶µ‹Qç/´Y)fL ¹ÌŽæ«x]f(´k\MžE\··]X=¤Ä`µ§…4ÖHãiìGúLNìgbŒñX=g‡AüR)•¼c„†D0OÀÚ&l¤"$´­ ã+Ÿ±òí•5a»îh@m—p)…ørµ ¾|3Líª 5b9#–â*’;mìû·„ÈäÙîàH{ªØ”$¢ûÇõ«ÀÑ5µá±&Z9¡•~÷[%þa¿Z’ÜØàÞ§à\ -õÃÚGxGðÒoÞý#Œ&% ú™E ƒ´ÒÌMåädå‡ðâíKÝ¡Ñö‡Ä/ü!(H´™.;„«_,×#›jyúœ\L¦s;±ÞñFi¬A;šÎ2NFÆ ¤·ç®¨¡Â檡k`¼è[Ìí®í›1³»ˆÆL¸˜í²†ÍÍ79&ÜfGe§£ÛPÆ I6…éññ‚ÄçO¹‘ˆw‹»‚±˜ºæ6ŠãºQ…˜Nˆ©BìÎt蘼? -q…+¼x‹_x]Eˆf·²]sÏ}⪂]W‹ a¶|¯JÁÍe¶ÏÛ»¹Ì`!¸Ýg=CãÈ9¶Úp/Þ†º¬ÌCºÍŠc -»pÓKóoµo™—•÷{¼.x]ûÕ^©¤ïÜõ61êfˆK,ü -½ULÔ€+¸TÁ¥\ú‚ûƒØ“ù=!æ -1Ÿsb&,µ­9:ºÛS _eØ=6†Ìqf¾Ê¬‹TD\뽌uú˜ãíò§–†Thå„V*´.¿oøè¥½É/%@$·º´_º¢q”}âcM¹Õ†\µnÛ±; óûDÞw§ƒx½fF[©A¢é>ÕŒC‚ É«_ˆ»í÷âJÕîð¸œçGˆÁÄŠ#ƒ…0{n^Åë -"l„v/{Ø*‡d‹‰Ú‡öVÍ9;C½¾3pˆÀlí*¹Ì¸ EPùh[³<ĸuo‹”‡½ÐRæŠcdòVд¿d¢qÈeP kb?ÐJVÎhåšíb…OxñÖ¶]R†@È;52…Ë#­ è޶ß×ö…!ÄÔž@Ëè÷¸¸RtÚþ° ⣚YNR¬Ø¨E¤v5ëž™óÓ8áiLj´ãê–)ëdbh¯‹eBƒ2‰¸6± „õnÅž„WÅv3òFå’LŽA4íH~£ö)¢ñtE¤òNb׊×Óð†V,›´aÊ -*æôžqM­Æ+^9ᕊÛWˆ÷êï”#hpÄ0Œâ -.Upé—n-ApàÝÜ¡Íi¶=\fØ•0„ÅEüƒãîÞ3=3bÑÜ>º%Z“°“"ƒr#0zñN¶àõ^éUˆ<´ïèñ'”W,<ÇÊ4»¡Up{ÙoÐÈ›‹‰_64»\l²=%H*ž™-(ß­eF×}‡Ë·O ?µ’AÓôš3ÒBfϪ(îF<ÝÏ›ÎVÄPw@&ñƒ»ŠÕå6ìöôH@Émé_ÇF5b:#¦Û -Ðlq+ŽïÜjêÖP¿~äîŠAK¨ªlˆµÐ³ Á>çïÚ~ü’!H´**¤èöÉA­ ,•—çyD…•+¬|ÂÊ·fÆ¥»ZSs7ãD`Ý2ùC»Rã•3^¹5´[¶Îñ(…ÏkyyJX¬ñÊQÖg£Úh§4¶IÅíg ò«‡÷²7-¾w{ïô´HwŽ7ØBQ@Ãì™Yíê½?Å1Þ}Ì͉Ëxç7†7Ûš”És†…m/í’ÄDî¢ã¸çŽÓ·(ÜŽƒhÔêï(aä¥Å¼•(°íÓPÖÖöYD d¢Y''Å 'ÛgW’&()ÜîËè–ìžÀ]‚Dsµ»bz n%Å"ÞË!@èâ÷è­àbOpñÖ.92ǙԎ²†l‡5xUwx@H…UNX¥G²é^ÇÚ¶ 5^9ã•Û¥:Ö£ƒu,`²‡n-*Uˆ£Ã·ÿüíïÊe#ÅÇÏY@Ž-?ÿ£|Ø?þùGùÜ?ˇÝþü×ÿr$xØ:BŠ'6J<=ØÈáøE(è×79>È8¾‹@1Þ¾=P\7d<þ=~M.}ûiy{þööÇ×ß>èû7Çñx æâñuášôöï¿ÚOH\ÐÇòE/ì©þ[ÒùoI·VØ´x-fñ‚Tîd#ŽsJæ¨âqgW©ºåYˆ-AŒh;©Â ™xAUX™‰Ù•ñjá ´‰¶›ÞvHQ…—NxéÖ)Ê\>IÝ£³‹üÞŸh´Á®Òâ·Á!qÚâø­"0J\’^ÑçôûÞZÔ’ë¾òe5´-¸O ¯,ØØm :p(@ÅUïz¼aYˤž W*îDÜ£â~…!Dk{Ú›2ÆË»¾¶›Œ÷£˜´ Ýc ¶s˜Ïˆ¹…ø\&z¿X¼±” ÑÉÑ|FÜίêÏnVÁX6‡y½äåYyÏô44ñ -Å\ÄxñüŒÎLóFˆQÀ²+ã«xg[±!$ ÓÃcdÜ•§aƒ_¬ñâ/¶ø«_Kåå­¤w6Y¹6ö9´]ìzhEÑf£©†Xª³Ê#¼ahé ’èƒjxG»Œ i“Kc,Û3å–ö¾zæ^[Î@Éœ\« -e§óöÊw“Â@²z3cDSCy-ªwiÃ3M*¬rÂ*?¯ÉÐu°'…RyÕ»²Ê¸FÌgÄÜò…‘)AY‹vÑiè•/têaþÐ$ÅòII± Çœ¸ô/-æxï{ÁAÎNã‘ù¦ -9z»mŽŽ¹BÌ'ÄÜÁ1åâ$.Ç?ÜMjÄrF,·†»Ål—ulbK`Ü6·e -; ¨å‘-Æ&CJÙC»"¿V€¢m„˜AÂà•Ÿ¯£ëÙGÇ(`Ù3¶!uídÃ}üº•m«Ñ¹a]3Ί;]\VmW‰îßæ¸§J¼ªkûyÅŽJ¼ÆÕm—$¥øDuFÒŠˆ9•YgÞÕUu¸óêæÏ:N¡Þ~†ix·*Ì©c‚.3 ’¡Û$𢂟»ðPŠÕ@J8ïÃ1™–§y'_à Ý»[Q -9zõ}EQp(@ÅqŠ5)@Y]Ä ª8!„ìzÛÕ~9›ß,P8nûÚ2]bGÄEѦk¸î?}ªðÐnK” !iØÉ'B‚ÈÁíÄxñïôÿªÈ 9m2;ö3¶ý*&!ÅÙCôdÅ}{ª` àM»Ë1=62î¬o]x]´Å€£?BToÈ`©¼¼‰Ÿ%(!çºÃå*ü4àb¶‹üÞŸp!`˜^R[b ˆ]~œŸV€¢MÏ‹_9á(—Z™Õki#2n£q4ÐD³¹­ÐvÕ_—W.Ÿ£ìõI»ˆ¶rZW }uÝG¬€Ę30ÞlÀ™ ;Š˜Ã±Tˆå„Xz8Ö²2Rr:Ä’#N3Pˆ]ïÎNΊ¥ÆV+C Xt|mIvCËèñ»Zo×âiÚ-¸»·?C[ùF'¿ozîÂPÅËåïx±Æ‹g¼xû` &D³wç(5l·â8–MÄîÊàfcµ[ÐF›í ý—#ZrÓm=E”Ä é½} GlØ„•ˊ󯘌 -`7ç.;ÅS_¾»ŸÆ'H „=~—\Ûõv²\².|°K¼£áÍš•ÖÎÍ RJ)îspœ"$ŽmS“±œËÇ‘sá×ETüv~ÿÇ}Ù$7r+AxïSð†Bý®}„9‚—vx3÷xÕ¢$£_40ˆftÍjD>•²2³^·±cß,)Ÿî¾‹¼ ÍÓͤ7ÛgYO•mI Ük¿OŠöt¡dƒ]oì F貈e¹”½ß¨t¯ŠE}¥å²$=»ã¬TDÎ~M\n /‹¹[³ßÌ8)Ôîåv½£H*B´¸d5ËœJÑ^¯È·•·f¬;¨P–“=xŸs3.ü çü*¹ -y?›p5j‰iOLÏÍøµ.AX’Ôn[¿ØÆ@Bì9Z“ÌØòâžoïLfñ\-PjxMKÞ€Æ[w!Ÿ`ïk…âÌxKfóh”ÌÅß-ÐݼõY÷ZƒÖ.)פãt¾Æ|ÁçÛc½Zfx§TÎG ñ. Êâ µëÀ×Ëeª”4—NÊ­sàVÜóŽ˜o¿šC aä2TÄt‹8RD1}Rïèd2&s!Çéî(–0—ÓSn]‹@ÿ$ìªâz3¦BIXÆ[w6lœPz:nœmÒ‹gºå\ÞuU¡â醴êøÅþnšØ¤×†W4 E>¼55(Ò»æ¾H¡%…=) Hws˸¾,eÊãÛsYÆMé ;[JX&Ü쉬ި[Ñ®¸dn½ â{?WÑô¸ð\¼õGœ“ªÿ-â̘}áJDlàÄzv ^x€¢H²Ò×ñªSceMó -QkÇØ.Ilâ1 -qñ‹¥Ç¼¼W«b2šgˆ_Û<*N,üÆtJ] G;5P9e-šËéhÃûZŠ6߈YW’ééŠX©á,Z»ªø>‘°%Æ=1¶Äã#éEâJI]gg]«Š¹³®« -CWá;›ü«Ä5Q®]«b:=ŽTÑüÓé¡]/¶¤,g7ùgUüÀÙ„³ i§·nœÎ3}íq:+Ô1ñ…œ fí*âšÎ–É:ywN'žó‰~Bkb“Ú™ñ³šlÜ+퇲öËûõÄÏ‚·#Ôˆz'Çb1LŸÝ°¨ÉÀºfö4ë±…AI’a|Ê-¬ÁSÓíÖªšJÉ÷ÂcLÚKÞ’ýç~û]$©ÂýyÒ„>žÿáöÇŸ?üsú‡Ý~þõïNeæß¯÷½ÈD²›}MÃòæ}èûýÀÊ}Û£òñeŸo(IË6Œû¿Û¯é‹÷õ¬¿\?_~ÿùóƒ¾l_qC;‹ûÏ>#”Ûßÿ·#˜É S- oȤ½Ÿï@ê•jû+°^Pu¨9±œË»v¾¥¢x¹åå=/x÷p&@ûН¨ùîFЮê¦9žíµü6{Â:˜Îù±ær¾«ƒZ©ØoSR§ÙqI}õàX{˜jáŽï®é}Kç[<ä©ûîâÖG )íHé6Ü3oÔÂÊçê¶¥;®ú¾ ýö‚yFâäƒWOá7ZØ”p™ª€Ânat8ßU‘¶VºÊrÑr¨jîWVÊÆóî“âíß®J -Ts(k Êqš¹QˆfC5çÖhŒòáßþœØk`}›Å0†j$Ö&0LrÅÛ.I˜éx¶WSl± [¶™ŽÚÀenÆP ’Í[ZÜÓâíÍ0Ú†Š¡x)Cí¢ÔP¾@™C¸hŒ7ζi!Ô…[4Ž/¨ÒAœ*¨Ö Y"•ÃØ=çlxµ†ÕP¼È5¡S¯½h9–Ýb qšEá ÷÷Ï'dkáǬ‹ÊÊf#]cTK¨Ù¢–P×#*¦Zèp¾ /µ¼´ç¥wòä0-•’ð¥;•eÚ %ì´¯ïÑbË‹{^Žv©t?¤pÜ®¸jB›•a^Ê1Ze -S¶Æ¨œOÖ@;YlxqÇ‹ ‰—²zœq‡÷[ Óqv¾4Ö|bñÖXúEÆP™¶]”ÂzØŠéÓG‡ó冗w¼<åg#ÓJs¢¡qœJnõ^Wuòuz% ”ñ¸Ú¬²ƒXØÁÂp´Qê"ÆY-Õ8«%æÿ|ÈzÅs7Z•A-Û™£QªjVe¢øW  Ǿ(—8c¥P¥;Ú‘@YS-ÜI†oÙRËK{^ºd»Ò¹JÝ’áX»Wk4¡RÍ©ØûZÍ«¼þšŠ£–À-/ïyy4ßæ·˜t²û¤Žµ+al7ãƒ4[ÏúZ¯¡ÊâVÆCÉ6s(ÞP‡¤ÖÍrO>ÌVÆoIxXošÙbË‹{^Îv%oå8Z0 -r”•nMX6Ó•ðk'R%VkPÅu›wìœÚ87ß¾jˆ=£b!8QlË„%ÃÐ4Ô~mz”¹(œj¡N>|Ï—Z^ÚóÒh¾Kyõ£î²—x÷z˜á}à·&Û½sÌûE --ìiáöØ–fo°ÛÁꃮ°*ËVv…(1PwÄ(ûµeï{»×” -Ü«‹+¥Œ@QºM”nË$V¿ å_›VÅ+ÚjM¤‚a¤àõ ÔélÕ¨X» à ªP6¯£Ëñ5¹6°3·M_êÛ$ɺ¢Í7œÕÖ(—nb ¡Jx´&cš”óÉM±.6¼¸ãÅÛ8ÉÐr,ûMhÒÑÃõìk;t2Åáýˆ³‘QËK{^ñîõ0Ãû .d¥_Ê5˜ŸÅÉ -‚‡5Õ‚a|²$R±ã Ížäm6ê4³`57‡ê TJ0ß7îÌ÷›w:×NçÚöíd=,äU -Õsxë‘ÇþðE --ìi¡¡=5N®ùLf:î›ë¦Yá7F5¸´Ã¥\‹ñN5Kæ='Žâ¬ÚvöxÈ:«„}MMµk è5=¡ÑìtM8=ÆŠxìK`ÕŠ5°ÐÀÂ&F+o^/nhyGË¿¢h Õ)[éRæT*ꀕ[VÞ³òˆµÈ$í]„¿DòZÙ¤ÛqÝEwiSXű†Ù´@yfÊ(«WîäÃ÷’MW›ó¯3 To1±ØaW8C·S´ÝãP: г]‹f‹ -›'Œüë¥óaï 3´<¡ä­(”;aXQiÖsL9Ÿ|7´´ØÐ⎛Ùvý 0–UrLñž`þââæð±·*Û ÿùíwÉÞ|àþßP’–m÷·_“rùz6YÖÏ—ßþü ¯ÛWÜßÐÎâþ³Ïåö÷n2>CµíL‘¤¦xyí¡QB‚‰¸¤"¤Câ…=õÅLòýfÅŽ*šûjÒëgî+nˆyGÌ·™drUÔñõ²Igµ³5¼ÖA«X‡ø’ŠðŽ] G|5EDôap —³‰^hxaÇ ·QÃ¢êŽÆ= ~uJ (í@i Zj±Úëšrµ4,²w@ß´!ñkU{éƒþIEbXªG›øP„*§7xÙB`«~ÏT -"qA¨Œûäeæ¯O¢°ÿoîYÄg\ÜÔ2|íƒc&‘ûÁð’:–1ñt8güj8kí{¶Ä¸'ÆÛÃÍÃCú·Ñ‰Å¯9àNz4î6©ãw›ª˜f\’ªŽÝ[bÞóí­^‘òDÉœ&>½ךŒº~ü¬·)âÉév]M5U€ÞÉñì¾ H_9Ž&F¼òN–²"×ÕÐ|ã2v‰Ÿv‡ãŒ{–·KëͲÚÈ^q²ü4kwã(cÊÙN¾ŽÖf›$²Ò%¾bã‰ÖƒQ9­§'ǺSõWªq¤¬+É2¼yKg\ÜÙr·£]Ñ+Øß]Î&^êìéì«è: -×Ù,±poó–'ôk>A  †‡´°°‡…ìBùªGö¢®‘ï$ïŒ|¹!æÿ±_6ÉqåFÞû}—Býa=G˜#xi‡7sÿW“/‚EàE -€¡•ÄÖëîT1+ó«‹bRìDtÀWS«Ðqñt…²F¿¥âÓj†¬$­b¹*–žâ™X| ù1šP¢tÛ¬=8ùi§eyNÌ„ø -©P x˾;nëHj.Ái·'+HŠúwOÈâäXliîHAœ|ÆÌýÓn›¬àä}‡YOiïºTûÞ§-CM[·ONXêëåV/_õò½ ¿ØNØS¢âIÝqÞåáÔ¦uÇžIb¿¢#u(抷Œ 1(<lÛ(>Š€% 0¾Q<Œ˜Ÿ)ž[§•iêïÝ>AìI¡»xÇÕ³-Qñ{7¬øÓ¤¸«7J‰ì;‡Ëç;Kmrµ„tHœ×Íœ -`•~7÷FÏ#G]䪞ÁŒËa¸ÕK^ºè¥½)Vì–øàذ—UAÐ]ØÛºÁl7Šù¢˜[gJÉâ-[Ã:«!¬í(˜ Q¼¥bÀlåsR`-Ësb¸©Ç±éI¸&ŽÄãÚ†Š«n™a¬Õbf÷x(ÔïámsÉ.?äf²ÎI&ÍP±„ô°_sò>.ÑÖáM¯N´³X‡”@•N*äƒ8Ý“¬XtgÎÈ…FéKX¦Že(gw„ª>[åÅ>õ:}+ºâ|ÈiÁ˜ÁJÀé+Ä 7¬4·/sb;bÙ0§Õó‰ nˆŒ9w¡aÅëÑá¸Ps|H\[š¢T®‘âíXÒY'QD³,<)Ô¨:K–Ú#³]î óe«xRÈêÙJÁ*ß8 4nóU1÷ÏåÊÔ¯Œmôr*€Uú~©ä¦]FÕ,!ß>7×3„UP‡µsÈ’‹qÂàøœ­%¨QLÅô¨Žê3.iµâF/7zù¢—= sö…Ó°–?<<Ÿyx.UúáYŽÂÊäŽÈ1Lìxkœ„–œXËrGÌ̈£æ‹ªæ@í–­‘Œ0Ÿ›zWoƒJfðüÆx z -”\¢~Ûl¶¤¾i¥R×»ƒ³ñîPÑ T(¢ÊÍæËÉ Âþ|·Éª>_ÆågçĶ0gàóÆăb‘‡·t…¤“ ’¤BÒU܇âapÿLñTpw×Ä}Åû̸:F¨õÁZÅtUL¦ME T¹–/žsvÛÎØÏ¹”£ºÛ ~Ìá§ä~¶ô0–Áå]½ÝªSŸr®£Sc7ø9íŒó4ÃÕwmŒ‘]û¢1j3 çûS±´ŠåªX~¥â§Sª‹;nꌵ‚ŠöqxŽàd€+Þ¯•ÉœÕ -›·#s.P+ö³bâæ½J—¾yDÁ!ºe3[:‰ßUü[R?÷™°³OB‰<±M˜@¶ÒOâmæ{^sA` ix±M±3X¿;GÝÑRæXw„7’fÀœŽJbçxÄÞ4êâÏÔ6Z¹ÑÊ­ü¡5ìeÊýÒx©–[±#pùŒpÖAWü9«²z¾­^jôÒE/=¢AÊÓ€!— -Â5áÝBüÝ™Bˆƒ¢Ý *QöÞìâM{bCfæºåɉ:euYÌŠÞó¨ì¸ë‚¬B*ÔŸñ>>îzÎX)R¼åŒý‚«ÅØû°µQœý•ôüêÿþ㟊ž&åýu&ä·×ÿôû×úçþåöøëßÿ»àŸøu˜ùm…ý-í4ø}õù @I?~¨ù}ÏŸ²ó9>Þ÷ˆÈO5ï>ÿ‹ì0üãU¸þxøýï?>æïž_ðþ†vï÷ù8£þçRü -)½)H$5Únn|ý=ò£³ÝÍowÐyïú|W˜ßàõ3Å»•‹d˜ï6éÉø ¿šï+¸Òh}åLä’¡”`´[V©ÇDÑvIÌÑ`h_õ¬Xϱ/iõ…S:Hqõ–ZV+¾}ÏÄ7BΘuaD\ÔŽÍ7ÞºI5ܺó}í## +ý­Û¦”ÉÌp¹‡gn*Fż™‡ÑÑMúÍ1<ßåàS .­ÛÎûg¥š_h)˜ï–w -§ U$œñœ­›šÃ•A4¯æµFïI„óE‰.¹I8œ«Ý¯…‚ËóQÍMˆ×0‚{Çð¾aih¬t¼ÿ†ËÕpÉ©‚°áÚœ˜[u -õ¨jN®—û°6¨xÖÆNÐo¤¸VÆú{7ìâþÞ$ÅW0‘4îçù0^¼èÅ k(ÚW+­Z¹ª•{óÑûÕ|²F^1ß¡”ˆæ› —ß›ôïÈÆ5]¼qXKØvóqüùQÜÍsRmîŒ ò@ ï3â¤À\£`û[/¶zñª½‹Õº Xt"íXÌŒH"ü†g’P#= áÅŸÁþŒ÷Ax?ìT%Šâݶ® -Í¿t¾/–³ X¢ååꉻZo— ¥ðêEkK#X.‚e@0U‚ª9:†¶³®‚Š˜³ã|918¬‡Ë¶æœXod¥hÜ*æ«bî)¾ÂïÈŒcø%-€•¢ÂØñ* \bWüô1µŠéª˜çj·gl¡â꟤Aoéãã6s†ÄÜkiå<æáx¾L,šï]/ÎNâjÓòŒ˜é_TŒ6n77X‚j¿¢—#$‰Xx7µgy÷¼6>k¾çÝÏnËb}vDŸGÚâ 6ѱìËè®'Â4S`®#öK³ßþ]î_­À¦'Ýp¨`%œñÏä³ bœÏá3Î 8 xpÀ#‚Ç–.Œ c0ÃrŽ…© -ÍÁŒgÏUñØQ+f¯¹Ü¶×f|×Ä¡#Ô¢“üpZÑq®@d!ºÏ)º«â1ÇÕl@¢+¶Ì5‡ “pÆw'ü‰Ú+HŒFH0Š;"‡ ±"Ó^Ü:К¢cnÇœ0²ÒOanóU1÷OuEiÓ½šÅÜщ´ é°Ñ‹½øè6]%@ÅÈÃwµv3ø5>0#Ĺ'E¤¶#¾ŸÇ$–¨Ïåpu~OÐ }ÌÅ ”æð^©ÆÈ.rõA7-‚ýsT¢P»‰•ËͲ•¾6Bˆ U$<çn—ܧË6W1y=Ä¿Rƒmõ¶ME4…$u¹âvÂc¥ÏX $ìWÜ6[wXæ ÊòfÌ…  -í§¤Õ+W½ò¸å†‘„ø*јktí6_o íŸpÛÌ—Ì@´†1§ãnï[¨¶€õûmŸ4s¡l9J³ ;ŽIBN›äˆ©­\€µ,?ãZS£˜.Šé1Òˆ¬¯xøŒ[¯˜#WÌhå›™ö]®¢ bÑ\ßsåÎd›ì -å÷aR†R±yn“Áçµ™ÿ«I@>[ú8û“æÄ†­AÆ`†Ë¯Ï™<\žïˆÏh©ó-ŒûŽØ†.ÿÏ~Ù$ÇmQxŸSÌÒAý»ö|„,“ÊÆ÷¯ -¨±l25-‚E@$YY’‡ôSûõëïq2ÈìçY|Ï“8dˆ¥Ü°q°‡ÛöCo3£ g ­BÊr‚¬9ºsÝѦ6Ì5@ó…Æ»\’ ÅóòÙqéÚb"V¬ bÃÁgocÙ)–ƒby4ØXªâ”t3·ž+s4ã ƒÍ*Y.”lJ ž—Êb¯ޝÇ|8Á ÁEB¸¼ìâ—Šûâ0A’r†y¯7õæÇÉÖõœïö´Fuãj -¿R{Uk˜¿&a>\uîpHU›ÎkÜÍlèX5R‘!zEº]±ýkÀ’I|0ú„YßnÄ Š£OÜÕ ‡Àã@ԀͿtë9"ƒitÝ&$2´rû|Mƒ“ó'îܽ³\ߣrÿãÎÕ¹Ö:„1©Ï×-ä‹Å|&U¨N×QÌ™ PŽf<[6 רų‚Ñ:Ý“l¸Ç9õsfî„å‚\ (†Gx6´)ŽÝP™Êg¶‹ÿÒ¶­Æ .^‹>œÞ"×Û¸õ@Üëg íVß<*n™ñGÕÂAØ¢7c}S¶Øg¤žå²bSœECvÿ1cÙ+–£b¹æã¼SœŠs“â²=\ç.¬Ö“~,Õ¦Á#ưD_~pDqtý¼ª7ÌñÂFõ®p´ÚýŽéöŸ¹ýv/ïni£÷Zn©ìËA°´¸ë¾¹ïåˆûdº]Ü—·'‚í.€ÅF›b§·…Ã,âjˆ7TêàŽÇÉêþ*[xÔ Ì’OgÌ{Å|TÌg3îYiÖ3ÅR;Ç)ÉB)œȬ ^º«+FÕsþÖWñoE+¢…"B+RI´qsÆp©°ªç1<+”@0>žrÆfPJkWüRl¿Æ%é`²ì{å2St—/^ájE X:Ï´‰ö ­h9£âZxJX@¯:xôͨ”f¹„e¯WŽzål¾GÅ-œöâIÂ!å|Á“8‚S†:Þ€„wÜ<ßÑ©¶žâÅ®†Õ7Y<ß 7n­ùªA¢†¦1Ï|ÅÁ0WyN -È*#¦T\]¡e!O,×å¸0ˆJDWõ¾T»¯F´SKµ´SV£ä ‰ÃnÔi¾;½-œªÍÜܲn²“+¹òh1C/e)ˆ`0Ãá ¼·D[¤E¦ ¯ŸôxÆ#ß\:B0Ñý§âVx©øˆï-Š?Âw2 G·CwÕ¡#2ç 'ftÄz°ÆhP-*ž1ÙÖsZ®¸£+’£EiÆ›‚WŒ—Ç3.@%é `¶ÞŽÓËÑâˆ.GHšGWŽÞ;€IÂRTf,t‡¡h˜j‰øe_M‡… J¢À·#¢iÏÂk¡à„ç÷­™ÑFß7N–Br¿ºgƒswÁK¡\ý›F'YWâAHÕq5ÇBšT@·­GŠ¥Ë9öw3(•üY›vS-&pµ°möI2t»¨øí‰ÕoZ0IÃ{[OÞ%ÈÛ_Ÿ)æ½b>*æ3Å= ’4³¬¤x¹¦ÉY(>Þ±Yãεp¯ìËA±4ܶµhgAG¬[ç2ò"wdߥø¬—4¡I’ÑÁ\†˜­»1HEÃmûá‡æ‹1žx$qÈh±Ó›wzóAo>Ÿo¥T޲÷§ZÙ«•£Z¹¢ö£%£ Éf¼mä -Našu"ö®MS sàˆnùpPÜÔ7?˜q,6:ƒ»mœ“øjÉR…³lvÕ\ŠZ4#LF9¤Z¢†¢U/‡96!õVŽ´¢ÁžÉ±6Å1™Õ¿õ`Õv‚OÅxÁ V¡ìÀQšÍȵ[€—u·t9ÇóÃr¦X‘ÑL"♑ј -ä‘ûŒ3^¯y®ÅÁ«iÏšWR¼Ø„«Ð¼­É™âæ{¥x—uÍçÿÆLÛJŸÖ |88e¨~(_žï躱¼“HF{€;S4 -n1E›àØ õ#R†’Òh¾ìšÄ«9˜Œ—š1ƒYØ‘†ÐD[‡)‘¤ÞŽtžÄóð& o Ši\Á¨`EƒdsŸoFqM77î㎛W‰"«|êŒo2ÐzÍcAj+`¹Òø:írmùª#NýжsñíX­)q60”ÐÁ?&ÜÌ@¯gÜ“( ->qDㄇ«µú&³…ns% ÈLQë˜n¾¹~Ïç;O/§x#bÔö¹u3ºõÐõGa@’g¢1»ì£}ÿ§ÿüåW%ðÄÏŸóö_òüù×ú²ß¾|­ïýV_öøöû_ÿØfqÚcáZköÓà÷|÷íw¤¤?¾öäÏYÔïññýãXÏ…n¯~ûsû%9•÷ŸÖÇìûÇŸ_¿¿èý»íŸx>±Åóë:"ÒLJӿ=‡ÛqÊP¨Øë(j=M§ÿw®h•J vÂSÊ!%|-x ­ÜMûòÎÛ+žªÓ¤zN?Sñ½¦»Ùø{T|Uo¨¶†¼X´sÂ~'¶¥ÌÄuÁ‰F«íºp«)f”ÙOS¸Yñ«î‹Wõo³œ¹Yx[30jp3¦4ÄjGn£žœ-à)9b-0©¤yæàiúiÅk*³_-É•Ü8p?§Ð€¬}a–31ß?bøZ–\åxYñX -²íMwKýª”ÊHä')–+¶Å6ªdŠ˜$a -¿Ì±§A§®¸µA[é8 XÓ´ÇÊ -(w>À}¥]*(ܱáQ¬O©åËÔæ]x¿)ÇíM˜Ü'ÃÃw»©U&L8^ñà$ 0«>óDq”±Û ° ɘ€wªÃb%s‰cC±‚–ñ‚õ’Óý¹ "Zõ)ÔÄ2€·JåýJ˜·òn‰§­™Ìh–æÜœ¹1UÂÔþ—³ [±x{:jb+ªB‘Äî.¼rÀ+'¼òÖõ‰P’~“°#Z;£µ·ïr5°â;…*(•¬½_ÅÛávH¹)ÒUIwÆü|b6Í7kh}£¬ˆ­£ïÂo…À’ ]Ñw®j|#¿¯8™b‰Ò[¯ø^ÖB>7ƒÛ›0õ†O¼Ãëíb -¿ˆøÇ b‹û“ârço—m‹Ã¬Lγˆ#Åvl'À6BquÐZm'Šj‰lÆ­f^€Ûêìò;lÏø=èdØ&"µao?%îm¿3‹+ÚÈ$“3¤£àÑÁy{Ðí{‰½J°KÍFÆV>bå3Vîq;ñÒŠx–ïUéZûSÄ3óÂQúö»Ž›¡yM=-ÂSD5PõLÃ+rÌÅ£ßÒ†9î‡òˆÊ¦Æv:Þ­ø<ª;šeÅgIŠw«ï-›Á¥¤‘7k‚9Öb=!ÖŽ7«ÃÖ*…Z_Ë\’[ÍÂcF¾ª…/®-L%¬¨]© -L˜:Úzj70º‘£msÛ¶ -T¶RqTmkì^ļ|ÀË'¼üÖóµýª¥·*ÑÉ >âå3^~ëdò̃s°š{ÚåŒ{ÎïU¼if0(¥Ü.xmŠÒ:%¥×öÉïpf<ãwff()IÒ‚§tž‰ÓSÁÂoOŒyˆµ¸æKnAÄ *ýÞ3-1^òoÏFM±dÞ­ô(:xm¼ô( ¹Š_¹íD±UM ɱ¢†Å¬Ü×né¼b @ñ¤J¬yuÜÛÝ:žuu!€–W‰Ç?€†íƒøQ0‘5áø Õµ¯Ò™±/a;¶3`ëIxêâ@gÌÇ‚¢x &±ÄЧ‰âª$¾°áʼSÔµF®w—Ÿ™Š ƒ0N¯Ž/#~¦á©WW¨9Û>;t?+(:Àñ°³õ½xq® -1ÑÌÙV¼¼ ‹¼)aßÝôˆXψµ‡xnB#8 žV‹‡ÎømC)XÓ>±ž"éÁ´ÇìP$*7—x -¿¬_ÿB¬´‘«)VÐ"™«}àå#^>ãåÞÛ=ØÁjÔ{ÛÏ4ˆ%8ÓïU¬·^ÚV¾»¯T@Cûzý{q¾ó?5ß í~Û¢"HÔ4ÓÖKˆý¶…RmM]27›ìzÀª'¬úÖu²í¤T&”»iÞ>/³‚Ä BRý®Èq”ÊÙ®X¬E*¸Ý¯á¿tjì¥2ã¸wWLõˆðÖ|l# +*´>œùðJ©Ü¸­ŽY*_í;¤¯-!ƒªñ»í•5$Áí=Ø_CÃIüüÊüò•yê»Zwò]---6Zœâ -…xŠ¥¨zm+"ÞnÂí83¸n$ -Åöάmµ‚Æ -(Y"¯–sµ4icÚ&Ô9ô4çæôß¹&, ÅÄïÆrñÁ¼RÄCò ƒ`0ò4™TW@ËbãÀñ`lŒp<¶1òöà zw™8݈SäA·Ñ*r«Ño–¯yÄUõþ<þP ¨R¿ò ¯£¾vÇÖQZÒ¢@‰n…˜¤ÝWYYÚç<ó…Hñ²r1ÕnTm£t‹¶£€~wSŸe V ZÙim†@-‘UßÕ¤ë -åîüÝqjÑÛ‡æ‘ⱎ“ÞÛ6A‘ åpU öÇçÂ/'š§ò-&‰Vl r\Ü%3´=‚¬©‚ãÞæ;µ™íhÃ{MM BÛ)8ˆ@kÖ}Þöš¹yñ˜¹å#®´Ÿ‚éá­§c±ç4œWDÜú%Z®ã921rVÙî é½Â L£¯ -="Ö3b}ë¨bj€ÔVJüxE++àí­â—pù—ÿ€ûÓä3VÐ"â¼|ÄËg¼|À{7ÚVØØƒ6C(ÁY…¿ŠõVÙÍZÚ×á¬èû؈ó~ác-+,üöK›×ÒÚ˜k—f‰Vœ â¥Í#ùÖ<~ ±bvu=7{åâNŠs³´·³C”ú~u`©y{úí¿ÿø§yûyúþ}mM_ôÇ÷mïú×/¿¶×þÖÞõöÛ¿ÿ÷§ò÷û$ ¨ág"ôã<kC(íÏÏ/­ü/ „èí÷'œêãí?þ~üšîïBýþñ÷¼éã+ùñöÇG2ÞÿÝH’úöŸ#~ö\<¤× æõ‹• ”¶vB€Ø¶^ñ"a*ÀQãf´ _¹…jññÁ>ËUfŸGÄv@l'Ä6Qònø·r<±–6‘À ¾}ßîgQÁPu‹¨ªõïm™ºÒ@BÔ•pzµØÈŽm1´ûå…¸¶(}5,d!œåÅjök­T?Jé6éö¹¥ÐÝ7UÃXµîñR€0߬ŠóÕpüUoo¡ìßJñ˜(RŠÑÀ o¯•e¼_xüÝ}nm»Ýœx€Uê+ØŽˆíŒØzˆÏ¶6BðW¶¶]t ƒG¹[Â]B±‚2%{nšM\Å›¡å -åñð6üŠiKºïõ‰W+æV~³Ðh )ó‡UC¹P~qŸzž ·+¢ áÛ'ÒÄÔ Ò¼ óeÄwsüèïΙŽý²Ž½ëÃc:N“cÃQGP‹úF^QªßîÅS/Ï Ö(÷ºÛY#ˆ¿REb$ªX-ï ¨JÒ~–k—ä@H}ý¾´¦u‰j b;ùƒ7@éó;|m}~ñÚ¶s´Gj`Õö†@Ã~_[GáÀ6 ã‰+ôµö#µ¥FP’sKzE(SªŠÏd–#b9#–·oìÄÝáÈi'^c¯`þ­V1Ï_P¼Œ­‚kÚ/×sãG#&ª‰Šïè—CxSA8H¡»ÑÎä—¹¥]•ñ^>âå3^>à½ÛÓ\ 8÷õ»P6#D”LWSãf´Š \(Q…_64ªˆyMB±‚2é‹NB€£Æw6µ±ˆû‰šÚ~«n¿nÙ8FáäêV̹ý6Ò^ζ_rlØÕ°u Œ^—˜ÖÕì€ÖNhmèâ"»·«Üvµ0Ælª Ь¯˜Û©÷Ñ„KÉSnÁîãXµîñ - ÷UaGÄvFl=Äs»Ao³?+˜« Æ$œ®bÒ7¶e$,VÁ5Ù+Vz|& ºCM,ï#é5M(¶JæÝ¹1LñÝg·a¹Œf¨w¤^>àå^þﶆl±QýÙ͈·s ©"™KL›Ÿ'Äc7—SÌàÄéÍñe?óµƒw «ØS—hNµwËTbe…R9)ñU ¶UügG-ºÕåÕ»ÇèUM¤ü*T”Ä‹—L»€AI)^Q⥽ ïVÄTŸø?ûe“äFnDá½OÁ (LäÖs„9‚—vx3÷0(N·P“@™(Ðã…¢Õ-õuòå{/wób6θь%aÐÓt|vÂ/¶Î$WÇŠóåâ@:àl5üæä Ù)p¶5½Ø“_îU±ÝŒ…r%.¿TÇïv6½¿ò—¤oªB3¸k?=ÖQEÎPÔ‚^üyÝ ^Ïn»¹[ç9Öð'¯¶¼zäÕv¾W_£‚˜èbg;*bdë^(b«>q¿’ÌJèߊ޸犘˜uµOÒÞÆêáb–D@ƒ¾öÐý95x—ø½ö#©ÞÎ7žðSEÌuµ -Š9pµ%/ÑR_™÷邨0ê«åÜ~WÒvÉÌ.˜‚œ[sÆ–.ÑeÚ%›_Ý%f:ÛvÄ’\Óå^1ñ®3óyÁ½ÛÏ‹€RœÏŸnÌ-1‰ùö ;ä)EÀËÅs5b×¾¯#GH&QýY‘Ø 0yÙˆØK•p¹ÚØ^jxéÀK?x#Z-€ÕÕ6šï~Ä¥ž¢Å.×ðÄ3)!ˆÑÕ3ž¥áê¦Áx—ìj¤ %–ð¹<&ˆx+AHÊ ÂAÌMSÄÙ醴”1è•Ëõ­wíaL¿á‡BEÜY-\lf{Ñ -z5³tyEû ßqµ ©a?޵%Ö#±öˆÏt³‡/=Ï‹úN¬ý;n˜øòÓ¨VžFÓ7nŒ5Ôï^…½dÐìûÃLõr) ÕßkúÙ{êT@4úuŠâ õ‹L.OŒ™î` Idb0¤0/NûÙõîk ¬4Ê%¡‚ùê›:cæ¨U.yuVW3+ý«SZb9Ë­£ãcrŒÌøUr(¦HǼÔòÒ‘—n1³WäåÜ’V׫»ÄlbJÞOŽa ÷ÛÏ»&(¦Q^,ëX \B‹XO’(c`Xü´ ûSâvÀc6x·¨“äàÌYÁá'‰ŸnDŒžÃ¥[±²Õ#´`°ykÖ‰ l©bµp–%]}rÌ$®å‡<ö‰Ï sKÌGbþ¥Þ/<$Ü#›ïQç%6µYómy¹áå/ßúQ'¤2G^Ì"$!ˆÑÕú¤¶;¤]®†‰öà–Å÷‰8vƒDÚ¿è–¹6 0ÑÅ7è‘xÄ#^'! ‚yš*ÎzÚ '‹«ð‚[g -\o޶Î2x¢ 5–$.\Ë¥]¼u3“™ï u‰%gl¨xެ'hÂ~>kK¬Gbí7¼oµ‰" „a^ðØp½?±‘  $îÎx˜øò—¥„'èYM<¡Ú}êµÁÙMÂïï󃵞Nu›nÿúÛ·z¥JyüXh¡ï?þ½¾×ßû½¾íõ½nüã߇A(S]f+Pj@!)?FQÒý÷àd?¾)©¾»ÿ''Úa<þ^G]÷âŸót(¹æSýª\Méå®P«¼übWìÏÏÒʳà³Ì‡Ï’:Ê«Ÿ¥Õßñ)q“OÜó‘¸ÑÞ‡Î^ÿœ¨ÄJ=ÒT9È&+šTß^¤é®~‚™‰ 1¤é5í¼xr"– ±¼u,Þ~Å2+p´‘*4ƒqÚÈ+ç”Ú^1PÇ}3®ê8)dËmUt÷¨¢oóêå=`® ».ÑÞeýÿña f•º¶¢ØR¥º/É« ‚_t§˜¥íÂr&–+±¼Ýê?=.ü¬ÿìâÇ1’¿yâ±1²AìD»‘ -T bØ©çd ¡â»ÃˆO¼=Q5‡ù¿Ž¶kºUÝÈóÌ-»ÍZíB¢H{¶zæÕ+¯ÞK‡-ÔÓ3ƒ„P#á çËI@s¨©aÉô%P­TÈÇ/z§ôž†9ËÌüŠL³Íl(ñ»¡m¼ÕÎmx·m5ßC¾)W{ä’úUà„iE-"R}ÆŸšèÎé}=@³#é2 r>“ºßáÛ_¿üªìã£ÇÏÙÜÃûÏ¿ùÃ~ûý›?÷»?ìíûŸÿ~–!çøhØ~̦Ë4äCqÍÙÿΟßdÌiß0ÑÛwÙñô÷ßS0~üÔýƒ~¼üñõÇ“>¾;>äñŽó4_û”8½ýùýáÃñÕWgÒ¾„Ûê«o¸9&Ê\Þ‘êBÊ%ÞÓvwòölw×½øÔï i®N´¯\_læ¯Cn°ì¯=Ú}vdÿ¡"ïˆ$5Wˆ¹5ÖeVL0AÅÆde» ûþŽJHäðT½´ tµê[8ä2ç”Ýzí6älþîTím8Ó†+møš¹ -ú\À³6°–õÄð³¹—$Hu¾KÖe Ò´?ì⻚ÁÄö©»õ±Mt DÞœ­¼È‰·Ië^àˆ!&ÛÆ vÓlP¤m:¹G,fÈ»ö„Ö'=Á{˜Ÿ;Å=[R»ž»Id£{r·; çTÞµ!¾;pÏZZèÝ´ù<{gDÒ©Ú=цm¸Ð†·fþb‚Êñð)ƒîc§lböv×Ĭ*ZTÙ§4&®»î.¼‚bÖÖ1©g^½òê½E{-Ô½zÀÃLLO¬zaÕŽÙ²&ˆh--tïÚìÙ²E•^1Ð$$n–Ý—´;êèáœý*¾p×f†¹b®”»­+±^´žà}r å9ä²àíÉól˜,ƒF©°ŽÊ†³Ýì8;üËòF÷ÃfUÄïÉò½3lÕFÎW Äb«Ú,3ߣ.dfÛ…WЀv²³€,õpª77eO½éã­ûCÖ°ŸIpýÏõ³í+5‡ r¬xÙ'ëBÕ\ÝÐöá5È9=¯»Ãδ}7G`ù)k§+̬‚|œ“úuçÙ‹þµS5W?ÏŽø²ÙʉV.´Ò1[ þ¿’*~p[µ]ìU-ì±cœÈ;M¹ã.© ³¶:®žyõÊ«_š É;£PQkÎw/Ï=:yJRéŒ Þh Ás¢8ß;.§LÔâ]§‡%EšÛɇÎ7²µzù:¼ÞL¬œk+òZ%«t²y3asßÖ¸)³ÿ_ -Å,—gZ=Ñê…VO³­òú+Y1ÃËz²­îe»u!ô@þ*í¾vÿ(¨æ–ÖñÇ´ÔÔÂ2¼‚~WïËÛ­¬é }¬u_pݪl“i‚4•oŠÕ2Bˆ k,³~†3i¸’†·/ÓÁ1WŒ±¬ÙŸ·ŸiùJËç¹Î¾%¶»}4ÏM‡‘Ó%o м§vÓ©ÝZ»9óöµ›*o`˜ËÍqȦl¹¼”·šcç¦õ̶§‰=»"")oÚ¸¦{敯\x¥ƒW}Ó¨Õnºl~Ó+—›»°ÓC"S m¤« "Z‘wÎÑóâá6F•›t^ɽk5 $’òLW´/¶êù°KU`3È9•wl±è• þJ¬D™ÝÖ‚5ý¶Ï¿ê;† ÖȆUf»ÑÑ+‘!G,ïØb¬l ÐbY úÁ~õk³CÒPenG|îX­'¬Öi\ eröŽË‡­²ùèâúu=ìÕ³Wü5y£³— I²†uûî|S`Ö -ïç®-s›qöOI¡˜Ããôpö=ñê…W;¼AÈï¬õ†1z85àîùZµ“‰¿;µö­ÓÍzö­o¾õ\c ¤¢Ÿ­–kœä+¹6¨ãÜu†ª/¸nÉ&gðH#È-[ˆ–AbØgºIÜŨÜpþãý÷¥°f‡mÒÊ8g0åùÞÌ´é,ˆŸ@_•h¯¥„?ynúœ­ ‚)ÛÍŠ—åq­eNq‹v“05›Ø2&ˆà­¡¥…îfÞæíÑÂÏ5CÛ'Ór/­K­s¾=Ñ·kU^ˆy²5Œ¬ ÉŸŠ¼"¯„!Ie¾ƒŽŸ¡¼–µ(ßåbØëM@)[Ã]Ò™aæ¯kÆïÀˆøwY®Ÿ•”Z¬g^½òê½ùö¨áÙ¡€qrÕ½Ì÷Å3"™câ\O™I@‘¶Ñïn™ÆŽiirF õ‚´<ßÁ9ѵi5ÎèÕ\cnTÇp& WÒðÖ¬ŽgZ=Ñê…VOs­çªyWÔÁv>–ýSh¼_ ‡Í|W0‚&š«ßí+RнÁ¨Õ!;ÏÊ/èÛtóAÊ÷Ù¸ÙÅ\³–vY±mdR -ûD™ˆÅm¢l;ûÒ &¶²ëASy¾7‹ckϺH«œ „¤;Dî^¬™B¥z}* {¿Š©×ÍNÁ17O^=óê•W[¼Wÿêá}â_›åÙQÅ1ư~C Òêaræ•+¯´æ;Tš 3Û.z`cöé¹@i§^À‚VömµlÛ£Ûš{nù”ã‘ÁŸý•[×ËÛTDmµ®‰¤iº«T„¦º"U«»¼Õù&ÏIÞh¼ÞU<™«Ä+Z„Š'þ66Ì9~tí-‚Ùi£êžY%"$IU ¯GÌ$ïT×Жvp¬3c?²-ï4ãý -æng‡Ÿt@«3^øØ¼@Uw[-ï’÷‰°U#Þ. 5ƒ%܈XPÁ§ù%Ó/;bÜIÇ›€¢n¤ŠýZÐßëç]¸=ãùµ-CàX-šë阓'Þ©h’—ùT ÕE6H5#¾;Ú¦Aô±Ö B!Džmi'Þpâ Þð“·Z}<äM7à‘ZpP¶°OdpJóN#NBqúˆGfœ‡ÙÄwy«Kg )WómP"£u5üý2H²ä¶èÞ§ø0L‚¬uÁK;¼Ñý#Œš¯±©ªh²ƒi£™nýª~ƒNd&h¹¡ÍÔ¯:h•D=˜Ø-¢ÕLÄ&@Ü—_Gó‚9_G;ˆ­ÔLÄæ­²†×Ñfµ2WUãÒü==ªì›Ñ’º? ·DÚõT.\5Q±TƒV8êOyWû/»ÿVLÔ#¼CE‹üw37#‡D¶Lg¾q -b³ìª=ÑQD].7´™®¾p”©ç#Ö¥-¯S‰³s\„pµWLs6…î·Fžù’õÃí¿ôøü\Uã⇅Uí¬£‘˜ÎÄôºÊº¿®†{iœ(ë¸8¨–Õ®6ð~ Š¡~÷›/AC\]‡'Í—+—zðŽþàóåêwCbdè]—çܼÔÈ—s¤„œê5h-n?“®Ð™ÄjÚ¿!±_IÂ5QƒOx%%ôŠl3ö„ö7-'x?ÕÙ„k[Ýà§j¸BUIÔ)ÈA‘-UÞ5èFˉçùc+êxCUtW&;Fs•yR77"Ê4c¯mÖÀް¶™—yމWXÅ=âÐ*ª4K¸yê8ÝùÁÅŸ¶z=ãˆ+` UñG^<óâÀû7íɇº˜,VÃSÞp¶ -B¸ºO¢MX.S©ÄÏ ¤°õl8ß.Çz'j–ǹQºD=m;7ó³’H\J-áÆ­èhŸ=çØ8‡3z£T[ÝZhñD‹—´Gb¨öÕùö×M w³n´<‘çmÛ1ßÂq[ߘ[}ƒæH ë ­$ñ‡#-zÓÕi1ËÍÌû™J˜Æ?´@#-iéuå “ûƒÕ˜xCÿ5ëÍVnÛc÷ݬ#˜Ðêm›9_ñÄh˜é†3O -ûnœï„®-UEsb¢PAÃåK7+æÄ+0IdÁ[Î×!ËÏŒIóåâÏZ\'9ÚÌùv¤¶º¦M$æR«D3žR#fê7ß×ALÕˆãÔ(µ,×ðÄ B“¸ùì7ãd9—ï8RƒV8ÒðSÞKý~ò82š­'ñàî\j¦S®W(Öypœ3߸wá »šxWJÔÞ¹.ïOyCZ!üÂ[ã3´Ç-W0“©Y­- -åÝB#Ÿ¡¥;åÎØ£*5UqwS‹\b·Z)®‡¶üȘÉÄïÏDĆ@+ø‡&h$¦31½¾°ö0¶ã3aÒíGLÚ ´G[ª"‘K¨+¸X¢œãâ͇8$ÞSÁ½·D -vöìÐÕªxqàÅ/þÁî[?~‹ËÛûÜæ#¶ü”›ªaÏfÅD>‘ï¤EƒcGb3°Þlå:1êºÏ·±æ™ïuX%"ž2߉´X|ázT†7£=ÔP‹FÚÝP ¹j¥?šj×·ðøÜ°VŠF…ÃãsÇ7ÓòSnàýT­ìr|.‘†I ÐJ¨á ‰»JIt‘20Q¢­ËçÇA§­¬n³|Â\âù›v:-ÖjèÁ{Ϥ²÷JZ®Ý©ÄM4•?øÓlQj¼6»4RuùÆM¯õÝFSæ;óÖÈ–ÈÜê4‡~s¥±6è½ej”†@TCýîwy2-âÄ ® ˆ+ÊñÁÿþ㟽BQyŸÔÿÇ÷õ—ýë—_ý½¿ùË^¿ýûòö¦*ß¦Ñ ûi~A¾§aõøç3üøÂн§q|Yü¿¿?QýGëñöoÿN.õûwý9ýýãï¿Ó÷¯Žò~bœÆûï>%’×þ´-M¿5¯ÝÚíÄ_MêïÛþÉÃo“O¿M¾ãŸÞ¥Kÿ˜x»ý– -Ò³NMƒŠ/‰y$æ31_W³‡ÄßžûJ5 -¼çŒ›D°ûÙýQé]?"Þ®î‰ÄÀE¡F ·[ÌgZ­f - SP²0’çxÄP-n‡††•л^“šÈÕÔ žP@üŽÇgEÍ.‰ïµ˜˜½’r¦ÍKs]ü -à릶Íx¹úÓ¬×6q›øzÆ4Ó‰˜î—îS ÂyÞÒu¢ÄýDÜ_7êD& s1h¸¼û ¼Ÿ:åý'D§Ñ–LÞ}XBEìgdìÄ…¾Ò">K\¼N¬žñ¨â{¦é˜K ûå†3–ÅÅœIÇþ±$òâ|3>ÂY{ìûm Bs³H” â b”©Ã«@mººSÌ$ö”!ËCÌE¡FªøÎ‹#/žyqà]îlÙ4Ì…¡£†ŠØ0= ¡t ¼xp¶›š¸ãl÷¥¸+t’D[G" vw<󘯀‡Áß~ÿr?¶b‚.-,šû8ãâ¥ê˜ „’)›EK|+íGÌ AH¢{ô©&>¢}Ê‘V¼"Ý¥E¤K8×-4ì«·màÅO¼øºRõµÔH n©’ã°Ø¸¨–ë -± 1— -­6NâéæKÖ¡i n£júøÛ.Á1Ÿˆy }B•ë­Û§›»[DvâŸTw…bs»5 ®žËv]-iÄ¥3.½-ܽñƦæE­bž}#)@&«÷m&±1TŽ= /Wq)Ð-ì—OyWú™6 *×Í}ŸLV‚.-Qw§^ ÔLÇ‘‡œR\Ô~ø¦ ¼pÕô±(4…@mšÉ†­€¶åí}ô‰{Íòg=B‚`~,ˆKÖ{Ã[7ŠäðÔÓVKA zÁ@ ;vJ’MÝž]€*/ŸñÌž–¬Xú çoª(v;4H+°ÕL5B%“"J g¼_q'AhÄÁŒ·46·‰j¤yTAR¡V ˆwœñqέQùÙ1 ­CÓÎXÏX/‰ïÍ8®— —WЧ³N 5 nº5¾§ˆXÙæKJÐ¥eJç|%^ ˜Pàj;ú0YçD>œ°©€0ÓåŒy$æ31_ÍxÐÊMâ·?öâ -b×2¦˜ÎÀôúB+>J¦u¼ñFæÆ€ª=1¦ô4â^<ñâë:îÒY±Tì×q·M$+@ÙêD²ë -¢¿¥£ùÉaÌ«ËϬù¦«j$:/÷‡‰Ì… Ù þÔŒgz0ƒtYÝ#¦i¸A+UÚ‡½ò£â~žíýþl¶t‡+ã.êò+ÃJ“Ðö#&#àFx!†»ug9mm3Ìó²qÓúÜOÀýŽû¦Ro)ÐMÚ…îšØB ãÂÐQÚ³ßlSÓ -G¦»a1ËXÕ‹ƒÖLå,•û§f«‘ýþ Å‘Ï´øu´¤Øjäfn\BWË¥ßÚýM5JäÝô+jt)ß»ÃýP¾s¯ „®]AÛ×@(ÆökÙH¬ãµ~7šo¶ãB -÷H[ŽXAÉ"‹˜”pÕô±©iH\uÊl)—͆ùÿì—Ar#7…÷9….`„\çs„,“Êfî_õ³[ã1;1Dv©©"üÏ&#Ë’òéùáá!VPd3Ø~*,-±‰åÖõð…‹9Sý-yº=‹iˆK°2”Àžäu7tT -$ë4º$Ôð4­¹˜Y aôäˆÚ݃d#Ôšò3¨°U~Zâ±òc'(Ó%np±ÁÅ.~àZ;#D(h…Úeݲ¡ê-Ö}µwhŒ*;}»¹ 3 P*òìK£%憘Ę2O»!獵©›&eaK(D À½%±ÈÀq`V³>žŽ²ùW»ŠÎ!¦Ð[m ,‹´vǾ¨e¥#+Ý^醒!‹åßËò÷°0¤!–±ÜFM4 Á‘·²“ˆ³'W¸«y¿Ø‘+r®¯IfV¬GÌA¢Î,í—žožŠ¥*„œ,i§Ô´ÞG5€R6nÁPËÛÍŒ¾nÕµÄCeâAUÛÎ\+F„?Wì«Îȉ5vèãÅ1àôåü«NxªþQ‡“— -Î/òWº¢*õJ&¶¼xäÅ[§dþßÒúKµ²¥ÅÉÄ /6¼xàÅÞ¯£¯&@œ®ï¥ŽØ28Î<ªpgâ†læC†êSÛÓ¬/èj®n¼9!×ç’‰VöD›(ïeË‚!÷£u‚¬.‹¢ÓÏ+ëYÌRŽ;1—" qLPbuÔíïßÞ˜A˜ïÏSÝá”öç¿Õûýoõs¿×»}ÿóŸrØÄ Zø ‡t£ÔMêq¦?”x×bû©Þmq×i{Cº}öþïö-¹~³ÏÖ——/¿?þñAï?ÐþÙü/)î«D”orSë7Þz«HZ—“‘›Òþ)åø§”^n^º“ꋨðzKt_M,±K¼ÔiBuJxØÓ‹Š&èÉ›S_ãe2”JªhûøgTPKLGbº½°bq@%š®X°ˆÕ4Ÿ/V -ë’JÜwÄ:úÖæ¢”’£©s˜ œ¶ÃƇ‡ýeD®O­Œ¸ÈÇ]7Ò'ìºë+­’‹ž$ÞßÑi@ÒËXÍ›¬îK¼LÚ*[ =~3âS4׉Ù6®§hv³œ#ÖųW]Ë /xñƒ÷« )ÅÒ·ï:{Y3L_×»;êüH±@Éut¦Þu)Q [ß«<|a‘¨ %ÄþÔ­ãaÄZ€s²Ž)®i¶+’£ÝLÈ:‘î—3©ÖüíÍTÓ×ÜEê' ¤ÚeúrÃË^îë+œhš¸ê_7MØßV&‘š);êjþ<ìÏî -|fP(ð + eG6æ€еœk<ýäˆ_[⟫k¤Ð×ë+YMOJ¼¿cêÄ!:jÿc¿l’+Ém ¼÷)tà €ÀÚG˜#xi‡7sÿ£¤Q‹5ñ ²¢X -rµ~Þ+} %2ìiGÑűm%Hu«6aþ$¡§ûûL‹8@S¤ˆæFÞ¸þ4ts|Ó& ¸–HÃ+ÎX $äǃc¦Ž«÷ø\:>1ÊûŠöªBRÌûøof -mRé¹Êê–¡X8ÛuË™ü6мaž›Íë¤ -VÃûs¥Ms@KØWÃ:mr»ú»_´A¡èŠkŽZb:ÓÛ¥ú0F[°AM?{ÅÝ=1Ç3^ð(BÁèŒ[SÇÆ}o“XÎÀÒžkÅG¼“¹qBð¶.Þ¤î3µ­àV2>úRåÛĉvl¾q÷Ù.Ÿ3Ú゘(a%ÿ©F‚X’As O¤‰ÍŸ$UømbÃk‚Th#bÎþîšËÃÄ onxó‰7ñFóåêghߊ×oÊ %ÝŠ‡'¼™M$õŸfÆÃ‡GÆÜó‰˜fLj¾t%ï4ã -¨ýÃcÅCt'ŽF¼äâíUŠ÷kU!Sí/Óã9U ŽOÑg, XoS[±bKÎØ­¸êN“”ÁŒƒÍ[2 k²¯XgÆFPƒj¼dÞ%…Ä1±^V…v7Ob9ËP‚dÈáæ-©ccàBQÑüäÍ-o>óæ·N§˜ésÿ¼[&¡Ó#•¼xÇNQÀJpz¬¸tœR KÐÕ¿¢mXsÚO¬ù‹õCS¨kë,\5 H +îÛÑ/kúÙ}»—rŒžrYžî>“$¼-Õê'Ìãõˬö#y`Àl‘E¬Vyª‚Ré;ðBóõ' =~Í,†Fû4ˆã˜³¢ÜÑðh*w mH¡ý$,QžÜu†¦Î4s\Õ/³¦'çJªPê6.v@¦(Ö–Ü0?5òãµl¦ïV(ù§®Š{›ÆÀ%,9«i·2d©}%¬sIñt¬aÍe`(9ëŒØ - § 2L ‹™2VÍa¯hhJþÓ°ä¬H¼]õå”!†çÛz:æÄ ¢Qñùš1µÄt&¦ÞŒÏ^12ãï¼b?U$°´“»qRHéM/gžvg, ±œˆehÆ»ïèÇäE($¾Ú*^Ñ^e K&ˆ©­3Z­P•¶ªsu –LM %²á‹<§Z-ÒñÛj—]õN¼‘"ªñV¼ß-š •­ŒÍŒûÙ!-°œ¥ñæ/Þ0;ÄŸó“´CéÎÖ¯¤üh½¼ªƒ”|ÓJä W§úàLIØÊF%˜ÑÀê€foùî¼ C]|Äéå¬/¬å•†WN¼òÅ›bâã5Ú/”7=·%¦†˜NÄ4Bì –°O¼Œ†IŠ…N¶`®‘”°Ÿ5—µÄt&¦·FÇýKnLqißÎÙCª9"žœ÷\­BÉ?Ez+ߪ•­Í1 -Œí—SÑ”ô%­A˜ýEûX -˜IxºýZ¹áÒójéf›™ŒÔˆAUŒÌxDß„r-@5H¸­‚S­ÞCS-ûÒQt¥Ë©ñR³.82ñç \÷Ô0-åȗ͉j74Œˆ›Ð¾‹ú¡14áo¶Í Ó€ßÓïÔÛJÃZ@0÷ýw™P&+PG1qO+‚‘AStÅMéí3‹%"¤R‚š¶b±dÌ ñ]ôÀÆÝ¹â8 ¨ìujT Ž7n=bÒ -UãÖ³`2oÖÓŽW œ )"¹«m¥5àùð’3ödFŽmÅ®æOzº«M±âNéAÊPÌ÷Љ}-'«}¢ž€‘—öÏÿó·¿³BFüø>y‹f{ÿþoþ¬üó7ìïþ¬·ßÿõßÓŸí½ -*h©v§ò1 ;ž ”ôë ÃY_!¾Ïéx‚úóÒÿÿKNøù]0ÆÇË?>ÿãAŸ_ÐûGþÓ(>>÷¹_þûOÕ%W>ÄWŽøÄ‚O=*¾çÔKàõ´G®‹ZªnDì9¥Œ_å}EÛ°Þºu}ùR~Z¾Sg[Ð÷Ö²‰8çOï|’¸á½s‹‘1T/²¯i—¼uSþlÞßÏwøõ|ÏZqeÚ%êÔ@#E\ÕÃ+Ú†•V>±òë_£BT9~aK†²"$¦¾ý®Cl‚‰~2”¥!–±¼õÝìðß’¨>›ùê„#Z°º•„  -bEb—pÊH¸Ä0ñÓÆ¶_ ÷‘¡…3^PÂQË>ÄŒUJdlKÕ÷ˆŠø“ú½ë -ÂQÌ­èV OӬ㖘ÏÄÜ#ž{Êmw{î¶xœœ˜0Åz‹ÇI ×§ëÄTU¨›[µ~#¾7ã«5œ¡jhlo‹Ý ,@w*>{ÝG•@ÒN--% d=ùŽfÜÓb¨"Qoÿ°”+óml+$j–ßÈ×ç[4ºV³‡ªPSH» ~I ¸†WÆŠÄÛ͘“ùO%¬i³ˆ[¦†˜NÄÔǡ̀٢*¼ØÖqAð*ÜóàÑévg;FÎVÝÑDwʸœA¬>MÜðæ†7Ÿxó[¯BlXØÍ ;§‡‰ç–Ê­RÙ<ã¨Dn¶¢ÿª÷4JAb¬ØÓ8ùÇ´Ibì•o¤rÖ®|GŒ—òkh¨úÕ¸E`”¼UÞË~Õ!SÈ+Η¡¢ר/µÄt&¦·Kö;!±$ÿðxÈ#ªÏkÿ„[g¾Š;- -ÚFÄŒì½]ƒ»ó›¸klªöôÒMl Z£¨ûºg¯­·GÀím#ðVÄï”ñýËF]åT­%ÅŒ2f%P¼|…þ§ã£{|°öDˆÝ)jÇÀW‡ÇkÄüˆ˜ß^yxÍ7^aJtxÞ ö㟪5byD,oªiÇÌ®ã‚a€L¨ã^€­_žÑãKqÄÅÓQM\~uþjj™Ñ *ÕD^,h^)ê]jþõ~"Fîòö÷o¿·÷ÿcy˜˜êíñïþ^|ûîoûÃßëíÇŸÿü²v¹ÑòõùeëkE†·¯;†Ë§á¢Ÿ¿Þ¹X~C`¼ñ´¼½Lèòæ·¿—O)?u÷Ð÷§ß~£_øö§üBÅýg§ˆûÛ_Ä8t3P¦Øæ/àZÝ^YŸ#ž3¤¼¨k)b?ps’¯VÅHK"0»YRĽ/¨bNÄ î9•°õvÈ-¹¹mCk!à'C¶»ó€ë‘(Vn¼“ã=n|1ƒ‰GG¾X¬ Š¢äQ×ix¿#]ØM­ìàwšÉ»˜ZQ‚㨧mêw¿±~ „ëå17ðâ:–F™.Ž¡W‹ºÏpG;©ˆt·ô÷Ê©º¥ŠoÖ,Ž7’ /÷ù2 ŸôïiŒhxF~Ù|ƒÖ°¼½¹ghª7ôDNÔv´î¸FËhVýÖåå‰z„/£V.G…8SÊujdyD!¥Bµ.9r™M¡kÙj¤œ^Úå†6®A$SBS@Muhž/¨ì#Ñ«n b‚µ)Å+%×(‹'“îb H±v'ì“¡ôš¨O.ff=pSvkÀ½_ƒø¤*<Œ]{‰".ßô,ݯoþ¾ÃÝÛƒRÐÌfä6¡©¡ˆ¦6— P$¸´Qõl¬ýÔååiÌ,aH³ÞýöŠÛóboXü×^0/þˈý™ÎŒ)=‚=10òá£x/FËÚ ‰m'ò©ÔX5‹Š¸·—犨îha?»ÄƒÏj¸BXÙ‡ëaÖX½Þ)­K´lÔÃñ–Öhé-m¡é¾ÙÚo¹ټï4¹ñXwÈåg¬·KĹ¡qnVXwÜ<‚(nŽŒ£r¸Ü‚ý9´o3 c¶5…&‰6)þj,—ëv`ñ¥¥QPî…îˆV¥1¼´}ˆc##(\¢²3¡7,×ÖLÍ!VõÉÙ·æÐÞ¬¸Ôò8Y‡F-¥y¾üLFJÒ¸À”NÛ(÷mß:ÅïêsìdøÎÕsŽ -rtdS:­pzãŒˆÓøXïÀT£ê8eQÐ…øpUN(†FÀ(Ûõq'â=¦&+Äò€XöpÜÍ^~pU‘ІŠjÄñˆR6p´-W×µlMÌ *¤ ^sm'+„5à^z¦ÒS½ý–íR9‘?¤s4CP¡ 5¦Ì¹.€ÈŽgäXзõD]B¨B¡PÓ¥†£-M_Éï¾æ#f÷ Ûʹ½x/ç·CqkË£_Võäè‘"޶´gh²ûEãI¶3ܛѶ¦éÀì@«ÛY¢Ä( -bèwÊv©Ü8QWòæÓ4RŪa+~u!Ú}"_³L‡XPÀ—h˃˜•¡:ѯt¶}]-t6ïjþœmÄ;ÛðÄgWhj™FhBQ PoQÜ}à¥5^zÄK_‡ÇXAT¨JÁܘ’_%Ÿår+Èqóç”TW× P$IŸˆOù±whX¶ÏÃq30´Dµ˜UÝ+,S¥èØúåˆÇq,…@©~|ÿ¤G*ÅŠÍ«c+¸•w{ñn*bÚ°“ÿ«ÔÅ‹›ÇÛ -­7ærû¯ÿþí÷Ųý3ÝgÜ‹ôòøw³?¾}÷÷ýáoööãÏ~bhýþÝae}`B>¾;s—rYúŸ?ñ~s£bù ñFÓò_¨Ë›ßþ^>¦øñþ¨?ÝÞŸ~ÿùý>~áÛ{Ë/ßÜýggûÛ_èýºk_˜© Õ_u}8éGæM@#Ä«[Ù}Ý—·-ï.LFâùüˆµ¹ŽnM b?¾ª\7Ÿê.+uïD|¿ ç)åÃ$‰8VyŸ‘/³Šs£AJm…¯¦x\u‘ ¡¹ýoÇc¬‚@ÒžÖ~¹ŽG"fè¥ô<^‘ÎÜXq1·LíMÙ£tï3´GÙlˆ¸mšÚD{Ìü™™¢ŽÛc̤ß½i Šq±æ¸­·ÄmÇ ƒcy§Lªbu)\­Tl¡~bݽ‘.¯jÝ `ªPN×"²6NtR*pŠÚÃÚÀz&óeUhÝ‚1l}Å)JKeÀ ‘ÍÐzU®›ïÅ3ŠWŸc'Åw®¢æÞ$(¤ HÄñ^Zã¥G¼´aÁ#%Ü%Ðð(E å—tî‘MLÆï¢ßÁŽ[Ù0¯ñò#^~{¥ ·MD]Ö/ƒyâ£x¿Ð/¦©¬„3ù/«ýË~Ù$7’ÜPxïSð#‘ø]ûs/íðfîá,qF“eªªP£ÐÓ‹VKj’ýññáá¨L>Ô«ÑŠZŒGb¥@CŠí–vZžÑ„K+\zlæYÃioµð7 1,lUä­W€Ùûxv¥JÉA€žYø´•|jBT«•µÎ"A¦*•’Cu6ü;½•ò©U6q##.¯錰X|\Hãeò°yRzZøáÉó—Äs®éD¬+bˆÓ]ç}<[’¬˜4–™XÖÄòNÙšEVÓîèŠf€¥ò¸àTêå@)qj¨Ã6©3m¬2´Å¤YÞñ:b‘Z›¹^—pàZ®Ž:7Gú–H4WàRÞ”ñJœ´ÊçNüe^”Ÿ?LÄ<_¿ßTªlci Â~ê{ÝFŽñH,4q -Úy›Xgb]ëñ´C¦dýYÍã{*»Šl|©£±4â:û›'ú¶ðÃýÁ_Ï[N'b]ëDœí¹%Õ¸ÎEdâvùÅyfªÙ’Á…RMÚøW-åajÐðãúäñßužˆ›Æ¨{ÿí/èôü= ÛÇï/ö÷ü:^÷·ñbßþùŸUÆ#D£gþwZ©1úìSÀåMòøúùC´§ËOcÆÚ‡PËx[D|þ½¼Moí÷ß.O{>úãÛß_æ÷ïùã…å„x~KL>þµ’EÀë-ÍÅ%+,2²þ åñÎÂ2ίN¡ñý†…ƒA¤%Ÿw0ž7,":%Uøj}ÝÆÔaêá:ÂûÒó­ñ8Üd3&ns×P÷~±Ä/O¼¼âå?y¿è„Jä«»KÃö êWk{êÒ5Eàóx– XVÀ²Kâ1oÈYßPbAæ=ÝËŸ&Þ}è^ˆ>EzµÆ/M¼´â¥ÇVD°KšFðQJ_õÑ®-êd„4…n-[NÜn}·'n×’û‘b¸\Q3Çl«´›5† ‡A`lG·ik:ÓÒÅ|C}ëM]è¸6ÚÅžòng?3õuNPÃJSWУÄ[ÚØ>ƒ‚g`^ó㘭ÊåíT‰ÇÕÑ.?Eò¦F@´JËÙ ¼Çå1qXaüq²©´äò˜ˆe&–5±l¯—Çâ/–‡ò(@ñ-‹¼"„‹"v†±ò*¹ÂxF¡ÉSoVÉÇ6\ÑúÏ2©+˜¬R *xâÕkB!Ûq|¢i#ØÜ+YØ:¸$~¸c 2 ö¬gþÁK3/­yiøjyc´â¸|Þ&^šxiÅK-ûJo0ZñÕyvmÁ¦Vo'—ò/A³,Ín©oµøå@é›X¸…&ö—Ät˜8 5TpE¾Ú31Oļ"æĬˆ¸²ñ¶ ^jð¬‹Z?Ãíòp+x8r¥ƒc4 -ÎZÛãfýÝGÿ!Í®[ê n‰¾×LÝ÷ˆT<õð§'x&æ51Ï_î - ˆžv ›2t®´Ÿ¤ÇÕhâýÖá -ÔÛÅsÝ&öt̼M6 5Ý$Ö™X×ÄzŒxÂ_ôg=3[wllÖ[ø~¹&HгR|ÔÄ·+ÒÒ@C`²J½Ç †{ßz†î#þqB­X·´(ZÉÃf`úÖjù݃΀³@»¡ÄÒx\~påMõE@´B½r9"%>¼ä®?6ªµö.·ðɦ··Û÷/Ðn~y›8“˜ a%S(Cç^)ÛT`È\É1ö‡YngÏûnOÅÌK± Aøå>žxiâ¥/=6÷stˆèYÅ<ÊúÓ¿ÿç†ñ¶Ì §è{âAçŠ-™¶[ö÷‘ÚÅ2b?Lì›ï#þ±)¨´¤üLÄ2ËšX¶ˆ'¯ì$~úñµÆŒ˜æÄçÜéL¬kb}lTâS‰Å†sâº"FVØWœ¶çvÍÝ´­]ÞÕŽª›ú×€½|ôªÔ…¥é8²]7eÄnâíö³¯YæxË3âÄ> -ÔÛÅÄëÞ£qžÃÒôžÔµó -Ð,±NÀºÖ=;þBËY:öü¤£Ãį—³&ö§²9±hbA‚`I5þtÏļ&æÇ¡8þn-vpwª£1ƒHKjÅÓMäD㣠-¿¢Xib¥+ýÉúÅÄ9r!7ŽJì=͈sޤ¿zª9Ht×D|–‡­6µ:]¢ÞÙ±t Q+Ô×W h¡d«w( *¸â[‰÷£ù¾ Ub;‹w÷µmó´ÃŒØÞwßj˜§ÞÑ;gÄG“bcsìrpFªª"u2BA‰¶š%ͼ´æ¥ mOmî½iš‡½ð†ëHFó¡J]Âx€R©='0NŽBSWX0‰;‡‚åÇ9[î\`í’$Ås;‘xÚÀ+ây×ÉDü_ö«&Éq›‡îsо@@`#̲L*›¹Õµ§{¨¯“*K]äTÓc»eùùõãûábnÿ:;‰solÑN:+â.¿¯vKu›XèЉA©z{¿Ò‰3d”…œØ×†ïФ]ÄÒ"–=bùÊS·ÇT (6ñø¢ç¬Øº€Ç¬8l@¤}+ž†âŬأ.±¬dÅH, !¶ •ÉÖ˜¢œ\¿Y´3Ö5N YK¨ˆO†‡ƒã~ŽWCL!×(9æ’D¹xž>¬äí²D]bBUŠß)§î?Ž/áØ[¼d鯤y¯§Š* œWR…9ǘ[S€íø -× * ³¡=‹5ŠºäåÒâªv ·ÍtƒFÜ -A¡²Pç$ ’ènÄ­&¨AL;ÄÔ U´ý6¬zÚÔ´‹xÌÔ"Ä› gOŽuTA–—z·Ž¼ØàÅ^|ëúDfÀ~9¸9FRN¸²ƒ+#ôŠ‚æ¤Ü”¹ì)‡%ßlû\±‰';ÉE¡y`æTÀÿ…ÝçÄcV#Π(A¿œÏ&œßZîF{aÔQ%Š·#¾28¼²¡…Á§ßê–+™† u!cÛdL¹,Õ*hlÒ"–=bé!ÞÇ݈µ=›¡+56+u¥þS€ -E‚øÀË-^Þãå†ÜµCâªgíKwØînj+vKļé¡PÖ±×΢ÛGÿóÛïþ}˜èñ:ùd}ý›ßì?¿ù}¿ûÍÞ¾ÿõïîï§@¤Ì§âÔ²ÁlXÚ…üççË2¶gþÖüNÔö/iyûäÇÿÛ×ôšùñª¿-ÿ¸üñøÇ>žÐû½·7´\<;×Tßþþ?«/¼¹ó·1?ý¹VHôÞ¹ëiÀzO·%PE=,·/HJ½;‘/\!¡tsc“X°( !¡†¹Ì;Àüö jxÛœ)•Hw$ó«3.Cá¼JowýæÛCãJKK`◮✠¸)7g,#p ›%žføèÀeÓÓ k8ƒ)>Ëoç° ¹o$DÐ͸³FÖ•ÁØA‹a±ÍI&Pìîd»ÊwWÛ›œpJàëÙ‚†Dñ+l¡Tsíaǰ…‹{¸øÖq† ÁV„L¶3xÉ©’ïŽà+“WÈãŽ3å¨p7+%G•aÆŽc.áz<Û¦Kb󤵻€¤…+{¸ÒËŠ++/©‚T«=ÀÃr蕲—²BÄÙ])+Ä<+¤›Äó, DÞ$¥Ëðp×éq‡'ú•âvÆ]À1ìÕ7YP}§«–xýnû’J‰†ÅEv¶cx,Ýb‡JwÇñu’àŒPjØî`øõ5„A{˜p¼Q5P Öæ”…RÙÑ‘›OÁ¤X×9qd -l|\ÑE JxD/zZÍH7Ñ” {M+Q$ÿ—r(Â*ø4Â/4µW‘ ¡v‹Ï4æLÀ5`ø:Àí’“D¸å4ç¾ Osè8g@Ñ®K¼4.eØкEm¢æ#À¬ ³"HÖã`ž°(¨ÇRÝÒp!À› 'ŒæÆYAt bL¡AHuJ’­£ßÅš;'oî¹Ül \làâ.þ„‚õ¸¸Y —–àÕv'gõÖž5Ìæ –@£|øÒÒ¾ZpPUÀœhI0f¨…?¾ç9—ÐCÀmÒIXv€e é8p-w÷à £ÙƒÃ”Iœ…{ö¬?ñ_ ÏÚ|Ò]ÏÍ|Âe±uÌD éJ€½ó”ŠÝÞ> `Nþ[^gÈ©AÕtÜ)?áb ÷pñí¹—]ª^,ÙÖ)ÀâåÁ9Ìx5õZ)7÷õ}``w€ñð“À¨ÅùÍÃóÙi üaÂHvrA*wˆËŽÜÙê—A)G…gÂW+d/ëèW¨Ük×,À¬ uv­PºŠ˜Æ ¶ÌHZ#ÀŸgNZÀ²,o3wíÈ@HžQ«®…3nÆ–F!“-D°Põ‹–1 W„¥ EL Ø’3Œ 5 -~Ñ:Vò’K,V%8«wµ”µ³pÁâi°QuçTœ]:{ÇΠ.íàÒO¸¡vÜÒŽ¥0¥vÕ j -fç\láâ.ö¤p¥3,ÇîjV¶\g76îºÃ`0<ä¿Ns@TîIb¸¡KBOKBCIC¹—á.6pqò‚%ȱ;›ÿÖdõff/ŒPSTtfÌ -¥JtØæÌÉ@2E §§N·ÇMÀ², ม¡Ö…$!ævÖ=sÃö{„÷ÊDÞò¢V åeyqe…XÉ‚ÍÏ›)Þ,ßÓ{(>oæW–|ÜÙ§\+ä¤QžÐ –cx¹çl$ºŒ“e0¥`dœÄ»g¹Â+T ÷æ'³ƒóm„Ùí>aV0å…êÃzQ@ÊÍm/‰‘÷L jצ‘'ÿm41>ÝaøÈÝ^y4‰D…r>÷åÄPÙnÄIýÆœ¡>ŽŠ§Ìtì—µ‡³všƒRޤ0ßaã¬@%î{EsØIa l,•Ôœ³m¹¨XIë ¡Õ¦&£_™~Ø™Ó âÌ@i‹‹~û]²W8|¼Nˆôþú7¿Ù~óû~÷›½}ÿëß]ÌnAĬ¸#ƒ?Ȱí#üƒäç“íç;Ûƒ ¾+¼!ƒfÙîýþÿö-=;>^ËùqõãáÇ}>žmñxCKÅã±Säùó÷NzžIþ—d¬þ-æ×žn5ïF|mm-¾¿Äx±Å‹{¼øÖ1£íXM [k-€y˦Uø%õb…x»†/D\ÍïäGxÄÊ FÚE<ٜ͘-% -TÑôíÁsôíK9¨UûÏ£ -S¿SŠœí¢™ÐL³aUhÈ1‚­Ä°&ýÔwŠiÎ'ƒTJ˜Ïxñíšð­KåGリqбçGuo³ò•ˆ¹AÌ;Ä<€Øû($A¾×)®=yø?öË&9–ÜÂ{ŸB0Lø]ûs/íðfîa–4UM4š¬è*ñäÕ“ÔÝ¥^"óC¿ Ãh[0*¤BccÐ2Q±Ù˜;¹%š±c¿w1ˆã%£BœIò̘Q §qäã“ØvLôWEôæa‘ÛÞºÓ[zëׄÌ^Î’¨êÈK Ø !˜SžˆH¸tjPœ3UÖ^uÛŠ‹Ç¥£Ý^uûh›+ç8ÜÐ0“+Üú“JˆÅ×pü•áÆX@Ø£¯† 뮂&ºë¸0è&t¤xzçî÷[ g¼`Ûƒ8Y"Å"€]mž$æ‚à*w·ÝNïKïÜë.O732”!æjµáŽŒ÷£ÏÕ† Ç;W1ú0xå è–Œˆ^tµÈøè¸ÐÂs®ˆgœ­8+XÃñŒ§qâv„OXb6>ì&³m1e§XŠe&ݬ‚§š0µVó‚ˆi -­b¢o×4j¼ÝŒ§³íöà ¬”`Æ—v;½S ý ¥„‚ i¦~V`®5ÓÖ5¨>†¶EnŽ1ýœ•z³”bº\°3¼@i:VüRï.‘iº´P±ªD-w¹#^=@³±p>îáÒßIuÆÉŽ«}µáT-¥1vòLÉ ãk´p—©=ŒwnáBC¨AqNÙ°´vWЄ/tŸ?™±“†3¾„_+B ‹cA³÷Íóq9¯£8 “Rë”i¼µ¿óûK÷úõYJtÌ­l­™ùí1ñ“ž´¹fŠbé3ö¨î–ô1j¿Ck¦‚6‚"ȯè -. -T(H·oQ®’hÆd=±ŒÓmæ)Þíã¤âÿE@S¸ož["ÅÚ bÉÄn6«K&ÅVš&¬Ÿ+FE·*š)ÜòMb`b™|l# _6;̃4º»@vzëNo=è­_zC; aÍäñ‰ù®“Ž Bãd[Â\ È<ùO­´×JG­´Ó:œíÌ¡ô,ƒ -•T=×úÙqÿ1zÝÆuµ eâe¯XŽŠåÜŒgüÌÖ3Ø¥—þN’¨™?õÖ½ÞzÔ[ßžnÝQ­ìÔÊA­L¨Í—ÁŒ -¨÷oÝ>…g’íýa3k½½5®læN>Å1tÅéî(c¿Êà EünV»4'*0Ú8‹—òñÿ ón¦p oÑŒÏNx船ùÆŽ °æ”È©n:.ÔZ˜§ýp³€WgÄKwmFPoNEñ\ñÛóGñ° -ôì1éàG¼ºq#Ÿf÷á|g¨òñTÈÄí¤Ö Â2QpºÛˆ»ÐqH,#˜ ƒnBó€š#ˆÐÝ3Þé} „3Acƒ¦<4ÃtÇ=Î`;Ýqf0Bc ̰"õ÷Oké9ÅöPq=­8$ŸT—çÖrÅ9QËqh¨Q_?é*Ê5[R†hÿ.èÝ-Šc˜ §™ýv|Èvctµ%föõæÛg ä-R|ÖÁÃn›Sw[¾6¦Žhæ÷2ÚÏuD²~Ã.’}Ìf²×+G½ò6hŒc¢ÍÐÙ“Dìj3uœƒ9â²Æ˜»ˆÂùºõ'•HíEqé §h˜ˆØ© -%Ú’W§XóˆƒWœ±VQΣ˜ ƒnBG›7­øþ{£ôfVÉ4c$ \qÙæíôÎð{ÈjÖ€k YmÍùŠÙx¾“ü3“l¯YÃünÆÓ<<& :7Âã~‰0÷zgøò½›ùí‰v:!â{Îcx.ÈÆàqœjël\ºž#Ážjc\[gÄŽ×hïø¢˜ 1h5<éV4D?B«´±â—bøèˆ™ ?q„lO²<#f(¦a®­Èï -¥xËÔhÂÅ˘"_=sh¨Qw¼øÛ-ì jäàåjÃû¾9†™öçpi¯–Žjéí; œ1º5–›oº’ËÇÂ.À·ÜU|á…”¯åºbæz÷Öýàœ(Pš†ÇÆŸ9<½urÝNo…¥¬à¤7÷ܥɦ… -gJ¶l® g ©Aß“lsY愈۸¡—qņÃ&%ÂáûÎD(ôñZYÌhÐô#&¤ug|‰E£þŸýöŸ¿ýýý]ï?'nõýç¿õgý㟿õÇþÞŸõöû¿þû—R{¶‚¶žEûApiƒð²¹…Š|}ãÅ>±}‹ÐgùÇ e{øû¿ÛßÈ}:üôýcïïþøòó9Ÿßm¿âãûQ||ÝDúöï¿\6äï @µÙíÿSÆ=÷«±àÍj¯D–YDïQ”Fqº[íÞíá o Õ\8ÉÖåʈ-Õë§Õ>¬ëf«PÓp¶´WKGµ4šíUfŠÿr;¦±Ö«ÚK+߸m¯¡ -¶°1Îj½Ui?e´´á¦M{÷¡ÚKs·¢Þ½ì”9¹kq6ô׬…›¶Þ|É -k*ÚéÄì*‰»€–Ûi碌 g(Î#v7éá`ãó;lŸÍ%4Ä‚K'.uŒËXx‹aaŒê­{½õ¨·¾=¯¸RO« k®"X»{¼gå†î­]$ú÷Ðï”òA)•jë96q­Ã‘iÈ,_$wÅÅ£V;ë…;7Ì´So7Úk y˜íÔž=¡2¦‰ûg™MÛf,Å¢[Ñ¿FÐÜÅ+º‚K'_Š2b§x²†gËN±ËÌŒEû=d™X ´…m¼¢bsPRÌä -„n–gÆ\´gÅù,A”¹ÔnT‰ž º¤€uÎÓäÔ?]CGœ¦µòˆ×ÐíäŒß?(Fh+¾Ê{ÓN1ÓnÆñ—†‡¡´]EKÒ¥R»#®tCg ZùÅs©_Iý=µfb5¨h-Q§»9H Ìë˜.×Q¬ª”ŠàJáDÄXûÍÑF]7«÷îöLÌwEwðÖè¦[²ïÒy8ßÝÁ¥+F ¶î2ŸõÄfõ2O§ÄÛã2&N—¤È5¯qQðV"G|꥽^:ꥷïk ÃþjÍÄ=Ñ´tóä¹ëœú§k¨¸žVüØvZ±… qÚÀíG‚K…BzûÒ]>ŽÐ8¶ðzŠ»…à½îõÖ£Þú<†¯õpWkšÓÈšŽ3m™˜à* ÅÄr\©"¬eêe£Î=|û5w¥…û«Ö¢ˆXÐÃdJÌxçáÉX›áwÙ)–ƒbù%gÌ…A}<âIÁ3#~Õ -R,UT(mÁ‰´æJP›'RÌ¥Q ˆbŨب˜mŒ@²,GÁò6°ñµw]òfÛE‹wví"µl  3Å„´~' »cZñÃî¸j¾V¡ -Þí†Kc¸AkxûQw¥#jzø¬Þ¦8,Œ -X0 w7˜H¸m *v©>rÃdÁÝϕԟ„Ñ|SK꽌uÜÆK¹¡8íBp§b:(¦Å ó7ߌódÛõ4®à¢à­Œ’mÒ’íRjïŽb™88a+¨˜Ü½u{Z›;>C^s-·ÓûNoÝé­½õKo¤VþÇ~¹$×’Û@tîUh†Iø½„^‚‡vxÒû0®ô¤fE\ˆ,_RA¶=zúU)…—È<ðˈÞeT僫']î7î¼S#P©?vj¼ŽÁÙÖÏwf ãÕÇÑ]½ßô[2 -R­aàÁÆaà1ÿÆó% .¹5‚_5iÄ“KøµK®J‚jrToH•¾)SmÄÜ(æ‹bRœýMÚ1µ‚é*˜z#žk -¯ Ï¢ Má%Ìш7"K*j´m7ãì™Î©6°êOcÿÂ6îsÅz[±†›–€INâvŸqBŽVm;B+PJ^Í;S ¹¸#òÒùÞæ³ox½@ÎðzÓmƒó º­Ñ;Äg¡wŒ8hâ5÷Ðkó­ÊTlÕŠóFÜnÆqùPÍÀ’Eó½Ûp+gkì?‚úmxxZÆsGKÀè tDµw¹q«)ï–»æßÕfÙ†ö[séYø^Ÿ—¼Ù½‚'¹A’”€Õ§±ÎEñÐåö'ŠˆóêXr-aË­@Ê!þÙÏ90ª"ˆ…çæŽŽð#£bîEð¨ÞND䄜e}Ïóîy¡·¤Õ‰ÖèÅF/^ôâ[·”Y@1ª¸-·M -Hâþ|G¢õ'ÕYâ¤W÷°>•„ÊQ­áŠSOÝr"úÚäˆã8­šøÖQßÃÃÇg?ÙFÇÉF)ååí1ÉÔ’ç0óm<>ö yšÿó²re_Ëö¦{,´ççŠ -´ÝP`róq¡`Æo÷8{u'Q¢Ç”“æ[‘ûžv×¾E¸ Äž^ Ít»’RLÙîÝÍv¨QLÅô6PøV¼FÃDÛlÛiV%IäÝÛ×Sfͦ·óW#ÅU€ ù°#RV¨DAcì–üÕD#æmÜÄŒ odâ(Ñ6tÄãîÂbáÖí¨Øg¬ïgÌAŠëQ®8Œ#!Y>(‡+{3œÛ¦ŒÀ¤Ø-çÚ*®WÅõ­SÎsqB@5V¼ßŒOŒ‰ dY»®VüÙì¦â4xŽÄ^w,‹7ïªx$Ú¾Q,Žl)ŸTwæ>Ö\#lÓÛØ¦O·õQÅõ¢¸6ŠãQ°ŠâÝ%J>_ãâçlÝìÓÎBÅó@¾U<æˆØÃçåÄiíQÍ!HC -ÚlëªùÓˆÑ|ïN·›h/¢æ­ñY÷¥—[½|ÕËÝŒ¸«7ô®³šÔ`¶kò½tÑKC‰&þ“)$Ÿ ·íÀ#©B–r’b÷q©6ó—bjÓU1õÏåá -˜1¤ËYŸι×m4ã£zî0ö§‹ôY¸¶zëUo}ûAÿRÊ@–Ãæ˜³qSý{\;Svz·ÕÅÑÈA÷~8AÕFðŽ5WAr;⬦„Àµ,>>¯ç7Šù¢˜Å1ÀÈOB5ó–¸8V̸6ŠëEq™±2h)Åða[‡8K,§µÆÞp¶–ò!˜VÕÀŒƒm[ãݱm‹3ØO9U9„!„xjä† ó÷Dp÷È%÷Ý6N2$¬}ª¤V/]õÒ[ÇsÏ …šòI¬~fP9hëªxŸukøŒES´u;*„$²œÞç&[­K4í<˜ÅëÛ¹ªÏØòI÷†P•òÄW çñ³ɦ·óXCÂd(Ù‚ª=FäÕí1ËæW¢ŒÀ»Z»ù06Û02ƒ -ÕüiÄHñfã}”2g=(ýHR -ãmÆI×Ηµ|QËCó-À2€iÃ…ÜÇ´±BŽý«`Dy¡­CHÎV@Uñï>f[1.ã¯ér«˜¯Šù­—fwõ†óõè-%H²=½{TöŠoÚQþõì¥åh6Ë¿†…ì°–±I:É ’(…ÇæŽù`P5nc½­X»1Ôp1þ¦éœc“ÝEû‡Ð0­/÷0+”!¶ô°`‰b¿œ ìŠÃ{s; g« %œïnÐsÎyq\½Q’‡wWGäM£T‘ûe±‡Úœn8}!‰¬žíÌ"öc³$ra:4;8¨øcÏÿ$À®ÞÈýo¤ØŸÎ¹?ã}\¡¢ËsbæŒ%Aµ“²â¬£È²d;Cm5„œˆÎPKÉO ‰Øw £ 1e¼mæT)²<ƒoSpHì”Ýh‘?õb«¯z±Ñ»<Í<yý|'¦b´qŸzk«·^õÖïç;µßÈ ¢¼åUTüÎàº¼ßæm\UŸ±¤ðŽûòÄ0õˆ*©8£U Zc#¸QÌÅ<âɰö9mŸ[ÃJŽégŌDzø»­+Âåí²{lsÏÀ´¬†÷™Š™Ï:@µ€[Å;"ÅaåáóÍü³Q®!ph»á˜è+¡‰ï;±iláýø‡°<~KÀñ³f<•Ø<Š+qXû%' -.½Ëîÿ1ñ߯Ø@7ïêÀ–4Ÿ3cJŽñÉVÓD£½xÑ‹_zãˆ@H"}oU¬â)$ÁˆøwKR;ð¨; %ªúÖYÎÐ=·î¸‹C<'Ðú¸¶ÏŒâs¢Õ¸6­9ŽË aP8’¶qewZ4ãݺN=‡%I4_¼íˆgŠ›tv„†§PÑúйUÌWÅÜSŒw'ªuδƚžËàHñƒ…©HHï_ó¾7~ÂÃf?Ëkc,÷œ€J ZcÇf¦ä>.À/¨¹W–Žr,ÑÒÝ6p·âFÌð]ÅÇ ·_Å–çE„¹‡#º1<ìŠõ1ì‘´ïã}àÒŠ„ì¾aÓ1âÏÚøÕÞ𫆴¶Ù}¤®–ÓA×F6-ý‹nÅ”4Qàˆy¾ !W.órÏœ1 -X -zËd3.¹¿yÊûåñ"¶‘gq®«‘xjV0 ¥XÝgm^2¨!hîˆm”2$.}êÅV/^õb£w¹‡ ÏqD?–è?ì—Ar#¹D÷} -]`0 €ÀzŽÐG˜åțïñYRÛfE.V¨¨ {þ¶$«ÊÏP23áKi˜@<öâk4|i‘·z5ѱ*¦Y=„êz—=œºÞ´u%–¢+iXÁ‡g]:9ã¸e -Ö–Yht“oxŸÙ”¶ùæíÓí×–t»ùýçöoÖ–ùöj}·?ÞýxøvŸ·gÛŸx\ÐÎâñ¸ÎˆËíŸÝgɵpç­¾¦:l,Óû';AqõCâIòÉ@Ëý¬|J{ÑŠ{ÑɬE[sH;Ûl«ý¤4Z Wæ’ 'Y‡x-EVHZƒ–Í«ÏY­†ëÖ®-ùÕ;NÜ4H‘…B™m{§Ž®Á—® ˆ9TŌĞ$/Dì -\0PEãéÑã}î×ßf=ã³þmÒCˆ@r ÐkúDót;›…ŠÈEäPÚëžXÏyqjˆÓŽ8ÝŽ½x«Ã¦QB_çª,¥žºž ‡ ¨&‡¤5Ì)}ØA¬Äc:Û³Y'€œŽOÝT3F-ǽ¸sóxÁŒk“/Á™›²Çöî¢j¢Zv3ÎXÐe´µph”1,#ñ\½¬ (£‰/ -:!ãp©;ihŸµýlµaÕ«vÍ–¡XNc«å|u'>Öï4ex#ΞC£[ÇÄ} GXß3A*ÑRwý©{R"À9+BZ^ÙóÊKç‹Ä:ºZ^•q%І®6¡G¨“/äj[*S º5NÜZþ ¤(…ò·;1>#¾ÒØêª´ž¦´w&FOi®UnÄn®rvòÄݯø„¸õ´¾®»Zt9vµ‰R#CJ¡GÌØ.—Ó±¤ºÏe?îjO&G:MoH’KØ~®QEs»ul‘*,+/”Îì 2…y÷1ãn¯xÅ^')μùf,Ä ÂA‚\5ãkSš ¸ŽžqÃÛ³‡†y·\B %2zïØ+¢gÂ_(¢8X]—Ö9u›³YŽѳÑ1úÀÕñæºwÖ‰n × iˆeG,=ã5³Ñ¾68jb ëÄâ'WM@&/%~vÆê×BáÌ…rÎïÄ-Kõ·U¶1q÷\‘gS@£È‹§TEõŸ9íx9s[/òV…`G<^îºE1|¹sÔzÛûŒSKœöÄéÜŒŸ_Gs8ã½m[G³­“x[•Ï%^£ãnâá:VS<žñ<ªð Vˆ¾fÄMÕè……2POÇUs"ä2Q4¼©áM;ÞôΕ¶k¦f(œËB‡Î¶wêRÄ…Jdl'ãy¸ ›‰§uæ+hÀd£=âÂS'$@¥Ã‡¹%æ=1ï}¸‡ø ®®n4\Î TƒU© çîïñ N|¼ŽjK¬{b='Šž°ûBŠ IÃ4£U'>Ëû{G!@*ÇúF \2(ñq•˜¨; –°`úIM4lÃf¼E]Î ÍX,ÑJ{h=y’㬛Ø2Ô¯á•íÂä öÐݦób…œ¹Æ%º×Ðc—†Wv¼Ò5]‡œÆgG:Mfsa ÌKùCÒ¼Ðb·e‡zÇš4ÏŒKÄôËOC NޔĦPÿ¿uŒÚ:œ ¸ŽÎ憶g ýʇUòq[›È# ’YÐÖ¦v3myuÏ«·Sͧ§·ÿ&‹'»—ùvÖ´ùöÙClh(áqž&Þ 8bP!š*ÜM<\µXz’¼ÎŒYî" ž²¼Ë½X¾´Jo϶?ñ¸ Åãq5—Û?;áÈ%mƒA0uú\x©ý ÓþƒLG»Ò<½ŽXísÚÆŠºÍós+jŠ6ĺ#Öó¬V”kà -æ;¡m«Fê1q§ÝGÄWÚQU…ÜOàתèTqO@õ©"®-uÇ ˆç¬†ÕéÍt!—ªE"ö5¨Bâw7Ö–X÷Äz{a¬²IMO©c­ÄfiUÖ“§¹ &nxSÛv¼éƒ7,Z[õ.az¼k¸;=ÆwŠºôŠDó=;ÝájpàD¾†XdL 6ö”<šïY?;˜mkè½õwÖ;Ïh oÅ2ˆ·ëÊ{K, ±ìˆ¥ƒXP §<\¾­$¸!æ17Ä¡(Ö[Š‚òBMx…å:ðŒ-m¹înVS.N¹+Þz3®û‰, k5á-îÄå8<¦q6V…ìa÷™P¬Õ'ØF+âÒ~¹Z@ %`JÐŒÄëÍ­QÆã4Ž·=Ôsó.&þûeInCѽO¡ L€¬çs/íðfîaTË­fFŠÌ©Ìr¢WÝR)KO¨ÿ?žÞJ⹄ÎgìÐ0ÙgÆM³x2ãNÇÔÓ‘˜>NéxnórwÃð -ÅŸ©Šw›&?ÚüF›ÇM@q§Ì U´’©‚{b>óÇÏTE«ñ´oÕCÇHIæ­8cA~Œ·7¡+U±[£¤4ÞÝè;Þw.&)•²¦yÝÖõ¼s"ošXt§‹ÉâUÚÈØØâÄ#º}ÄŠb»ô(šäm§o·x‚Jiéæ}©b:<îèíj›)D—OKÐzª`W¥ît~µ½6¯G£kO¬GbkÛL ÊkÛ†:æÅêNÄ­ŠìÔ„šCCëxâб™Þ^è/$öðІYæÍèg´gY3W+Õ[¶qg³ùé\O³¾èÄÁ˜æÜ‚]b?°öPÄFÉ›Bé¡´°T·\ÆxZÆã*1s(½¨.Ì8žñ[Ä—ZEœvŠ–žë©‚U"æl£˜4@²Ô*V´c¬e«CÉçÎŽ÷ˆ;Þ™£#Ý:Ch*yñ†G’Å«´S£Ø¦ ohÊPe"˜×!n â2޹Y=L”ŸâWå'ˆµ%ªø|î·Þ¿¾èˆéqÇ–ÎX;b=ëÔÆÑ£§¦öµsÚë‘X?Á|錛ÇoaÝH­ÆÓ¾“qÛÉ+¬B-%)?ÝæMÏlžtÄr –bo Lc/S×Hê8ïÖÙ:3`¢ôä¸JÃý„¹#æ1ÿ˜p~ˆA3»[—nÆ!ª;¢åÛ'p»³]¨ -(6ÑÛ¸'æ#1Ÿ#ž›ñ+SÓÛ7ïB{´ù"wŸvWyñfÉ!PÙý®™Ì¥hÒ×0ŠÜYbnÜq6ã ]­5@‘:±9¸$¦v™ŒÏ8ƒÕå§îT‡÷;ë<ޤZÓòC§ƒ™†3~·üÔfIJü=ªxséÔmT0Y+Xõñ¡´ñ~›×äþ´»pñ°sKì¸#ÖžXÄznÄ3핹pã»e|’÷U›Pmw÷÷KmÂÀµü²‰[m¢ÆÓþ«cÞÓ1 ´úÝgè•G‡!ÔñÒ-$a¬[ÙÄv­˜M¡6Þ)<,£¦Vü—z^:òRÇ{3­ F•ÀÛ5|OH‰wšøð5ó¥ÓóÍ]-^¥RNËœ ¯C¼EH!hZÛý]J3éÈÐfY¤Ò‘ÊT†¤ììšÞž§Yï7(†)ñ—¦yl¿oZ\ ãG·Ù6v‚R4ñ`Œälq·áŒ§Tü"4öª%¿‹î0³)Ü X8m+ö”xºe¼š¨‰ß]. -ŒÍ¤k€¡ÝÒͬ¦Ò]1+ £™É8×!öÊ”eÅb]’Mrâ’žVŽ´2¢E÷“óýöDÒwbëšÓFŠØ®¡Iq`ŸèÃoiØ pÃìz;«àC°–*Yóõs×E·W©æÊNª]up“üA¨€š%3^­ž=ÜL½$›Ö)bú+bîʽ!¹zæfga¨†ý¾H 5`¶Ìô^v!Ìôû£UjO¬Gbý´ÊK7®Ä;azÂ]²q§8?ߊ<:pšmëÍ7² JI7nE A3»»_I¬ Up§;c»VÉ TJ¼xŬc(6¡ŠÉ¾–ÍøJwc0¤qzLßÞ€¼†*jzÏ­HìÑÙ÷!ä˜qu¶E:±” -Ô$™ï=>ñ¾†…Ót™÷>1w×e>ÁMâÕÛ‰¯Lª-u¶‰­†§6± pÄ8Ù6W8â¸dJÏ+G^Í÷Òct?›pŽ§ÛØŠ'51cÅÚëX?æTQ=?ïܺíŒM -‘f›w–÷mÇ:Uá³Ùª‡$ö™-»‚bKêðeåç¬C¤´B8>7´§Õ#­~ ªðуgæûƒ[8šKznÜ‘oEÞªªiøC³¬G¬8ãɬ>&^gƯ¦UmE`&ˆåÃ}ˆÛ +¾Œø,ï A´h>7Ça¾SÑü"ê"îREœ.OÃãêâ3®÷ŸkÏ ‚R4ñ ·;«{:ßÓe-?7ÌÀ+Šå¯ô/*B(~²>ÚZt%î€Q@%Þãã?ÿøM ”ðóû¬à†ßÿ#Þ럿ÿoûg¼×ÇŸÿúïa…äóRŒ·¦Ã0¤ÔÏaļ‚‹þøÂ‹}ãñe8~üÿÇF?ÿ}ü•±ß¿ûí±o?ýùßïïóý«Ç¯ø| ÅçÿcÔÜ>þ}L zŠÉpüØô¹ð¸ÿ ùøAòHx§>]“X?í5í -÷—1h5JH }Ö -LmL¼Lw}„’×1Ím-ÒîÛ´«o/ÄGÍÞF¿J¨5SÂĂÏFÞÅ{ÛãÖç´÷”*íˆõ@¬“iQIïöàŽ—:^:ðÒÇ(1¤8˜ÓX¿ÚÓê‘VG´G˜á}á-@­fÝaÅÛOÃÄ µ%§;n']b温Ú'fupÇ,™W$öê÷·Ë^ÇsªHûp3ÖvR…K\K5™q·yÓ^1Þ¼9¯H‰EÁ´lÔÙ¤•Ä?Õtª•ç-èJU0´êñÙ ·îÝÎfPÓ¥û¸à@:‹šÆ\!UáËN¹7Mx£Ûí÷ÊEC°âw*áâxC—±-HÏ+G^ÙBWÞ&‰? âsëý¶h;Uá­ŽO¶ -J–Ñ.9_'ô]ŽÏxÍkB{Ïaô^¡Ü˜kv|vŠ˜vµgŠèjæ´«yêÃ5ÊN»šöÄz$ÖñUæÖâÙv÷Æ]™sæ fÙ|KeAç41n)ës—÷ˆ­ô»•6LäâPMÚÝÄ&Fc‡“ŒóÓçÃKG,b™˜ñ~ÄR´øXÇ‹x–q…Xhé¾F7zÚYÔî‹VªrßM7„VÒ|ðYÜt¼ -(ÕöQ.;Å;•4.¾Ä;]ןɷ;;&‰?O›¿IöMíö¥ëU¬±ˆµ#ÎÏNÓr{í¹²D6ÜHÚÀÑ>ÄRj5÷YÜ¡ æ`s W¨¤w·ã}§ñ=e&ßÎ"&¯ÎŸ‘Ë -´ëwÁ -Lš…òÉÉ>7?9×ÏOô¹‘”VÇ÷Ût ?Óí‘x.3bAWJù´3$â:bÖ^p\!–™1¢U±LXp« ¤;Õ´¸Ôl”oï8Ú¥óe(•6RÄ^õ œ&,búeÇjÉÚï³íH¥#•© IÙ+qr ua1ÇOÃâÚE PKu»à¢=¬·PÈëoe l-~¦¦^o¼l:^“Ä3×Å”I¼ fÀÊu£†Ö -ÓN6aZl«¼±‚ŠotÍqkñtæKêØ4µÄ¯s·>A´#Ö±Î$H3(­î¤Š¸?ÉvR…A³’%ÈÙšùŒö,ë RjÂÃJ<=ÛÛ+ñv HŠB¹;;Þ÷Ž$…&~÷¶u´ïŸlŠ×qWû¥†¿¦†Æ `Ù¨½W@¢ˆ¥>òív _•jà†u4©ñ´{š_7Ýxže†ežm<–z°CsψŸÊj–™Úw^êyéÈK¯ Ï¥ìPMÆøM ÷+Ç1ˆ¹#ΖNŠ@åœx=EHA°’.ÝbŠ`/ð?öË ÉrÜ¢{Ÿâ_À0  ¸öæ^Úáïa¨ÊÕC9„O*$ý Æ^Mwuýê7ÙÉÌ„4Å8ŽØOz|ßHl‘ÕîÏó±ïе¤ñT“žXöÄ2Ô¸ã½2…9!”,ãSîRÍÝšÈÀTÇSb:ÕŽôí|2éˆo/{X@¸›cZã1ñÜ”ð‰¤úÄ¿\1‡®8ë —¶Úwx±â¸Üš#7vÇûŠãR+sâš#îÔØŽÐTðñ½v#±4J=’®¡ñˆ9)hmq·'&7æÌž¸êcÕ2ÞËø˜3åñd›,èOL6ÌųñIKÛé²{3‰ r!·<œ5CJÙ±ð3#þb°54ÚqÖ®2ä46Ã:é -h±?~/í,ï@Ú)¸í¦Ð4´Ý®îÊ -(ôøîž‹^WãÆ€Tð“Ñ ±ìˆeÆ¿ˆZÆ»RzbÙËHã}übGŒ;b|Mį4°I† -û÷ç‚ÄU€Y½T[1+!g»bbF®õqïL7ÊíiO&Å;Ú £§~9áñž»óµÙ§[ýhÏ]œÀ6Ú9Õ@Ë’jµO×H{Íz.s ”ÁÛË3SDjfU0S¸Ä§/Žôl²eH)sœœà¤PÜ(^©4”AÈ‹‡¥¥–¡¦§;Ü©µó&}“D*¸@s§k¥@5! -v9Sýÿn¸ä††€¹šhsû÷@Âç]qçqmïpF ìLɘz`ÚÓ9àk¦à\€P¼ûí$ïñ£k'iß]BrrSbAÛ¤dñ¼$±I,IÇÄÓI|D¼7Å\»¦¨ ‰Ð98WÔ˜‹€°Ž/eb"`?ÇYÊ Ykÿ¼æZ¶?eçš»¸ãÅŽw¼ø;¢AÖ2ž7îž«3‚€Ju3øô8̇[38)”êH¼T<A£ôÑ qmS#¨¥yeq–÷ö´ºþé) s 0cd`÷,ꈧÛx¢]Ý홋we,¨1‰±•ñ†;§Z’WÊwäÄÙL{£m¨»““€Jz<Ôzç„+q¨…Æ¥€ ÿØÖÛ;Ô - ’7x–$®PE_Á½'¤#–±Lxx{u…ùéÒ¸)Ô8g Ä£™veß™h9AKîL;ëÞ¡®JN …¸ÆymœJ·1~Oχçó!Cõî¢ÛâálÁ¹ ‚ OˆeÖY(yã½·­ÝPü>^o¡1Håï#®¨Yãwâl÷ÝæˆüéÏBPY¾¿Lj_ýúúoö³þò×ßìÇþË~Öë_ûçN l_­}Áwbð-m¢$¿ÿ¦%ýcû­õY~ýç4ëöÿþ»ý_Ú¹ñóÕ¯}}÷÷/~ÎÏï¶¿âû½ß¿6‰¨¾þþ_ÓŠ2nÓµšŠ¼§ b;ÎMO?mZïÚ°"1àÖØQx½û‹ÄœŸ˜FÀë¤}­öðìàØwmí^á©íú¶ý[Ö‘ÀÒóÊžWÎ &ÕÔJ®ÄxsD³ã3 0çšqxe,ÃŒšÒà -w¸Üáò—Çuß›BaöÔ½v¦“]ØbV=+œEÜ |e‹uÅж—ªâÞäÍ µ9Ývwà‚)T7¬„‹SÂßsîÌNï&£ëépe‡+¯¹Šh…#ÝA - ’w…B¶;‹7Ó\ µ 'Ît2ùîj‰Ëûd˜|nÏAán -Ù¾ÓQ÷Çv){±Y{ó|9+°Y!y×ÚzV jÛ\K `+ -ÕöpQüOg¯ 0J KÔ ÔJ¬Sàmð”‡O‡{mU[gÉk·_•A=,ía©‡}ü -7'ã u>‹;TwÖ<µ+yڿ㘱ÛÂÐbvÐ@q–ì;ÕóïvèP¹Cå*¿FQFšl;¤@Û!ÚØÙN!Px™ìåÔ@ÉÝ¿ëµiƒ†xg¹éI…¿>1PX:`ÙËL»5Ê‘VXŽÓìÛùçnO l7')šÙnÎ,^H,h‰ªÃr<ï³D°$ÌaAµB $p°PÛ&š*CmxFà¹^öÁЪ²°š…KþäÕyí. -wfP%hqZŽ$—¸PRÏÁë…š{rÇKxE9ÐêÕò.ö¸¸ÇÅ÷ö,êeQ’Š9ã´§ -Êî~¢-æúØ·Dªé8–\hU ˜âX‚*Z½Õ@Î6pËO+Üáb‡‹;\|"mËÞRyÔmܳòž•_ì6FôÊ-Û :ûÞtsï͈pï-ÖœŒvq"BIyxq^,ŒûŽÚ:s>›ƒ$»4΂T¡¡|ÒÒËXf’¬5PåúÁmv1z£]šœ4»ëw=s6Kd·u€±BÕr<×—Î ”œG×¥Ä$ðÌ}qu>$h½^ïÑ‘2¥ãE¹$pÍ@­<Ã÷N´0©ÍÆ8þå¤P˜½ ^KÝP°¤ ùá…ÖÁNÍ?L*¨ëÃV¸5Æ²ÅØpMJÏ+{^ñv™4ï·a±«5ÎüÝš¸•HE\ÁæÎñ˜¼ï‚ëç"·*r¶1éXø`ê€iL3 -[F$ï úe îy̯SonÆoÞ\³PÃ<ôð2!Á©€Vt¶Ù.ö¸¸ÇÅwÐoSÏ͵‚Z·á!t[O9÷±¤ÙÅÖ"±Môì-ô_¦¥ž—ö¼ÔóÚöV^JnŠáiŸæTA·?ëˆÓ¯-¹ŽuaÚŽdŠsaƾ–¾BqV'´v q–vàÜk\€H#ݘVmˆÇs,7=ÝÃ: 2é€e,¯‰ «Ån¶@7ÐfÝRÕ>íÞÃnëtŸ~kúÇQ˜LáìuÛzëš­‡Vžî·Ó¡öf=ÛgTZE|ö¼ØO¾‡1CIìÇY}¶'…Âüð=Ôá^“‚P‡ãl™8Û›¶ê¨»˜¨Vh¢%ÌC£Ö@Õ{hdï°?)É&%ò¯4H©Ä9.^CöêY⎄8ë^WY»0"C¶}Iâ<6Î -še¸Ì¨¦=0½>¹Ì¤Z:´H…a -kûäX§˜vÀôš) …†Ž‡ïS¸–XvÀ2ÌÖp)ÐÁ™´Ôcàg<,º³¸®¸öÞ½’ÓÓ%§ÃÎWv¸2Õ¶z—cup±ÇÅ=.vÚ>É&„w½N^º€“lßçˆz׻˲vÙ¥©„ÛqâÞ6$O„ÿ¾¢]A`‚4rÃì+›èß`¿9ÿ›ýjIrㆡûœBB‚®s!ˤ²ñý«‚–³²0Ô‡aF†DWîàbwpñ6ªXœ*”‡y>EûéžÓfôÌ=sÓÃf¤®{²]o¾\Àg”Ø+ï÷ñi¥{wrsˆ–“ÛZ!Vlq3{wõ‚ã/öxq;¼WókE‹ïëñKU¬v‹ss+–,jmëÝÞÕexèBÖ:ÎuZ·Ú+‘k [5t‚®‹I“˜™ŽÒ–`™1µbAG>Å+Š"CIšãˆ‚³=Éu‰ï€¥,{À2ÜÁ}«]æ -RóÕ¹|Zs_sèŠa=ù†šKšÉ7kòü쨞 =³@p²’–š7ŒN@{x`¸åŒ åæ•ß•/'H°¥H•½™™'Ñla¿P¿œ-(ŠŽ«ä[!¼÷†ç}1.Tí_$5$*ž›†ø¼Iª™Q#à*W â$´œ24ªQŠŽ0°–@ÖËI@%]È'[(EÛAÕÔ Þ0Åñö^õ¥ZM¿¼ÌÅmþ›Ô9¸Ç/zpG¦#ˆ©ssÁ*´VöÛ¡Å-îÑâíŽ^éðʯLÐË™ìI䶇Ãmò»uí$¬‡%¬nCC¨Š¡$\ §|uC;Ë‚-0ˆÙ[pG±r‡”wHyˆt³ßÒ.Ïâ… Õ¾ëÛ‚ˆ›@â¤?NºïÌMR››‚žt¿›õhi–n3;•ßjÇv5»§ö_*ê5ö£aq©,ØÌ!âp»!Fæ««Îñ”ý¾PC´5P• åH)ÇÙ\¸Ll é˱ŒïWÑLáyµŠ¤ä]ÞŠ“ÀŠ-â -ÒdœuÓCc¬Š¹¡áª"\›àTA =ŽoÇÆçåÝG¤6×'Oçüžùp*@˜¯ö†ƒîë&rË Ób¡Í{ÉV\óZÏb¾°U6fu[å‚Ivu9ÇŒ -­R$Ž­g/1.ðá·R#–GdÌÅóàSÐföEbԌε=è%t-×å—;ļCÌünÝ7‹:ü榇ëã9Ä>ÇöJ¼¾GüwÛ:¶tµ›‰X*°•µ8ˆ¹hÍãÅùÞ":“ãÖÀ¼Âãø(Þ¡G¼ÛÜ 9”'Ð̶F<Ž9e fïêÎÐðQ¬.Òp˨fkíˆCÄÜ#æ=b!î42©ß‡Ÿ;šíŒV5túÌåýJ‡XvˆeJ¿–mbgHXöˆåGslZöšÏ‚:æ, ªÇ‹uµ€>Ñì5LnWûdxÚ'žqÜ­i «Ë±Õë÷Æ™í'[HÔ¸Ê8=ÞCÜáÅ/îðâmœÎñ|˜ éÕUí¨€]ùF œ]ùž\,ß“.•a¼Íšïé«® -ˆ WÖ¿õXi•nƒ 8UÙžÔÜd;ÇÎi*îZðȨ2´”[ ½™ÍȤỂM¼È ­ m¢¯¯³ââé¸10««Š 3äiepni¢¡Ö'ß‹:„ª©¯Çó‰x»+¸^Ñ$н»z&ñ{¼¸Ç‹·×ÍòÔÆ^€Ð+ë Î -…ËX ˈ7žAp"Ð6'–µw«@Íè\Ü’…8ÇÛå)¡§ãÅ\4CI© +A¥‰‰´âjߥ@ˆ9Û“šÛ|Î9ºó¢N¡¸Iw”Û§Ì®íîÌ e¨cb—QÂ6=Ó¸£Ífò@oM¢Ö iOÎéþ;NŠ™ÉùÓ$ECÈYñÊ;û/çÚfcŠr%¿§n¸ma.Ƭn"žö†Ë×&VH©:ÞÐ5õIÄ3M}ÆÍ^\\e œµj -œ&盈ñ0ÇnÆIƒ„Øq,öšZ=W[qHfÆ#>Š÷§é“¡ZD¸Ü V‘Ýü‰xzº=Ïæv±ß‚IªÚ£Âh8bÿ±ï2¹>±bËePIã5·N67®n¿ 7Þéð¤ DÐÝG :[­¦ äñ8æl^ÌÞêXqB ¢žõµÁŽÕÔbõÊjþ«n6ÏОÙ#¸b7”O)–=¹Ò•X¹ýlaÁÙŒ¬LXït©‹aï‹RìØ2ÐÕXÏ4]DH]=¬W'I¤¶1âiޝР¹øü®X~ pCOÃx±Ç‹{¼x¸ï™Å¬Vlq.ŽÔ^‰×+âLÄ -Y«—Ç VIj šæñäœF9–±ìˈã½EÌDò‹m[ÌÔò„©-ƒ˜”!r × -¨©Xj¶×÷òDÜÄ4Cãí9ícÏ¤Ý W…ZÚÿª¸²§´U6¯/¨ -N*éò”>ÜÚÜ‘D­AN×ûñ‰ˆ¥â±U¬#ãL Y¯\u;zçÐú‚´:¶ª%VÇ;Ôž„”%öd{[li †VÕ_szX³:<²¹5çªP©®ë.¸¶`j5Pß¡*P2;ÞÛ!æ1ïóEÌ è_ÞIi±CñòO)†x7…2$B·JîGÌ)ñÓ#^dÀT34NŽï¸sŒ¶sJ^‰Ø­›…CKGQ§§w­ç¥Ž—N¼Ô×íVԛ濈%& R]Þ0äÆrý¸ KG,'b™"n Úœ禗‰u¨ã¹àð£ÎzpæñeÄ=1Ÿ‰ùõÉî#)1§b:Σpžõ¶AÖMéÁUC:|x<Ûmz%545ˆ›xY Ïû0A-Ík?+Ôpò‡9Z¿ýT{†r”®–AKòhoÚTƒxÓxR.N¶us•žUά2šk—x““ýJÕo‰s†škXÆ‹ÆKMA²>i¹K‹£„²Ý9¡[ÿ*ì+jƒ„;<3$ò’m³¬8`mé¼ñþ`ÅžϬøºÃs—…K‹ Uô£—Å=bªÕˆŸÎ‹Ó¾ÍB¾ gª¡ˆ ˜õér¶ÔÓ"9R´Û¢ârqôOÁT -±×,w$¶Î|Ík>Kºð ³ÃȈG'Ü­X^©ßR[ 5pbІN‘ØòðĬ¹SCДôs17ÅëÒ2 ’«ˆ ç[ji‘r®‰)|¢øLÏx¼u3·œ¿u¤ TÛG޹6ìrlÝÓår©*°~öâ¸I,¦ã2¡ãéJ<Öñ ñ›ôH R-ã„Þjó(±7ãÝe]°#©¨¢®³­Úºµ¸ivg¼ÊÙzâ ÿ4-¾âÑ0#‡‚dõLí*ïã´Õž!O ÔᙃïÃt”Ë‘ýÞšíåêþ¦ô´£¼?=Û•jP9ÌÌ)=[‹bìÛ”Òj © -× “3ãgªðܹás¢#4xX|¦‹åã>l›g^ìŸUÁ9}ԋ€5‚™<+^ÑÒ®²º¤´¤QŸ¼#„«2øy¬7q¼Ò#VS sQPINÎ`½]5\{``”P½½D³ Í ænqZðaÅ5©£ã=‰¤\0Ð5WJæñæÝ"^[,ÙTñ´Œ¯FÇ›lf­GÝÂpÆ…ؽ4ö Æ-îšB.¤CUHO,gb¹fØã‰_6ÑÄ^¥qÉœžñ˜xfï|bF†ÒP~#V´§ÿ$Îæ ¬öõþöwËñTðëûTmWïÿböþbŸû«}Øë×ý÷4 ûÈz|4BËzšÿ˜EKö€’üùãÏßfq|‘ÁÚÃïo°4<_ÿI¶BÿûwíG䯧¿¾üñ9?þuüˆ¯7ô“øúÚ&MõõïÓ\2`.‡Zȹ|_e±ÿ=âù÷ˆ¯ÏUÙj“¦Ší†Ê ™êøžã_°»×F›D‡´ûìuÊÀM¼ù.ÑïB§¯õðMg¾;VØxó•ZJœù’êñªëh‹ÚÊÅäwý!-g²0oyèfÛô*Î JJcÿ]–Sê}3ßÖŠ£†uÛÖóJÇ+'^ù“×ïí¨«Ã¶3«ÞÁlo%±"+?¬„•wWbk¢äxoç ÓÄÏß]öî†Þ¶m—m ¨8n’ût_DNGq®Ùó‡ü÷^Û5ÔÜñîhÅÙ ŒeõaåÒi¤òôù¶ÔÔÔ>ÉÒ0D…8Φ<Öð6'Iƒ$®„w„€ftšD×Ò&G™µÚ/‘œûhËLF»6 -y±™ ¨) ÕñÂMòÎÌw.,|E(dÎ-Ž"¨ -`©‘4œ³=ã/K¸;\<áâk”ÔÔ5µg2c®¡¹‚¥ìÖö  -˜»Á±c &;’ÛÒþ0bé‰åL,¯AÔuZ™œñ—ލ;¬XŠ7ã-‰µZÜEº?©!4åñµ1énߟu<³y¾Ž9™‹¿y;zE¼W˼êïV25§üxz,Ì»í ˜wªÇÿ‡ÄÓ[÷­Ž;Þ[-ÓJ|Íât¶-³Îzq)O‡óUv ¦‚Öì,\'†i‹xÚÔâg‡Iýé³n© ÛšÕ³ˆ«¼ßÒâeZWÉ͂É=ëöS§È¥=lÁ+5\‹=©ãÏ=1Ÿ‰ùu©ªÝ9T‹Ö0[GÚ ³»uª‚³•ŸVâuáÜ{…tÄr"–ר+H ”ýôØO‡»òÓéq•÷"8×ñÖM×á±OÌÔËw'iØìísó½U‡%Ñ„o£_jhG¨Œõ;íjcEÌ4â7ÉшWÃOøðT‡ÿIú5{&»}m7ÚZAj‰t€j¤Ê#J¡‡G|uÝÜñª ¢¹ã]tn\®k ÑN kgöÌûέ<×'©ª]ÙÄŽ~Æ©@Óö±¼˜Ëb¿¡5Hâqû "be·JÉôtÀ-r`R*É"Vv;âRrD—rÓþÎ&ÎÄ33~G¬VÒª£ŠÎ†±'Æ31¾.Ù°tÄr"–׌ gà&ÞÖ]ä}¼E„¢¥Ú€µºúÝÑ#¬W&×ÕV„òżðpµãB½¼D ÏÍpÇÛQÏR)nãÙï fÏdúX¡¼©ˆZÍÝÉIã- {FTøYEä¦güÛ;ÜŽ†*ã¼ÏÖe*i”o³þv¾+ÛN’2òà´ËÚº$hXÝo¤Ú¸«oÃ{\o©ÊÓîxï´j z¼9Ì-Ä(ÐX¿7ñ"ñ›„kÙ^o¦ÎlóÍž~7ß©$vçj]²OÌIé·9!¼³2;ÜÜâ°Ÿ™Å$Nˆ^ÿE¼„XWŸ>‰–Z¶'žn«`íÚlÚ>v»ÝM64ZÔ5õª %9³íâíì—A’7E÷>E]À0 ¸öt/íðF÷d—äfNšÌhf9ž…-u++õ…þøÿaÐ #õ6ÔÆq,” -b¥ï†u‚¬ú§+EÙðS/µz鬗m›§Ö‹íN2K—Ýfƒ¿)dÃ:œ®”ÃlXÑ¿û¡CUÈùîP»j‰p¼ ’ÊFã=ð!å|7™Mµ°@¦ªûÌø°°!7Ñ’wgu^ç‚]ŃE7¢XÅzR¬#>FM9¼;çø«]tÅÛ'þP‚‹Wù«z['­^9ë•GgëÎà>6ßÜ€ÅBG,˜E¡ §ÜšPsrbÉûÖ!r0ãÕ˜­xçþÖ-4_rÀ¬Ñ|Óå ßÎB,d¶õH’ϸhÈl“\Ñè¥F/ôÒ»Þ0#<‡û¼¶LsHò“ÃÂf^Ð\3T¦àJ¢«î¸aHk8[& g;ß»ŸS[$ï” äoÊ9aZc´»5Â|Ø«‘K‚„¡!,dGˆBtwYLµ0û§ÃSî±Öa$TÀÝû¬·ZXµè=Bǃýò«÷S}~Ÿ êqÕú÷¿ùË~ûý›¿÷»¿ìñý¿O«á“x{qRØŽAR~¢¦ã$å¤ï_ÿÄñôò}üø‚áqŽ>=þâÿ®ß}úüžö¯x~ Äó÷> .?ÿËv‰Ô%W(RmùÖçâ?•Z´«x™Ey³‡!Þ­¸MOmëI±¤§`ÍVÅ3²¾Ñúj}ã–Íö2S½l~¬vÙ¿ÎVÀ2ßl†«æ —­‚W)í³l‚ÙcϺ‹´ƒªÈ>ñ+È`öUÑ V9i•G߻ޒœ‚j{þ ¯hm¦ºaHïEáOæ¯-ŠOV!ÇnxW¬­b=+Öžâ³GêâÿÆ2§"Bë#Ú:œÌ…n4á¢þLÞ)Û+G1-Ú®Ê íà÷¡†Ó]Ï -ö?Ýhá$±þ„‡kã5µÏÄž¨}?ªôÃJý@äöVÓF±žëcdåÓÝŽ˜Êj¸–`é–äa­´Óõ¹ùTÑ;œ¯cØ.ç„…Ü“ýÞ¨·“ÚÄ­ó SÑ('.æÚý$\¡2õoešc?Å’íëP‚¹t’KÿÈíë"o¶ïeì —M’‚éN¥,9AJ¸I:Xö7¥úØy̬ì±l’*a¤v17ì×Å‚ù+ÑlLl ¿Ù­«ýe[§ØP!'éÙwÔwwfùRG|Î48b¡ø ÓaÎm1÷vCPí ^ÈI(ðÃsO¯ø¡É‚P±4Šå¤X†³C܇õ…L^É)ˆõ\!‰¡–] bC«øE´•‡­:¨ @°¶Šõ¬X{ŠÏ$1‚Á1Ip) †²ÓŒéW¬éc…‚ðÏŠŠ… sHls||™0#µ™ý=¼OÔ–¸ßuÃ[÷Rñ¤ù²Tüÿxoo®%˜ïŠñÀ.ýã{€Oå£âðîŠký b=)ÖFqèeÈ¢;Uœ;¢„1çEï5O¼}"¨ ³fÚžàF1Ÿó£ï É ü¨»9…gΘ‹€Vêãû°+ú0<¦8‚aÁã™~ŽxdíÆL¯]ߟڹ™9,‰¡ŒZyµÖ0UéF ¹—ѾŽÙG.Ï0ÎRqD“žFÃìîÑ’ZºjGË¢[cÖ²‚IíáÙgÔ6Z‡À!Tª ûKöÉž Eý™|;8ÌÄ_Ëþ΃Éyø+I€YòF8™0[xpNrŤìÝÑ~ÂÝK¾sCÂ@ˆûä»NHx¬éá}{ÉeX¹OáÎ"F–.†6óX£^-/ÿ~½%ÛÉÃÛÅ[®¥p~Rq;ã!\û`ÆD)ܺõ²ø¨ŽDzëÖMD÷*„ûóÞº¾éf‹ -¥ÔÛAmÞ!·!¾— -\ÒFÍ,XA1÷„èk©f/OÄK4ÿ[ŽeR«?vÝH"`÷{Êã“ìnì?ÚÊÇD©ß õ]ögv*èB`b™BÒñ&ŒLq5(^©½ª5¬:M³]§œ-9_æÀ¿+–³PÓÇ?3ÖV±žë—Îx+$–”A$R;ÍÚ¡ )R‹é#ð¹:ÙŽÒä‰/9.Qµ5slŠ‘M»=ãMcÈ™¿Îÿ®è¬€¹öoÏatè+1ÄAVÔŸ‰ÊbEt`3¨¸Å~Xñ"HaU¬Vl¾P‹ÿÛ$«£ŽéFŠ÷©cIÌbäœmCïÕÙZ˜e¸–P=(¦€ æõÅe˜L1¤%°mP-qäˆ%ûx«z3q@‹âwÅ…óxÞ w²?³‘`AÜ+ÒLA„û±NHXrGgÆ’{ç +^rÆE€h†×Q\&*E›÷S/µz鬗£åTïWÍTt›ù²ï5Õæk¥p xÉT«ò60,TÁÿëtŸS;•%ÌŠ'è2ôÃ¥&ÛhëÅŸÜ‹×TEºŠ‡ï¤WŠ›ôœñ3¡^Î8¡+Þ âSuøÁ(Ø–«:a³0†ÿ1„¶zõ¬W¯‚ÅtRLCà—fÚØ¾…fÈ -˜ëí¤63! ˜·!aï 1ìçÙ2Á&î n£%I­Tà²Ó5'äìƒ9̉9¡6‹-vwîÏw™Nf•®q\åæûó²â Þ„“‚mFÂô‡—ÌáJ–)DµQ+(F®@ÿúꌭë -mëI±>\Qèæœ˜˜jêŸ.÷Óå¿5‡%‰³°ôïáf~¥¸qõp3[Ø …ËFŽ8XM,ŒˆI1|µ6Â@;ž¦ÛˆLà‘ÎøÜýɆe'’`K`ÝGk*Þß…\h®žkìQn£“§Ÿûë—_Õ@ ŸßA|ûþ7×o¿ó×~÷w=¾ÿñ÷)à=2ÓÊ'äó0Äÿàmõx—?¨ï_ÔdÏa_"0>~|ÁðÈ»ç¯Ç¿RþüîÛÇÞž~þöç{~~uüÏ´£xþÞGÍåñçéGÉÀ–u)Ç h‹%eË]ÅŸ[—Iùy¬ -:Þ¬v*°dÈìN ¯Ý\Ù–$P|uÂ/ÕÎD,†¤¹§và–”Aª–=Ô:Bªxw6L­Ò É„7Ê_?*ÕÈU¬gÅú¥Š©@.„¯7;èâˆÕF±žëc`ëÐOd½ÛÇmªI£XNŠå1’jæoÒ»7z©ÑK'½ôèµ²Ó–¾Ú‰Ñ{˜UÀò@N,“lÇ™›“ôšc•VF‚%¢žÕz®*h’ˆ!&ùwÞ¶1ÔªAþ6D9ìÝÛ©‡2(ç/Íß¡+#ô/«Ï8EwFÓqƒŠG:n¬1b¤_ž+ÞVÂ¥[O°dg÷]BͼâŒv‚÷RÁ£ù.ïÇÒÕ‚åjލ %×È‹!× -œ0B´Õfk^lý3nmóøåCh¯âów¤âþÃ~$7šÛPxŸSèAõaŽeRÙÌý«BÙí ÿŠaò/‘.²{6ݲeÉÏÐÃÃ÷ÆŽr˜¿X‹Dà3ÿÖ×í¤úöL1ïZã„Á]q‚6zõ¢W#ÞÍ`aZƒg/*6Å“òA²y ØnÏØºãEh‡œ,,Fû͘KDtRÍøëÎ-¿sOΣG|ŸgaÍ )(¼eL%<¼¥b0£¨mè -I©BP -°mdé ÕVЉø!1˜Â 74bÆ”ûÎ1Ÿ‡šæå1Ñè}‰á žC9ƾ\2žbiËU±ô7Á1ì‘ •²œ/'±)wcGS:0G°Ö(މå#>+&J¯‡ù »|^E:°pÅ…À¨„8±a²e‹¾¬­`½ -ÖﱤJ:0≊G¢í S˜²¥cÏ(¾ºsÜM¶H,eÀ¢Q߸«õÓ}›‰>u´,}·¼êÜ—ãåD„?oáAˆ"ÅÓ=<6ߘ-ë«9ì3‹†¯óÙº/"X8¯†á©.@–¢PÛR1ƒóòÂ1}jtÛÅŸíºÝN ],•Õ¤kÛŒ˜½¶$]Né6K„Ùvž)ÜÁ4ªu·õ®>tµnd-ýJ7 -‡ Î6ƒ% 2m ¬i£W/zõ1iU¨’G§ùC/µz骗˜ç¡e10 ·mCÅ‚IHb>/ œ°¯xZªQ£—.zéÑM53 ¤Píœ÷‹º¤õ*§å¨ÖzbÄÃ_€'0Ï!ùì·u¬˜ú¦Ø(Š+NH7818âœ3EÌï -˜——ºYÁæVBCì—k‚na=º«wù•ÃJ Ó]+tóll¶±Ž«ž9gŽx‚¦õ¢âå ä= žö­bÃj´_˜gŠZŠê;iŸxö8n…HCC¬˜ïXž…†P˲œg:‚Á=žñí·ž ªb¡èÊ5H9¨x=R - x‰®Ü–\*VRYS¹²b»uI‚Z½tÕK©Íôpmž)Ù÷åðkìSEÊJìã†TáÇ1Èá=7ŽAüœ³ hÁÕŠ½C·9T[_˹¯v.?S;³{>·®B|Ô=wtÄyŠ€ŸBÏÉ w0ß®H]¿XéŒeyFL½'5$I‹½m‡OáÝnÂBΠœ—ƒe;à±… ‡9(¦å•n¢â‚`~»³(,ý~4±Ñ ±Ä—®²q@Ä{*¦g¢ô‡´ŠåªX·øçµÛ!I qŸ&´U¬WÅúŠŸü“(bø]!HuÆßÉð¯\;. ØËAÉ&I+­u<Ü ¥¸'ÍAŠ_œáÕ!¹ã9>fg(Ùs§uŒêízxLíÏäá –$¸uk.‡6Šõ¢XGk/)ê¡;zØ2ˆ¤ÈÃ*T@ãèÞ}è¥V/]õÒ£³u3=\ÕfëóÚ,q^çp©Ïjÿj §Új®ËHÞçáA¯O5ÁšÃ’û½n–¨©–Lú„¹O¯C·.KŒº¸«vd¾_y˜ê³]îHð’’FÞíjHFÀD‘Úç{^Fœu™kG’3pîrÚ ‰v»E³-Qÿ"ïC=ÆPo\Øåö»olŠ©‘÷I42(%ÌàéùE~¨CJÜãnëM«oÜÓÃÎËów¦â’À•ï˜Ï®!®ÑŒ7£6Ãå1Q°×á!´/ µ1CÄ¡†5ÔbÅt[ñrF†b%Ÿƒ ž¿æ[­s‚}œØF±Pãc‚í<Àt~ -=¦Î x‰êÆ–Š³‚z‰²øîÎ}¦ö® 6ðo¸Ìóབ#‰qxÇDã -ð]Én F+]´Ò£ç†çl“Iß •Ï…¥Ÿ ûä¯JýɳʑSîoÜ>®ð©Äd¹cªhñГèý®'¾ ¶Xí~–T3˜¢v´&'^dˆTÂÁB”sÃ{nÜq—Cr²å©6ñr8CÉÑÖM!Ÿt;ÓbG”“R QY¾uƒóYôãuÆh'ÑAJÙ»,Á­b¾*æG%¦æ„ÔgµŸlÊ—ϸ0¨S8ãý|,™€ž-Ô€ -J£+|²ÖÇÿþÛß˳¬úû÷EÀ3¿}ÿ÷úfÿøí÷ú¾Ô7{üñÏÿüßçGïŸ_•“/ÓiÔ9U‰œôÏ/žÿ¾MãùññãVw.ýøÿùgV úø.8âûO¿?üxŸ¯ž¿âýí,Þ×qyü뢾ÔOšŸWJ!‰êþìâoÓþLïfWõé;Ío‰¿pº×ݦF1]Ócd·+$Œæ»iâ#†ÞÌl -XÏêAó­ÔR´åˆÚ1[‡n7=ñöŠŽ+ÆÚMœiTûîg}:ãý¨EAÁ)þÐK­^ºê¥Ggëfrìq©f ”XNR|Z² þÀ×c¶Ž‹A¦8'6$o¬]Á*_Yì7“¢ùüCÅÚ(Ö‹b™±;¤ß;ºíãÏ\ÑÜ”a[˜Å9Ç›w›¾¥óf¡~ºmÓ:$Õ:ÈÈ縂EëæÇì œs;Æñ‰á¦@Eú6ÖV±^koÆ¿6Vœw¤¹$pÑ Ž¦¾Ç -S¨Øž?gÅ~3–ÄÜOJ·”A³•Å3nôR£—.zéO½?#°æ„†õã®ÞOÕÒmµá|‹”Ã’ -–(‡oÞæõÛv”ZÌÙ0íb4z‡ð=¤$¼»#§ -hÒÓf¥ÙÄ‚tVšUª¬óí;bâB©rVÈÁZj×àþÅØæ"ךĹO<ÛÜ8vÃûvW#%` ­YºAYº±P W¡™R>ÚŸ.‰ÂàgL”,a°m¨Ø -Y_ñK1ñëV !/©—ûäÄa8\Ÿs<(ÔÜ]ORlŒ%Z¸-CMëõ8ˆ}ÌÀ“÷BmöaK Ä©m:_æðhLóð¼z˜#J†‚À厔‹A1ê÷£R !YØ6T,HÏËÎxέC·Û9a‘âœ!¹FЧo6jõ¢V‡<ì@œûÞ&‡…Ä1¬t[ñ玘y9*›ö/Ç63fP;)Ø -AÎ…Ï9‚% â ^ ´`0á5žxñ<[·ÅŽžx®Q\ì6Ü;{þLÖƒ»BɼÚÇ^jôÒE/ý©÷ ÄÌ»ç›Â\kvn0×Fvn¬$…9œX‰ <Ö^®ƒËú€˜ÙAJ½±OQpN~ÎÊ Yu…¬vŬH3‚”¤Àû8¢Fy8Þ YÍKýs8ŸÇ™â<ò©3v’官¨¸0¥>ýlã -A¬>Îáñø++&dEeâbõ­ÎñqŶÚ;º B¤d:ÈÊ ¸^ñLW T2^ šÞW°í¬žd•ˆ“GfØL­P Ib¿t`Ïu×RÀèvÓ¹o¯è¤ƒ4Šå¢Xép ­Õ&[Ì>Smœ -j ø™îø¸á²e>®ï$ß©wìÆý$±–2`ñ>§i«W¯zµçà©ôžJ%˱ðôùj£V/jud¾˜¡(/Ï´™ä®àœVÏÔL#Ðl‹»ÆÕÃ#”ö…‡+Lô9môh|6޻à Ã,C6íûKnf<° òÙ/ƒ$Gnˆî}Šº€i‚@bí#̼´Ã›¹Ä'KVË!Y!–‚˜ïÕtk$õ”ÈLôìaT -Ýe“®:_ ‚(ËÖÄÛ ÄÛ{††©de¾ ñp­ìÕJ½@GjI[°º—Zé9Y²`(¯V—nðUI¨ ¢t`ï° ú¦6’É'¦–’C–á©´ÀîÒ Ç«¥knÒáàÈj&'É+-bÍK£´ˆèás[7Òzô*.ú*±Œ†QÄ¡°:ßõ‚Ô £ ÃÕÓhÁñ†ì„Èʱ”&Ì7ŸEsŽ]Ѝ†Æbó-¡\N#µW~Ñ.t¥ò¿·ûÃá>‹¸³ÐHœú·ÎŒ3 ¾]ÃS]-9Jñö`ž¨Š$.ù &Çz3FÆ”7årx¤\e³® -_ˆE,¥³çr$ùþÉ1¬Š»‰1''9) ²¢*0g‡˜-yEöŽ’¥aÅâì“—d€xØ+úÄ#ª8kB寈¡ËΞ(P¢“Úùñä -o8ò††÷öùš³ [Ç’ärŒª§ÇUÖnhŒ©A/˜è Éí1÷ÿí貨%~†".Æ…¦ŠåyQ³†éÒ啨< ] -¥¡ ÷£[^>òòÖ‰¶Ùí!F]º öv Ž”Þ¾d}H¡ÎX ‹/ òRŸ£è¸!œññ»÷§µLÆ*İWô‰GJÄÙm”œç¯ÌåÒHJvܣ⡨;Qq¬ÕG«í·hâÍ"aO‰Ê«½šÑ çìÄ«…xûï˜{WÃìØ³¢á%ó9æ2cèçóDâ7 ’CLwž W§«z0;ô^Íåq, j#ž1ÛÃ4¦u¾P ™ûmx™TÆä÷{Ä2þ€™ç~X&â(„êÕ£nñUÞ SÐ$<'/³ª g0Þ ºèQÑï4â«¡Fp’ªÝ/= Ÿž·F -.IÖÂxA@Éï¬S7]âÔ?1Ö©ÀB.CÔJûG›©ßRÑ2ôÎuækN“K´£ó†D o8ð†­ëÁ]¤Ð?:‡=¸?ß‘Ì8Û8[ŽV9s_ Ëè³w°¯ˆeˆÉƒ‹1©®¶âáYþWTS[¯øPD‡)©—\¾\,swñÆnÏŸ§\–+Î  ŽwN9LàrÊÚ)·`&_Ê÷*ñz6AÑ;Þ±úß`H‰ËÏýò+K© éñ8…Gì—Ç¿•÷úí÷oåm¿—÷Ú¾ÿñ÷¿zkH]ò”—·Ã ç0Ä×Ïžü">?†Q…µý󂢨>ðø·~Jòñùhy¶<žýøñù>ÏßêŸx¼ Åãç2¢rÒþyÈ(q”wÇÇ2?‚ó¯G¿Jùç«”ÃW)C_%ž•PÁ»ø^ÃebxIâžâ©ÖŒÚ{ì+⫼¯hVjXéÀJ?XURt1wgË-+Y¹7Ûgcyðö:÷>a½c±w÷Ö}«&ê·Z§ØQChy{wî´áÌßË•ù6ßýMÄÕQؘ¯o¨·!ÝzoHä“‹õI½¦–÷ìR¼ßJÅÈ]bl‰ûGÁ›Æ»“ÝÞ&'sÙæ­¸¦ºq¤öÞ¯ÙoÜýj°FL­y„˜óáhfãÄÚÝFÁš0Ÿµõ†xxÆ·ë,]C(â bîj˜[^>òrOÃÍÔ|¼ã'o‡ò¼Ã´!¥^~ò~r‰Ó[»8íx0YºŠŠÿ&ÎJÉ—•»‰Á 1ˆyI Sn–³ã$Š7LK‹«¼'Úõ¨vV}¸h¼:¬µ  ÏÆêf2md$((kÖkîØ$ð†Â3VGëûïð1Ôw´â3GCcŒ¼×3Uó4aU ç´“nÏY´LÖ¼¼¡mÃŒµÿÞžÆ3³-Ú6Š¦Ô hìBû½[b>óÖQCó9š/äø]µ_ãsV¯õkI-]C䓵î£ Õ|ûš0¶Äx$Æ­—ÆSóͱGcQ/N)bþ¤]?Á5D‘Œb"c*¨ þÑ&‰36Äøò&Û_¿üš‚CHÇ ]„°?þ­¼Ùo¿+ïû½¼Ùöý¿ -KN<àn™ÌÅ5ÚiÐs‹Åׂžü">?¦Q-qÛ?/—¡FÂãßú1ÉÇç£ûËög?~|¾Ïó·ú'/hgñø¹ÌÓöç¿’)z©®\,\;G–!ìWZŽ%E…ö†‹`ÄÝÕ­ÎÙyr3íÔü'!ô‰‡¿ŸŸØã·±üÌòkâ%’ƒœH›ñ×ÎQKLGbÚ:­ªé³ƒªxtæ×é”\ˆÐWÅ0q_cÄúåUì<¡æÁ“šëÌSB_ëTíÀŽ5+¾Ê{³ PÀ‘p²s•Pµˆ«±ñ’6\¦=‹9$#¡ÌÁeFM +†r —€•ˆ[ÓÊ;%VJeʃû6ÊÜó˜‡6]ŠÒs³e6®x/I_ÃËrõñjZøË¾]Ã(ä8æþŒ¹%æ#1_›ñˆ¯•.7lP}x=Ÿ0–æ4LÑŸ°DlðÔ€¢Š JÖÍë­Š±!Æ1n#éá] ô‰&‰GÒ™b:Ó6¢ct¹ïlëèXØêð©{ãÍöé@ªÇçz•stžSß&–!¶hÅÙAÈ·ÛÄ{p>J¼àŒíUŠýýjIŽ$·¡{Ÿ¢.`Xûs/íðfîa¦4ža: -Ef$SAÚÞtKꬪ×OïSrdl Æ$Îù«x»hïM;Áúê¢OóÛà½S‰`V—¾~×™^«„ï´‘<¸öä;­Iܵ`ªÝwD9)E7Š9*àÞÅìŒÝ çÞ[º¬‡~\Ü4àT@3ëh -¿ Ö¡]ÞZR{\¹£˜jm'ІÆU-<®Ýú¯Ö¯Í{ í×+:¾0ÆnœɬÇî"IÁVŸ,ÜÒâ•3^yuÔÛ°>ˆøû7û_âe¨À‰¶j; -nüôèlðÞ©¿l -*u³5,hõS¼ X[Àz¬?{tX†m´7÷³‰ý6‘yöˆIŸe<"ŠO2–Ú*­ïoÄÙ>!&p¦À‰›þ3Ø'Fú6ˆõ„X_#Ù‘Á8EÍ}A Õ'3ö­bUÕgüé|žÚ(ˆJØãí"â¯WtìxhÕ}XI ´H¨ãùhˆáP\;f~|…N¼º” ×¢¹Ï²LÀ…CŽç8[£ìáÚf!Lj9,šëyñŽ>‘Á“¯ˆ˜KÊ©??ÖÙKUÇŽ)Ê»«*îò{¯È 9áP v¶â€¤}E¬“Y@œ¢t¾ªàwh¯b S#CI¥‡tP ûo!(œú i%ì·7ØSÕ®F/¦IÙ¢ž6Oí½õ´Ø öà÷h“­xqV a”M¾ 7ž~¾5ž8-Ô%ïã’ ЂÂ3âi'€šÃÒ¾bá©ãÓŸ¦w¢‚ÙÈÓ>fó -”M4¶6Œ¸?2FbãÓÈpàŒ½XµánÈÝluv*o$aÁRg‘?tgEPƒ˜NˆéÕW;ÖØ°¨H,X}6,ªÀ¢}ŸXqÙ)*Ä3|⢂ã"\ŸË¦ÆïÜj‹UÏXµÇíÌ‹;€:bàjMÎ #~Çïñˆ>¥FÍ]Üd5 9pè F)@ºdbl7=7œF 1ˆ—l–®à5Ÿiª˜äÁZ´þ4º)ˆîØ4ŠÇ\.ÝA¤Ú¯Z°…¡‘¡xtt« â88ÇÉ÷*»]5Ü›ûÄ›¤™£°h.mÙë ‹Øz·œî E¯óÂX°úB*=íR‹—Îx©ÇïÄX³Tß ›ó r}æé­9Ív+½^Âff—åkoéØ%·;8v«{3õ÷æpuè÷õ»ñ¶›*„r­g©Òâ•3^y ò»¡=Ô'(ê‘‹¹¯Ög6*½G\PéŸÚ:i‘ˆCÄ‹éMAÅ£3ûƒßÑC{ËocÉÂðÐ|’EKs=~wk;l ¦ôtÝ™‰Ø$.=E,²/+È•‡yugÞ~c3@ä <¬©¢HÏÔiË ±¼T±YjP}Æy'E0”ìy`GP·ÇScâ$*(§¾G,Ó#8Qñ­wF<Âñ‡æSŠQ¿«-tu -nü´O4x©ÁK'¼ôÞЃkWó(â™Ô¸yu•_Œªð¼*ÑÖ°žë àAõ¹Œýñ©-Z=£ÕÚ³EŒàý`jäÑ4BL—?_% X¤ÏñŠ`(š6šs‚ŠøÃsnª†{Ž8¾Ë]´÷j$Ýiiõ`”‡1WÃ*Ò+ïÓÆÑXÆ}*=[…òqpÈy§&ìT-BÃИsM¶ ƒ9‘†Áíhè¹ß'–ñ ¡Dêx’O4xïtøêðMnIj ÔTéØÿøÓŸÕ ¡}ÿ\R­wùëç¿ÔwúË_©oúk}§×¯ûçé‡À,‡ÔØq×- ‚ù›?ÞõoŽ?¿h8¾HÀéõÛ êû¤Å÷ßÇÿPêÅüöSðôýð×Wÿ~—ß¾9Þÿûé–…ï¯+7\^ÿ»Æ‚ùkæ/ -ÎZÚ_ œòúɳFå¬àß7ìC7Xç*â·€—<êªf•ôðœ$mÙ“CxÓÕ<m°‡À^…úAf_Cæ£n—I#.^ÝSð2PPÁÝN<Ïí¢$û¬ÝQ#ëÊaì‡rB¹Æ&y/(†Ù}>(j’{dc+ÖTGWÆÀÊèR#þÚY©uƒ1’Ã‚î ²y·7Lt‡¡®ú¡7p'ú19ÜJ·Â5†ÓÃ`'ÊkϧZÕ{€‡{o?ŽG‡»õ^Ëu …Ëb=IHVHdÝ„›c ‡vÎHbF÷ypÛõßÝv›×Wë>…ç`1W øÉpsJ¥ÓÓïý_®½ìXUàÝ$^£öîvc‚XJpdÔÞ›µa»a $ûà 7p‡fŇc«#èç6æ-ß5Ö Wìèl)c·2 ²;RÆ6fì½E£¹ ;8ë“Á¨¸ -÷a9Hªì¾¯¼ÃbD÷…`=¸´G 98¥nN,´'6»56$Ý'‰÷cx·‰)9Ig± ¢}¼ùfƒֲ˳ímSOu¶\M ­@Aúɦ>Vb0 ,Ýz¶Î¹?tþ>×4´Ýü!UÀàæè†~Þ$r͸PÃëf7àeÜbÌ®@©…òª?.b¢k¿CpC++ žƒôØátë·ß{[hCïÍRÀp㽃€zmawH€-·×µù¾èøE¨Ÿ¤ `©¼ßÓ˜=Ia¬è„RÐÙƒf¶"`I -šÊV&èPõ+{€%‡ê½]°£§6à»7­F°j¸*.{ÃsÝCìU ÏÖÇ™1,¹€cÚhQ ÕO ¯©ß "ò¾è<w&`’÷Ýቢ3”m!»µFu{ï4w ,ÀR¬ G¥l5¬Ù x7&†÷Ä{#³ËFfrm›iÉVO¬àÃ}lª‰1˜Yw­i XÏ€µøœk#âýPs¬~Šä(&ÖcXA²¬½ƒføéæphI߯¶%Þ*×*»žB9¬Ènô~Íìe#5箥í… $ÞÇθ8X¨?,x'9Hb`Äggæ\w0ÐÌ›Tßje’Ãî;ì Ø -,›@Ên§EðI·CpcÝR®¾KQÉYðÐ’í2L-`:¦k kXO€uðNÎÀV 8É6©¶•;lX!k 3ísl`3{Ïp#‡á‘ùNç‘9rnñÈðÂÑ ¢‹’ø‰¢#€V6 - ª–†ôtQ¿ìzpÈ…Òƒovˆ” dÏŸ—Ũ‚»Ç X>åWÿà¸8åì¢ ·Uh"hpŸå0ïÝ.ƒ #¹º‰íì_ì—M²¹ „÷>E_À0$°öæ^ÚáÍÜ?¬×#‰å(4YQä rìô~º«?A‰ÌÄ]1\ÁÞŒ -42D‘É®0–-AJ®ç®˜j•tA‚DNeøA*5©œIåÕ-Ù®±ºC5°ª0Üúšã§n¾Í!ÁÊœ–[EB'kO$Àeº Å|·é Û•t ’ ãr=ÝéQì,nêw˜÷>jeÄ f^P¬7]VÑ8¹FŒÀq‹$feHz­ÜaÇÏi¶]çÏ1”ßJÜÇy9EP–jzNNó]2ŒM FtÊä/ànC›¬ -7*”lãµ£ s‰»¸žûF†(29.Ù¯ A"'‹ïnZƒóIiØO²%'’%ÝÆv·;Ú3ñzäkÄI1rº!çfF,4]+O -ÍbÖj=ŬØï9ZžÄÍ /T¤DðzwÐqefö4¼ØÂ±1„Ð`] Ø$(¤È“s¢‚}Ö¢z–;ÅÅú®µO×%qÜë¼Ü«6D,Àr]Í—t1,¶‹™¾máž¹Ÿ0öj=þð)ÔTõzá*àT§3púNàãBž¥Ñmà+ýެ Çy™-Û6M’³3jJbKc%ÍžðHK ÀA¯]bNW$»É¥òÈyA ôxÉ6i ©·k3€Ÿ™G_GÃ}&\6Pʳ;ûHûE“n(°•wï´t$`d^"Óí _²46œ¥9ÝG°C rIã0x¬C0Xœ|dü;„BÊ»,\Î ckºRÃÊVZÓºpÛ•,¥çxÔ.'œ„ ¹‰m -{¦ßVة¥.½zÒ-Ft&û ¶[»³—ËtJ赆™.¦E²Fûd„PÔTÂ@S -XNÀòê0…h@‘=Ûý œjàtN÷¤Û³iŸ¤K’{k®h»²dÏÉn¯›S}õ¶9¨«a-ÅÌ™ðû?æNRTÿùî„SœNÀ©gÂdå¦$–Ñ°Ä ù- MRcËÇ ÿõ—¿fÕüþ¹D0”¯ŸÿVö·¿ÿVžû{yØë÷üû$7,ŸŒüžŠäÓ0Šßðpè…CúõÍñç×0Ž/_¼¡@à¡•÷ßÇ¿²|ÆŸ¨÷‹¿¾úñ”?¾9žÿ~u=‡÷×eΜ_ÿü¯-o§/&)·×úðë#ã5ñ{Ãî˜QµÅ³V%ðîù}ÄÏŠ5%xÅ -À)B`uEa·G|íŸx{Ä®ŒCY<=:ÀÔßåu B9=Ú›é4Ý"ˆ!j±áÖlÞ=}åSÁ1´õû0ÿë÷™š?ã²q™â [. æEÝp ?œïVþ !Yžžã.¶R¸cÆ}Š[¹i0iÓ#:‰{<¢oÆ>12:Ä+θdHNn¿u=žæß` Jq6íЭÛíÜàT®EñÊûŠ]x·ä@H!Ê>ŠH@]âñóíâõô«\zš¥&­Ô´r¦•í¹§õð~èiJ©£½/´q qöÆ ô᣽çv{_$çrÀvÎ-skHDˆ–Ú1øáÖY‚¬ÜºŽz]bòÆ‘“¸í}=W, ªŽ"ªöÞyö´÷gè~3æl@b³]mh»ÌÀ±ÃÙ–™±„šÂNY‡‰ÈÓñͽ›ïlªþ…´ž†%%mÌ·—w²Ø,E†ÛÝýƒvcñ‡è¶÷Ÿ¼Ý=búu„ 1h›¸[¿mâ>E¸gØMÛÝç’Mo{°º9©£].“œKƒi§Æ2ÄË»Ñ×ñz9w8›Pòf¼XÎIˆ1;>\õáÎùöôág>!áx’×à—ô‰íº«U´¤‡¢¨—®ïHús,ç !™WÕ´á#œ•Ñ%þ9a®‰ùL̯o.@™sëÜèå½¢½Ëê.[yÅ¡¿}ì!˜[Õ$N4iÞ‡ø8çŠ {3¾ËÛôß§¥GÀ‚q úC(ÄÊí*üL¯T¼râ•WÓ#¶+îlˆÐÛ¸ÕÙ²¥ßn5L'Þ®¢í|œžAÑk¿v®ÛÓ®3c¤ 3ˆ‘×ÒÛ9 ²Eçô—Éãæ+H€è¦ÜðLKRé<¾§­7_Öxü6íÕÒŒRkãii‚©Üäxp•rÝ-âŠËa{·E¨«ˆòî·êí»¹2z^±»SŒÓ¯¹Š—*^:ñÒ/Þ®–8´{Ä2fC°äjxH˜s2§<;5F©¡t4‰›t4  ¿qÓºx]ZoÑ-+Kh¶;Œ¯F[IÝal®t‚™»hc‚bd}@`~²-æ Rº¤âôæ0PÂ){÷ЊĖ «K|wå¦Ó2ˆQëºXÄÐöZ6-^FèBw¬AÚUÐÝPCHÙœœx»õ¹V‰0öÿÕqžf…²äö¡ÖݦX.‡šÑN‘–3ólûß&.!T^´E¬•!²´ý·3+ÿ=w9°O¬D£—m *B0ÇØ¾,RMœÎÄé;­0Eô48gv`c°’Ëh=b.ÅG¬wVÊ™µ§* æ¨ö¬ËH`XpŸ…c,PIû.üñ¤”Û«²ïÕ öÚ4ªjmÚ;-·´|¦åï£åä¹|ã– ñ† ±[W'¯—ÂdÌìö¤˜¹qFÙ6º9÷Ê6CPáà¼hhG=íSÚ™÷iäz÷|§vßü~UH¹hCœ -ÿ9ÿö?á篓¿ËÛ×øÃ~ÿã‡?÷§?ìñóÏNûQ!¿{|Ņiø)öœFM戔äã“ãï·idð ó×Ü"|ßÒ¯_“ýWûõÕWŸŸÓþˆçÚYþ:Ñ'ßn<¶Ûƒµš-þœ% ÍÕ.*ïí÷¶žPÕªFÄõ2qíΘb>óÈŒýNÔ”1PÄjîY ´¼yÑWú]åª5õ%¦îh_²úiuÐcT©DBXm´JPêÍ£š¢Þ«²›Ù{Æèß³ÔÛ³er‚ýÝÈÑl×ë¬T ¤%Û¼NÕêa,'Â…/$#·N L -øl_«¢ï#í!öoq ZÄz2æìOb e¼ ± õe,-±œ‰åš(FŒø QdóJ9Ð"&ZÅ‹%Ø£ŽUú•r¡{€d»;œ'Îø¸l‹bîôèÞ}F{uçB50Hâ0œ×*>{Uöí¬‘4ޏ9Ö0­§ -Äý1M¹/í™U`¨;ëˆ!+ˆ•~ß&¾½=8h¡¼Qß!E¯”ùöd›9c†š,hÏ ¿2ã¦'ÜEœÅ3C#~çÅ–ϼøø:‹g*Âó8Úæ,"U ,e “e(¹†>± ±ûbÜ,Ý ðÈÒqÌ'`Þ1ówsR’ì½3nxGÂ9.lÉòíV<3îÜ'J-61ÊÛ Ž×Û„‰õëåp…ï×˱ -ÏUú®¶N½Ìþ$ÖÐ#Ö+@œŽWjÆÓ.iX^9ñÊÐ|‹ç\ŠÎÐqußÂÙnWÞ·#æL LQb|wˆÏˆÏŽ6Bü…£«ÒOå‰ü1Õ ¨©â¢CÜ®ˆ’¡J˜Ói_s³ã2*>à}:Ä‘o–R¿µOË·!=„jÀªõî|9ÃV¹Ÿ£‘1E3^QÃûµ/°i˜Ì³t<³KìtË­²TRy9Ú㕻ܜ2ZèÁw´Ê1µ+èû©1ìÁ·w4¨$w§òT0ÂÚ%VÅýÉÌÀÙdŸ.AUA%"ž—Ì-ñXÎ…Äê:¶¨bÉ.¡Þàk?˜—± -FR.‘¹]]»Np¼TÞs†l„ò’5Í2”\w²a-P%íT,…ÀÄv²ˆí¢ŽÌU‘Ã:¼¢*Ì$ -]mÁpfdHÝG7txlpñ„‹ž“ù5gØ—ð2‚à” õMZb9KøÌ#þ¢Ã»M¸\ò>ÞÐ&¼­Xñ:ƇkÔáŸï»6ã[KfI bAp]îj°î|ÇêD\‹ý•Xp#Ÿ¨ˆrèÅ—ŽÏ1uë -¤$·ùyªØÏ'81Ô*aÞý«Šá„¾[œ,k¤ãǵsôvZ,PR•î¡4È;r(IC,'b ¦JNjøêÎ}ƒGX\~þÅå—ϸüèÈ·‰“Aàgd}\!I$ß{ñ¢„K¼ëd†% ¦`ßDÿâDtqp©þ]=nPõûéñAœ+PušÇß¿ýOªÖç×Ù€ìùõþ°ßÿøáÏýé{üüóŸ“»¿Á/wGÿI§iðû4j:ôMI>>9þ~›ÆñAÊøøõŽìî{ˆûùïñ{r*ï_õK$ÿzùóã÷'½vüç;ÚiGûù#¹#†Ó=¤·O¾!½û•«À”‚µ¹&ÇÉ-"¬ÁS8Öb½ Ö.ŽŠÖ€ã#î¨lÑå­¨cMÈê.¡L j)aq_‘_ÞHRÙƒ9Öð¯ÑÜ]%¦‡³—Ë¥=@‡¥sÞÐÕ²'‡¶«Ú2®&Å “WwʺNÄ=Y×—±"´”Ù®6Ò'ØP²öÕukøÙÕ] |*â¯(€,“;ñqOv¼@œÔÚ%s à÷(–Z †qw{…>·âAÆv„³zÞ}_•x ­$!¬ýÙ‹µ´ËÎB „µýnÏ6…­ê¤ä „ÖqëúSã°ê,XÎPAprJŒÛTBõŽa«Ý¾7{QͰæ€Þ,¦„¦O¸õ· -˜uHx2I¤‘Œ¿àÒ.]áÒãu´ ]o ¬`€vŽ„ûègævW¯–ý©%,E ‰êÙŠ6aÐ0Œæõe­`+êxÃgÀIÊ. ޽þpptŸ-äžÛ3´›èkñ6H”#E¬uÕËùõR c|pë¹°˜äøèêMGŸ.Ÿç âüèÉf©¸ǵ¸M`8:ֲ᭕¨^®æiÉÅÀQ;í(ZK1lWJ=cÕ+V}|g{ØÏ̪'\¥¨R.¦ÝÃz­RëÒzÙmh·+Ø¢+C ¤ÉÕa¬/$H(·Ã´;°KnkŠ>9ÉBG[OR\¹†“sAŽÉ —ºÉ‚“¢Ç¿0ýêòË l2['¼tÂK¼Ôæ×ŠVÞˆß$þI¡«-–ÈŠBaG[)‘ú焽÷‡/t·ÉghÑ­òn›´ðÒ”bír²¡ýÌóÍö¹6± -L)àø³éßIäÓšË ±\˱rñ§ùˆfƤ'Ä^“ÉüõøÏßþîu9~_Lñãû?ù‡ýãŸ?ùçþìöøù_ÿý¿ÖšÙ>ÝR]Ùð­ûÉFMÇYJÊ?þrüþÁÆñeýñË; ›üüóøºw|}×_^yùç×_Ÿôõ·ãù|Ǚϯ%‡ÿ¾ä¿¦FȪ–W‡m\½³q«;¾‰4?¹qí¿ñÇ«üÿÂÛÎM+ìÖ—¢O.å¹ßdÖÀ,Íf¶áž¿EüÊ‹üLËG{}‚øäEˆ{¼è·à ±ö ÞïÞ¶C¬nê%}´€‰:¾"îñˆˆ=˜’ð–v/Æ@+ÝÒ.ŠÀ&Nüöq‡ ~[Y¾ÿ¨,¯Bî˜Ýíèø]Õû–ž­áˆ½jAR-{„³b”|«má·º~+Ô\"~¿ðÒ/]ñÒã¥Æ^›'šqCoçhŠ4”ð]‚Ÿ‚¥Û`_ÜFfÆêO1\ë‰aǃËPÚ×xþÁN- /rqòKÄÖ®hùŒ8_疆ǖ>xÁÙWwVEßԈǑÕ:ÛŠ>Qv*jž§Þž)æ2û,2iÕÊw<í®v_4ˆšR ÜϽƒõ䡺˜•kV('â>wµ»ß,r ìMxÙ)VÀ˜C~g¸ï»Þ ñfþ‹Ša§\°A(ûÒpÉ-éæu¸‰XψõŠX[ˆ±ÚMÄï:€ÖÄËp,UADÚW׸­ã>Ÿˆ½˜€¹´›p·*ž!º6R£p|êÏo@ŠÅ"Ä¿ª˜Îx銗¯ÛåH —©ðt/ˆx? “¿²FxÇWÄ=íbäÃEp£„F*L7ÝmŸ†C®ªa[ÃÑãj±"¤’/Q‹ø]1­¦p%PÄ]õ†Ü"d¶Ù|Ó^µ÷ÊÒâu‘|Ó”AØ¢-w7+¼va S‚@“Ô=x=Ú:µïÓì{Ü*˜íraÇ®ðð4›n{×s¯Ä­”évÁ©Ég›Žxàn+UCÏ]°ó YÛ×ÝæsìK3…»mAŽ5áñk-Í^†›hßlÞÇ܇ÃÎ;ÈÕFú„7d¡O Iäq›â@ë+hvÆÜlÌй…EcϺ>K‹KZª8—b¬vÛÑ,¼ßÊ4pS <âÓ ïˆâä¸!â|Bœ/ˆs§( -RØ~ôaÊÀ©íçÄq§ÇY ÖXÅUôyqÈ1£· æzªŠy—M§È)¢wH•ij깑ê6#éÞÃnÁáU H8B|—á§hÇ•Ë c®('ÛGdzI„x„"îÆÅ¦BˆùSÿµ‘’Sèß5Ñ·6bØ.5ììWKr,¹ Üûº€a`í#̼´Ã›¹„Q¯çyªmAUM*ˆ˜Y½ªK©T"? phªãý‡£AkºZ¯âM3.ø5ËøÒzæeÜqqÊÚ.ÐÞm+yEç–^Ú†m)Ê:¥i¼!â(ìñ]25,ñß{.UEÆ£¥ÃZ—ë w[Ë«ƒ!öKÄrF,ψå -ñ©ßÔñ£ŠxX •š ð×^q›ãϼb&ÇÒ;HkcóˆÍDüª .‚î­¡QîÜ -•ˆ†0Æøèã|ê‰ÄU¾€X­Ô¡ h³D¾'ŽožÚŽïuˆœc|­Ã±°ñêÕyÂK'¼ô„—>® ¡#UJclǯô*,Þ0´gû½ÓϾ°ßÙ¥%®¶lüøl{`hÊuä{X0yÆñžˆXðzmƒX˜ «¥ªØ04LÁzO«Ä -Žï ϯ‚Ù¹¥:Þc ÄÍ ]žôx¦éêp~ïQ§*׊g´ãí¸RÄÌmÄf@‰O¬É»qB<žv‡q¼êJ·¯î3EL-@-8Ö4ï~â¥3^zÆK_Öµ“Nn_\ªaTPmµGЋüæˆÙZÏÒELEl ÓJü*ÃŽv«_¦ÜÆsÚR5¼ŒuyÆ :t׬GÌàvâµ± µ´õLâwV¾u긒Ûiº-ç NàhiÓÙ¯MIAÖħîpñîð^cgeèH«ÛäTލ¤:~UŸ Ù&¥0#+¤a20ö,‰G,gÄòŒX®7·—9¶/ÃF•ET§éH—`½]o·´J0»Î¸iJ ^zÂK×ü¢+'JØ3-Pûj~'*‚MÑÄ'Žo"¾Ãñ­›Ë×ÛÍ@±-ößçT¾sw_¤rk —ëøe'þ¢ —kïCÁ¦é±¡Wx4Òôò6äØz×kŽowµëË{³SèXnlº?Ûå×*N;Áè•öFL ¿Ž»·Ï3÷B6áŽ7ŽnQH·°‰<<ö+Aµl‚½GpàuÔm1”ØP•L­àì¨æjÒ;H%I4ðÖG¡>¬¢-=»ÛeØš´Õϲ53š™Ä´›BLr­†-Nú³Z=ØC ñª¥ü|mw 8¿6V¾¾¶mü=Ög—ôâö 96‰u4Ò"¼_jöYu_S}îqœ'³ '—·ñ8!OˆÇŽEÎeªxL××Ûr7À»Z:FI½âU§Xìl‚‘w#»ºyüάï?OKï—Ђ Ô´ÕA\¯SǓ٠~uo6 NŒ)ÚY ~¦†©uKÿWãŒx<#ßØÙ„¾ xþìxgÒ !X4Ì ùÒ+=c¥/å;;â¢Ägh·44qO'džˆÍÁY¯ í®z/´+'¬ò„U>®´[[¡°_û>o¸…7åWAÄ*ñÛtôGæ~BÜ ;ã_ù«Úãÿ…¡[ûñÿ¿ÄËþö÷_⽿ÆË>~ýÇ¿ÿ'èýøÝŧŸÙŸløñÞÈØñû?¼=È8þÕ€}üöÖ{ xüyü˜ñM~þo<î¿=þøûo/úùã[<>pæâñ÷àˆõãŸçßeüÈm8?ò”¹˜3ñ k?rô3Ä3|hê8`à‡k®äwRêßñÇTünï)!÷! 雯ÖîD5PT*¢!ã9ú)Ú }>*6I»ï&¥•-B_1;¶éíÃ8ÄfüJc0lV#(ØT83³Ý¸å®U.Í ¨·å%g¢Œ`4K½a¿ZÆ: ³gŠØ± ø RÕ7ž9^UFÇGbÐдBlVxAµÉ÷¡½¥‡íXÊÕÚñd!W;Ñ¥§ŠØ°£…*$UÅ˽çZ¥‚æÁ±!ÅD Ü黊å=´ùÑ…©¡­6µ©ÁU˜Ò™±¡"Ø\u9ǃ=ž´">@¢R¯Q#Ø:˜ÒêÒ3S¿c€v±Bˆc b©*Ÿö–r¼_0©Ñ¨”®T³.ñ/ñÒ3^ú¸pµ™h ‹€$–ÜfÁê@Ê^Iºah½Zs!]`™¡MWÄ›hÉ{ýšÂ輺ðLõ‡˜ÚV‡Å«xÓk`=õÞÍ -¥P'(E»á R1]îf3õ[ÉÍýr+¥wPIy³¶sø/µQÉ;A?>^¦?T+ë1†Ä¨ÎÅkìåøe‹Æƒ¶ºñLÕp¥‹«èhñL”ˆ­²ÞÆ`7´´o&_V†¡šÚ~ô -Ƨ½e_ŽŒ?-øÿ9n1V#~o†–âk]*Yp(‚ )‚­ ¯?6â(—¢cµŸð¾Ì*€.•’£! ¢*ÉloÊõ»ßÔnñU¯G vÕåóa-tu‚qu^ɇVÌ}9ÅEÃ0¯â½Ä=´¹ âÓ‘ulBÐãI£"ü6‚páBÁÏ0­¶áI1ÇΠ=¹ÍÔÀÊ0T3ínéfÁ¯¶ÕûóU¼i…ˆkÃÔ{7ä÷(îhi žd¿ÓèUÓN¹½Bñ&© öë; \s \CcóxS>4ö£XƒaÚÒ¦§Ü»#£q¥£c –¼ï×ÒŽ•A£¯NºÞwZZ½•Á.àÞ—®Œ?h‹µ2 ŒŸX錕ž±Ò÷Q+m„5¤f6Ýzßœ›µêºGŸ•r8’ ÑWçÄ$×=ö³ ¶H9i«KÚL›Ð@œ;ñ~šà1@»,§x®(̬È22h:2~§7‰÷ä+4@0õ´Í2C0>í¹=LjÁ“·ãUe M°Sýöèí*«wÑÔ–VhÈIëQÒ´|<ƨSy¤# ã ñfÌCÀÜÿÃ~µ$9nÃÐ}Ná !@€Ö9Â!ˤ²™ûWjwOä”aR%ÊE&Yµí–ägðá}ÊÀ¬²¦…z†$*y•¼“¼uVË )°2%Y‡¬9IĈážÜ‡6–`‚"ñÆÍÇÉ…>U­$ãb4@ÆíŸ~®ž•)ß?– -Ùèãóoþ¬_~ýæýîϺ}ÿíÏÄ©\”üÑ®óæ·ì‡!_d³´ýNåï7†÷Ylï<’!Ý>o@PÀéóïö+%å¯Oýrý¼üþúóA_o¶¯¸ß°Åýµˆëí÷‡v[ý'o9À¶Ÿ[À£ÙÁ“ü¸£q’²;Iy8IéÙ3O¯[Þ~†xÔnï~Gg`¹Ïê9÷œrÂ9B<á¶$o¸ KsÆe¸<".oó§¬PªÕ‹ç{tºZ,o"6 Wú“aÛ³š³RÜIÝš"}¸M–¶]Í4Ë»ÈpÎöÝ‚(µ…lšêÅJÀz­UŒ^ÁJÙ\ŀͯË„‡qó'gBH3-Ä`cHN‹÷1┹eª5dÄ„ó-^e¸t¦‘6]ŠÂë!ÎPr”z®é=Bw 6²•ön½‡HQT»dÄ}fޏ`•0®Í§m’ü¿oðY¼´$^)!dŠÐ|ˆ·Z -ñ¬ ˜¹½w²G,ˆå˜´õ ~áZA¯Š‘¤XnÄÞ•*—¶CwÏør‡^Ï>r†œ$ˆm÷³9‚xwþ!Ëqy@\zxlëÕr|t¡ÝU *¡ÝýàpÙ£-hË­ÁáÑ–¨´SæD:Á$]mwƒÁ¦€šËB‘>Tm™ùV¨EƒùΨh’ -áB>'ù#K´Ñ­jm bz@L]ª†@ŒÏͨj[QJ™#ŸûÂK{¼ôˆ—vx/׈ -–9RµÉÐrõ‚dü˜Ód‡XKb#P$ijD7Ÿç=Ì_ ù«à8£pSƒÿkíH¸³M”,¨„1lëÆ±BA)…¬˜/«q­€IÛé}šºõ Î+6©Ô–Šaq¸'ú„ÎTbãÀÃn [ÏÒ½. KB(·ŽH‰gË>KÑ—!y”X£{ -*(KØ2æKilš#uÒú¨kƒp¹ZF)oB`µhÑŽêîåªk`ئñ É©T^EvW26±HÈîgr„ »sçÛÕã™!'?ÑâÎùö –by@,]ˆ“—‹zyt,Y0ãñWvhËÚÒƒÖõ×^ª½2[Ȇù¢ÃZlð€µh0ßqú@‡ÇŒ0À*‹8ÆZhYˆ1 ê?Ðvo[;íôm[˜v¼Z$ Ýâèt³=•{QÀ[º0i—¿H9¨¹­¹Ý™÷ê)I bq÷–]ž{—Û4®Jõ¶ s+Ztf¼^½° D¼’TdÌÜ6ä²G\—Û¡Åë±ç2éÕ4>:àp¼8«¼+ýž'CØ-ŽR÷)ÖMÈA’Ô¸®‘ß[\èu¸ YËZ¶F×Þ“-h?Û®„öÂÛª–Pxg47‚únÄÒÐ3â¾¢F@Ñ(°O¹p„0X¸a4ÞáíJ!ZÑjï\º³ÒÀPÄ»¥ëfD;;ôLøEv@Ê„—¼Ã3Ö¦Íõ [ÌŠÅâšqÅÖËÀ’œâ1b$#6ãÈ•V2ŽŠ)æ<#bI -˜°=ãSc¿s= # ?Þ:QóbnØÎP‘BÏ Ãì½zº¬4àQëv8F„#þðÕ€%äí¢‰{»Ü$"#cC$z'Üß®Èó‚ œÛ™r*wsœzáh‡îšAòÐÞl~ÑÓ2뾃 -T¥½lÝé¡){ñ*S.Ga„T=]‹x‡÷\@s -'‹n2´[à!«—³a »yœÄÌíùžŠë ×3á çŒ`ŠC嘭µ‚P`Ç;îÜ£Â]¦ü"gÈ)’ˆ)[cŠ|ã /íñÒ#^º5|y¤T‰Mc¾ÖÉš@©F½sB›c%P ƒÄ„€Í¯Ì¥ö ½ƒKHã!KG‡ç‡a\i! -KÞ(œ/G<0M‡ÚJˆ}Æ©ÔUŒc¹´&¨ ,µiu²G,ˆåÖ°:ô‚p´Ðiˆxµ ÏU¡¼ºÑ @þ_Y'þHF /ïÜ»>Ç{Wý¿æŸùf¼^¯ò§Ë3æA-ŽÓÚjùrÁ4Á¦ÜJ½xlVyÀ*·6ÈÖHƒG ˜Ý%'`䈻ÍUr…D¥Å€^Õm íšjÄ50Ô¶Þv;Äåz‹…K˜Æëí™ù -%°dQf¸ne‡µ<`-·÷­ž!5ÐÚû™™íîÜCMèCÏ!S¾<õtDà$y®ÉªàB¶’û:P’ªëdÞµ¤$ç¯Z‹¿'¼m¤[lŠ–%tâù›hŽy§Á -q½³ðlv!#Fo›»F†yÜQ>„l(À\[³ ó®·i¬©Ôvö=‰x¤HâñdÙÁ‘B®v¹’Ë¿‚Û5íøÛ)e=€û("û“Òåñw$…ªF3ž±C¡ˆÆ?–Nöxå¯Üº%øLÙäêò õr 9ÛIߘ|ÏŒw#aYªY$°d‘< ÷‹“êë~Q-_îdz:(&Q:»„g CÁ#Om"îžñ¥‚f(ÚÛ„çí­JÌáù¯gÈ›Ía·nBÄËñxksµh; -wÎ8ŠÂ{¥èsX+2qÈã g\²S£ÉãÞhù”Ç»Éw"¾Ÿî¿C+ -ïZ¯?#­ŽüI* -œj{ÆÝˆÛ ××â…“”A„ƒ¸6L†â ãpRpŒQA:Êà¦aœ ï Áň£\¸œ â¿åbyë Â~Ñ:‚– 4§»W©ºCŒ -©úË?~ú¹Òýca ÄÏ¿ù³~ùõ›?ö»?ëöý·?ÿ±ÇE?´RA¹Ö‡aÈ×0,©#äTþ~ãñàcÛ;ç+ÒíóEÝþñwû•þ%_Ÿúmøyùýõ烾Þl_q¿a?Šûk‘ Îï{ô¸™è¾ú‘b¤óÝ1åù®èaêix¹–çx'²ü­,flv"UàÊÁd§,PðÃ?ŸžOƒ¶Þ¥•ð5wi—áÒ›¸‹âBfëPAÐEA$Z¶ATØÁ¥\z€KÍéú`²æ·=Õ\,»Ü~ÄêEüaË©‰£éª×s×[l"|wϹZ–H†iî¸"°Ô² ¹£‰`GÄHÞzìEÍM“˜fѶÒR­M…n){F…±-«xg1~ -ø~Û‘ ï …–`y,ôÂõ}ËvʆՀ¬‰µì±–G¬åzо`ƒwSát±O Ý7ƒš¼¥®À†­®UJÏËÄn×:#oÏ®¼̬t8:Û§`ÛZèÂF5мb2*¸ ×jš‡1-é¹?ÌÆ$ù•”/V„¡éÑ5W,àíl ˜1¢Ã¸ö†@f -¤i¸»X!ƒœ›Â00ÛœKº’ýnÑ…º„UHÂÏãÂ0ÀGuì…Š¡DÂ0u‚‰-C]6ñ’–‚´0[´É ¹ vžÒ£Ã=›¯ôHv:TŒ&L‡'|ý¾­V|HSY)õ2(ÖEäדCeº8¢…ªƒƒMø>°çjeöokb¨öZÊ$ÞÙ¨`æÎÖ §ºšDûqÇs6`¿Ø/ƒäHvˆî}о€a@`í#ü#xi‡7ÿþfI3úU&+šTÞÌh¤®Š&‘ù jÛ±¤ZÁŸ¿æ3œF9)uYCG¬GìXo6yݽþmºáMèÝ)x¹8¤Röq )º(~ª•³Z¹ª•×N•¹’”óìÁ$±º$% -±¬Û'8tSEÇuÇÔÚЫÁ@ÞD†uj ðxUCp÷€Û‚{ñB0Õl jb9(Ë‹EÓ½eó©¬N—ÉKKp÷tgÆ/[)ØdÈuz-çÚk¾+·1Ù·NµªÏœ&Û(±É žjÑ]ù5×îÌÝ‚ˆÀã¤Û+#CNàÑ¡6Þm`ËþN‚»µ¶`9 –‹`é,T/Kì°"EnUn@–"û)•ÎRé*•e™ ;å.V¸ñØj1VOJËـ½kås"ìÍ3rý©D<Æ·CϞݘ½Ö0I³†ß³ÄÝN‹Ä‡TÊä™»œA3E—Ä—:!ç².œbZmBQ¼SÁÂZ—-OœQ­–0ûl1âDÙˆfeƒä‘^XpÉŽ³àX1ÅêŽA.öN–³`¹ -–Ö€Ñí¦à'Gd@ËÑ® :$†N¸›kpù §H=‰Õ‹Xí‹P8ŠÝ»³]h5 -¥ç“=ñMg8ô ï»á  ¤Qš}¥C÷²µ‘·oÙBä­:Ùxrœä¾ÓÂ[y—Í ©F“]°Ø¶+ -Ò:á,ÛðÜ}ß\¸ÙjËØA*ó¶²·s¾Qöž³¡¯Ùât°œä],Ê„ 0…é°ÞAqL—1H‡Ï½#ø”¡`9 –‹`é|¤ƒŸíßd¦5ÎRnZbv zºµõêY¯^õêwêe¯pÆ!œ :,îpØõ -Òð -#ñ¡~&ù&$Y²á°ât4ã‚ßuc¾Ë:õMH%YÆŠ¾Á®ÝUûÿP¸¶7.¶w&;Rlòú¦ô|ÇNÄЉè=Äðnä*P¶üm‘ûŽw%¤ -d­öíÆ…ççåÀPHuÙ,\¶A¸04vÈ›nÈc=ü‚Ǭ:BÃèkÀûö .©D=±`ü²!x aE½ÎÕ/<9Ð.G&ŸóE0Ÿ‡¡¶U¿‘=O`t»9Ý'ÓÕ“`½ÖŽéÁ…› ¼L@H¦:–|‹Qz1 úâ„;Ývh㎜ËE°ôL7 hf{=ÝÞlx&ö®Ôpј<ÊÝAäp׿M©9kynƒ“o;׬Ƿ}1 6P3Ù"$gHÉ¿gÉzø1¾'ˆt²o‰eËÍtÑCÁMzÌ °†X3£Çú ñ÷9#¼>³Zµ¼[u‚RÐ BïñNœÞ©÷óˆ¬Ë&;%™£}çÍÓ¹1ŽíFå˜!{iÐÍ;Àp™nŸBhÈ ”%‡aþ= îëŠP0 -¤œ©•|ÌWÁüh$ÄÐ…3¤´O¹m7aIÐr4áA×åÐ #Íe |r(L‘Æ‹íšm¸ltÅI«žµêU«¶´ž¤s´Ÿ-õ{àCM3ŸíÜÁ¸c9á«¶êw&ŸLæ›kêÊd+ nVŠP}†úØ,ìµL  '£Î0;HÅt>Ý%£L¼¤çE¼b:HR`¡Ù 7î¶8ʂѢ…³Û¶¦à¾ ÇÇA æû¸‰éO¤^I§Ç½1éePÌM4[#%°käܯÙvsäô‹¢N—Òän ¾‚n©ß•;=D<赟bé,–®b©%v$¡ä»ÕD}SÆÉ9Ð’3¤äÁÑ6»7×,Zõ¥ÜÈΊ˜¬ˆ‚Á.ˆd’%&ôQ=1²…±œ&#Ù û²sýUx22Œ † -¼‰ƒ}; îE²Žîü–ëgòäƒmh¹Õ“"ãór[R° - M³¡‚kB$Lå—!gÙâ:@%BÅ@²’ˆãó6ž’oÒƒ! ¥}ÒL°¶1GwEºíÞég濉BÞYpÂTk+–Y¸J¿j³ý;òRP+Átô¯äú´„¾}»}ÃÂÕ .A/¹pÈ@Ø>9;W.*³‡õ$X/‚õÑáaFPýt„ר8 F?ûÏßþ^¤>¿- -E?¿ÿG}Õ?þùG}ëŸõU?ÿõß_úÓHVUp×ë,êO?gáÇð9Ù××õAÔ¿¸²îO#X5Búñ÷ñJŸ߭ÚíÇÇ?¿þñžŸÿà?å—ÿ·Ï¯ëx¸<þýKlª}4”šKôߨ¹Ùó»_ˆA³•çŠ×»lëZ“r vx/õ­È+®2L8y¶#c³8O²bÉTß”Bÿ~yBΊåªXjB·›Š?ž6®Âk¶=6n·|ØÎ µ,±|\S7n ¼bmE/Qª Ïà7ͽ2<ÿ]zÃü(ìå/[+ivš ô/›ogÄ{ÇÌ(Gx9>1›!Fµ"”„Ù ;Åø{× -¡’E,¹Z2¸rþÖ=ëK†W"%ÙŹTŸ­Çæ>äÀŽõT¥p¾_Š;oÍ Ç†v1AÆðz4ã¡×Eͳœ$ꊻ~ê¿©ö3FŸÏW¡H5ÌÇ&À¬³ÕŽt3¤œC–\oã„3(Yx]¬§x«R–T€”w‚_O n³Ï¡¡Š0Ñô“hœb!œíŠa1¼ÓÂÕÑ&Î{LöHÕ8|Ǩ½Ds_„ƒX™}¿,¸dJ\É_3î.¸Ù3–äU¨EyöS/õÒU/=^"åXdG¨>!mE€@H ƒùÎñ°œËE±t(RP‰:ù¤¸sÆ=Šû.Þ:Ž -nIÁX ¨…Ší¶)ì©âsuèI±^ëIqÜt6nޏ3'æ'1{9>(^­›Ù -°êl’ÙtÁ‘Âù®—Äv3eHÞwõ6#¢o¾¯ÈÝÌ¿5Ôúš.T\Ê¥é9+–«byÜrDÏŒ_±;µ=¼Ìy´Ïå)™¡d2ø®ÖÉÛvp;GN¸ÙÇÓ)¸8dÓÙ¾ÙTÀ -¶û­[ñüKc7†`Ïà9Eù;dãFªÝíö$¨§Æ.ù‹%yóÄèÆ‡§'ÆIl× ŠMœ"3,¿‡óìh¸«7\´^° «Ì–ج=[=ëÕ«^mÍv$DJ@γc!ÝÞµvðÀiƒú:Š·:Ý$ïVm: Q€g§¶èL‰ -.Šõ¤X/еCñne¼ScœŒw»S4e,Z¢Ù.WÆ,§èj»ëƒ† ä¤U.Z¥í‚ZÂÂ%ÀÝ“g»#· =•öj$8a[ñ–¼Š´Ö–-â[6E›8#3h6ÚG±$²aAˆ+BNÄr!–q¬‰ -dÖVðÀÞÛ3ãozoòWV U±Và²[Èm¨åÂüAE¼WÔ¨låj¥@F N¡“«už=±Üçj¿†s…b¬³³ù¬â¾ê;[ZRD|—·IÛ§áøÛNÃÕ¿[KÐÖ²_!w»„5gÜåkßÌ8Ô¨¾¯¨áC~tDé|Sm~OŒÇ_‘CWÓ%N:év5 ³®EŠ>ßw›B’éåý Ü·pñ¹‘ÀR²Mª°ŸT¢ãhÅâCVÀ°ÊFŠ( L„ÆIÝ3nŸ Ž‹”ù¡1P•@Klxµâ£YK» -/4_õ§õc¡üæq„‘~Oѹq=ÑWzbWc0ÎA^QœÄIçt5.%‡ÅrPUºuÊ ä Û¨‚ 3…3^˜i§¾FµB­8;™Ñ2~•÷@¿+ú0ã¡ß¹ÚœØ#Ì@´jÓѺÕð’x”r‚šr«Cô¶àÙ³­þÝ)!W»9Û¯'Ä}wFÜ*3_·¦7tç[;‘{füÍQ3ÔŒaëYïúäT‘‚ësUbÁ¸§-Hœõø‘Áu4góäD,béØfò¥ãtÌW 1é‰8›»‡Ó<þý·¿k\ÊóëL`üõåßý½þñÛïþ¶ø{=þøç.à à9?[®³àTž³¨éP7ù¿??ñ6û5Šã3wÚd°|(ûùÿñK²èÇWýåõÇËŸÿx£??¡¯÷æÿÚócŸÿæÿ:/Š˜Ùa¬h]Q’ÿåkµ_/x `¡"³g9t'ñ3¢ÍóÖêx½Íã„Þ€$ôãõˆ!«¡»ÑñU}d¨Š¯3Áûök⻼³5옢´Àzu9±Ê…Uz¢øÉX0šì‚êåL@ŒA¿\Ñ…I«7â`Ý–,Ä䖆ܶ´îÏEò -›ðz¢àâ³pÃ%z·® Û7Þv»ãä‚ÝÕîN8l=î„»\ æ~¦dÆ8C˜rûÙÃF‚L]5صŽjÔÙ7´—ô݆˜Ô\óä+cè]džrVÂÿ$æ31_‰¹Eó•˜[ĹÚMâ¯'U(`°sKºDÚ©öPM® =-ßVp»öôÌ÷›Ú³Õ¡AÆ€†ºQ‰P²:™øªˆ>‡ˆáú¬©­áuf\]¹ÚíÔxI;°º#zuçPë¥Üql$NöÉcîM ›—aËix»\.¾s%O?çð6q¸wÉ5!¡K,¸w$ -šR;;ºÛåô½Û®Sõ| ¼í´yx&Æ+1>nmžœˆåB,ŽÍKÞ1EÚÄ›7ß+7&Ëu''Hªá%ºž»H´cÆÃz<ŸxùÂËñ†Š00µvA/®Â¥›1^<áâ;Æëò5ÎÇ»aas SmGÝ2æìá̸‘©qö¥#mv½¼MÚ7»Í*<–}vÎKˆq à9Õ§+澉 ó££NŸñØ"žIw]möΡ¸ ç0—taD âP+g@’nÝ›ÎVýàФûx1ï?%ªXò ÍîÅêø&ïüúîóÕéYwâ}«¿{jhàjKª!‘ç\i¥Æ2jØo¾îÁ¢áµñS¿r&–+±<ú=ý -~ÎêõŒýÚPjßG|&æ+1?9—«ÝTÅ×A»tUXjß Ë̘K,D{¸—ô„l)¢›öµ"ÎóíSD¨aU¿7àÏ ÎÕ«š¶«Ú2ƶŸSE¯þ3·X:2³éÅgd8›kXkû@zË&ÆHæ ‘OÜ>è^ÒâmÚØ†½Jžâ¾ã(&f'Γ) ¥ÀÕÖÜ:¯Fº1#ƒ¶+ñ>ì©A*xFDí*Ñik=ÁÜ·t¡„ÕƒÃl¶ F.—Ÿ$qÔ­glœ’kdÅ7ËÚì`>ækbQU»;ÝÙ†–3s¤†åfë´Ê³#îÄÛu…´âö›‚x[ÒͪWÍ<·_£GßFQ¬­¼Œ~wSÄÈDq ¾}hÌ?ŒþË~$¹qóPxŸSô‚@‚ëÁGÈ2©l|ÿª-͌ٱ ²Kl™?Û3–zÞ@ï} pºŽ‡ƒaZ"GqåŠN{®¨s-UŠÓAqÚÚlP Z‚Ãi3RC rZyÊÍC#KÎm~ѵâ>Wøé¶Þ¹AYÜt¾tã¬ÀZ\Åc6odº­ÅlÂ9ß®#¶EX©Ål`oJ¶¿~ù5#°Ü¿-¢zûö7{Öo¿³Ç~·gmßÿøûóvÛ -ß?ºh?¢žƒºÏ¡àþëqÐ_¼aÿÊ~,Æíã Šû¾ÿ½ÿŠðó»Pì÷—ßÿýñ Ï/øö§üÃi÷‡=y¶?ëOQí·ä ·ƒ¡ìc˜?ñí“L7ÖºTñiç=¹s‹±¬OñWI­XŽŠek’‹žÞmu;Jâ­UŸÏ¸;?Û3îkU—\Ô^™•×ñ1—™6]1MG E(œÉQ|v¦ý~‰g† -±:¥:ˆuv°.¬HE¼±Nh.T²W#ŒNO×_ëw$mÆ<øJÄQóí<®wÃJËf×W Ü^¶îž¸@óÕ»å:°}Gäñê ÙË–šØ94âY½Íùö©õ[#C@m#û4Ž!‰ëáíäáyñ|-Í DzfcJµ'íz#Cô1¥«8+„½m›03 i»ãR­8§–âjòÜsÿtoœý/ÇvFÌ£˜Ð^™ãûȲËÿŽÆ07ò8x\FÔŠû¨ÇŸ¯@A¼¼ãFæp„Ìårr˜jkÝr™Œ!ÊJw%(!¸ä~:%^Ÿc[Ndôfü©Wj½rÔ+ÛóT•¿…!ѰèéDÓf¢õQ¯XA¤x‰6UJ,5cÓ»½^xèÝjêŠïŸì㎳«3ùÛ6ãUQ=âÙ^¿ŠŽ|Ö7_Ÿ(Ú9-Ò»Zfï⬈§sº=WQŸü›ïÕGÑ ñ.;”!ÏU õ®ÛåeÌ… D¯â¦+Œåæ+¤ y•>¶ñÆÒ‘¾©Ö›ŽzÓÖX¸c_ô„ß\‚ñºx6Ù|WS»Kb†“¾“Õ_#3.Áâ}eüÊ-$D@=µ³¹Á8“ç†q—Å8òÝ‹X1_Yăœ°V.¬3W‰ -¥$lz¶;.ŸmfK0önË=(róbën‰Ç[í‰T)NÅik·„›qy_îö©}†»¬> 9¢ÐÛÙÓÂ~îîóUå7¶pñún°ìø÷Bµ×RðÌk¸L*ÅrP,Û¿mãX#d.²NïŠIVlŽhZ¦˜%f¨¢ ›ñ¸ch?ßô­ÁÖÄOŠƒìÝ9] ?ƒŠƒK±¥Ã«1J­™.Ëqþåbÿ+¥U½z³í*8·Þ -¤¨í4“Z«µÊÖH³ª¦»BÝÙ -äB®â ¡2 -¦E–mëR‚‚{]ÌWÄ\DŠ»ÃYòElÀd,ßXi]zÝ’PH¹¸È0È ƒÔî¸P2zjφî•s].n¹d ì^ñ´àwÄ&Æf ‰xö_޽’  ìÚ÷îú3n¨6ËoìºnÈ -°/âù@ÿª=iTkÆŠ{fÜE:¾‡Ú“š}1ËÆ;ÚZùðCŽí‹¥ÒŒJô½«§½«Ç“ó½÷ÔãDcHìòÙvkªí›¯« º×ÚµGïö¨}â]M@A±™½½$ÙAg/*6ž¤ÒtÃ+÷å@7pÎ0èBM -©M;/ñúØ|ÈÀÈmã³Xé½ñ‡^7X¿y´ó_[¼êS,Ñe‡p:!.¿†$FˆYøñ"±— î‰1çÁ™LhpEDª§£âô¾ˆ`@b§4F©=–rÞgA€œÖ¡ ö¿ÛЧ± CNÞŒ¯Iâ>’ðmŒöÊÜ&‰a½ÜnD¨½Â5Ä|™&!¦àÔÆ°ñ¬f.ŠÙS<}™ABAÊ« %Z4„«ÕŒ. )$yæ 3V…¨ÞYTAZg>\ivd€jEÌáaK³CÛ§É_V±ŒÈWŸ#g´Ë`ÚÞÑ9?¯ðpWJ¸óµc¹x†z8BæÒ¾‹¦Q¼ƒ»¿uóå„ kˆùÄrJv•«n¨…3XL\?—l¸¦î%WN*öP¢ŽµT)NÅikÃ0Bbr#<íãvqôÀ_ë!±` e\#ŒäåÄ6à”;̶oãüÙš957#¼s‰Iœéÿö)öOºb(‘*æ½9BÉí“îÅ®÷e„Ù;’ÎN¸™Á¯ÁûZ‰Æj"ShoÜDÇÑj'DI=ÿ^àˆ.½®# -b›z¦!KAŠÔ>@_â´±­±\Ïi;fVc%@n—ÇD8!‚{ÒMˆûˆ…ƒsÖMYÐÁ°ââº;º¢'*ž„30Ñîã$FC?[J25Û_¿üšàM†}_ö»*ݾÿÍöÛïßì¹ßíaÛ÷?þ®Ÿ’©Ð{•2#¦!ŸÓ(aÿEØ–ÿë‹‚÷aì_Ù[1no@PÜóöþ÷þkJ ÏïÚËõãå÷<èó ¾ý¹¿¡žÅýß6kÎÛŸ÷Ù÷ö! Ú)åçë §'ž?>Ë|ø,³ã>:¸/6>KÌ%{Š¿6œjÅtT|p_| 8žÔû¬¤4åøXíO‘ßT[MÒQûó¦ÐaSž©È…7üjõ‘ÚPëý¹ >õʽ>2Y¥Þ ë‘Îz¡©¶Ë ¾ZKÎŒY›nˆµÞxÔ·–~ìàCdùTœ*ÅnÖs%nÆC÷²=ЇQË&d©ìŒwˆÎ×5‚BÏ?aJ¬1åKëLyf„>ëºF ¶/v±(z¢ì -j´hP·(yw䌗s‚".=| NµàtœZ‚‡ÒCPèäÚx¾ *HÁ¶)^ãÿkSP4vMqÖWWXR¸†˜/×vÅHê@ð”GF,€œe¬4î±¥óæ;™Z.1†ö7OAM+EpÀ¸ÐˆC´ÎÀvD ;4b¥7ôÆzÝxˆ€Ú0Ü=ßËa¸»ã‚ëˆÉæKöºéÇFÞ'óÍJGñý}gWÚÜë:@Ÿ„Új3ÞOУçáO½±Özãö6L[ÛÕj.”‹1tÆ‘A9y(1›#"BþûÕ’\É÷s -]`0ÀÚGðf9³ñý#%ÙrU„ðÈr‘ -ÒÝ›nIO¯”J%òƒ5PÄÉ#:ñöxD9!.Ä¥1×rüȦ†#¨q¼dó!7Û%™T9â÷.ÖÒ®„ Oö÷–°£ÍPBOG{¥„ -¢àaâ®pÃx+@\Ú£œÑ–+ÚrÞ§›(V™mf£øõA$bÑæ\-Ú6«fþÕ"Ëv” -Ün1‘Ìà3Þ>‹}AŸBMÄݾ0{V°*°r‹ðV•—µ€¡Íæv¤7$WýL‰9j¨,Úa 炸«B¾Pƒ%É{ð+œ@«†Sb½ñÃf D-~Ή¿0'X -j” z/[œ8Dš)Y‡5t£N¯!ï’!âöÛÈq`x=Ëi6âaŠÈP3…Mo¢}Gƒß¾²ó[!©Lì’#³Ø®$‰Ð.&V*ü­]çé± aÀï°­yW¡²Êô®>Žß½ºÎ†ñ¶aWH˜gkxX¼àšÚ[³»ýÎ/<…4ìë3÷yDŒ¸ºoRP!Vó6¢½Q …wº¸nøêâ® ®ñ‹— H­•vÉl™öh•¬ -ɨ=:åŒW®x¥Éï]¼áÅ)Xí#5\õÛ“/ôKj4»Ê86‚lù[[ûSýúµ1OVĬì<½§ ElPDrsËu6‰`Ë]—ârA\z[-5Hë³+å"WcwµÕ´ ¦ö$4$˜`È‹Yð^õABV™n cë™j#ø=a•V¹`•·–¸fŸo”õa–p1±.¼±‰U†jØîšAQ¨¶½áQý9ˆØüå×úí ¶ùÕa«yáh½ì|c®=+ërâv‘,g´åж¼µŠä n%°R[¾»ŠnýÊ„p¶÷Žâ–”K¤„¹ÝÈÁª¹'ØFãG’Ï5ä²Q'#o:•E éíkÓéˆ*Fn¶âÀ”ä¯bn]Ÿñò/¿u÷ÞGn† ESËÍ~. ¿ªÝT@KšÝrF"F<¾›M§W½_7‘ì&› øds€?¬ôëêË^ϦWß¶F -p‰"n~¿£ø$‹5¼ž"$P-‘†GDÜP´5IÄ;a•V¹`•?±†eG¡J8ÝV´ß$^!j0ßæ ØÍ ”(o F ¢Í‹¬x‡·X¶IlÕ³Óê¼¶ž1ôìÚ$)0Ièhƒq—áÝLjž>1F¶ò'•ÙqÂK'¼tÁKM~… -$Â0->Ñ–3ÚrE[ZhOªîä÷ãr¾Ö¯ÿÌ­îû¤éŒÒ®1Ôl3s-ÝÆÍdþj™ž³Í{çyÃ~Gö²ýø­4²†Õäë¶›s ì£ý3,[¬ÛdðfhwRm6¨I"Sö„õÑô!k›íƒZ¨ú«Ä»Œˆ -\·©ŒÙŸƒ°t[µi>¿D¡vÓmõÎG¬Åg¥Eú]qöd†BÔr²E.Nƒ%iUóEÐlÒ>¸î6ß~ <ÚfwÝAѶ½Þ26Ëî"ꕤÀ´K}*  #´Ãû㳉¶_KFÀD‘v‡%Û@Ž)yó­!âõÚƒ$‹úäbþÀFP•i´’Õ£-GhWTÃÏ-4m ±PáÙhGº™{ oë÷+Ä×¶ÓƒøEÛÙ«?¤ -…©å½Oúà í¹&\ÚJXâÒöê¼l 5[k_k‘}hã” qÝÉH€²Fü®æ è3¥(—\˜ªþýA|ÂïÏ–÷_éO>>vžý"þs9sVä=ÿI…¢+éþ3Î/* (œç";i3·=±ÞF¬!Çõ -ˆßÖª®Çì²|”•—h{ÙèòRyŸ´_+áÓ4š´»Ù -Tqe·(îŽý6Å=5å…=P‚„¹6¯Q«!“EǶ`î³E>¶bÅN.ßäѾ…„|ÔŠDY¼ZNÔc¤°9Œšˆ#“­‚ -òâCò÷V5÷ÚP¿TÝ~[Åa(–ŒPP£C»+…/i½5[&P˜Ú®»†-d†Š9ª9wMw2·Èj!Úa¶pFÜwd1¿Ræ–v±]!¬±‰émÓ&¿å„¸\—~½1@­Qëg»ã ÕÖÅ=RÄX´VË7º™œðʯ¼5Ý ÛœÃJ6fTÝÝx5DìßÉl %kC*´†|;çõ­VÛ^þÀf€‘ýŽ:¸<â”wšB’°Ì.iwá†` ²…uý.Ö‰ÆÀêUK[Ý·6[lPµ]Î:ͬ'Ü"VjmŠ{÷ÐÔ¤8ºoV™k+ëjg/Ò‚ÁeÌí7o”È% ¸OÄ匸\—â“°»¥ýTa V#ŽGXðmŸE¼R„aØÏñ{UD†_)b7Ì ï¸}"+X©í7ã¾Zùª¥)Ç>ñywÝY7½º'‚’¤íÅkì8d ÜÃӎ̨5šq'õv¢¯Õ;rw*Ô¬í¦¶L.  sã¦?´ñ”ßí2ƒ 4×0—oßÜt?óZ \:4ü0årLžrºÚ Ì@ÓÛW§afÐ’vZd>Ac¯‡˜•|ÕÙôÅ1ðòÔ€%ÖñzK2w t¼d¿¤ ólUœð>jk¹ξºAhY d)Úq}í¬9á• ^鹸Z}mÔé‹n G˜›Z´6îâmúÃÓ¿]NjáiXokX›÷i8ö`NjxLûÚ×’¿ª!¾™óÑ¢7xÜ(•÷ëlµR{×=LŽKT1–¶³É±\K›ã:ÎìˆsÔ%îºÄää8šOÊ»x›¿J%HÕzÚ±åŠF··‚”òôŽ6Ò+`¦ÉÞ0´õ @¯*ߨÓz#Þíâ2`2žËï0´ŒPj‰Ôp—ÙÉ×&YAt§~&ÙÕI÷Tv:£8*;xp\È뙆6®ž RNA¡\ÓÐÔk;4"~l ɤn4<©¸Uh«?*>ã&†$Œ9Òð´w™ •` V[H‡ÆÃiAþ$­A`Ìñß§ó‚@¸FºýÓº/­í =‰ñªAîè;3y 5dÊ8ñÈ‘ ÕŽ•±H6 ëð:ü&ö£ kå§«u¸¯| }sÝÍc )f ¢³'Ñ@ŠYÕ‡†µD7â¹)—!SÇÁ­Ó)«€wžöÑukxz§TG¬Q癳4ä„X.ˆå­#›]Ö¾ºu86ÿ)íÏÕ‚c¿]$˜AÿO~$IrÛPtïSÔ  @€kAGðÒotÿ£ºFSQ(2#™äh1ÒtWUöoÌÇÿ”i§&0-¿/ˆkl -˜²x­sÅ‚[Eq -h=KÊ …ƒ`{Ó¹ò°®â±ò£?)§þâ­ƒîŒÙÖ‹ -Ar[Š×K­^:ê¥Fo×cjã;ÉÙ$¼Cé´#ÞŸëÎï¤êwGg¾Üêå£^þ<ߣڑŒø –T¢P;ÂïÌpÖ -?M_ÔŒ!Už6Âû[nj0T \#†8dwCòñjTnkÎ×€K éô„oWÌÕwNKDî3ÑhB‡¥V -ß gÚ+7Ü6¡»×XÙÄr@¯¤>Ç»õÚÂñn ”ÁŒú‘°Lˆq­€úióÞŸº™@5jµ{LqQ1ù“Lƒ¥kšâ;3‘9\:)&ªMüþ ÈáëÈ=é{«øt·…¬Ã•¥=Ü8bpÂ#Ž(ârP\FfLLUofY5·_F¸â”8:‡Û8® lÈ7cÄaã¸QÌÅüèoœ$â(ƒW›¯$‰)mN)717(ø¥ï¹’zÃ]äÐäêu‘¢M›”dMb ·†‚ÌQßíײò^ÙàGQ’×:Š ¸”þ‰q­‰§¦B ølIň€¨Ÿ5Ž(­ârT\ß´q¬.2ç0ÑfmÜLGø«ÆÑ|kc6ÃÖñŠóÝŒØ2®;Y³‡Z -cx±RNÕ?«A)/ypæìï :£Ì­`> -æs‚Ç("N‰ -,!/È=\ XÂÈÂgõÞ¬ö)’“…L'ñ A|Æý^‡{¨<ÊV/ -Ùr1v÷ùVRíµÒ¨•ƒZéªõ>¤ð,šC³ ˸“}­@–pOSsƒŠGjnÈz¹øÂiäŠé¥1æˆx¾þi‰%çëNbaD,XÛmÝ~ç‘· GçÑã¼ßm6Ì”»†žï;C4«8<߆Zrv¿ûú<;àp¼R)Á-·$g„‚!º/Ö‚þ¤œBîùà ¥Õ[ŽzË9ûŽ@el_®ª©Ík¹vÆ¥Q\ŠËÈŒ)A¬û`û^g‘d‚\óhÆÆM›­x·uÓlxÛÞ—ñIJ ŸmîðhøÞ-6`å>N.S®Tðö0›‡ìOÞ©ÎìwÇÃÌ;B$íÚ:ŠkD5T¼ÞYÄFà¨vwÅM±AöAw7o0+F6o¬æb°Ü¥æXHo'ˆ‰ÌŽˆ1û$ -žuIò׌{µZ騕Ÿ05~ õî{sj˜ù§%šïŠ¥ìbÁŒ^¥\ظQŒ‰Ÿ’ÿûú?V{}_íëû¿úÃþõ˯þÜßüaßþý¿¿@•Z~NCýT´|˜†¤üšFMþ,`ÿï_T| ãùã× ž@7Äó'¿þÿü5ŵßõ·×oýýǃ~ÿ‚¿ž-™Åëï>#ÖÇÿ–ÅåT_l˜sYß}~ßÖ§Ð@ñzå/ÄLÁ3z)ŽÎøXLRþ²óçñ®s#Ô -U“¾W|©\ULPª…3ÆÓ3~·tÇËq„­âËñIƒœ#73,Õ‘—Fq9(.#3Vó\Ô¾âuJ -ýªaíGñ2®ÄPùër¼³<½—¨Û28Èö·n¡ªS(J#^¤rÎÃÖm±­ g\3pÉ‘‡Ï:¸ã†KG‚_‹NlÖí9iµÊQ«<¾µç¶Ÿ,þiåZ£ú“^§ã'ÿ.r:JV`Ãp¾wäÃXÇÅ\@4¬¶fû}(ҧˉqÍÃBþª $ÛD‚ሊ“Ï8ÕPñb± [fÛhëý)ÚºÓM×Mµ1µ!K@A½›,Ïê ý+5Àˆ%í»û©a5èå%÷ÈÙRƒL»§3®²¿Š›äCFP¦~>”Vo9ê-ïÊCz{šMu/B"ŠÜ»˜Ø L1òîŠw"XÖ €g)nŠdPñ«¬~FÛêò|V2ÕÀÂÍxëbd¼×NŒýOI hiN^©×Ç«¸×ñÌ3m«†S¨ÈagÌ¿0¨ÑK½ôè„dqëòN'†U Éý†[†ÙrÞëÆ`ࢶIF(VîÏWZ½rÔ+½ùÎd¡ -©„¼ ‡…2dJy#ÅNÂI)T¼Vs© ÃT[1#Ð)8Ëåæ»Wô÷D ¼Øt% (ÒÍWçT÷æ ¤aŸM³·jg"»ª„ ·à|ÑS ¸òÿJ£WzåÑOƒ$pM< ªý -Þ)Y+Ëw÷ÅÔ†+ ^‘yüöìßr]Ünݘ‹Ã½³ Îi´'ØüÖ`¹;צzÂß™¢l;Ý·7CeÝ…Ú«sÔ(!fÌvVÃy_(ÑN›¶]_pÍ`\z›&­^9ê•ǰ†´†ô+þY è¡i -jµÒQ+=¾‘w$û«‘˰çéVŸ"÷¡õ줓ûv¸\näòA.?ú¡»ÍšB¢î‘¹ˆm…’m"–´Ô}ÚAH€2ß}±5z¯‘¹ÈÈ +6« -Ž˜wý´Š‡ˆ,vÄS¨†·â}™="rí3Yi—£âòèx¸™ü ‹_ÿºQYpÉQNœðeÁÕ/ŸšB¿Ç¿W™ŒÃvûÓ¾£M|»}¹TÐEÄš¥á`f˜KF„Bª5€ßÆÆƒŠGl±Ë­3ßäOÊ1ö¬·u’20†K·ÞuÄÆ@Zú¦X'&œ,Íbb¹˜84T»ÛÂÇ¥±ð§¥sÎ9"÷=,˜ýÝ[cTow¾#j?Íw§ËèÉî’4ܶõàÕ%ª¹%q"´œ§·õDiô–ƒÞòð - $Ä%O`µÓ;gáΤTwé W›+Ýî“Ôr%(5̳?Õ÷Åí ·W_äŠ%ðn“ƒzGòl ‚cBû?÷U“ä¸ÍC÷9…/$Xçs„,“Êfî_õAv&#¥ S.S]Ä·˜ž¶%±Ÿá‡÷c`µ^ž)'ÆöR{ŠÜb—K¶¼ãÿËV÷Pëj½ âÎÄ(ٚסÊ×IÃÔp†~R»º\L]´J€:ï"Ù—´B'¾zÏff_(*ÃŒù¾K…ºhÜó´Ì-ç´"Ჭׄ¸)Têôî’ÃIñ=“Î5‹¸ y–ÄéÃ$VLmUAºy|Z#F[wŠ/¼X•Òô DÉ´Ckv¹O”ª‚™Òô‡ñaAÓàV ñ VȱËpƳ®y:kmÜ$´;9‰÷aUÏå—AJ¯_'hÉoAÆße@8¶¶õÌü*cRüýÌÚš…A}9#öûøêX6UwɃŽõânb;Ä¥ûÙå¯_~íVúã}nPTïïóÃ~ûý›ŸûÝ»}ÿãïÿºP»o1{š’~˜ÿøî ·”Iþóß®¬÷al¯ -P¹j{ÀÁ–í/?þß>&cûñ®?Vþ¹ýñû?ýxA÷³·ö³xüŽ[¸ýùŸœR¤mÌ#`­Ë/µó„î_åÀ3vúPΘpSˆ¡­_öÔR¿ˆS&¢&U—©úÞKë#î.OH]*£ ¯·ld k°l VÒ²•˜<Þœ¿3Ùk…ø$¾ 5œ¬S72ŠõÔÁ8àvç.¥Y6.°Jxw'Z1™?Ý[`Å?§{:³ŽÍâÌt_˜…·*×ÒáMo‹³C³€B…™®V 5€T y•Py¬¹éì×¼õ@r23n˜ZŠÕ"½žç á!ï€ÝIT¸^§8ûXe Z‚H³Útíò†63Ò4Ð ÂÅůI½Šéۜաp}– 8S•äbЛ6…·o‹í‹é&)9\ñj5˜8Õ"YbLÔÀÁ–lbÔ VVÇÓ]á+Œs•›˜Io©¨ÌA×ý ˜÷€ù˜ß|†/+Z +ÆF¸~UŸ—s3@BÎ’²V· _\$Þ”ˆØ‰ˆË…N<ÍÜ yÄ>É63Ð -–¡Š}VÍðm„‡L@iŸàâtH5á® Õ¢ª¶ ìzÖÑ ±—+R ³˜ð&qã=£áÔUÄ¡ìNãî)¸¡©U¨i¸ëq«þ0=.ȬÀÊí\\PÁwÒ"^…ìcÀ§'<|nÂ!`•¿ש&Q ¦È¹éÒ˜OV ©°Ì²16ЬÔ:§Ib`¹6‰MŽŽ–kÂXåâê35;0h±ì2v0ëQX$q­Ð%سG,zÏ#ô)àýleX€e8œ®nV#aXÏ#¶@FΉ<.ŒJ·a‚üL¦-›Ó¡HÔ-çй²ëÓŨ-¨ºŽWóÄsêÄÆ!r™ÄmcD’ì ï7Žv€é˜nc &ë€e\1ב`ó§{«#À§³Ùð™ ¿¬jA¯XÕ38U\o%SÕL×q¤ë"® -˜J%¬‰D^pˆ@µ\Ìá7W.t9õWK”,×[82ÊL÷6¡w¾ 5Ô^B2ð  S9ë4°þÜŠW+E {—±OÁ¾M‚8F*CdhKfœÂ`\.î»PC(´d±…t ]àZ¡YRîz€©+‹BžC‚ÓDRLU|°6øÙ*¶¥[MÕÒøC)Е@W‰4­S« Ü -¨àÕ•a÷LƒŒ#·=EeðH“èæÔz"ëUi–©¹\„¢ ÏÙÂɬÀÊíÄ‚!‚"ê—É×GKæòEZ2É—V O7²sTy[5Gðò¾f}t•xP:H´`+æï gîd×T²Oozû•€?ìµgQ…t-']áuGÛ\-ˆŽ 2†RôÂ9SΪùÕ‹Åa‡öT`™à÷ƒ]‘ Ùo8Ó°ÁjŠJÙ°·aCã=T>BåÛ€»YŸ„ûø>Ÿg2W\ä–#@V -Òî¬ÛÁ­;¸õ·ÞFTàb~fjhÛI4L ËÄ®”¦ü´šŠE¡æ¢ƒåjk\+`›…ì˰ÜÞ2‹3‚›)>_¸ëe>À^1IDÓ,)ƒÐ—.ÝgæÊ@õêŠùæÊ…œ)£ë=>\ΦR·‚Êï2€7ê"Q}5æ¿&ú<=Ó·©«O‡»‡+;¸r€+»á¾ª˜Ò(RÞõ̘Q `ãDVáUS¯VÞ™ûæ ®7 î]¸Cþž··ûtóô ²– 0c‡úutølë`Yb‚q©×MvôT|Œ€vE¼Ø‚gJš ú܆Wt52…âcþ¢%û,3l¬‚™$ Ó$È-.øp‡l™]#Uh8|:¦{ -nÈ„ c¿¸ZΜ®Q¢0V°·ÀÐ&Qá(»g„áE™H—U +õ<êÐ;´ÂÃ@Æ{À|Ì_ x£D.sk -Ò-¢ÄÛOUb–þVNãÄÜt¦€º? Ö=Ôz„Zo¯¥wš©áÏ/Ž “À’y—èA2_i¨­‚½°œÍ4^ge©½\Zò|íÝâ q¹³€‚eJj@-ª¹?½êt@|¾X3ã‹€µ¦í¯E·Ãïÿo“ý{øçÝÝ퇃öâñÀ~ß}F^ìþ<Èe‡Ne“ŸêŸÝ?ðõús®ŒÄíÉïÁÊW#žXŸŠÏ¸J„¸:Ù¶ÇGˆO»è3ÄÅìMÄ÷'‚WGlWÏx’-‘ÖMé¿të>•{õ­;Áˆe8LF>cjâÕ¼_ŵùkuøCFx´2åTŒP¨M#F\ §ð†\}¾ùÜ þî~VbùÒÅ´—«³ öm1}íý‰oOM÷…6˜Õ:œ¯ì˱Œæ{tã3Úð·L,˜JÌ~¥6œRß07O;'2ð2ù,™özÚ9•×áoï eˆ˜÷ˆùˆ˜Gˆçj„_--ÉÆ‘±ó×’¤I®-Ô‡k<îó´®’%­çÓß-M -r†4麠’Fº€kÃXw×émÍÀQ_x‡÷“´NÊÎéyæ»)Y)Y”,WîÝ\Xò̶{ ê'2Ù:ÜU¿J-Ѷq%pÔc'^Cͬ¼H9×ä2Ùá•^9¥ -¦yô!UËD×ÁT-=íôDŠÆØ\8˜ñŠÇhžN°bn~µdIìܺ7¡’$ÿr1W´’H#ò4MÒÊ—¦s³ýÿèŒrNÉþG~µ$IŽÛнOQ0L€H®çs/íðfîa¨äé¦&)*DeíEªR™ýêõÃû¬£ÝT ¨—³Ïõ^s³X#Y"óÓˆgù/Ûk¤çi¡=Z=¢Õ3´GEŒàõ±y„¿1–ófÈÜ\~àn;¯Ol”(€©ë÷–"¦é×üw´¹.50Aû¨£Ýk=Ù£ž·éÑÊ­œ¡=:ÚÈŽs4|Óz–Üp„–q­}™ ÇMLQR# †+Y* ž¸5næ\â7Íò™«»éÙ yËsÅäÈbˆÑk?3®nZj =J¿¹—æ¾ÆÎHh=­zþûÚ!v]5(ŒUÃØ¥yj还?Ü*ïèw[~G[®?CKæ -ZAK -iAt+9AՈ̒‡x¡Î Y“ÛnVSÂ7ÈÖ­ÑêÚ¹›"Z -o-§Õ(-G’5È*çNÆ=Z>¢å3´GEŒðûN -ôaEÜk9ܶ' ººVA1Ñ0%:÷`éÑÊ­|’_Éy,‘—¹:IbO¦§ÏÄÁ-Ð8R-5Ðá[½ˆ÷ûÏò[ÅÖ¦òaIɲ.L2cMa6†õˆ:âë8m‹Ó»¸sc㘃8W´æž#ù"d‰rq\´‰_Ö¹ ô´e Ç…Äû¥^ñˆÎ \Ä7×'!`Ò‡5<Õ‡³½šºðBÍR·'Ï|x47Nù½¹5H,çÒÓüNr5I -ˆ‘v†¤büJ Ä\ˆ1PrH6U$|:9&ixã·µXüæ`kqs5uÑõˆA´#=B:¼rÀ+Š`ÍÖÞÛ㊘Ø.›!Î-È:ª¦_ïâ°ÕËŠ¨§ˆÇáçmïðøý©íë±^¹¸!†=5¶Œ“H[ƒìIyº¹ÏîêºÚšë4Dj6k–I­ÐzîÓø½ã›•HœZQÏÕfdÜU¬R&¨Ü\ÿý•{¬|ÄÊÖôíÌþPª5ž¨£ µí“>ªß›þP¬TJåÍцZÏŽÆ5Y"×H‰œÄ€J Œ‹µ<%ã›±$¿¹ZƧ=b¿\-ç4ÒÅqÉá<8oÚñì¿ýnŸû‡}Ø×ÿüÏ_\3QÛ=kÖöîl´í³€SýùEÃŒí+Æo¢¶7 TÜín?¦$üó»Ðì3öÇ÷¿ÿïƒþü‚¿—¿8ÐþwãÚ~¼€Beû\I j©ÍsÐÁ{qÐ{ëö»³´’_#ž²¼fyÑv¥yHÓe¬é%Ú·7W­5ز§ÓKijÀ<ÄÛú¢šé”cé˱œqÜyê âÝ·½@šËÃOÓpƒTK ¤aó‡Lê)b²? µA7•ĸMø9%ÜZd¼Vr’¢SÂp³z\ Å’Bšsik®ƒfe䓊¸ã Ö‹8ù¶"¿Ü¶g8¿Bd•OÝ4^ðâ¬?äÜ"õŠ5=î—]Ø__”A¤jœDÞF—Jœc´Që¶öýa¦²¡%ôÚäÕöû´?„ÙnÜZÇÉövÍêKn{¼ÚáÕ^Q$‘3%Üà¶ó¶A%ìþù:)2Ø/wW¬—Ül iqñ#)¨GLGÄôu©íÜMãLø4ÇÓ.κojN®­É¯B¥ì]Ü‚N äU‡‹?^H­6¸õw1´›R}¼äLå·€fïàæ!î ‚;Ä|@Ì_—íÕ\½ú°X‘ÜÁâ^Û‚Šàjõ¬4×Ð&M‹Iü -6@k<ŸSƒthå€VÐ"dÌÚÝ,–vƒE[‘êÒ;éЦ¶_Cœü¾~yi¾DÜ­¤AÄû{A¹œÜ­™.[Ù/³Þ¢•® M¯3—¥ÐÓëm¦«%¶BÉ5ÆÞ474ÈqzÆ…ï9D¬ý),&†ä¡.Ý›ÜfÖìi÷bZ<ß‚ãi×ø%õZðUåžæÄZ?'6´IÄióÑÞLµšÁ~…jg¹6/Ö~"½·ÿ’_¹‘Ü<Þç}0ERÔ:G˜#dùÙÌýŸåÎxTƒfK…’ ÙŒív»ðšóøÞGGq½q}þuÓ,Ú…‘ÔsÄOÅR+–³bi)>»¢'}ßx8$»‰‚Ã:ÏOzÍÓñ!1hˆÓï¢t†¬4Ú>¾¹y}ŒrÀ¸b* ÌËnº}ú¸ûÊxÇú¸šÇênž€Š¿y+ÎX!¡´XíFßÕZ¹ÒÊ'­üS«Ûu6[Lí^§ë´K|»Š‘=²\Ñ»Œ"r3ºQbzÍÙÇÓgi¶¨£Ùö -—û„™!ZÄ­f[ Ñ<à© kÅxVŒ&¢Ü6†€ÜÆànpŸ~Εã=4ÑåS´÷éÌm;•EŸÞÁdLÞ‰±âáIJPDg·Åzã $ÇÙÐ3jãÐúMýÖX“x -¡çˆ‹1]mb œ£ê¸N7xWûA*ÅrR,ŽŒÈ Ba/ƒú—kÅ|V̆Çn\fu8¢òp÷ÆMw…m]æäfÄ‚[¶;åB ¹=ãe\qðpì$Û’SÎþŒ$J Ö>* ±R-E²}ìÇß¿ýnÄ,Ÿ¯sÆ—¿Ù³þøó›=ö»=ëñý¯~VóÛs)áiÒs%ÍHöïç%>GqüË>ÆtüAGó>¿ÒTÿxÕÞ^þ}ûóûôãúx6ÿò÷üÞ&Mùñ¿S"à"ùiB´1¬]§ljQ÷PK9%ŽŽÚÓþ8qƒLW<.íIвçˆ%gl˜˜'+®ôÞ¹Á(gSk¿Í|©‹pÅ}<Ì!©z¼š#¶j *9•ÔP»È v·RØS;…]û¼ë7ræèäoÅ®öصž±TŠå¤Xº£@‘ä%ÚÿŽsÄ!RÕ%ž¯X([ó½³q•V®´òI+7“Œ£¢ÒÌÝ[WÌPÚ)…vÉ^…¬¡•½½Óm8¡K«› X‚ÃdãR¬žm—sýÙj†T<#ü´.ׂù,˜ ëV£sÀÏQ½Ž•ÐV¼–a2,+íxXF1)¢WÆkºg™ ë•Þ;èkœéË`ò¦SÉèq,z9Ô´©øšq°ß:!¼$ê`† žâª6:÷ÔÆM\h áVòŠ3¦ ’ÂLœyÀíæà”!Ç}Ž!‚hªÚ‘‡Ð^^ Ì â>LIZ È6îÝKmÛµì6ÅŠ,ISù2:»›e…л‡V˲ˆrt³áòtç§™¢±ºæü»áõ–ÁÐLšüÛéâþ½ÛqbP/ƒ—œ1erf¼$G…¬îqUï+µWµºJÑÞá-܈¨„r%”OB¹)”S²Ec'̪EëÔê-Z­W*½rÒ+=õf°ÃE¼ø]¬Þ‘ªèFïzKƱØáæzwEÅI¬•gGoíaªÓI1=z<¬Ñ/‹gŒ¢ze1§ûrâ+‚ú`¹¢+°žÅõŒ»ºã XÚæÙ Þ·;>9¡ý–gû¸Ò‹•^<éÅG“'C*èB嵕³;õ>·çuC BÚƒ'˜Œ€Z|‡,O‰Ö§Öu’õœhkÖœ‚!±‹ŸŠ¹VÌgÅÜR‹^TüñNÙ·ÎÞ-\@ׇ´Ûåé¾Au¶ôÅÉ(9²Ý8$`&'~‡áäU?¸e¡P4ÎΆ‘ÇE,Œ€÷) *l…ìðŠŠ9 F+"z-1;"ö³0ÚÅéÙaµéîeÉìÀäŒìåJ/Ÿôò£M:¢z¹P©íDuGí)¤Ò+'½Ò“dÙVÈ…õQ«60ɶrÄ~·f(K.Þxõòxµ}öG¬QÅK–q"ÈY÷úé€P¥“ õØòr[Ìž¯Ú¡AâìÚŠé@Ù¹f§ÃPJ³w¦­˜'%HLçŠZ±TŠå¤XzBDôf¼X'÷'a™=ß«~ðÔ†døRq”â F\#0£a° £â¼"} ˆÆâØ+s)bN2IíT¬#H'M¿ÃL" ù’ø¹² qbÏŒŽôH/yobHa(Çéä§'×u7Íž ·7'ÍbñUæØ‹vö†<ßlË~]‰ë«8LÈ# ¨Z…xòw~{.0tΛã¬LÕÈ“qUm—c¬c‹/™crQbÌV£²Ê#&Ä/7oLÂ;ÈaÐ3ISÖVpÇÉp²‘xñld@MhÔ±áø¨1×87cSF0hiH¶x]×µx]wÜÏÚI™é Šä7ë‹Y„¤Ìœaò&sS>·žÕ9¦ -15ˆiBŽ…”âÀèyÄÏd…%E -ŒŽäw61k~‰9¯¾<_èjÉ„Î0XÐQpä"K0¸´SÙ;ÂÝIâ;„Ôgm Ùr$„Á†¼CL5bjÓe;Ó¨š…qh‡nDÍ*Õ˜¨g½2=Ù0¢ŒD´ç:ˆ¨ªg%ò€©LšãÔ}¦û±ØXДy5lÈŠªŒÀkBë¼м¹=`õô«ÈŽc"e] SüÚòëC,&W#È¢²!s0!æxf_s*ÞÁ¡ ­SÆ‚ãù¿¯=+¿Ö*Ë/fRÓ‰ƒ¶Üƨ¬Ë„ævã]ޱFŒ-b¼¨>¸¤ŒäHQ×—^Ìɤ`ÏUtu†±BŒ b¬æUMn¨-½@Ê4M_Ž1{=Ž! r:mY1’ÞPá Þ0‰ÂV!þ0kç6k˜"[w;0AÎ'ó8"žÆãágC)žÇ3š5›…CʶÅëj¼®Åë*¼ggD0 t°Õ]a~½–ñ“t|Éb›w8µà5Q—=x—ßPã -ÞÐP·ÊúDÑïìï¥)G=. SÖ–\^PRkœZ]3¨›á@Ic#•å–¬5!æã{m˜„w0¿š,¤2Û³:îF.ê#Ÿ‰œñ}Î.ÇT#¦1]4Çq<³õ·Y»JGR´Ùf9=„:##¾¨ žÔ:ŽÈÄq›6)N¥Ä`Ñ%E¢F6j±6i“_ç41AÕ0„ɉ¡†öš0™ ã†r -ÞaC)²ËãÛ¸¾šÖ†Ñš¬"ÄÊ e”ñÍTÜ5vbÌI1¨Ás1¢V ¬cƒ»q³CpÌŸ'ÇÏå0(3”äâ9>sŽ1‘±èH‘ûÒï†:ôÕiqq팸Æüb&%Î]êaгw=¡ÆZ¼¡;ÉYº -±k»â#Î2û£j6—þΩfN[µE¯Ì½Ë<ç! zµ]ÝMžÎ?fe]™üñÊ»BÄ`MHäœ:-&Ä<0ÓUU7Y'Æ:ó¤ ñhºø‹ÙiS5ôÆeßOGä3Tˆ!ñÇðáÝbÍýÅ¡ë/š¼¹þŽŸõâÕ;~ì#?«{üù¡c„l.÷¬s)7É myd+»‚üww"(›30%O²LÙõþW¾’¬ß^åe° ï7Úž`y¶,¨Sñæí«nñâû»Ÿ~¾}ÿýë?u/Þ¾rÝË×|ñÏòøîß]õI¼µ†@™²É¼ÛûOâoA“œÛd埋̎’X€©ŒÆ2zçy׿çÛÅÝÃâåÍÂnžûiñâþžùèæÃ‚50K³…²Õåg{Yì”O,:ù»y®½¹_üuùí·yÙ}Y­Á-?¯–··ÝçUZþºZ{þã—_øpùÓçîýÇÇm oñòã?Vnù/¹b—}Xýíæ›‚l§×ÆÞð—°×–g=~ïÒ®n~Y¬“#Ë6¸îæýbIåª(¹ïø‹–«(ùŽ«b l©\¹þ榤;æÛz‰s%&1²%Ûå›Ç  - û£5ïyâs[¿kÈî˜ÑÉqEÈ<•­óõöõa®ËK9Ã__°'ííA]””Âv‡{@üŸ¸4  âÌDè³úéÅw’”T¢R”9¹!E~ B¿å`ù_w+;üŸÕ:-“#>¥íÆÞßÊå‡/]u«{üøßò‰ìsÁ°†ŒçœyW&ŒY*ËK„Ę̀ÍÒøÍ–¿ek˜Ãõ¾eà˜¤IHÊd©ë¤×#d–¨H·?¥ú7¸¹]ªVÊ™íÃÊáöú^¿î°;µ•$ -¢@}˜,6Fj꽄ûq ïÅ:m$<5M=M’pÿDSÿJ=ëÕ¹$Œ¤¢U@Lö]ÁÚ®¸oÞâ×|ÅЦ«BqÑx&A"ÔÝz_x›Cæšß—Þþä]òHTôsìUùcGAÔÄÇ‚ö·-ï|*1qÃE—ü¦Xú˜'ž­ ɇžÈݬƒqùáÃjËÇÕ:J=äå—W;2µçg¼et¿t®û¦‘"níä;"0žˆj)⛫ Ï¡O pÓ3HØõ!ECŒOüYú4î‚ä6ŠÜɲhÊýa8ð†E¶ .âÒ¼?X!¼ ЇŸä½+8ÂCÑo'’\ ´K$"Ï™wœ@'í -@ऎ‰åÊ;šr?0§%ÍÉýA¼dJ/®êÀ;Ì zЮà¡GÆ:¢Y"Ñ`¢*¢]"n†bÑ,‘–­«ˆvÉÝÂI{+’øç~Qr·çw Þëru¿‰¿[pƒêµ£¿Ý†ß-ÐØ,ÞÇÉs,l)v4t²Mu¬|¾IL .[þ¹oceiŸ ×wçû6\î‹åî¸üÊê&\hÆmŠ÷Ò[“ -½›r?qÍ¥Ž™ãzž¶ „dÈjÂKð…ëí‰ÈÒ;!)Éo—Ï8]©ÊþÁ!W3RÑ.‘ˆÀ»Ú¡ƒ%’I6“ëˆf‰D#ÞyÑ.驆Ö×Í’Šj»ˆvI¡$±W+¦õ§L4,[»»[ß-8µ´¿ÙÄòƒMJ,“ì°„Fu¨l$ßdb°zÈÔ¡|Sb;‡\ ½T±Â!yìxveƒëè^ÊÄB{¡VaP¾W2¾ol”l¿ ²ÈíŒe)!UB¶Y!\Ï,É\UìË6JV-1-Ã.1 ä~悌û€:þ®Ì@1Wë›p!†-%»»ßÄ÷įµ»ßÄ÷´ên½§Ìî~Í„àoä\üëjIv‡aûœ"'HYéSs„Ù¦}ÿÍ"%’©·y6;AÄúYL-rù¥ÿ’£@÷µp ô\¥j:Š´ÕeÐb¬¡þËQd˜.¨ë~çEÜù„0D¤w3ÝIÿPœ‘2D ìd•§Q<³¸±©××_Ÿp„s6ÞP@ÞF ëÛúžÙ)<­.³ÑC­Œ Ë!ö/dÅêøè;MŠ$Rn,\uÁr›k\KŸj-PÎßž¯û!Èáç4"RÜá"PpøX( JØÈá;^Ó¯>˜x7á{…)ÍÑ\ú¥„áT“¬/µ¡yŒåãJƒ#‡AíxôêZ Ž"ýŠÓ³ÑùÈQŠl ÊÈ´ºM–£ˆ‰`‘Þù¡ð°á²GDŠ;싈6må7B[êZ³2ço8ÂwãIËÂíæ>Zé™èà¦éÑ?¹%?÷…`S}´Å?¿$ž–ÙÊruS] 6¶ïo "v@lCwˆ)8D®²ønTlhrý}AÙsX8ÂOS0¶Góè3úeòL3O×%wµOY"è@¸eÔϾ—¤Èp{íù ‘á× ˆ wH)w×ÀkîŒär¯8·3ôÏS—ì'¤ZXHåJ~[¬9ýE#‘|”b-ï¼ý‡qÝú¼}÷{øµeÜ,|yéõõ^˜a#U³fW¯´`wd¨‚y'|Ð\Ź+e˜3º¿á‡bÖÇ‘â¾ò""åLÄ e—æ¾S®¯ÄóÄÏ.w,ZØÒҖӸ⯄ïó6š î. 2N«Ëm÷•kkf‰Ç÷ÌÛí  ­gu¼(»nvÖŒîK~8îg^D¤ìJ™x\v?Q®í¬Aîb0,xf5ÛÖpgxÐîåç?œïëß×?¯¿ïô~ð‡"1Á%«ãÿñ•,D©ÂÛ¾÷ȱÇèsÄÜä®n ûöAð6ÊIï^„•…ÜWˆì‘¹½} n£¯º< -NŒmï\egöÊì)°m SRWkx±½ÏPÿ°nyÂÙ]vÃÖ Ô½ÊâG%±Åq*x—KŸ;-‘qrK@ÓÕ50lûáhp}ì0€ÇA²¥7·ÿ(Ã/H½Š6C†Ä@¨~ò¨aC"álPozÉ¢Âà W¼ û¤j ”Â6U7Êî’v¡Iìàx¿}2¾ß¿ÞG“_Iï î¯üékéýƒáýþ©êêb(ÃGL›ܦö(Ñb‹]k¦ Ð]ÔÕz°TI‡y¹aÖ•ì½Î8RÖ]ØÃY -¨âÇÓœa·Õwÿhy´¸â)[g©pxYO˜ïDÉ©%vxÖîu|FOºŸƒu^öXšâf#CÌ`¦y@*ʶ:‘Bã¼9ÐUt ]AMö’(¤…Ï´k/§»€^‚l¨¿¿š_ÿç—AÎ'Ç.[uAu Ù¢Jci4i@‘”]øxà\ºB^jå©ÅÉÄã©ýœ.îñŒãà‹“YÀKý4.U7îñRG5»÷¼ÔSîŽð®® à »¾2z~A¥÷S_rA ¡ýÆt‘ŒŠ¸Q³™{µ°G3Ì­cX8ÀŪ£-ìá ãmÕ~v€3<÷Éé·?:ÀYxw·„y'O’óÞ\–ŽšÀY”ÄŒÎ\§úG‘a”Ÿµå¾¦#GqÓh}–ža °D8—:-'?Ž„BšÂÜ”²¤FEü\B[FÑT©Hcž;Ž9¯Hùîe7±jªœ@`™à¥¨;ˆW:’Ç3Œ76—Η*J8‹{¼T瓉É㥊Rñbóx©"8`÷x©¢”–ÞU‘nˆKxÙ7&Û]8 /~¨ÂÓeͬ ‡Ä-Ô3½½IdH£ßM‘.)D — b,Ñh¤H·‡NP£ì&ÒìV\,+«-möÆ `A0c7ÿzz½cˆ×aOÇ Œ±?5RÄë4,8ã^ŽÛqY—ËH¥¡U'•?m¸°‡3. èÆ^TþL÷ø€•»h@;Àà ð©hnl±ªp½Úb‚%ÀûÑ»™X<à ÀhëD@ùøµ¸ÑEª‘"Ö¿?8íë"EM§ Éêþƒj®{übi†A\·‘¼ÍÆŸ_†tõÊe½/‹ýkëø™ÚÖEÚú‚‰Ä}Ý^#å»÷ÝN‹ûÒø#E¬ ݆RÖÆ(DÀÄpcœŸ>†zGï2–Ok¤ˆoÉç-R¨Ù´(‡"PÌÍ#"…º…i(¢ì²<"Rü¾kÀÙ -ÏðPtå*|_ð°8òN( IÄ@ä†wÂ,íÓǾ®»7¸ôg¿jŒ©;­#ˆK_p¸_ZR£n ³*pMÍx`ˆW™Xt¡çªÂ Ù[ék Â*_)Ò§9í°‹>ê6Eút‡K°¯Ó¨…„p8t2­i£vÙJ–CL‰Ö¥SŠÔÜ*]·RG¡,Ñ=šËG ˆéæ†{/[g).Ý.Šåp»ñ€½æ<\ÜãE­É…ÜKõ~ë´òi îÚm½ÚJí£X4¢E¬³{@ Ø.™˜‘¢zuŒïëß×?¯¿ïô~ð‡7#¹%c’7ôÛÑþçº\’¶u :÷*î -\üS\F*KÈÔ¼ýO^wC&Uª’øâ@ -h40Lÿû¾ú¾pÞøê ßÞJý„ÿI™ÅAF£cA÷_#ÅÃF.üï}Üec‚Y¨ 5x€˜ao<Ã=b -=IÄRÌiMx÷!ÅöŽsDH±ù4Â]bÊçuÍ ’Å/C—üûõyÁmÐnï g…ß¡0ßÑ#še¨vÔßWç‘æõ0¢Ð‰z®`D 4âJ½„MÖ‚p„+\1ά°§åÄ®tSy°nF+à„iÛ4R#Ž8^²0¼•*â›G–npô+Z‹ç¶Þ<∣li ®ÖîGÜìì‚ Q8àŸ×%ÉáûòâÆ©C-Ùÿ³òÁ<ŠëbD·A[$ÞŽ”‰©M•¡íÄ£tšï†>ûÕI`éÞ°Èœ °íšó:Eh†!=P¬smßî¦úÄ=o=_Š»|à­çë<½yëy®?'îùÓô'îyt½}TØê¹v×Û/u=ÊfÇ<ª¦oeì¨gÕóƒw=‹¾ÅÄ…¿ÝQ#ÚÐHeGŒh¦µÞAϪåKÒ&ÄÛ}Œ(JÆZìšÖðF8«»2u€aO£#Ñ×SÁ¤¨‡íú*ø8MN+КíÀØwŽ´fû¬Ú'¨›ßˆk¶7¼d—Ív‡ïÙ^XîÕf»ã5Û^”•‘Ïh¿q„q>ƒN`ÔËFû¡-¨—F¤nõìç…®å®}Ððv({*S^!âÑ"èꮓtÊG‚j…鑦:;ç{&Â¥EÏ“ZSV?EãYëá¼N%Øz¸µ|Âg|¨NÜóŒ/Øåâž·Îs¸¸ç­‡›{ö€Ÿ>q‡«ƒ¯œq€Óyxû¥nÃ=«Î.5ÀˆÚ±£V7Óõ°z8¾£Fð~Èo„чó]Q (µdsÛÓêâDߌ’R#Z&}pÖ%ü¹X\&½¢çÐ[åªfÒ®±¼†zÖÿûà5˜Áq`ÎnsÙá¨ì©B§ÈÚX>°¦ò‚óAû¦"î` å>ACÿ5U#­©\Ð(ÅVÉ¿lJOIPäåÂ{ÑAÒ͆;u„¢Ã9A1—qGÓ‰_8?¢¶ÏÒ‰7´)dzéÄ)+~MUÍeVü jÚ’×®ƒÀ" -Ç4\ÔÃlº‚qt°§­gËpá€[ÏŽÜ]Üó|î"Ïtâž·ž­>?ð§iOÜóêÚ‰C­ížµ_êYžÝ1èÚ<±€ªckvQ£ëÔ°Ÿ¨‡…Þ¯±£FW-¹–õ0¢¤)kœµ\a¬lxiªž*;âÛI£‰ª¥^N›.¸§uœô# ã]Yçl—o¤ÑVØTÙ¡“Gü°F+ç 3ÊÞƒã8{°…9 ™G—÷\Î`½q ÖÊüutäå“/HÒÒÕl¸:žF¹%S«Ëœ²ÃV™CwfyeGÓ,7tÛX D€e—×d—^vi¸ö¶ÊèЩøÃ­÷¢ó«…[_ÖSGf#ëÓ{Úº’+Ü {ܺrbòž¸ç­+¹^íxàOWž¸çÕ•Ý„ÿù5æýý5´!pÀÕÌ;q´˜à‰{\ýYƉFZËî˜.;àêÐäŸ-âZwayP×u·hòÏ?K—­i0mÛ=¸Üoí²œM39âˆcC‰ A²¼uäe€é¨0̚ů¹9 îh õˆ#Œ!ŽÛaÚ–4mr\£³án°Õ©²É#Ž^Àk`<ó÷°ÉépM΂-ÜÔ‡§Éå€T%ÙØt0mn†kØÝÓèvÜ(›ýFVM˜ð?h´Ìí:Z[ëÀ-ð‰8x¾\}ȵiñÈóòYžì!Áš±6Ä Ø`J BŠudO)Ö“¬CĔӕŽ)Ÿ×¿¯^ÿûË ÿ`˜˜ JÕá‘ZÅGúÎ!!ê»ÁÈfñ{üÁι0R7oæDi?Ðï*—`Û$*Ï…©dOߦu ›}{“8¸xGCàS–Ô¶d'Ø£¡p׺ÏÛ%ðh´Ç¾eUÁÅ [6jÇ#ãð¬)D°5a¸óæ³_÷Êá“È\¨ÆüÇ]§ÞZ³¸¡MÛ0fd11‹ Ê*ç˜Gx#ô«gb”Um‰YlÔK‰×‰Yd é¥{æ‘Ef¼gɉYdìSx÷G *™Ã»?²È4­·Žyd‘Iá:,2À301‹veÕÀÄ,2Ø–GI²c\[X+MzªCîûZ¢FZžˆ)Z£V»<S Ø«y"¦È»RñH‘[Ã?é#E“#\!&héìÝmG¶ -NÊÛÕ#GîNòQ:3ò-ú¡j# 4GË’¶\ej²–æ¯â¯H•w ßp‘ÿ—Œßñu“ FX1ÛwH¶Ø›öê-Õð¨VµÊmÿ–8V“háà!Æ&Zžµ94ðå ù¶„‡fQGö{Ú¹…=—2=Íó9þ^äX}óÞä\‚¨²:¿Jý·Ëø.m¶§ˆ9DÌrðñª¦õ3‰˜äFU&‡1‰άuWr$"(Ò4“L ËX‰YT(|Áš³ÈT ?ßÏ,SÃÒ[`b|Óžù‘ejØç˜˜ejXZxæG|ßžù‘ejØG8æGÖ­†%<Ï#Ë©áFI¦†TÙõnk:1´ßÒBZ•¼”prŠíxृ &öÄ/,ÓÝ?òÒÀγÙñÀC-°f$÷|‘—&J•SšxI`m­,y-¹#S .uMĹã^ØRðGmš–·nÁ¡'ó(Î ÝÒÿàÎZ5g½ÉÏ n ó»¨'e ä…‹/êQYî‰^ì»Å+kØ¡IXz3¿}`³†¾çÛnkxèc +ÄoÝÖðàf §dͤ#àf ›jN±ÞÎpó|-LÈϽõÛº3†+IÒê4ãRÌ©ªo[®|ÛB—bN½N«ŽíÔ]Š \†¹ßõôH!žªžˆ)$ptcz"¤˜¶q sDH1eKÕÕý#…DײãˆbªÖ°8"¤˜¦IRHà‡ëÏGŠéÙ š"¤˜šQlRLËr÷'SŽ’m fHÇ2‹çXœŽÙoé‡ú‰^:Ö©å;xè6%êÆŽqLSÁ/yéX¢SÝñÀKÇ -úðÄøÀÖé -¸°}<âp4²;‰ÇiD1㱆 ˜ù<SÃ~ÑuÈãyôóBÃQ"Ø«4ì x§wëã‚©–÷¤¬Z… „‡o—ۃʪñãý'°Zpébç»Ù -ëa™µ‰g¸¤>ß›Yë“w*&Sž¾ÍDÅd‹cÀÇCÀSå÷üYµM›W[KÇš‡¥ÜŒÚd‹BL"o›ëàWç ÎÛ§¹Û[[VݵÞïµÕ¥ØÖZîÊûí¬.Ã*WJ1ÃöÕ«,„ ·Ã ’S=y÷1£sTr:÷yV$£#:ñÙªûŒìdüO Û¡ÝáÉ -"=-ìì¼²,>EAħ‰S°oîð´ñHOC±þÕëž<æÃŽ ‰Çf„øûàc:¬<öÑG»‡C«°Ù°¿"<æ -Ü”cï’\®ã=ðQCáU›¹ ~² Þ×€TA™ö°Nù(!–\þ˜¹$\GÌ&RI¸Níþ ¹$\ç¬~\®SNÒ\r»ÎáOšK¶ë<@®€oðlD+Âñ®n¶ײƒ¯þ艗ï\ÞGO¼|çH÷O¼|§øý3/ß)ûyþ>xO±Ûg\ÆÃ½‡ik\a<ÅnŽ:ëDÕuûΆ¿hàìÏUGøÎf9·ÕCÍ9Ov“³ÜjÕåPêI,G7«Ù­£g×14¼%‚$SØ´#¦7£|:z–Ù-z4ñ}ú/sÇTá§±‚ÙîôcJ`_ãºUð ð̰Düæp¼ †´Êó鸆ÓxAÌh•ÁþÄ_×=£YEÌhJ¶´‡vÏhV3¯ù^ëѬâ÷럯ÿ}ý÷]¾üÁÃ7ȃ£êq¼æÄûþ‹¥‡ÄTZ¦·z¿œ.™FuâÑÉ0JÛÿš)v!N¤bzâ¡ã×ÏËôÄ߉p©€@}­V È$0ÌtRE Ö¯ˆï:‡?D®ˆ/{0íuH%nëôÉ%qÌŒåšKâã_—¿k.‰__ï\ùwøwü(A#ÌvîIöZ ^æ} µi¤|T‡¡"Ë×µU‡1-]ØaVë0Ô©óú­&jÇiwmÕa¨èÑËj†ŠWC÷pfdË$ai"LP]2ŽCÅq Ùiÿ2 µ²×pWZab!b9|Â…vö—§MW¾ºøÀ U .ÈNÖ;?¬Î%yêŠ4¼Y¨0­!Óº”ñCåR´„<õ¶‡>*]ñ’e^‡íÎwÞ>óбn°zè×¼-ãqî`‚ ¡Áx™‡>ãÄ@‚»tö$:@äRèM§ZÂu¬uôƒ,[åŽ+OŸH¦…®»âd3œ‘z¡g9FõÈÔFc½:ÿU¦Þ$O½­XJn ã7×Ân)Ú†)nwôÛ{Ë:É.űµÅÄÊTéèê°NÂIöQC=ŠÉN‡Öi?ìt$ñy^¦Nz,—#mÍuç©£±ìÙZ†•;Úýáö¹ü韜Í^>ñÛ:÷º;Ɖ^Á÷•ÍÜÆ—2Næ§Gu*"À´Z‡eœ~ö¨Ë8KÛµ †Úô ÕagÅyü¨ÃÁpxÀÎbŒL¨l³¡ihyr·Ê4y´Í˜† ÝÖ ëí™*Ë<1Y2NÆ]E›¡ëÙÞé(ÓJô Oˆ=Ù媙‡—»ù®v'zã•èû’[LÞ>ãð6EhzMk‘ç7 ãQáT—vG¢!£Qäcoa¨ð°³rªØh%ý[`šì2åDCZ÷ÂãcEÖ7:²`<éкezQ†‡=…+&ü÷káˆçs-©sh8-ß–é(¾&¼½Ó ÇÒ,°Iü&Z‰m)ë;‰FÃ…«¿7¥£²Æ³ìýœX £î^H°¬ñhVë0ÝëÐaøÈNS†ÛÌÝÁo¤ÓnÝù¦½VæÃ‹—;ÞÈ\ûèŽSÆQg7OtxcÍtÃÃþMv<¬±ø»%~[ã^wçemÐ5=Ö—²Æs–­:,k\˜{ÕaYc=çV†Êx:5Á²F†“Gu*\¶ìßM°¬‘ÛyÈþ2 •ÍÍ>æmކzÇb̶§ ÒiäqÊ–™AÆaS4ø“™iÌ&i¼lòÀ·¡1IÏ<ô¦†¢ù(ƒe^6Yx¨`lÎÌ+C*“ÁàÎÛ'‡>•T±×j‘!W†œðkÎPUf—xeH«°eîÌ+CÎÙ¾OÚþ!ßÑUFyeÈUe±~™Wˆ¬]ëÑj‹iüï× -N¹äßÎÙ°·/͘¦%2âuÂ8Š÷~µÉ-_ÅIÉg:ÅÆ½/C<žøÃúú‰ƒ¿ü¨CåC›êpø`íkËNSærínÎxØ`=šéÎSççê¦;>ÈϽuçÃmE2FHgÚºáa„cøº9~aµ§Kü6ÂGO¼Œîº}PW²ÁÒË£)ç#(øX«È÷ŽMóºpJà¬Ñ·I0Ö>6°K–b¢£ð6Eä{³9H3@<{Û@ÜÞ¾Îýrä}k”µ»ÿüÕ°»Þíø—Ð°µÚÖþAc©";¬²UƒÃÒZ©[5˜–S4`<ªÁag GÀ[u8ÜìØ?ëlxYo{Œ #;æ^ g·½U‡ÃÄ -¿ß©6½],.ecŒ#ê°Œ¬Õ-:‹-„Ž­Vj¬Ìì¬ûW µª ÕaÚÑæV–¥5$4r)ái›Ö4Ë\X8©Î05Ãåj41Ä›qO´†k¦eüA›¶ÂÕ6.S;î.=j µ†ÇPËô‚µPyæ•ÖÖÔõ¡´’ù߯¾þ÷õßwù>ð‡! ¦s`õušì_¦†CÁ¢`D'5µóO\c›ËLÈDÓUþãŒ)Àµ]íœz/wß½Y^mrYò–ÄÆèÕ/ÊS¿–èˆ>Âè?îÑkãïÌq~#e]óΛö¼ðCEÏû÷ÁGƒrQ1L6Åù\=Z`0˜'Ëœw—Z 8ׂvØïNµ óû‡]TE¤’èæÞÆ7ÞþR>ü(Ùñä‡Y·ÜMm%ì\,ø%:OK(w ‰ -û-FäC£„©„¶os Up£àúrÂ+ b]6+HpîN¤ô–îD*!ÁÃÝ4—€è8Uz"R ‰+ç+šKH ×/_¯\BbÂ#‘JHp6½œH%l/¶´¯X.‘Óœ\ã…ƒkÄ`¨õŠë°šnrÂå4 òžðˆO§•g\ñ‰9bë‰×ØX¯ËôÄkl<«=}æ¡ÓPƒï15®©‘¡âgÝS_Â!ð!=í!›Íx„+œöšutûÄ+\¡Ïa[‘\3®™ò„ŸýttÒˆlµq”2$dvÉßΑò‚Ñ1•ì2Α’ŸñD^Š‘Ò`æ®qpË¿ú=Sn–¹‹öt`%»ŒÄCÁ1šbªUîz@l5lpœKÍ@¶>GZïÕe„ŽrcOqÚÑAšXMurVšC.l¬’YGÚ…èyÙŒaºã[„³MSÆQ1à÷qÄf:üÿ8+σ._uœ2v®1)ÞÞ¿az.VgÞ´l<æÑ޼†%¿VXrâ# œCxß§[.!D¨ÝTâèÌáû܇ ÖyÍ+Âö˰æý¨Û—[¶´ÊŸoÔü9[ -¸çCŠâ`3è挩§Ùa:zYt,ç1-º£åÑ;6O;¶EÍ(>ª ³JhYô‚‰BU .~ÚÚ”–§Kß¼\ú`;Ô–\‚0Y.ÇY§K_<㨠<£X1¦\»8'—]²Ü%è!E&}Pïsÿ–"½Î©y"¤H° Ïò"b -‰=º<RHà¾õ@„ vö7ø-E‚]ü#b†ôºUÿ)!ƒŒ¤¡· É5ÛG„Éu ßS$×Ö)m"¤€e,~EcŠä:ð–âäz!Åä:¡îã,T;>·^ë·éuç¼W<ð¦Øõ¬;y“ì\»‹qœæêžy“ì³øçÞ$ûÀ_ñÈ#mÍ6ß<¦d;qØV Üéj’x“lÞVܦjV7òˆ73ä¸lf…"Ž0¶ 2€E5hDsÌð æjl’°Ýl¼¶¦ÉÆ6Ö¢þŒè×C’Šw‡™ìEb½_ù¤í…!Òc,=ê9'ãA³ØµQPG’Å^$¯-¶ÅtÈ´:Ö,v‚̳¬T¨€›É.X|ïPä§ÕÆ^eÕKnÛ%Èr_(æ´Ûsï Ùî’(Ùµ_Óv» ùnLåüêÓvo^¶ûʬb)Óv/œúyØ¡ÊVq¾áŒWÊbMP‘zú„¯ÇçãÇãïg~&ü‡ýÇ)©éD ¸¸¸¦`ÅbßÃmNª–Ty& TÛ°¤â¨˜ú›¢Á;®ÇÖ¤ÙÖ b1Ê85zZ\îfšë*DU‘U2Íå£rÈÞ Rþpq*…ÜHaê³nV¥]"âæ"¯u•|ëw)ܼ֙—ËZó\æÍ«µ¹..{W·xÕÁ„ŽRMîÏ7ž=›8Á阞q´HèÃp ‹Í/ðŒóX¸‹½é&x^-MÁ—´×8­P^ Åÿªû ülg -OõÐú^µ±%»—ùט0kãÀç5K£KPmìØilj)ã®+ƒ®=¿¯Öfit,Zx”úŠ˜Bñú8@#bŠJc‚ýü†LOL! -[¢¦k–F—›÷›éÓº&3à’b÷a…l3Ï0fÓl^Ö<Î0.q¥ÝîAÀ§™Æë^9ÛüOG‹S›2ÏvÕë=Ï8º»)‘e¬¢HL-XÇqRŽ;çf8>`_ڿꚇ1åc1/¯_‡O󴟇a·ó|ÊB8ŽúyÖøÍЬgØÂû17ÃqÜ£:•h1?_gž_µŽÓÄÎç,†ãVdÎg1&€ÙJŽ7dMKªtÜ—Ýji°~™çVV0°&ÊKÕõ°‰s¹®õ°©4§¼¢žU±¸°§%Û  -\ò̓¶ãž—ŒKú.îÀ«"fl>ènj6ÎU¦Z™£ßqájjÊÉŸWÓºx\MM5aíéîi6?[ ,˜t,ðòžÌôèò^BÎæWî¨SÈ7/!¿*ë2cyµ2˜½R¦o^L&¬MTðýþñdÝ·úMs6°²ÿüùøýù×ã—ÏüüøDàùùñÛƒÍÞó_<îùýéŒB>Ÿ‹ºÜl‹Øvèî·¢›“žßúuLÀþ3G‰Ý£O~n{Z¹köû߃œ0ð!øã†ø§0~]ÖÌ“fþ?™ôÇ:qé[ endstream endobj 298 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-07-03T09:32:55-04:00 - 2008-07-03T10:03:55-04:00 - 2008-07-03T10:03:55-04:00 - - - - 188 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAC8AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FUj85yXo0ZYbJrlLi5urWD1bRJHkSN509Zz6YYqqxciTt4V3yGTk5OkA47NUAefu2+157L/j64Mm 2qILq1dXC/WUpqp9b0lSnH0reP6xHVxxjb0+rftUerzdqPAH8zY+X07X75bHz3ak/wAf3HOv6UT6 1ausnH6zHTVj63pKlOPpW6fWI6uOMben1b9p9Xmo8AfzNj5fRt85bHz3ZL5n81+drHVrm20nSfrN taJGy8rW6la6JT1H9KWLjBHxFV+JieQ2BrTLJzkDsHD0+mwygDOVE+Y2945oGfzp54F3evp1rHqV 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 - - - - - - uuid:DAD009446E4ADD119EEFF96D7801BC77 - uuid:dbaaada4-048d-4642-b37f-5659c12203ae - - uuid:D9D009446E4ADD119EEFF96D7801BC77 - uuid:23547E781A4ADD119EEFF96D7801BC77 - - - - Document - - - 1 - False - False - - 12.250000 - 20.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - Minion-Regular - Minion - Regular - Type 1 - 001.001 - False - MinioReg; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 295 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-07-03T08:34:59-04:00 - 2008-07-03T10:05:07-04:00 - 2008-07-03T10:05:07-04:00 - - - - 156 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACcAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYqwj8w7rVy8UGi/pGPU7eKS5hltorlrYsikrC/poYZGlYAUkNFWtKMRypyk9LdloYw5z4eE7bk X7+8V5fck+lwebzr6RB9TGnC7t5NNa4a54/VFkkF210z0qzrbrwjl3HqfCo/ZgBK+rfkli8O/TxU bque3DXz5ju5pjqHnDzpbtczDT1itIr2SChsryV4rSN2iN07Bo45BuknGM/EhND8LFZGcg1Q0uE0 L34b+qPPu+8b9fhYXR/OP5g3EGmvLp8ctvftHK999TulWONlEssfpoXaoWQLHIaKSp+11IGSfczy 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 LaO4aTQZxM3O3t2tlt0gS3ESBfTXkKmVloTxQElsCpQ/5N6lF5f1GS2t7Ea/qmtnUL4KzKs2mG7S Y6eZihZVaOJOS04luta1wqlWnfkN5lj1SdL26s30+9uba+9aJ3DWBjv5L24t7KMxiglZo1D1XYEk dFxVk2n/AJaa5a+TfO+nGDTRq/ma61Ca0dAwjCXTEQes/AHjGvEhAppTvWmBUj83fkl5gm0y00by v+jrXSoNIltZIp+Y5alOIoJbxgqNzdraMoJG+Ja1GKqF7+SPmb9NjWrGPTY7uLUbC6t19WUKkGl2 ZjhA/dN8clyeZNPsgCo3GFWQ/lT+WfmDyba6haX6WGomW0iW01ElvrQkaFfrFoz+mrfVhcKzr8X7 VeNa4FYzP+RXmWfytoOmumnfXNG0vVI+YkkCvqGpEhGJEe8cfqO52pWgowxVl/mnyL5luvJ/lHy7 p0FnNDotxp02pJJcSQo8OnBaQxn0ZC3MqPiYDp032VUZ9B/NCfzzH5qk07SWltdLuNP0+3+uz8Ip bi49QSv/AKPV+MSqrceNTWlKiiqVaN+VnnGHzpH5r1BbKaV9bub+709rmWWD6tPCkNvLEjxcFubT gSrUqQxHIbYq7TPyn81y+b01/UEsbG5HmKTXJb+C4lnna0MPox2AjMMaceI+Ny237IxVNPPX5a65 rvmfW9WtoNNkS78vnSNOa6DGRLmR5C0rUQ8aBl+Kp2HHjucVSaD8jLyz8wxvZw2S6Va2Vn+jZPUZ Db6jaoQ1w8SxFpneUI/Myr9kcg/FVwqgbX8kfMw8t2Fk9vZR6vJNBLqupPdtcc3to2jV5YZLX0bi OQTzViZeVWqZGNaKvduCcOHEcKceNNqdKUwK/wD/2Q== - - - - - - uuid:23547E781A4ADD119EEFF96D7801BC77 - uuid:d1fde563-235e-8e47-a158-ac3cc76aa98f - - uuid:0742cf20-2206-9d4e-9e3d-e542f631a88a - uuid:B7D572641149DD119EEFF96D7801BC77 - - - - Document - - - 1 - False - False - - 12.250000 - 20.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - Minion-Regular - Minion - Regular - Type 1 - 001.001 - False - MinioReg; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 292 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-07-02T23:27:46-04:00 - 2008-07-03T00:02:28-04:00 - 2008-07-03T00:02:28-04:00 - - - - 256 - 112 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAcAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7FH5G856W0v+GZ9O0dZJ rhpPTVGMkT3PqW6sWtWK+lE7rSpHT5ijw5Dls7c6zDOvEEp8vu3/AIupR1z5d/MC80nTo76/tJ9S sbwag0qu8McjQspghPpwj90wL89q/Z3O+ExkRu1Rz4IylwgiMo18+Z58+VM5y51qXXfmTQLSVoLj ULdLhNjbCRWmr4CJSXJ9gMVUf8ReoaWemX93QVY+h9WA/wCkxrav+xriqnFqnmj1JGn0NBbhgIhD eI9wy0BJaN0iiXckUEp6Yqq/p+aOhutIv7dD+3wiuP8AhbWSd+/8uKu/xVoikfWJZLNT0e8gntU/ 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 - - - - - - uuid:1C547E781A4ADD119EEFF96D7801BC77 - uuid:c81f585c-6684-f14a-ae05-056a473a74d0 - - uuid:BAD572641149DD119EEFF96D7801BC77 - uuid:B7D572641149DD119EEFF96D7801BC77 - - - - Document - - - 1 - False - False - - 39.000000 - 16.500000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - Minion-Regular - Minion - Regular - Type 1 - 001.001 - False - MinioReg; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 314 0 obj <> endobj 316 0 obj <> endobj 300 0 obj <> endobj 302 0 obj <> endobj 304 0 obj <> endobj 306 0 obj <> endobj 308 0 obj <> endobj 310 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 398 0 obj <>stream -H‰|•}TS÷Ço„nG…ë]I®æ¦sݺ£UkµSW‚¥ÃQ^ -ΊB€@$„„÷Iä=/!ð¢€! ‚”V¥Âjµø2±žºÓÊ:Êz:ÝvúÄÝý±Û­=;;;÷œ{Ϲ/¿ûý~žïóüXHà*„Åbq£’"ÄEo<,É‘Èr^ŽIÓ¢”B©Däø¢dùÖjž]EÇÒ ëKžÌ£ëÄT»Dk 2d|öPÿ‹šý²ÜB¹$#S)xIô Á+»vmÝä?o„§ÉRÅ‚øB…R|R!ˆÊÉä¹2¹P)NÛ,„K¥‚8ÿW -AœX!–«˜»ß -H¡@)¦‰O -åÙYúÿ[ AXÌl@—äU‰`!XÈ› 1,$> aÌ"«Ä‚|Ͳ­ŠXu' >àq  Aì@vuP@ÐÑ /8xµv¼£P>žíõІ0|¹úÇà`ß¼ßâºDÍŸxï>o%b<²•_„/]·>ÿ3oR=œÕÅwdþÖüI·³ñE]ö=}“NE#Ü(ú+æR®Û§çâK0ç;K4t4´67bKœšQD¼ž³’²»E¾|û–tóÆ¨ƒ[ÞQš>²P^ œß×NøÜ,½ÏÁOø„>{QoøÁÚ•º_é¹úlÔ'e·Ÿ]±ŒdÂÉJI¾SÊOèRÉ×*ºï¶Q7à; fÃb3·Ùr ¼²·È­VÁùð>µ+.~Ô'ñÕQ9o%fó ¤9út2= ŒdKs×/ÙAΦ¢èLZFô°]fm¶™ÂwÛÞ¶ÅÚ…®Ã¹¨wÕ„ámÆ^µ±ÄRìä–v©=Ê÷T“ŠZö'Ç–xð<õÓŸ6²ñD}öíÿ²þÔxÙÍî½Íz£šË¹lRù¶O•©C‡ ¸Œ/ú -% -”j-©«3Û)|Âh/uÿµª1 _,>­®W4aJEC)¹cÇñ”dê×o¥ÒÈÞž3iCg.;ûø®ž±©/VÏ.z ÝSì*o'½—¯Rt$l""©P!ÃR3óË*É -½­wÌ|§gŽê™ëqtZ0³¥³ÁBÚ:Né,Tu–|ƒ¶ãLj¦`ùn­DcêÐ.bÖâÓ¾W|G|êX¸xë.ª†} ¢C†êŽrRûSyÑn*Ç4T«ë(|zÇ?•FžVTÜŒÖóùç®™§¨W怄gxó'‡ŽóñOi.Ac‰4~"—¯ÕU“Y -Ç= Õñ·z“wuO ÛH›¹@Lqn2ÜvLV«!Ý/é,àðpJ€Àø´À& -™*ïÅÏoßôÿ&£†â**jËÉèYÇPcN¼°‰·Ó#ô ¾;diç_<ç™èõ0( ¶¡Jìå½dïCï•YŠ~|Ž8o¹í¼Äw\r t[1£ÅÖÐFÚ»«*Û(]²œF -sTYò|&LS”iÈ2­ÃEqÄš»ðå$Ëk`#`¾ÕF$'%å‹ÈÄ™óMµ†º&jeö^[áMfŒì3FšÊ¾¸™Gœóþ»ŸÙþòŸißÂÜ[)ަlRítn²·k6µ4šI½“¦†/tBã X/ãkˆ¾‡ÞÙyª¤UÉ2¿‹X…/ÿ,茥jXD&ï?CµÉP{·§ÇH6Õ–gTRø£8Z,¶«\$ÓîÄ“hâHnŠTìÌ™ö ªûÓ(ŽË¤êSý5Äøk[˜SâËþ;¡Ì/¬¨ +´[9Uâ,ò•Œiû-­í»Ñnt7ŒVa5®ñ.^—¼]z41)6–/ËUæÉ2±v?¬ž xØY㩎RRûsyÑΧ¬óW0>&¢“SècF}°»š\† æK\ãX³ÝåÂð‹¶èÞƒíéØÛÝùƒ¤Ûk½?Kq–Ÿâ …µ°æCX{žÃ—!¢¨c.;!ÐØ}:ù‡Ån²³Z%ò;O¤KçŒs†Ýåüì˜x1쪾mÏå÷¡ -ýÂ.jË% •º’\*·ä@r|#Ý:‡^µœJ'…ÿa:Òc"›¦Z*ƒÞ¥IÐ$”%p9nÍv5!°B ^C\¹îòœ§®_=·òo)áÚfá±RE -?2-b+ÆÛwf`|x æˆzz]<ÍÊ*Ãjôúš -R’3~¶Î.º,T£ÉXg"û${)N„I\ðM-ã·@:Óº¢Èè2úueé( ½»<^¯IàBH_ƒ§u¡í°Îw ;0g§µÞLš¬§*[(|®¥Ò\k6˜ &c›Ãdmî©hÇ:5rs>™•ô›íG™‰Ðq“ùÕ˜I?”CršÁ ‡çCï>¸·„OÀ'°“˜>>œàâK;2ºûyk_ŸK©¶ññEƒÖRÝiÅð «¹ÕÖÁ;#t&‰Og¤ò¦èR³yѳò±<þ´´¥@Å;™W¤”‰í#~ykYc¦¸¢HQ§ÀÒêoÈFÉÇ>_¢8tSrþ…”ñÐfÄŽ€ž'ªÐ4¦¬%sˆìfò7ûïüé¿ÛnÁ#´ŒÍù+Ôÿ|šùšûu—÷@Ï‹÷ƒ’ü|— Cyÿ ¾ -÷ Œ ÷pø] ̆4« endstream endobj 311 0 obj <> endobj 397 0 obj <>stream -H‰„”XÓÇÇ¿¿!ëÖtåÛXÂY.u¬Óvì¶çjõ¡?P)Jå§" A@"|“ð›@HB!ü - D~"Tt`ukh×ù¡Ó®­Uçtc½/û®c¡îÙþÛî¹»?>w÷¹{½ï}ÇÀ6ø` ƒ³?1⽘¨7ò¢ümû¥éBAÆú@0TÀÕ|hH7üýîêeü ky¥¾€Ô/Žlúž¯ÿú<Õ;¢…Xp"[ÊÛ’±•·=,,ô§ëý›¼ðLÑq>/V!‘òó$¼ýù"qHœ.ågþŒÇ  -y1ë«$¼¾„/–y£ÏÎÀHxé<©8=“Ÿ—.Î割þW&Ì[ر1 ÁÞÆ"°H, -;ˆEc‡°X,‹ÇŽ`G1/+æƒùb›096ÈfüÍç°Ïœoá†ð óx1þ˜™ÎüÐ/Ãï1›³ºMÎÐP¾“©´´š„G3é¥o“pö}Uõ‡>ƹÔ½è‹ÒÛ8¯P‚.èm—PÈCð ‚¡aô¶D:d@~Ô?9ô–7éz³7ºEä ÷!oxë=^sCôz¯½Moìûu3”ušA±–}ÑÚÆ¶3Ž¡¶‘"S@BvYe< ã™h -ÁÿúpaîQàWño9’"ËÍ -Š ³—àÃýg®Ì;®øØWiÆÖ={`tô¾Cû>`)ýØèi]—F¶ÊîòGqÃÄi„­q*¥Ÿ×ؤúyn:-”oVÆ“B®2[TW]% @L}W¤^Ü\š[ßkøuûÊÔPÏ$ -ÐÍôáNæï©Mí+¶)³‡kèk™jÐwÐÌ*éL•SY#àÖµqÅ›Shc@ “ž¥Zqö#ÕlŠŒúÅY¥Üpí^$„hl‚sTí ­À¶|îâ$$ìd;^”w¢P4õ-žFè@L'Â;ŸVêÈ’†$„zùɆµ“Ÿ’£b“iFpà/‡ä­“ý-ö  gÆ'Î^fÕ3ó‘‚3ÐVYa‡Õ|i°²Eô—äf—²Ò3ÓóJA±Ö52`úÔ} öÍô»Ý6!4X[õ6À6©¦Ñ·£Œ³ (æ–/z‚Øœè¨ÃŠ,IÎ]j¬oÖàC7zë“/Gs§EŽ…Ǥ‡ÒÏ͈†n[Ÿ> ¢•ˆÅiC¾ç/zì¬F“Mo½ª¬ø´4‡l^“ŒJ•£íýg—ªï¾ÿˆ¸OÜd,ÒŸ'Ç‚9ÞÙ}Þe¦:-_‰'ûh~TeSµ‚¾Gó$þ˜E•pNuº<µ°½VÙ!YrAA=,ÒÙKzû¦ê·Çe÷º×­£r~—(%.P;ïpÄE -jsw),;¶R|u`ÐíèieYÛz;°kkŒ°¥ª£ßh!킌]ïì}?¨XV,—ä±j˜_Sxw£ÎNõ{’“»¡bÒÏS_qLóè×réJ&’ ªÃ ®€únÓ¸uªiÔÔ<<êÜ×uÀ™ÈŠuuª;@Ç€mf²©{•û£Í‹(ü³•¥ªyb… V¥áåeI5 ¼Þâ1BbűܱÔv“õgg¶¹%Õ9<&{+iG°÷8íwð/;rÍ%@#«T{ãE{Swü„UÍìü -ŸjnXóÝ䨏u1ΧWÌj…WL>V©IQ&p\†©äctp§úÑĹ œ5…™˜I‡)ã”qeqÜE—iªû‹¦aîtb!Î%ÐW•›âµ&uÖâ e±´Ü^·3=ã©óªÍ[|ºX1OŒ¢WlœoÀ"nN{Ðsè¥KÀU‘›BBâÜ!ºOPê%=ße¸ןC>ÿ¿ä£ŽeÇ3ò/¡ú¹|Ï‘_ý¬ÿ²¿¡µkX0‰­­-’Øú`””QoœõGÛPßmbeQ<ޱ³]צ'¤¡ôË¡ôÆ]yEÍ­*xŸJà¨b¥T.+âªÓ„ª@ÁÕKÝæž¦>#W@¿{⻪>¬-ßO²¤~HmÅ;ýˆÔÄFACµÙ|™ëD/ãÄ`¹£»ÆfZoŒ]˜b]í½}-p)ùò$Â*uv[Ò$CkÞðE±T G¼?96á;ûwu{yj‰$Ì¡·“ d‚2‘»äj¶ý®ãOÜæaûPÏ kÈÕj0ss•Ö MåfÙ`66Y Vƒ¥®¥ÂÌjÑž´¨èÐ$XÃlþ >eÑ JûjÑçó×>¿ê‹|Tœ{÷îÞ$]F¡°=­÷Tài·ÓÝߣµ´]‹ÅjÑ7ëšY:¾3¤$çI`rZe†<0iR:–4qÂ(fåŠóE¹¦¡¼ Y«S–³J´JEi`®î£Â!ÀÞµþ#®1½W½JbþŸÍÞ¿Ù„^àȤG“¥@]Õ9n†¡Öo{=8ýóÚ¨1„GïÁ÷2E£ -_d GðÝ'Ùm`â‹…±S½¬šÛû)š¸q=rÆk½JJLD13èçÃ1‡ÉLæZIœ¤ƒð± áy@S®7TBCe¥Ud'e…0¿Ö)õ€ñi¾†ã4ŸhnuÏxÿ+¨-±ã‚l¡¢•œïUÃ4ôý6—ÃÙÞÍíwu··³©ªÌkÕãZ½¡ÆZ;ÛÜ]òîÜÌŒc4+ Jfñ+råP(<’›ÙvÕ,å/ï“ûG‰Ó†8QÙâ2!H ë² - qýé´þ„EœVYq⺲DVAR\×"e ‚qŽÿy{~ap}u€t€lŸ½¨¡«Ã£¸Šª–œ‹š3ûûû +kh§i«Ž¥‘™—‰ž…sÚÈy´²¨¬ð¯|šùšû{—÷FÏ—÷ƒ’ü|— Cyÿ ¬ -Ù ÷zø  Ñy=Ü endstream endobj 309 0 obj <> endobj 396 0 obj <>stream -H‰|[HSqÇÏqîRêDçll´s’t^{H„2s`^Ód`¤M=êt:=›–)©sV^ò^Šó6'™š%¨£,Œ´ ôÅŠL(±ž|ûûKµ½ôÐïáûð»|¾ßŽyz`8Ž&ª” ÉŠM¹FWžAUiÕ´{B²2œ•x¢¨ýÇ—;÷8†õ,øÀ_(ö{|âïÞaâu5´¦¨Ø@žÊ!£cc£ÂÜzšŒ+ÐåQdfÞ@•éÉÄò|]¡£Õª ‚$ã´Z2Ã}¥'3(=EW»º=©& ´º€*SÓ¥¤®ð$ÌU¾˜æ`˜ã»^Â8X¦Ål¸ïÂ7Ha(>ø*xqÀ›OÙ¬3*Ç5%•tq¡Mÿ2“ìçI|z˜˜,âp=D„"¿íYQ$"¡G‘ûÓ…©£àe¤„0P,ƒ‚!XJ¤ „-cìÌÈòu¨-ðØU±ówôî=s‘ôð> endobj 395 0 obj <>stream -H‰|”}TS÷Ço„nçŒ3×Û’\½7gÎ3wlÕv¶§º:-J"¯Q&HH ‰$$!ð^Þ ä Þ -QZµ¾uzÄÚÕu²²®³;=þâîþØEwvzöG<¿sîýÝç~?ßçy~ (t Ä`08QüÈ÷㣷ÇHs¤Šœ7"rQ”F — -W_n âŒàÆPÃ×Pq”yShÑóx3ÙëÖáz`Ü0± ¹Î^=h8¤P¨¤Y o›ð¼7÷ìÙõúj|‹wP¤Èó -Ôñ5/*G¨P)*F,ÚÁã”Ëyñ«_©yñbµX¥¥Ÿ¾“ªyžF%‰ÏT2ž"ó‡2Aôb@?…¶@o@¿„" Hè(ô ÅBÇ¡(J‚øÐZ…@9ŒFÊšWÖ …°C…Ƈþ n€¿aª˜;6ÂbŠºAs9Hè’çdXyt2-ƒI–‚¦¢eN8¤‡éÈ/§¦ÿÝ̳¨ò¸‘c’Á@OŸR›ÓšjZ|—8ž@ç…¶~ez(–õ´©L\ÉQVÁ5ÁDÌ̦$0µÉ™u`| ”NÈÙÁ@RkA8º\ý*ð2?}Ôì¿B.œ›üðw%b"²…hC—n¹žLü;­Îî$¼’“ŽÃ8åf¢‹FÙCS“QKAœ(êkz+50qÐ%0<‡™ÛÌ-–F¤Ñê¬oÇ/Ϊ#ÞãÇn!åÌ.!†.ßû½|Çö¨#;«±ßt’ã@ -³»n2xwa -†€µÏ Ì$[4Y¿—¼Üø+Ó*pPÎtŸ[qŽdYÃÕ©ižѨN3ðwʺ´’·Á3€ÖE Ç2H§Õ”÷èuZpaŒ¿à•š”k°¨œãÉ2"_žcÊÄs™™Öì´˜9«š½øÂ˜è(II(ÖÍô;*dÝÛžÔçøcú• Ôä¯ G[m=:[‘³ÐÇ)îÔj>ÔN«oWx‘¿zïß\â‚×(¤‚ÊÆD“M²{ÿ‡sð§ë·ßb²Òª9¬gvmp÷Å{°¬EƒÆò5Yº -ÜXïð4’è¤À= ¬ëŸ•áèba­®AÝ„4jÔæbüí·ÓÒSÉßÏ  Ü}gECgg†}½„¿;p±i`êß÷úKݸïÉøÕ9’Нcj¡\ V ’¼’r¼ÌÔÞpÜïž'»ç»½NÄáì0;ñö¶*£“¬ÎVm©ÈGXNÃðÕ4c¬Û\±T>?Oˆ'Ì^hª³Ö7‘+`ÿ'+Ü鬑CÄÊeÄÁ8ÁÖ\jíœ.Ùþ¯ ºéf1GO¹8^¾E@ºAØùéž6Äbontà¬)ªr:øt¢JçÓ±U‚0)x½”`7¦Vz¯Ouu7†ÚÅ©[Ó¢ÓIÔ’:‚u˜üÅ:$Û¦ÒrÓ’óãQž¹Qÿù™<faèu½QjÜoDܹ]„§Æê²RÉ$:>™{8~§„HSä•Ôêj :4Þ]Ø&9–’Äø*{iìk.eÌðf‰¬6]«k³455hóïLGw×Ù¾á™Ú{Hk«ÒEXë»û[‡F8,]Q‘Ž–Ïe/vÀ(lF—ѧß°Þ'ã×È¢>X«ü·¾M$ºü1p³ÎÊa!žzèT|,Ùª€=]£Ý6¼©®4«œDŸÆS&øH¡GëÇéaÞGc'”ér±/odr`xt@×'"YŸÛµ½Z@}bû:6ØIxQPö¦É+(+ÃË*¬í¥d‘O?ªèEŠ>g‹Ûé±ylƒæ±J¤£Æ?ÑÉíT¹å)Éü¸8B¡Ôä*$H ³lî\?à"çlUmÅxÅÏUúwÉœñ°¡z“ØHЍSB*5:e3…fg“ß:å¸Â±,¿AgÚ£{ޏ3‘¤®þ¼|pÜõèÉ?{álëo€1à'è2ˆhÅê™Ö«>jëCþ0ýx± ï¨Ö -WÑ“©"½ƒF§Í»z}Õ¼|õªy•/‡cù#P ÿÅ#lUâc‘’T½ŸšAkwÍÃsΪ¡L\ñ?SGºí¸…6µ‚Ì¢ö ‰%‰Ö†© 2Å€ àØ ØïnùG/·æÎ¯|É]Jüd‡àT±:ˆEì¢Â¹ξlóXµ)bd— 5&SM.Í™xv][ô;ÉF»­ÞŽôJ÷“¬<»ü ¼gu47 -`Ô 2ƒ'0aä÷tÙVueI)µ·4Á`Hä€ ½æÑ–»­·9h¿k¡sØ×ø:\ Üîª*o&ÑùærGÃê°Úm­^»ËÒ]æF: *GžÍ?¶;…¬a¶}Jÿ*`7 åà¬à 0Bcؾx¸„N‚ÏÀ»Ø¥´áD?!oËêêãö{]½½~®@­Îê‚Nº-ímܳ_|º0+ƒHI7fȸÑ×T\â’¼9_Ë=“«×(Äž)QÚRÒ˜o(,Ó«ëÕˆ¨á¶b ÿö韖HÖ^ºâÄTúû.}¿€QðVm†sÕ©’ÜPí´’W€{Å28S¯0Á¦bŒÞ¡Ö¾§? Ç1ÏdÛJà»ÌT#LAy>É(>ûô³Q?ɺü²º‚'©PŠþ$0ôÎûëãÏ‘+wÝýÜsZ¯L¦ÈQ×Fg~m.Q+ÑŠ¤|¥¨T/?MwÈœá»ê9âfué˜Oÿõ1¾€t©á÷<Ãÿ••sj–9–û-Ž9|šùšûu—÷@Ï‹÷ƒ’ü|— Cyÿ ¾ -÷ Œ ÷pø* À O endstream endobj 305 0 obj <> endobj 394 0 obj <>stream -H‰|”{LSWÇï¥ôÞ;uU©ñÖõ^uÁi)  ":–H†¨(0ñAxTäÍÚ¢ `‘G°…-B¤@yû:Á > 8Ÿdb êÔE£Ì˜ü®;ìѺìßå$¿?Îù_Î÷óýýŽ9:`8Ž;E®Ý(Û”˜–˜ž&U$d¦Ä(í'‹x λ8¢EHÿÇó…_`XMßç°c6dÎí](lt²'iüÓ3²•‰ {ÔÜWq˸>>žnö¸’[Ÿ«à²UjEªŠ J‹KWf¤+cÔŠxwŽ[—’Â…Úo©¸P…J¡ÜkÛý÷\¢Š‹áÔʘxEjŒ2™Kßý•0 ·-l®#6à [Œc^ˆaa&²éØ Áañ¼ÓažC–à JðÔñG3'âDš.þI~z4“(j å*ðØðøíU ò@,bUÈÃåÿrDn‘(¹"×n €@p×HD2VTná»›öá Á_¥GJ…ÍeÚfÚ ÓjWKÕÐd!W´•Wþ,¹93däJT>ÂW ã0ú@À/u6õ0Y•U.¡ê¼²H Š @ -ráä뾛Ϙ)ßk^!;•ÉiÒðµæáéŽîÁ’Gç"Vɼ¶²Û¶Fl ßB Eš 0Øœ ÿQì¸ø,×У5 -Á£a·eÕ¬ŽOY-íGëŽP棥™¹~Ñ3rWfjº4vC£­r“µï²äâ™”-ÁÁ -„G³µÐp´½¦K"~uûF2ÂÃúˆ­a)íf5{°:ÿpAq~aQ~I¾6_¯1PY'³­÷ñ2’®û ÐPåEüGÂh!×~"a“&ãeѤ IÝÐr¥®7ÒÃﯽ»1EéÐ a³îõƒ~Þû4ã~ÍGg:¦(J£È£¾T rDJy>w˜óx -f¾ ˜@Xæ¾â‚,iPRpÏn_ëZÐÓ`57Pè›é×´OÔK˜Õ}¸­²‰­o9UÛ#yi]½* Ë{+2ì…ÚË0Ü…[CÎSÁÍ\ºs°¦ù ’+ommáÏÀB Ð\äì‡(÷Å·|o2WÔ6KG¬‰hõÒåhyÒXÿ¡§,ˆñÞ_¦<”ÍæîUäí‘xGÝyu¥erœÁUu?g^L€ŸÝxÐZˆM•ª’'âñ@¨‹ºÅNwìYYX¼¡h’,dª~WEÁóЂº3mcÆ6 -¢‰ÿNß*•1¥$wIr‰Ë¾’ÖÏP™­'D +?ÃPÕéN÷<üøƒõ£”V“Š E‡N¡iá…EÞv[ö“÷®;úÙ¡§.üÂLù\ò<"µu ¾vüì3æBöéÄ©%)¶Ö_²l3ݨ¯0è¤úê:ý Ìhý6Ägû.»‘J£ÅÞ?܆ðE1Þ¬_ÙË-ÒH4Û¦äÅ üt와ÄV¼åÿ¤o?+Ê:ÊÖç˜ÒÛ[õ.Ú!íhÙ*ÈÊÑ/™v'2ê,¹lQú]qpÉfª•¨ý±¶ÃTG™ëÛ<—ôM§vr»‚sr™¡° -pF4®¹;{aÖI¼÷.D=ð³ßÑ q©š$‰¿|–éY˜SsŒuzª¡B¯;ÆÜÚpÇÍ’#!buÏ Äí#c—¥¨¢é»Õ?— ß—Q¢ÍcE]6ï¿]w×éý˜xDÜ Ap‰hk3·HLš:V> endobj 393 0 obj <>stream -H‰„•{TWÇ q¤mzÊ4]Élsã.§[×ÇjÝ]WZkEQ%¨øL B $!!yAä’ð’‰ $&BÁÇj­um냗«u]»zZíñœ:¶î=í»gΙ?îÜùÝû™ïçþ†L - "‘ÉdzÌžèñ±‹·eædææ,s²3S"üÙ¿ DñzðªïÎŽRÞ%‘ ž7`ò›0ë-Ïo_ ÌSlÈÈ„™‡Ä¬÷S±V¬^½|Iàþk}Z.—ÇbËDb_ÄŠÉIÍ -r…1/m‹µ>;›xKÄŠç‰xB 1úr¬L‹Ã 9i<>G˜ÅÊMÿ_•H$2q‘>FH±;„ôAE -"“œä¥äÒ ­A'ƒ£BÞ  ¬ |IeR¿›W2ï>R‚ü8Ÿ?ÿ\(;tˆF;£¸š$ñÿÙ'—†œ†k'ÑlØ7H߯jQÖc¦éþá³5+[)ùüŒ<5¦®ltÕ€HµCŠõéÑêʪ*@³«¥Gª -±ØyI{@,ûNŽ`ü¥Gjm:ÛÕhfô"•Ô(£w7ÕšAO!ÏCЮ¬t®(á¤qøEX¦ÝÓ­¿Þq8¯tut˜4[WßTmÂhýŠSðçqÈiöJÉçov݃ó'ƒïÍú0õD•6E =ÏP'— j%á¼úÓE¬{¬Ñ{ܹð ‡o2ÆÄ]‡8KR­b£NŸ(¶š -³S":² ?wÐMßì=ýH¯ëÂXfo*JÀ_ÛŒ¿µTE!–$pN7ZŒâ¼ømr˜w -í…0„.ÎÝ›ÂÆ ú/\k½éî6‡µkwŠÌ½f,n¨n0 hoS]Éİðm1±‡Ò¹Ìèmé ?b¬<•ø÷¾=×®0i×—9ÿ*O©ÊÂ0÷4Ü>Ñ{ÍU‡ä(õDeMQfã+)Äpµ¸à¸‹‹<˜‘ -¶ìØûû…ŒÕî\GÛHO}sÈ=púôçHU„#”èâ¹gú‡‡ÁËÅjLSYçÒï†;OÁxÄVSiV`š(Ñ‘uíQâqϦç+¾Ó—ÎóÀ1Òá°6 S›Î9Ûµj3Ð$Š–I²<áa±áp3r$«‡?yɾ ;>4z\l¢,Û¢üb¤¦²¡BuÀ5Ÿ=`xw'Œd¦0×Çs"–3ðÐ+¹îî™ú§O˜¸"ôf|fØeFjô¦êzÌÒ©Hßu𠸀†€çIf‘¨$ÿÑï ¾î¤ òªT”ª|…bM&ÀãÄ1…ˆV«*ScŠƒN:U‰V‹hÔêb%CêP™[Î4ö1»}=PRëÓûÌ0è©qÕAÁC©p›Ó>Þ‡9í -‰Ô–Ô7ê}m}S#£µB`ÍÄvnÏÜËiòÖG"49~Ô ùÿo|êîRiXÎtÕí–z.Å}^‚ ¨§{Œ½ÍNf·ÅfnÇFZ¹ñK¶mMÎÈéº -Я”ƒÏSè±[,—úº}7;€¾ÔVÔU€ -:søŒýÑ¢]Ì;³L:Qç[šÁ{¹y;[=©çåÌÙEŠB†Ò$í’2ѯ•xH;)‰±ñ›Ã“Wà_½ßŸä{£½LŽ=®³Qa¬Ö5ô^ÔÅ6ŸÅaEœv÷à?͚ͥ&¦¡¢¦ÂP —£Z*;šN¸ŽÖ- &æ«ùÚµZ„Ø I–g`´ ƒÄ.—Âü€œðã©‘ ÕMt¾a¢ëÆì0H߉ ·Ç]0†Ž`eYIJ€&àÊn…Nhà û†æìË Ø§ªªsÕtøS¨¥üÇ’a,”ò2 °…›’Ö­@ŽQgüLнæqB5DG¢€ltžkÎÿeϪU‰ŠÄp¾œØS²®ø.ìêTÙݭчè¨$ôNŠWÔÛt}øì ¸ u'˜xåöNP'¥XmgÚë0ýq 8QO6ã.Ê~…IÑ„9ßr¹z?Ý_H?amw•ƒÖr¹%K—f -*A~…¹ÐÑlŠK\‰?üÚ\' -ƒëï¢EèÿÃ;ta¾L-Ç”*£­äõ¥<+¸Ð}²£ÅÑ„Ô7·T›1smù±ZÐXjé21ê”æÌÔ6lÚÊ,HE|ù[ô«¦¤Ú(:²ÈξBæãïeáÊÄ—+÷(w+'ÚTÚôõc¯¾ÁíµonÛf߃°Û­* fé6]$Éfƒdvq O~z£ïŸÁP_§‹ûx -¬¤¼ÎZ ̓X«<ðycIJÈ_×ZøÜHY[Ø(nÅÌ.Œú >› > þn®¿ñlªôú õÏŠ çóÓ‰$K*ç’|Ö2m™jþ -ùÞ~(fa™Z -R$köEFd­w(,YÆBL-9ª"Æó7%Gþ)£ZÿMk¨ -äòÉvB »Ýc'r)“¹ððÕE[ÔIòÝáíº1 ªm ë‚!>ŠÙ奩A¾Zž O(NŸl×Ùþep‡;!é#˜³4+‰ø'ù· ,Ö ísž´G¯<ƒ¬É§“Ú[¨¾Px®>á;¡p(|{k×Î)Ü¿/¡ì–W‹s^6ÐÞ¯àÞ–é–—à‡ @ÕKp麽ûÿ€é¿ÒŠ^ÿÛ½äÓS0g*ùãéy\…ˆ ¢¹QËpccך‡§/wº}ÌÏ/z~¸Ï˜I_ÅÄ×á:|ÿƤ«Ymh¬6büµ gÊ)FÊ4òRÆ_¼hçqÍ R„’ô⍒ä;¼J‰±/l\ -3ÿ¥²ì_šˆã8î’›WÉç”íàNñ0"ê1²'„ÌÂØÂ–ù8ŸÝmkj»m7]«sºs·çÖSWÓ-e Yˆj†eR¤¦QùKÔwqû-øüŸ‡×ûó†@Y4MDûú)/òlÏdS3Ù”¬•ËC`ߢR‘nÔáµJl(®&ÆJ­¸fí÷hq%{²¬ë¿V…xôPôˆÈxQ›Câ°0"ÅY!{T†4Xƒó.ÎÔ¦ ÛoûëÕ©ÿÓnÞ=L!.gK¡tåøM'2ìõ ` ‘™¥ÉœOԱɱD÷!®O»8u»8c‰¾¶!_@Ç‚™2ÁaN²ÑÂÛM8¿?}ÓHF5ýª ®¤P“PIJ•…h}‰B^u‹ ËWóOóüº­5¬A*Ο“_Å-4éó8w{mQf-¥Ù íÜïméþƒv³ÍNpºwÉÉ$ý·Å™€zOhSw÷Žì[Ûš’£Ù¢ ƒ¿™E endstream endobj 301 0 obj <> endobj 392 0 obj <>stream -H‰|”}PgÇ7À†­žñ`Ù+Éj6=Ïž7Zµ¾tªwŽŠ/”Sª‚"Ú‚„ðHš„^^ o $€„×€" òâ»õ½Ú1ÖÃNGzG¹Þ½›ë/výã6 ×—¹»Ù™Ý™gwŸçó}yâ烰X,nØÁ;"v/KÅ2é[!2IB˜R(‹¼/—zH–'ÈOû z]¶È/ûù8ºĂ Zú€þEóîz?Ôn“¥gÉÅÉ)JÁ2Ñïooذz…÷¾F°5AŸ(ˆÌR(?R¤"™<]&*V -[%A„÷/… "Q‘(W1£s ±B (å„Ąò4,éÿÍ„ ,æB– È[ò6‚¬EÙÁBÞóAÂ}‘H$A‚½ˆâ‹T#c¥úûŒøfø>ös¢ëÐSlû¢ÿ(¶ »ñÿµ³ÎW†~è= 9ýižp èùŒOý -œìOŸT¹®Pã§.=áM‡ôï¬æ—úã“wlÏúÿÊTw¥žä;SY¶“t wëÒë+t*á†Ñß0Ý=Ÿ„1Ïi¢¬¶¬ÚXŽ•›¬%rè¢"ä÷,¡$ìO=| Y¹<,tÕJóm+Õ b”c4 xîw°ôž_˜ÿœOèÓÜzÓæÎÓý^ÏÕ§¡ »¦ëô´µ;Ù¬ˆQŠ3Ô˜R~DO¾“ÛðÈNÝ…ï걘ÜF®±å\7tÀÑ!™U*õª„[žÛ^8‹±«`àN’ºÅ[ÖîýíJ¹ºÂ¨¡òŽŸd£Uµ†’Z -WÿË ¯ón§6ò›cÃM‘$]È×§ÝÿNM#¹ºm³pp‰mìXmÔ›.çŸyÍG;Ô*8× ½³bàâ‡=bO1&Ý•ÆÏ”HõIäÇì!(cˆ¬Æ2®×.'9~6á=ŠN¡eDÛeÉO³PøFÇǾz¡+¼-üô®â`Ü^Ù¬®Ì¶kä?©îQ^R *îæ;±¿8?»=Ƀ×i¬•Føt%Ò§=ü™•[çh{Úͯh5f•gÝFØ À…ù¸Û“(‘©LV瓺K}9…ÔÚ þ ÿ((ÆÝÇN¨KX¹RQvœ\¿>6.†Úµ7žFVñ6Jè<5ÜÕØÂw5õ µõb¥ì£ï ›Ž¹rjÈÆg½WoPôNXA(D¡B†Å§dhòÈ\½£¹ÏòYÓÕ4Ö䬳bk]™•tÔê¬TQª|I~&Æ)e ש!©­Oxpx8Ù@àO=ùÀ&2)*[å…Ä3‚všŠjsÈüßÈn¤¤½þ}¢Ž’Ño¢øÓ²Ü\C¹{}jl4ºçÈ+xïö{Ú/tZkøÃgzš{îÌ5èŽìúœf²ùYïµëýíâœõaã¾óг­Á†UZev²¾¡ ÏNébä4’%U¥fÊ3˜0A¡Ñ’š|§‹â´àëAV,„å€ùz@0sð`†ˆŒÊºx®Â`*© ¦Ûaó­iÞ`r÷¶?Åó·î.]É£çß“^¾ð¥ãïßð™}z‘°4ç%Fã–©ð?3Ø\‹ÍUå’³•.ôÌôªÕrÀD0(`Óè4> -é°ŽP¤;GÏ7À‚›ŽÄ˜¥±»ã(Üuˆ%êô®ãíj¬ïãZ¹Š•! «¿Ñã:3\LJ/<É>zT'ÖmÖa5J‰9ŒÙ£NŽ¡Q¼í}q÷4üXY†æ„úDVÒ©Áðñe)ï>À ù:uÒ ›Î‚ÏHü°à"?¹Vm7ó*å|¼êžs¸®©áTk×ð‰‡˜½ØV`ã›JšÊÛìÝ\Ž‘ 9A "oİ -ˆØ ø÷°ÆN”°WÁÏÔŠM L¸Éú"•(Â_¢³ÑÐl‡ÊE¶0ýºNe·¢L¼Í-›mî÷—¡pÄÛÓÉ,¥.SL¥fE&ìÛ‚³xÿ^’µ/>ÈÎ=”ÍåÐê9¤yÀ ‡ÀH hãSøÌ·Z‚Yðú¸wA•,ååV© ð©OÀŠ^´t‰È˜mFì¡ì2´¾¡§©’¬0ä$3È3´ =VÏ 3G&ñ|7'IlÌèhïêiW·&Pš±â9åõagj>ƒO=}޽ì9D|æÍv4TSûƒî¯îLÃ0«{ -Xž ?ÑÇ6FLà„17ˆéc,¸ A^ƒa›0yí­lÅðÏ'†Ÿ¸¤£P’UH%ѵ‘šHí~.´˜®6y?áN ýÉÝLÖÌ%0õ2vïN¹::›svèÉ‚³† ^†ôÏõ"»Œ<š¡Ë–RÒì]q{7—[¯¡uñö,RŌ˨ôì1‘!L2¶1ô†­ 3‰ŒÝñ»›Ì¤‘10ŸJ¦7h÷kö3HœÆÙtfåÜ„ pø%#;ÄÛ•Wb&¿p7us¤3³¤Çê^z6úCW -æN¹©W¤³]ÉNÿ)‘µ!†ü/"/—“¤=ïÁγú ¶@€/Dj‰kw\=ç¨;7ÎLÉ›Ük¥ðÃãŠ8þ΄Õt0oË©5€ñaŒ¥ô¢Hš•ªÁŠõúâ\R,í «¯»]VªÜ\Yb&Û[Ä›™füÚ¬‚¯|çÍ·B’'šíüX¥,UG‰é9‘Ú—é•õTß·ßåâm¶ñ“]mXc­ÔBšm…yU>V•g1XL“¹Òî4ÛŒM¹5XVnÉ S¾¿î0UÌ®ý”YªÏ¬ï”’z»ö&ô‚_øxࣧ'ñøÞ%Fb»ö»ø’Úä†V^›ÓÖÒâRª|ÜmÊ·ÕÙ0|Àf©vÔòþ V©þ¬a£We_{gbZ`„bkLÅrµq½l–xvmqztoeŸ°i€—~x{zsŒsdÏo³ñðâäû]”vø¹`¶Ñ÷ °÷²÷ˆŽqs]h~ˆ™«’Â÷›ê‘«³û «÷}™Ðû > endobj 400 0 obj <>stream -H‰„”{TSGÇoˆ7ÜzlÜ%^KrÛÜÔõ´Öî9]e},EQðADPÞ^ É%‘€ŠŠ -§ÚíRíÃz(®ö±®µ»Úåì\vÚu/ºg÷¿Ý3ó›?~3ó›ßç;¿²Ê a±XxXlèžÈoçŠ%¹~aTr¶8ueb#M°hßUê5^„Uÿ¸¿|} AjF^Ç×Í/G^}Éã³²N"‘ÊÄ'OQ¢M©o‰·m xge|Wœ&IIEÊ©ô¹(,7U"“JdÉTzÚ‘(8;[¹²K.ŠL—§ËŒ÷E"±\”,¢dÉié9ɲ,‘$ãEBÓ—XÈ/¼ e!árA±‘(/ä(‚CœAE¼6²ÉELÈÖë,·—·—‹½–=¼J‹ú¢>Çâí凭Â,\®q9^Éúá›.ÇãpKÈfø^& = ãÆ`ð®mòÝ~; ÄôÝ} d¼Ö|½Øר h9 Ÿ > dÂÝ™0d+ôƒkvÛ -|Á–/ƒ÷ú@è ˆKqÐûKŒ½ì§déh_öäq,,Ç£¸ðs<Ê}¤öÐô°ÎÏŽy6HnÂ7[? »HÆ®ÿï‰GèI)ÉX,ô÷#€7ýOnz†Â Œw“¤îŒû­ ¼ÑM‚Í=Jð>ô#¸*Úé¡Ö+JÖ]0ÊïÓásemåUÆ’“ü­?…h¢Æ@ßD¡ ci´«Sü%úÜŠý…á*>ü­¢]§Xæ¶û€èaÞ@–…¸‘úº¬ž’×ùÉ0[¹AuD“ÍW’G—š(_``â„[d®Ê!~eõZËÒ%Pç[ÉáIÁíŸ<¨›ó%ýjËRý”£—ïì÷ÔMUYÚ}¡c¢fLnU™˜_–­.Øm¾ex“n@¹õ4øy”56"ï²ÁÀÅ#Äfáš[Wª+]f+ù}7Øñ‡ï£™ýqIRñ apdòÆ\=#î_¬}úDUÛûâåÞF¬Ú^o©%Z{ÔG’’ ™BrE0O±Œ Ãk3íaNáÒ¼*-ºÈQªw@)Œ Â -Š0ƒA[ª#Ô5V©¶jK L¯ÓkÊNmcóņ«ãÂþ± G€Â6fk^O¾m(\Í=îéqÂãV+ÚH[‰³ÂaÇì¶Ú†:A‹YÚ&&M&ÓòvaÜ 5 -ú¸þÅçæBéýýyyO€†af¦Ju„Þ\Ûa%yont¸Æ9 %¨_'D&J´­ãb—“°WèÓu$ïÉ>Ø‹S׫ÏãÙÞ^’÷M]„Ÿmëê-'[ÊU­"C)–V’ùæÆ¢N‚{GýûÍÿ”)ÁQ¥¾Ï;ûDÿö.Ë/Ô©ÖÑq†Ì?±Tp½ »¹³«mj¶4¶ò2Ygjí«85âÔí!{÷ JyVÆù3ŠvT›5„vüôN²pÒ»·ÒpBGæÀ7² ¿hb51긹.ßÊû…Ú©šQ»kxÔ½¯ý ;‹êjÓ¶­ýõ3$—~“Q†üØl˜Áw–L³¼%½LýˆççdP:¢¤ÒÙk#yKÍ_µ.4ÝÆþê>å8ChŠJuJò„bG|ÐF&–{èw­YŽ"B§0jþÞãAob¥œ¶?¡S®ª1w'DE¯ˆév¸1K 1Óá¶3áºDU ®Ë:Õ ¼lÍü©>° -àW wY^šŽLƒÛTѪèâhþ|—}ªãÛšaþ´`¿BxLY‰j’G‚z4¦Ø*su‹ç/O’\ð‚§‚Q[4ÿtÞ0˯Õãÿ>ãÝžî«Áº+D—!+QCòΆ%hŒÊ"ï|á2©iAósÓÿK>ÚüUó òL†Pû‚\¹ëèÖÿO˜ñBî¬zˆ^7Ä:·rØà‰ç¥¨å)dhÊï¶@‘`Oߎ‡ç>î~rcäÇo‹'¦#„»à6Ý™ïu -5uq¹'}'Y ×ï…«“‹±R½Ê¤%¢¨wlÔ?C6jgÏæ5Èø`T£ ßó9ü€g‘72hnkk1·ÓT|%®ßž“ïjP“é\k“©(¥"Ÿ¯MÊVgêÄ…| Õíè¬ñØøb¸ûäó®Ó—„i0ÊhkÑ6oÞñØjqU©Ãq•ﯠ¼’掲zb¦á³ñKSØõ›=‹7 W%Ï6iO ¹ù5 -ðì Ÿ±Aƒ/ KˆŠyþ¾ÚǺÁÊ -c5d& ÔÄhbT±ü…®ªáúOZໆ;°Á®«ƒp¸Lzi/q˜V‡­Æi­µ:+ê ¬NÚ™O䈈'Ë8®Ð)§y€"¸QêI/²fo|} ¼Ôøƒ÷ïhºŽ’Ù-I=gCÝîî¾ÎBEƒÐªwšëœµN‹ËìÂZÍéîL"1!'_N&$S•‚øIj> endobj 399 0 obj <>stream -H‰bd`ab`ddó ws òÑöÍÌËÌÏÓ JM/ÍI,É(üfü!Áò[ñw߯'?°Ê20LÙÅû=šÿ{ªà¦'„@jêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&1002ð3022ˆ22°ýÃÀÌ Äð”á c°ŸVýw^Æß¹™¿óÔ‹®]ºxúÂ%™Y…EiK‹×ÈóÕ¯üñ`%ãú‡ßë2o™+ª[ü]ÿ»üwùÅßõ_¾Xü[ÿ·üoùâßúzò?þ±üÖ ÿíö[í·Úþßnßu¾kïÿîö]í»Zøw·ßÚò|Ý‹~lX°¿œñ{êMæïl?Nˆ^èd]ØÕß–.õlj=¸­Í°U®äû‚Eì†Û&–ú±Ý¯Ô¿*¼Ž¨ñ»î®Ú@+o0/úî"ú}’)LÃÔEìÖ` _ïÒþ¡Ï®ý[Nç·²öo5ŽÓóE:õþÌŽÞßGØøê÷~?wô»êÆïn3gÿÉ"šý{넹gm‘þαßSÏ<ÖÅ< kÙ¼ùÆÉ =M­ Í- í@Ø[?µ‰£bþÚÊ­Òg{Î/=°“ãØ¾eGÎJÝ÷}ö["?®¾&InÉwÖï-l3/°òÕÌú)7ëwõÂï6sÏw³}ožô§f:»ÜçJñÿ<œ¹nrÿ(ùþT ÀÀYF endstream endobj 283 0 obj <>stream -H‰¬WYoãF~ׯà¾5Cš‡xh1˜ s%»H‚Ùµ€ZiC3©Z¡òÓó:OKêkþ˜~ Ó WjÇCM'+äKFáKèT´œMc%ˆÒR5=lG•QÁŒÌŠxž• âr=S?…Ë_}íïDîQToÆŸv{vpgÉâê¹ñ`¦†àÑãÈ®¯•FáWaT B¹jVºt‘ŠðH0a\æE¥q†Ý©c Ky Z³3Öu­vôÿFM¥~ Á$Œµ¢TÞ:ö4<ï@oäèkY ¦Í O©:Šœ0C¨vÎ…¹Ý€@ö|´=!tçfІ¤Üã)ó¹E8´´ —@ƒ¯ãpêð‰Ì Ó(pz°¨A»\ÉI…H,bV¡/!-,3íƒH—O÷q[©=€íÞ÷/Eô×á5cü¢°C6Ýòïh³ÑޏÚmä\èxÎs³Üð"3­Æ÷ã¾QØÔc¼GQȳö"€÷ˆ¯o—á¢$“Bωw`ùdÛ~ƒZö;N¯8£yá^û ŽC2!ŸÏ÷ÚØÀ¥:jõ; Š!Èò8oXµÓøŸyÔÌn‘\ìøEÒ£PÞå¤0G¤Ü¬5G—[àåÔSJ¥~÷á‚á²gÂEÍÓJðHò·½]r5ïyÉŽ DV¬/ßF—1Š£kµÄó2õŠçjo3Ã8ÍIÔ-òE¢Ç‘÷­‰RêË.¯ÏŽc˜}õÖ¯Ï8ßà`c¬„Ýæœu<É1Jª„k”OC5UL?(ª €&q¹î4Óf3ª8/± „^Ÿy¥‡«cj+4ŽÚs’_epÂkU™!?ÿ!ž`ÉOÑPK€ VT`ü£Ù9)lO yb”TžhZ)ºÚ8ˆ´Iäeê{6ÀÉ Gt ³ æ1q½îÈ Á±…Jh¼Ô%)¶¸{¢=¼0½GL} €Ç q>ÐDp—f¿pxÜ!¿"¯82Éì©8gìqÔËÚ7‰}âDI\\ò¾LxãÀÏ+©|¥*Nãy*ÕöÚÚp‚,„†ÿ¬Q³Þ•ÒC.™– IE§ôà¾Å6Â&è §ðÄnKâ²,ÿBí?ü)µ<2wìHü:9˜DýSzš<#Ûœ½™Ló?z%Lž4Ý1hR;&7Õ6¥g zÈbÀQ8R$à#ŸgT1S'umJ‡Û² šg–£ù1Éé~œGðjÆuŒMîÅÇî"s²ù« ÃtRy¸»Ÿö®ðR®÷üÁ:ž½cA!ö‹«2F—3÷$q‘{"’ï¶îá;¨wE%ÌÈæ(Âxé™»¹ŒÆR†àyCÒòÔ [ ,;íƒbD ?‡˜¤¡Z¹„jìÀ”ŒEùnOO˜·q؉ -hp(¡I[Žÿ´p‰¯™uƒk k~X\`@>n'"XÖ¢jE’ ^aUÀŽ—r ×È¡¯FüŠ›™Ç‡l˜Á%ëÀ UI—Ÿ¨%¦ãá ª\W——ùe>ìúÃüZæ“k‹g˜pUv0+nRò-Ýqh)X'ƒc„»ã1x/T¾¬g‰þ‚bEò¨Ã+¥Ÿ @ñk>K•ãë0Ì -/”ß­‡¬ðr÷F[Û¾önÌ¢ƒ2Í./tÆO:Ñò½ðúÂág=¿ÜýžIΞ_“——ø’ƒú6 VB80«nvót·†âZ8šPW1ê¾ «­ãÄZؤ„Š5M” ´ÃeâÍíQw/_Þ|»ê!–›ßû—ïß½Ÿ%IöêÕ«àõÛ7Ð|¾H™m¥Þw?Âhào|BÁR+˜pÍ L„¿ŒÊd|íXªá¥HìRÇ5\40Œ¤‚ª¸‚Êï9 Ê(·`DÀèèUù q(àÅ×ç…”•ðý eóicμu¥hOeP0Ò“ZMgy@ðïÆù{õÍ4záJW™Ù%Å€ZýH¾Œ Œ3h•ÆkŽ-¬ôÔÞ¹©Z#ëlüg-“7àr)›aKjÌé•9¢:hei62ÎdNÉCº‘u–ü¦E®haÔ¾ôó`#ß!N[Ñ‘ÃÞ½0È–Î4LÿÌ]oMÓæàé,ìa»Ñ¤±P»ùëuM{œ¶¹¬VȧB„Ÿd®°’{Ýv.9Uè“+a¯1˜0×Ôü>“ÕÙÔ¦5ËWg"™¦ ßi~¡òŒ ¡=§L—ˆ2 #°†4³c€p%B¾"3—ŸñƒN£Ùc3—¸¯’7«ï.†lErŽÓŠoI.GLr°'äúƒÙaî¼%É íŒ¯Ê(³Õ Æ_®F=ôÛm0­½árõSx¡­ÔªàV,ßž©Z_0ħvÍ].ŸMè©“‚ |µLž†JÈSÿ^·º†dÁ)²¬‡`j( cKhúÕ/@ñ Ɖ:¾ý Í1îËs4Öl.7Ȇùˆ3ì–ã€WšFžîôÚa²-èÁS•Å€áñ ƒ…æ¨þÐ ³£˜òè`G¡°ùÓÉúû0ãב«ÄžŸŽó8)E:N ‰tlÈë¨ÈFåÙ¾|ºE ^[×öì‹( mHà+mÈ”“ ÄC6ùÃ]†#ɽK Çíüq¨=‚óÓ÷^˼ËåNÐgÈÐ~€‚§›Ï'y—OJ.6‘;¸»wÏ è˜³ÔÂ=‹¸Óú…·ÈÓq“íΩ>8ï’nëâãAb6ïá$x;°¯?WrÉÉð¥R×zú;«’ è«,ÝÙÖ†WS©5*¬¡L€ ³ŠC”`ÍÃÈQ²Àæ’Twe?¹r7Н±C& -6sC;ãOÛ=“ç­üE!7CÃè½´ÆéG¨n²‹'7¤Iœ,6R5ª&CgЍL–KA5M6päPMco\¾”=P¶I …”­nÅëÛ%7>ª¿} ãA? -[éÁæ "ÔóhQŽmш¢Ã’œÚ˜«¦q;Ú‰TÄ*«8`üê3”‹’ ;á¨y:Êeó”©Mï­ƒô€?zŽ^<ÆôʤØå°Yˆ±Ë=?³ãr$‹-JJˆ'Á0ÃO•™0}†cËùs¡É«¸Zd’¦pÀ”y°\\Ÿ¤ê…}öÀX$[C,‡²ê±­¡>¹Ðî'aMªðùŸøû3¾' E:%Ðì’Á¡ü9ùÀîÝ f†x—/‚uïÚÍ÷ïÎ,¤SKúé—"½O/zïºoº){ÛwVNFßÿ!ëšÈç)Oy1J[ßýÿÿÕÙîÏݸÿ`©‘E>’áΓS‘ðçãkÞáõÅCšx$ÒZê>½¼—G’üZ×,&p&'Ý3aµ2Âk㳓ç Å«¶ƒ¨,X…®½¶°°V…`¤ÄL*•‹Xå,‹…§ µ ,œQ1æ…`òµ‹X°ò.ÈBŠQ,j9>¾Ý*Ë>[T.bAм òGí ÒÊÈctùµƒ¼÷ŠrˆBãòcyŸ”ÕQÞ{ŸÃY;À‚ ->ùÉ•‡Då P{¥c¶¨<`ðµ`ÅÀÛü¾rƒ€7, ó• ¢D¤{OÊd¦4bÀŠœ Ÿò7*aˆ+#lœiU{ˆ¡9a•E¦_[a–FìdWVóWjŸlHä!³òuâ”m’r:ˆ ‘+6•—Ø€´‘±Ñô¸ØT^Ù&*—°É'j|Ä´MpIJë²ÉØ%`7Ô",¨Ð£vÉõf•¤; _L*§lƒÃI0aÔG¦q#â‘xƒƒ”s7~ÙŠT¯Ä*q±jÅ -,¶ÓXÔvù`㘭<úÌRpÕ«Æ1[%åµT®G(‘lÅ -¤NbD8V Cã—WüÅ´ÉÏÚOŒ ä+äëÔ-aTJŒ‘0“ÊNµ_îtV™ ’ÂÙÖ/[± -±èŨñ#Ý¢çH£+¯qË6¨Ôã{L/êOW»IçÝØb:÷1oü² IJˆNé°c¶Ã4ã|ž¯SG±Bü% `‰-çký²QT,!æPŠ¥ñúôò÷µ²¥ÌBÐ öçÑØs qpèì.JÛÂQ†±§óøBáGû<¬ÊLý||ÉŠGË© ¶ÞSžt1Ë•¥®wwr,ÙN>Vu±×y‡嬗€ÆŠ™¯p» -·kp» -÷ l;ÆMcÜT㦷].¬H×qßï'â>,SÚÖ!#NÅ}<ŠCʈ9"U -"@ê!G»Pœû⸠Üw•éüñZn*Z®E쨬bjg%!Sû›?âúñWìÔýúñsµ1.cИe>xÍzcÆø!9&$¦£òNO8îj쇷¸u7x–§“þ/ÖóVâ3Ú)ô9&òµò¨{‡sLæ¥sÄMÇˉ¢žÓÍ©5£Ìš!±fÛ¼¨­ª-*ÉŒ ©Å}+ì%ÔHáVòDÔo(þQ¬½Æ=èÁ¨Á&ûpÜàˆãÅ|è'Å7ɸ…^~.jô>ÖSÔ»gšö¾ÝÇÚnæ^ç ô g^[ã[á ÷³~°*¤TV1–Õ©ÄÑå`DãÛ¡Ûª‡Ðüôêá,*V¨‡Ðõ>kÕCX¥’Š^ËA¢boç¸X§Ó7\St¥0¤®Ú¯J¬[•ØxRÁê¹6ë*:ú†Ž4¦ãÓGE!N¯›öî_¿C¬G¾ñk’íAÀݸ«/èŸ1p¶Ïˆø#ÈÅçˆ1÷ÆOc¾ÿòYlœBûã¼Ú/U¬Ø.4ò}M ÙÜa2 ¡{eáØ”EÌï°¬-°Y›r"mj+‡m>™Û•Eº[Y˜Û……õÊ%è.ë”[ÌêLUjq]Vù­Yp{(Â;G_bãõ"Z{¶Sì&2w]]„ý¬pw2ÓKÅîãí¡…\«ÿAocÜTOì·SÚ¤i¼Ë“û‡Ûáq[)LëòýÄß©—¿F?q*yì(…5·—+6á¤&<‡“šˆ´,&Hé òhgÔ„r4ý¹‘¾’¶’ö,'ìXNø¬è´ay(r_+·è‰ˆ%9CÑì¤ðUfi«Ì„©*ɯ©¤xPÑØÙð à4N5ðJŽ"în©sàD³"nÇT!Lœª¸í_ê»WC>×wÇå™Üœ¤ÄùfÂâÍÀ­;b_ae ?ƒ,ÛwþUŽÐW0¢ŸM•7÷ÉsAä'}…¼9‰ ƒSõâ‚­[V ·MãJ§å gÔEØL] ; ûÕE¸E]8¨#â÷r¢hZùµR7R•ÚX¥6žSÇ ŒºjÃÛïºö>=úùýWŒ1ðáþdà÷kõ1pcï¼c|}®8šJº»‘? ¸CÇY)ºkªÀc*EpÂ!.üÝP_¸lU°]Û5°Ý“‰¢}r™(œLÛÅ)œ¤…á$-‚¡Eiá¼2‘s8.H–•Ê‚îP´±²ˆJS49>‰ýÜÅh‡‰€‘½ê¹p«’¥#F\³¨‘ãUlzö´xCÓ·ŽI•DSÍ¿[Y1¦xxŠvÞš)VéKµ¹àFi¶j*A±ö¥‹ûÐ2%0aùÁ¦¬b”§Â"ⶉ%ñ†'Â"a+EÁ°ð—„E˜©ë}ª +a+a‘Ö os€æJïòWË·'–¯PÒ¯è]𔦽«Â=Óøö°÷L)ƒš³—ÐGÜ£DædÜžÎJçj9\ÀYáJ7eÊþ#N×î ûN6M…óÝLy"ðù+Ö¾n°VÑ!ÐÞE¥“›ccС¤ú¼Žkk¥¢¥®Ú¯J­[“Ú3ð$”jS;”ÿȯ+Ú“ˆ!w5òëŠvñäÃlßÚ1ð b´³êçAÀ×pe8™0í]û¥WMEШ’tœê CD<ñܽÄUcnz5n÷uÚaTÑØ#LjŽ~aí ¸ LyÑ„âŒ=³´°Š¡;zi‘²à¸.-Ø I9›3iµE’¦’ÃO¯,΂c…²]ï3«,L%,Â*aAH'2"y éÎñ\©óu€ßÚÜIiŠsB÷:ùv>®Ç=ÇÇxõ4âG~ð¦Ê¦Üˆ*6¤©’»÷Ó"ž”A9¯6ãå€ïŸ)ÐCަÓyÿÀÿO}¹¥9ªÃ@x+ÙÀø³,ɲ÷tfÿ¯G\B|`HÂà§n: )¤’ê·ò„Ø¡U¢‘;³y§mHêp£ðè¤NOðä -V˜xr„}®ðÆzÇVz -[\1¼f¾ ÊÀÂe`á^`áR° GöÀ,ôÛŽ“…£¾):º°‰t¥'©Å“OáÚÚ€uÎe²¯±$5Y2)8‚Ý:[œ¨÷Uµàt…S¾_sP µõ±¨“{‹;f¹£Ëš#¿ÅÏwvy01^í”u¶x^¶:…×»(¸·5ÝX8-ô°TúŠD3if‹ˆaú«¹e-doðmyñݲ…¡H~Œ:rØæIþrkùDkSáŽZ£®Iù-ÀÇ·@*)–ÖéDø†®9è>³Š¢EàÍ3Ý*Þ¢|¿â¢ßÕ_ÁõŸÕàßCÁÙÅ2/:؆ÃIk°î–ʤC”õãq‹qZ*à«üÁˆZ€a™þ¨ÿ'aŸ,XÿMIeܲÊeå]\# )È‚×È"¾' éa¹sºÈÈ‚‘E4–Âô",´µ½0ëly.⬳!ílxu6¤å´³4bSgáúÎún#l±\>D%¦§«á__]»î´r·!=U¾~¢Ã–í•x<Úê|ÑGÅ߬Ý; (Öÿ­UZ”ï j&ºÿVq&w8›ºTv,~§‚ÃQór(¸'W½¦öHúiðÓ_±à÷ÑBkª‡‹¡œœ†¨Qø,h ,ä=XÐ#{àò¼éÛ¦Ë`Ðx;½‡Ù‰ç&?6ãÇ}Mu×m=5HMˆþé %º™v"®iŒ./7~%(®-·3Œ±Á‚p ö¹BW”÷<íª:G -H¸‚3¼à'Wðòi²Áñ1ߓث¿Šëð¼‰r÷|D§u_fÎ|õpbªsåïá9õ¸@Ø<®|Qø/Æ“]Üäþ×Ük±Þ+wu9DÃ"W G.œþÛ“-"ú]¸Ð‚ˆ³n,H´Ûp2ªðÏ«.hù´.ä1ß“=0ƒ‹Á…4ÁŽ8Á—¸Eï£.£FH K_aO R¢šcìP5GçÆ?;[@:ý¥îTö³¿¨á,ÅSýA.'µŽºSŒ…kký ‡x#êX;+úºêa¼½h±'ùþ_n´¡Ÿm 'XS°/$¤¬ÿß öÏì@ûäÀšèDÓbÂ*p7È rÀä€ì“C4@&´"[wuÕ‹\x‘›½¸†„|¦¯‹n…pOõŽ=+û2ÕB®tã׫}Tö¾jpýÕÚ“û¹³SÙ˜Ê>¶eÕhuZ»S w’kÇBts6|w«k}{ÕˆRÓÃÍUM4l<5ýs_ã#Nª1P(T£²ýL,þIÜ>?DœJã+Ji=ïâÄ1ã_ðeüËÓÕÂò=ñóÅÌq¾<ÀˆZf„9Ñ|=ùs_ém_%í«icõêÙÙá×¥µò¦µÔÐÚLx ekûa3Ön­[­ÖgÁýfJœ½¡Ú¥²×Wîó$ôvå¾tëòbÜBä; ã<_añ_H×óáÕë°EùžðhlħS]Žv =é-IŠC×¹Ü)Q ºc´åQÝŒ΀>ïï“2Â.Z )ª`˜ò¥û´à -¸@ ž`Â-wNW Z¸ÇŒ/´-$G ™Ñ"6¡…’âðÂC…hlV/]„GƒÛõ [ ><¯› -÷¶>Ý_x\?ËÝ6.ÒŠ[WÏæý…G#5õ`€ØQÎ%Vñ€W[å;[± è\L°šÕƒS‚¯œÂžda5¿ŸdÁ¼OJ*y,H¨ -ò ȸB -®àŒ+0ã -|q¦\Á)WHÆp+È™ÀÓ n;QaG^³ãû¾ò#{Þñ¾¾„ ¶5¢¯’ -CòqC~Q¸VÜ…Æ”k*ùÎyî‹ÒuyE .kÞžsÕü¨òýŠÓ0Òýg4ÑÅFzþZÅ1U~(ç2« íÑ*ƒpßv@¼Õp²5ÖÓNÝK8²Ð(\\(…ë'3YD}ÒßéW²K„†"ÁØIW>u Èbù1“…_þ<edA/² ”,ü²8ƒbÐ{7­qõ -X¤’týñÝå?EÆE¸ö5p¬c®‰ÑW•¿_þCF ]ºÒaŇ˜ ÔåéÂ__´ -(a‡Âµâ¼¶toïñŸ½+Ïs¿ÞRòý­äþ§¾Ì²åu(<•Œ€e«q3§ÿÎÿõʘ78vrej¥ ³#mIŸÌý¬"WìjáÓG\¬"ÿà>íÐ,^ËÈ%†…=ç}\/€É‚¤Ë»x¥ýpŸ,Ü¢ÈøèATå:ñd å"pü0Ï«-hÿ6 dl/¶€”-(e “±…¼íc¶NûøCÈ«Nj‡˜Ñ¥©u¯ÔºS™1®´ít¡íâbá⡳:—u ¤ ˆºƒÍè|éŸ*ï›Å[Õá¹]vQïÜÅÇTùGt‘F\ƒ¤‹™¬f‡º!ÞA¸AºÚ*ç‹ßª«ay.Ð@.œYGº.„°1‡aÓ¥ ¡£ä­kD¨Z†VóÞG -°ÅÇF¼ßû“ñj§ |lÔŸÉNÊèÂgta‡èÂ,dÉlàx°Õ ožÚ!âÍRûñîÂ¥}É ôäi¿ßêRáhúî׺²&Ý7¨þ.í€ñËuôG\ó(ýIøé1—òD 1øß1è‹.6‹Waï¹ð°µ€¯Í2yJó'ÕY·fŒ¸X…ï4”ö¼vCçT‰N¦öŠ(ŒJñ®0è>ZXiRb·B(+g-ÜZØZø´pïР…æÅðC8„êØ¹Kh¤,³C+=²ó²Ìâˆ!_Â%µ¬ëJ‚¯•¿ÇÝç0K”c®üý K#no¡f-`o¹nüWtmÀG„÷Îí)7±Å¥ç‚€Å=-®«¶{«è8îîh–…å†—â´®Ó gŠxÐKdD3Vh¡v´)€ -ñõÐB"" §ˆÈª¬úúha2´ ýÉxµ£=6äˆÏ„G8E ÎÑ‚7´°ChÁ o–tØð6³eÆ"³0âÈD6˜«u7]iº›nñ£"WO¹Ùãf…i貪6¢·²[ ÑÍÜœq3Ç›ð€›oo­m]—™î6sòíÕº×~"Sá†ñOµ¿gwØRŒ¶wŠ·çWážKÝtä Xœüº'´Ì§.O‰›HXšË‚_§Í¶à Êx÷'ãÕΘò=²“öó^xñ-;Ö†èM$+¶†h(Wí9ü×øàGðS|àø#| Åx¤hFåZ DžOS¤Õ~hFûÈËÌÈCfÜUëÅÕnÌTc¦ ÕÃ…ªj¾Õ®&޵R•ÕokOšZýêó`¿ëWã²ûªÑÖ[ÚEc*sÑæÙEËß:Õ ó†Ú*lÏĶ6a߬…¼Ýöæ‹5 Å¦d6.²C˜Ð6ÞÕëk»ìÀRÛ1…†{‰6¢ƒ‹#ž3tà':àþmx¿ÞŸŒW;:èdžñ™ Bv‰o‹—j{`¼Üs«ðìUO—õ*éU/͆L‹>×ü­iȈOѰX[æôHŸ.[f™¢æ0›V¶œ*á^ѲRêÖJI—5ØO#mÙ·¦Â¬¢ïÙõÂç½4‡¦‡5¿ÏY†n±VÑ*~·J?‘Á)FºÈàå<¡½È U4vfð,ì3Ð~; dÌ/f€Çv?>ÓfŸ1ƒa‡òÓÕ6€­oñ+d5¿liM9ч߼çUù=±á¿¯ÌršYÌ3 #™M…À=…[‡Ðª~È* ‹JJŠ]94¤§Ê1U޹ò÷ ~„=óG\öÕÆ_üB«(C5ßÁ*ÛîDῈ9)UϹ;Ä|s)ù‘÷«¼kQç”mÉÚØV¨ªNÞÙBáÆ|—--r6Å‘ å±%Zpü0Ï«-x-üZ˜whá‡ÐÂ-È&þ§\«íæ¥"±&Mì1š4«”g‡²šª6ج£½rRÙ\ȆsóÈb?Ž¢ÚkÕ„ŠYU ž£oη³TŸï\ت }.û2g{ä:Ú“×£lf¤:]dÆX[t7ì"†©ãëù"¾æzœ3ÔVxpm!èd¼S^ó“H~ÒFލO^xÃêX/ e×aŸàƒÍ(Â>ñ÷o%èýÉxµãƒ~lXŸÉ|ƒv¼Ì­ã!0ÒbZ)3£)ÌhS3Žq¡Mýhr?ÒˆSáº]E3 è£;Â9Î…pþg‡º̯[ŽMhûBøû•Í>2çeÍ‹šWoºciJÃjïš3;ö¶cñ)#.]üÍbò#(ï ƒM¬˜Q¸üInK²Ñÿ"N„)½Ýu"ªG^–¯]ì²®ÚVHÈ‚ ÀØÈ‚öo²° ²ðí™ä$ûŽ,üYØ… »ØÀ´Vм˜øäbâoŠi.Ш\G8'µ¯¿ D÷0؆”0éø‹I—wt°\Ìo)VtcL4—UFØbJáÒ'©ÇSZEŠÓŸ¿8aqÚÑ-…³¡r’þBø‰fQZŽ .7–K³ùÉ+]È“ÿAÃYß§ ·h JEÀúà.\†æy•ÓÅÆÑ¼èÛýŠ.LN.£ ;@¬@"äyB¯Ç’KEr9K®Ë’ë^Éu‰+9u%}ìÊD¸t^¬«ékÙ ÕÊæTöG–Ì® Ü3àlFÝ„øÁÝè4á#^é[E9u…U~árv“™å`bÜA¸DÜ "ô\ Q"®¹ƒÐ˜ ÇB8^*\ É“+\€.ËWŒX‰BNØØBc—-B@¬ÒAÑhüŽ-ø ¶à“ÙÂÄA$ÿêþõyf‡vŒ¿gö%üŒú¢ô?×ÿ®YÊȘ;Æzq̃ÛÅlGª'Å׺/Œ¸Òº3)¦´ŠtÈSÅõºÙÐ=-›Ê„Û«ãýà7‹áüP™ÖêR8I6¢xC -²‹VÞÉ~‡ç²âŸD¡ãàç (¸ -ŽPà (påß -ñ„á -O€õ¸46g3¾Í+eybszcG°c*üp‘ûZwC6¤ºýˆ#+nUñLx£å¦ ùzáÒ´é­¢¿£p‰8ºŽU&õ¸q¾žó{Ãh¸ºŽ(ï wZ5çóÜwMÐ*2c¥(E8 òÛäHÞ°ƒ…ÞÁBVƒXHDÖ †T‚ꀅ->r°°C`aÀ¾ ;,•&¶‚S8wÈåÜT¸œ\ò·Â¿'ÝT8r'ìrC•ôç]î%\*ÉÑ-ukkËJý…SÎ—Ž "×Ht‡˜ƒ©ºî=ÚŠAS›eþˆãb:Â? ø…ÂáHøÄVp¼zœªÚDѲE«X(ãú`a4¢}Í$Ý Ùì.D yÛÇlrå ë¤Ãæz‘'–ß&Ö§–ô¯¼ú¦%ù K¦Â`-†”CCú%ùsK¦Âí¤ßA7ÖlqáÎSsŸ›Z8×kѯ…çHÄÕ… >+¬YîVqJÕ ËùÂÑÈ-ß(æÚ/ÖÄÅT!'ÙB^ëŸ7-A-$^Ë#+ÝZ,Ï5àÐÂha2´ ýÉxµ£¥haÙF Z¬×Ut ÒS„d]JýX°.ùñ)[Ö9:ØDo Ûó-eV¦»±X¤­árݼh:qÓë–îÂ[Ýö áï7¹qá]ÝŽ|'ÞsúÛk(Å_Äûtå´0]!üd£ÈØ óöVG4~í) -lY›ä]$ --Dñ®–»ÔG -^È¢‰1A]¼@òDpFüD -Þ¿ ä€û“ñjG -|l¨ŸIN²9R¸ )üRx™É2ÜVä¢ö*÷>¹eÅ'f¹íðy"ÜûÏ¿–ÝP}ç_Yr×Í‹Q¾CqS -íÀ4·Š©b|Õî \º—²7&4gúz«°QW7•?LºD8’¾cÄî‚5[ÌßU„BñFÝÐ-Îk۸ÒžY&éJ°ˆ‹6°0È]°@% â0–ŽÇÒ;Xø·`AXüŸýªé‘㸡wýŠ>ζ]EÖç5²/¬Ëî-c£X4v ¿>dÏLWÍÎ×j#y„°š©²úÉz|¤FXÐNXÐ\X„#¢^.,…è àŒ jRÏIí¬»YL©¥3Xwshñ‡æ¢gྠ$c[’tNIÎ#\8ØçþO?ùiàOÍE ì– -^Œt?7à™Ëu¼úzPÊý‰ï&"öÛó5œ¨ì“á5”xæ¿F2¬œ¯*âA^)í‡öK¼TÓèÇqó°$>­+@­…lʾÏãVV”£²‚YáYáw²ÂÏe‘å ¬øËý¤, aø ïñ÷ã0ËÕnÍw—àÆôñ¦AïÉl½ré\™]G–+MAžP’ - ÈLPËF5o»á¤ŸŸÒÌìY%ÅaÍ\``mföý€f&h{_óÒÌìYË$³Ž½2J_ŸÌ$Bˆ+ Þü$þ?ÆûÚÑCÆ?û¨&\×9+á–Û$gµ¥èÜ4³ÁÓªëÖ¦´ug%LÆhez•j·ÖA ¤Óh[¤•  2øBGF‘2ëÞC oµŠF?Ö Üteô¼uï!ÝF§Wi7ëÞEŽ’á*[ÒºˆEBOöb‚Z´.°ˆ"ª<¢Y÷.b…ñZÌ&èïëÞIH,ŠEÒh´bÀo0€äËú’ÆC *z>‰ADœ×½,ryëjGm=ÄŒ$|™ fã\³ ò0éMY÷b{†ìÜæQ1´RX¸hJø½zR‹™ƒüŽOÑb:ƒ&½uÊ’™Rб€PÕ¢qQ‹$Wh@QÊl¶î}ÄÄKס‹cå×:©MÔZ›œô¸›‘´a¯\\1£ÖO­"F)©]àÈfÕ9ªUEÇ.j•‹7«ÖQ¯^ÐñSnTô«sT+(¢Ó9Îsî>pLW¢n¦Ç„¹’¶ž¶Ò L_ñ\ÅG\âÆÓy›-Ýä° ÊaU‘Ń"Ì6£GŸ[²ä†£ÉMóäú™cõÛÜúa“q±?œÙÐdö@b7¨#4eþ’¨yŽš[Ô|êëŒõu¢^*d©oõÑV|9æ'!Ó¥˜õáë 5Z{qèñ1ŽÅ•Ô Ppu’úI>Ðx†xÈcñ©"âYhT:ÄF:p#x'x.âÐì´ÝO_f« ”aËLõ%“º‘…t@¾L^¯øËõ´K€?¿­-À¿ð¥Æ—ˆë¿BàÐŽ\ œ!bhqL¡L‡åtRZáí!ak€®Éïi‹¬ÚBÎyD\„F\ÐÖÓV[qAsq‹ ¼íru[ä]:™\n²ºäÆË“çÉ mrùœä.ÀàO~LΧÃÜônps‡›Ü`ÓwœãŽ-îóÜñ¯ñ«¾”Ê—ŠxkLÀÃX -6Au‘GW‰‘L|‰©ÉV]”FV¤ÏQõ u‘ZuQuQÏQìG*ŸJnh’»ä¦Ë“{¾V?ÜëžÓ˜#×ãÀ/ÑêKÄà ð—~¢I?ãvoÒih"Ñ4éMÏ>Ö¤w¯£Ï9__į®TÐqk ðx]*¡å‘£© ‚Òp4©‹­(ÒÈ’8ru}HHŠtTRP#)h')h˜žïIŠtLRäs$Ep#ËÃÌm™ç¶ìr[^4·ßðc¯øyÀssäzxl€Çxü:¿Ú_€/À¿MVá:–ŒÎ/¬â·êªþª.þÇ~Ù¦+Ëë`t*Nàä¢ùj2ÿ‰(ˆ”ýEÝõí/¥,r§í0Úd -ñ\p‚aÈtR.òJ.ä ¹K1ÒËrÁàJ|.[ÙÍö¼8Ê3M9ƒŸ˜M ¼ÙŠwðþéàÍ®*Í‚·×*2X(@f@ä²âª£[$÷™Ñ-‚"û±\(KTDZé‹[x[ð¿ÜÂ÷Ý‚oþ K·Ò-ä”[x´"¦£hy7Z]F›ɦ9Ø´ÌUwråª\;u§®¤Þ]kÿ*u¼ e‰%i—ZV%µôZt_wê N±_bÎðR@3Ð&{È1`šìáØ$îi±w£pòõ,¿mõ yBä.2ÿzuš¯fy Ë$ã5…†Ì2ò‡<Ƀ×ȃ„U‘çs±ò^¬u^X$ËO$ÛÁ;xï༃ÿ8A6Ñ‚7­x|? ÇÄ[%XËÄ´÷ëýh’ ž½:2™À¥Lð¥ðe™0°œ7äž%íf)E–¶ÌÒYÚ2KÙÉ’ª²¼ƒï¿´•V;¿Â•àÒÁÏ€÷VéÿôŠ7 Þl«4ÎHtA‹±%aNàŽ7£ø_ðœÆÓ)Åw?¶ OÑ…®j_ìÂG»°óváv‘—v!K»»]Øt8LTØ…HÒt.\Y…ûª)ÊáÎàgÖù£—ÞÁÿ2¸1 é 8>MŽègÉ?µâÍ‚÷Vù¹Š·‚+¤”¨àf@÷I.r x—‹…CµP†äÙ¢ 9*“Ö;òM®›½j‘kÔ"רÅ<Ò<Þx·ñðŒZ$!{§©W%û²7vð_?µzU‘ï¯^õä½â½â喝&Ð!iÕ›ßJð3oZ}Ui<ƒºç˜œ)î¶äÛ0Õ2ã¤"ùX. , c«$w¹H»n!…[Páôp Zº…l»E:¯!{æ Y.’ýfiäšd;xï༃—àúù¾…Ö“8Q渊aN\F·Hñ€9§ÄøP-2gNÑ„¨._Ôâö|r}Ìj·ÀùÊñhv ¬t‹¸Ûy¹ÈÀ4`{Ú8ƒ·öN×>xo•^ñÊŠwðŸW‡tÝÌvÁ©§8õŠ×€+xÖPË`’´ç0¦4ÉE¢:žN±e:¶ ƒ”’´ ]Ù?a|)|Õ. aP³ö\½ƒwðþ×Á=ÅØJ?ü>JKr*Éi×çÚ¯x³àêÿM­RC¾ž@]Á=þ³ª¸„Ðh8vÝhćr%ÉúƒÙaÀ¼ž=r‘wå‚ -¹ ‡\ÐW¹û•ãA!rJ.ôZg9™íZ_Í–ŸÈ¶yð3Ë@÷‰e`—{kèà¿~j~[Ó’üÜÝ'go•“­Ò xÜ‚\Á(—­¢ t— ¡»\8˜Û±]d 3ŒéC ¿ÚEþ—]è®]à|åx4Û~µ‹yÀy¼‡]ä3v™3M'ÚÍVŠlm9ì­-§“ìL'ª™N3øÁö9n Ÿ%ïàü=àÍNÎÞ—ÃOíñ!L! -f ˜K pÇÑ.’€ç4ÙETxÈ‘]8€â1tìê¼Îr– %@ -¹•\H•\ø±\X!^%ñè†~²)eî«/òDSÞÁÏ4e÷ö¿^2v¹·š²ƒÿx³=ÞÁ;x_ÿx8…}‹\(¨²É…r‘ß-¹” ?-<\ÿ9è[·j6½h¼ü÷Àß÷ŽQµ ¼úŽñï༃ÿ9ð¤*7¹ ¥R.B>F¹pÃñl†dv¤<$ 0&Œ´á©pŠùcR‹‡q\ ‚ -µ ‡ZÐe:?^³©©0‹\e¥s: –‹`¿ÙÓ¹&ØÞÁO‚ï+ÑÜûJTϽ¥D½â½â½â´â 6ðU(KÁM b£X$-ùv:CÎÇj!à¬hƒ¨n¨Åõ1wÜ‚ ·ÀÂ-ðáxs¿L×lºEÜm)^%æ¹Aiœ¸Ým¹4aSM+l:1—ê±·æÒ;ÅкVÒï®7-Á©§ºz7ʽ¿æ>Ýûd—»Õõ¤UîÞ'?VoæØZiˆ‘Kp¦É)Pb½ÁÉ)Â>:E¨‡dÓ¨‰AJ±ëo8…2¡ïv --ÂÎ;Eø”h{¢;ƒ̦o]Z’SI¾?›fðÖ ½ýVi¼ÙVi¼ÙVi¼Áu|°á -~}‚D+»ÀÙ.Ð|új ©Ð‡ôЇt™Î×ÔêC®ÑF %: ‹`iì2v¼pC¸¡/²•e¶Tf‹Ù¶~°Ø~¸,Á¥ß_oÛ¯xï=^ÙãÍ‚7Û*ÍoŠ^åÂ%­åBÅ&¹`ÐØ“G¹ˆì‡rÁ³Gz\‹¶e^h…¼Û.¤´ Â.2 ƃ¸Û°Ö¤1 -¸UïG¥5R‘íF´¸Ç¿Zp1›p#Ü|¿+¹èÊ]ß­ëÊ=ååš®ìÿ­Šlß^SòO­xÿap⋨î¯*g¸jUinr*ëXqb* „CÓh˜ÁXÇÓ8€™ÛE5ÒèBNîv!+ɘì‚ç_¯…]àÃ.ð& ~™®YŒ”÷ìÂkìB(z2\^…ûª¬óùpgð3›ô|TrŸÙ¤ë¹7¦ÓTüÌÊû6pZ‚ŸZy;x? ÞêªÒlÅ\“©„] Z . >ÉEüßog“B·n!×ñÝ¢LlüÅ-¼p‹¼RŒÒ-rá¾áùn!{n‘«ÜBãFoíI+¢µG´öΞœÁß¶ -Ørø‚ý¶UàþÆÉt¢â/L¦ö[¥YðV{¼ÝŠ7 Þ[å‡*.`ÈnA0 ä8Cö4ÊErHª“\Ä’ŸåØ.\c7G'àäþÅ.òÍ.ÒÊ*¦£I.tþõê<_8ÍrÁ—I:Æk#åB.Rá^ã%OǺK?™,U$Û¹;÷‚{w« ŸÜ*¨f«h¾Þr¼¨|wM£|\½Y“ß&æÀf8dœŒ‚M&£ˆ§c£Ðâ¶Y“›Ä&?xáÿg¿ v$·qzï¯ð±çЊ(J”xÝA. H{X¹dd± ɻد]VÙ’»Ê–ª=ÝQE‡A•\–ý†¤È×óGTŠÅ4FsÀyç´š•‡¨ÓžÌQfE™Þ6-uÜPâN9'ÏÙ+Jó–EiJŠò ¾S•Ÿ ürUš’ªlµWÚ‰Û^žs7pß>çòJ¹6çZx?œo87].r¿ËýEj¼ApÍLÒbÃ>'Eˆ“]RN¾OvÁŠ÷Ý‚”A „a£ˆÌúÔŸL`œöar—¹…;»…MÜÂ_q âžÌRfW™Þ6-uÜPà^+`´»©uYji•ZŸ¦ÒÌœXHòêÓ¼RžWW×™z§é~j—R»œz»ã6ëív›6ÔWИB_d6µ¡¾Òk[¯ë~ﺩ -!Veú¢6 --„ŒZ„Âûh(©0ѼˆFØõ HðcµBIãŽ>øÕGÔœ/–™>À¢0ÄëÓžR}ðEú`UóYåâóÇEç¤ci^¼¯º8Þàâ xÒâª"s¥å´$_¢§ä˜’W)í ^õ÷æaà%!ïï?&⽫ôˆßoÄQ5ª`q펣ZˆyDµ åe˜ïª…째a£ˆÌº]Ý&p™Z¸³Z¸ù×Ñ 0S \ÔO¦ÀCÜsU- 3 .2 )Db¿›X›%Ö­Kõ‰¥!«,±¶$±üÝÀ7›—]ý¼yQ}ó¢! @Ö¼lQój>â;Jô™ÀKB~¯ïཫìv –D-@gp.çUÃäàå‰g·0ŠwÍ"hNvÌBs¦´R ›©…ÉÔÂ,jaRµ°©ZP¦ò¶j·®ÚÛÊš´«š|­4Úúšìàü/^击¼Ê-Ú¯™tó*ç®™tåÜW&Ý€·v8Q‘C·0JkǸSÚE·0:q 'Ú°/VùÀp-$'q“øÌ-üÙ-Üüë¨8oœV³[àcÚ“ÉÊì*§—M+ï/Q‹ ¼updI†´$Ã’×plIÎàÇ•dÈJòúA%ÙÁ;xÿ³ƒ·Ú”¹Šˆ¿Bæ.a³ehé ·ä@G³Ÿ˜…Q¼/RyÆ{ ˆQDfÉ“Ȭý)^E³°ó¯‰Yø+fÁCÜ“<ɳ©Lo›–:n(P F…Á„ÝÌâffm–Ù"i´™Å‚Ì.à›M7›@Ú" -5Ýn%,iwñÞÁï¼Ñ®‚Ú+툶Ákþfí°µˆ‹'˜à%â¤ìºÆBÙr ¢ -Ý‚”ö»rÁVi&ÃN£Ý‘ ¿úˆr±8G\ø!î)• _$Ai®.·n•[ªÏ-¥¹u·ä6‚W¦ù#¯9M‡7ñº‰Qòí‰AC‰ú‰ÑÁß ¼áÃÙhÄo­z%•m¥ÆYQ€¼ÆI¤(V±LÝI.‚òûv!·i‰‰~!<ÉEØ” {I.x[.ì†\„j¹pÚ("m^—[Ÿæ’ÔœYHë_™ØNý.Ô¯i[>m[v­5wŠ}sÏj>ÖmR÷ -é±¾+j£ˆ>X™ÂÎfÔ(ï2“>€SdCÔ™Ñ'­ØÔ§Q¡•ym˜C´ö?ùgâ@+ÀÌ`Þ9­f€ÔpȘùßà¢?L¼wŠLvŠæ˜X—\æÑ™7 ‹†ô ¹!;ŽÙA2Eiß.I³:øyI¦•:“›+è)9¦ä˜“ïTeûàÍ–J³àÍ–J³à– -‚U„&¼AÄ{•“ -ƒÄ” ¹x&½0Aù³^¹“`_/¼bÏNB"±‘±¾¶ .± ›Ù…™wN«Ù.LjöX»À0’Û;Nv•Òü8eŽ®9=N¼$–K5Ý–Ôä¾]“6CÞÞ3¹¹‚ž’_v^[P“wÞK¥GüÞ#Þ,x³¥Ò¸ `ԨȳÏÀQ1ÛI.À‰)àtyüÏzÞ• 0Š@ƾa§ˆÑ¾° ³]ø·µ RÎ[S—\»J®«Onf¼ö–ävðw¯é¼óêâßE7ûãÜjk:oï༃ FƒØ…h‡•\E·°Š£[è2·ðòNÇ«À{Å-`S-\¦˜©.j'Sà!™—˜…eøÈ9Ò9–´†CçÜ~\E†¬"_ S‘wÞK¥GüÞ#ÞÁ{o׸<Åù faäË µ`0Ñ-œ"¢[ÈGÚu ‰I`ëNnÁèÖ19»…æL.üJ.l\ø!îÉž”Ê…¼-µ _dNË´—\¬H.§É}!ÉÅ¢ävðwßn`XÑÀ^ý–4°öÁ›-•ÞçÝNdy#j+3Zžp ]rhŒÄ„Ct“]¸ìÂk(a +“ëVÉ¥úäRš\WŸÜ;¯h`sÃʹk YêX?ðfk¼ƒ÷®r·‡S#± TäÙ¯í‚íl,#ülìy×.PÆ81KLÄLímva3»€Ì.`± HíÂlNÜy\n!I-Ì™…cÛ¡;tôaÒ±Æ>h<4éÝ¡ïå Z‘`±«Ð9·²`­Á(ïýt™• v_œ -Ú“ÄÃ+& -/¤/I­¤/IoKžÄÀ8-2ipUÒÀ£ˆP]5ÚM# ©†ÅÃÕ‚´·dGí•vDÛà.¿ò·ÃÛ‚7ñÞÁ;øŸ¼f@õCsýÂŒ¶7Ìè¦Àÿö¼–‚/žá'‹çŸÂéÆ0XÏŠˆí`•2¿ŸyøÇ#h­‡OžðñžÂã¿Ço²t¿}x‚ðøó/ŸÆË¿þç÷!ùiøýçÿ°²øþù«‘ x´…Ñ“Üðüã!Oýòùá˯?cZN‘'‰F@;üöéáïïãÿ†ßÉÃw¿y€1 ÿ•Õ?åßWC’J! -äï ÆÈýëŒ=­ ù´–¼z6ñ†Ó×éžxu¼í|u ñÂ`à´«á´~ß#W L7Èçt‹|9ß4~nM&x=Á7ýíà ÏsÙ” endstream endobj 264 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-07-02T12:00:47-04:00 - 2008-07-03T10:50:43-04:00 - 2008-07-03T10:50:43-04:00 - - - - 248 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAD4AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A61H+bWqXMs4srK3njjnW 3j9NpHdnuI5Bajh8DUM8Yjdio+0DxHfGGcl3R7MiALJG1/Kr+zcK19+ZevQ6jcWMdrYK8F3FYFp5 /TPqvLHE0hiDNKIj6nIMV2X+bCcsrrZhDs/GYiVy3F7DyJ58rUNX/N+503Ub2wmis+dqVjaf1H4J IsgjlqjBJHFTtxG3iwBOA5yDTPF2WJxEgZb/AICc+Q/PeqeYr+W3u7a1gWGIs/ozxvIJF4dEDuzR n1NnpTpStdp48hkXH1ujjijYJO/d+N/JI/8Alb2oqt5JNb2kKRRSyW6u7fG0ctuBGH5cXLRXPL4d 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 hj/KCzknuHtYI/L8Ty3MShpI0WyBZ1U9SAOmAhlCQBBIsdyeaLpOmw29heRKJbmOxitI7wgK7QKA wBA+EVPxUGEIkQTYFJrih2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV58v5VTm4t5ZtWRhHqF5ezqlqV9SG71SDVvRBMzcWSa2CepvVGPwhqMFWXaj5X8s6nc fWdS0iyvbjiE9a5t4pX4jovJ1Y0FcVQ/mGfR9O0RNPuLF57C8A02LTrRAOSSRsvpIoaMKvpqRsRT FVCLzPJFEkUfl7VVjjUKi+lDsFFAP77Cq7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/F lx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2N K7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof +q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/ 8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1 L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/F lx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NKq2PmqK51OHTptOvbGe4SSSBrqNFRhFx5gFHfccx gVO8VdirsVdiqld3KWtrNcurOkEbSMkal3IQFiFUbk7bDFXnWq/mj5Uv20OQW2oyLLPYXGnNFHCF lvL6BZLayJklWkrQ3Su1aIB1fbFWReXPzF0LzBqUdjYRXKma2F3BcSoqRuPRtbh4x8ZcOkeoQlgV A3IBJVqKsoxV2KuxV2KuxV2KuxV2KuNabde2KvOovMv5lQ6bFO+nrPI8frzepZzq8ZmujEkXpxOz ERR1duKs/EDbflmOJz7nbHT6cyq6/wA4dBfXvO3d9yY6P5j863EWpy6hpsdv9St5BBCLe7DyXKAB SDR+cUhqQIg7Add+sozlvYasunwgxEZXZ748v1++ksm81eeYNWMkWiyMDb2xuVNndsZWSD1pIomE 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 2DAr/9k= - - - - - - uuid:B7D572641149DD119EEFF96D7801BC77 - uuid:b46d8aee-c25e-b541-956c-22fa803ac69c - - uuid:d81eb84f-0775-844f-8950-327b309a2838 - uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C - - - - Document - - - 1 - False - False - - 23.000000 - 24.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - Minion-Regular - Minion - Regular - Type 1 - 001.001 - False - MinioReg; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 60 0 obj <> endobj 266 0 obj <> endobj 271 0 obj <> endobj 273 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 391 0 obj <>stream -H‰„”{TgÆ'@Bê©é‘1•dÚ|©K][ë…v/Õ­wEQ\•  r   $!1¢¹ -„@  ä& ЀEwźÔj¢Òª]—Uw«=žýâŽ]wÀžÝÿvÏÌ7¼óÍ;ÏïyŸ„H$ztBÔÖØ˜e»øyüü¼åÑ®€höFD#ÂC”oá¯üç½ÃäwÄÔ3¦¼U zÞ™×6»O¹9_(ñ³²%쥇>`G®^½ê£ÙëÇìùé<6G.–ðrÅìè¼Cù"a¾ˆ+áe¬`³7 -ìØÙ§ÄìXž˜'’Õר|1›Ë–ˆ¸¼\®è0;?óuBq HÈJÙ„ [$ -A¶!»BN²A"@E‚`$i ±I—‚ØAÚ`~ðO!’!²²„Rº$ÔN}‹Ê{cÁvmFé |ç%õOÀÖÉ`Èm h„+!pb Á•±G:|%„€X øÊå ü‹Ž/ýÂÕ¥ùøvH”?¸£à7€zdp¾£Íœl t9†d¤;Ð 7.Ó'ÊšOT–g1>}¹YWR©cè%dh£Z"%U–ÆóÀ™=Òò - >;Ù¢‘¾ µ„Á¸n´ "/XôɃ2«DŒÏgpql±bŸJÀPdç+ÕK¡Žè³Ã ª«èbTxŒšžŸƒõáTo¼ô’”›wšž[GÌ>†¥Ã[?Rih Çu½dLïT”ñemÜ‘ÅÉxux¿°‘iO”W“¥_õ*dawáºITûèÕªZÌz·ð<@íª&ranVÓTÔûª@#¤8!¹ùY‰!\UTY©¨À ;ZY„ÅüŽ—œb8I8)‚ùëÓ²fÛùöz;ëÜç_ ôS+(yPNïh(ÑÙA)O¡( ¢íE‡3ÓÅTn7÷vDëêé¨ùÆ= -¼cín·•Š -Œµ6ƒ£UþŽþ5¥?Ì?EØ4Cè’üý©,ñHÿ¥kM·¼ »¥­Ùƒ¹ÚŠÄv€^3¯3Ô™¨h—Íb±Z™ŽÜÖ¬è˜ìÌtVÔ®Ì÷>c~òyâ徇§¯±h5Ê‹ð'?©wÆÞ †O!¾;&Qž‰íP}=TUQWnÝpíŸ2ý9‰i»…üTÖÆXnÄ*&>o,¿»cºöÙS®€Tz >;è³S«j¬†ZÌáQfîKKÃA: ÆKºa®4°¨WÓ¡—…åÝ­¼ÓX Á—»o¢ßl€LXCï1w5xYŽV» jJýh×Δ¬¼ö«½¡x™JÙáø²¯£÷–Ôè[µ¡=y¹ÌƒQâ}¬o‰Ì}²9²,.ØŸ^°'޹³çЬ$Á1eSe•µËXèMÇINfn}39ãÿ¡3×ågq»=-Ìr³ÁXo¦¢÷7Œ¶ô:Úš©^g÷Àufƒ¾Akc™Ê«ÊMåTô栮 -·í”¯ÄNl,ÔäêÖ騄@«¼À,Ähp¡IWNÊ`aƒ_7M M¨o¡_ÀùVºqÄ ƒjAgЧPE K˜sH¨Á´åµ­F€Î| Ýän“¥SˆI>Iâì¹¹õ¬Ë‚ÕœÔò4}º÷‘*­Jæ}rÛçè÷™"ú©f—ïh:¡päc™2¾°–Û‹Ú0¾È$}±Œpta¼ï»`(†oÒÅÂ<%V|ÂÒ\ -0Nn­:1«=Z"_äçÖþÞK3y]Q½¤ ³?¾4Ü h÷ç\ ƒ‹'áÆñçSúÛès4ðBò#½07“°©¸bΦçwS 7¨?8³g**ÕÈ@ªtí5„SMß’:›‹0´DMÔ ·¥¬ù%µ”ÒüòH]å,õ–$NÜ,µÓÙã$¨Kå5_}l‡&YϘpGÚ`Pu#c¤†@ú0æ,+ÈЀ |µ"Nw<Ž1éªiý³©›qÑ ©>„yõ‡“‰ÿBà÷³ã=n9çÆ{Ðàû?§$ ²'ŸMên£~øîl@æ^@ĉÈ<¸pséæÒ¿/&Ç+ â¶¹ƒ¯Âû/¹¿ñnãkò‚Pýš\¶~ÿ§ÿŸ0ó?„´qeW`aéÌÌ› -†ç±ô‚t¥8D¥oX³™[Û×Μ¹âéîe}5Úóã÷ÌéÔ‹¿eáëñ:\:>é«cLõ36èá­øÛÛðyÜãÔR­B¯Æ8’Ñq@û®}…D¨W¯&UHÜãWIËzÃöÁåÐ;vÂÌ›^ÝÜTîÀ.HVá‹Váo–[XgS‚™@<]]-RHdÒB†:M ÌÑðå ƒÄmn3y«||KÖÜ©NÔG«¨’P¨®%7‡¢) UüÊR³y˜á„‹Èhgqck™³]ï;7B½tÕ3=ÊœJþ…X Wg³hb“¾zD‚àz0äô¢è$NüÜwÐÒë&ü*“'¨@©ŠWÅ+S®ÊnëWŽ¿1êºí§Û:©§]6£3×éµfPSl.7ÍÕ&‹±Öh9Y¯3SëµG-…XAÌîU@¥î2yÄRÞ)Áh{•ç!~–t{ôÁ¥`¤¤ß¿ïN§ÊµËMižSÌ.·ÓÝÞ&—ÚXF­åßúþŒ™–—–˜Œ˜ Œe¤j]\mus\`†cwZ¾t¶jºg’srfkrnok“¯m‚•ƒŒ~„{ƒ~y|kŒÅq¯<Î]vÿ€ÿ!€ÖØp°÷“÷vt[\t‡¡¹•Å÷›ö¨ªû«÷‚‘AOx?Gos’ÛMû²>zžhºåÚ¶«ÝÏGÒ÷ºèFÐJÌ‹w†ørFRÌ÷Ù·¶ž“’“•Šs”¾û:SVAm‚„‘†‘††—‚vzvqnФtª¹­Ã÷é¹ûg˜Ÿo¢ª¹¬ÑÄŠ{œihly|u{»¨`÷ ¦ž¤Ÿ£¬¦£Ÿ™•“‡}’bƒ‘‰‘›¡§¢w£kdc_û9sÎÄw~¯pqY\SZœÎøw©w’´°ø÷Lhr}l^9¢—iÐñê÷;÷N±Ë°—Ð~{v…€€r‹ŽZŽJvŽiy{~ap}u€t€lŸ½¨¡«Ã£¸Šª–œ‹š3ûûû +kh§i«Ž¥‘™—‰ž…sÚÈy´²¨¬ð¯|šùšû{—÷FÏ—÷ƒ’ü|— Cyÿ ¬ -Ù ÷zø  FÏ endstream endobj 274 0 obj <> endobj 353 0 obj <> endobj 390 0 obj <>stream -H‰|”{TéÆg ÉŒ]6^rÆC'íLt·X¼´UÖ*§ •‹Dˆ¢ÜL¸E„.aA¹&d%á"”;‚E¼ÊŠPÎVÀݪ-ZÝZ×¥ö¼¡ŸíéDÚÓsúGÏwÎüñ}Ïó¾¿wf¾Ça8ޝð ñþuÐ?E‚"1Á-H“©´Ÿ¬´‰q›“Z‰Jþ>;?Èÿ1†ú?„°% ]Öý£ô-·‹4;“ÔJELl²ä§Qk$·lÙàjþLâxD.Ù§V%ËãUß„¨DeR¢22Y½N"ñŠ‹“Ù]*I\%W¦r» …J)IVFFËã#•Ç%‰Gÿ_% ù…-Æ1!£pÌ Ç¶cØN óæa~€cûøX#†1ܬãc[1%–Õc×p÷ÄõøÌ"¯E9nc>“ 5Vbc¹®ì&m»Dø§œ É"…§Çm¥#8LÌðl«W»+{Œ•NAÉ™E!b,ÜøOÿÜ?öGúÇÝMáÊã Œtku¿ãBçð¨øë¾àÍn;7íõfî Þ+ $³ŽÜúm.LóÏ -;)¨Ø$øC¥•Øúž+êbs‰ \ãŠ>rAÎä= 52w÷»Ñ7d15×àþð“qÞ<â1ï@G}ü2s—©G ä€ï:÷ðîÇ«“Y­>ûLN~vn^v·Š5•9dº¥MÝ+;ó að2yëzãðýØï9rJ<¤9u„©O>ä ªÆùBCªíÞx¶qù m•h|œë¢;üYD®Œ¬Ü1—”ŠA)ØŒö¬A«™Öi¦’/ê| ‘Ï!ê[ˆÈ3:-|Äå×f‚& pòÀ¤hV4ZÛuµÿèv落Øìž–=­tÃÍ1F4k|÷„Ú-½þl´ùê6öAìdø'ô/Ã"ü™ìxê1à÷`Ùüû¼zYÑÔõöÆš -=i¶šëé™]÷\%>[>ñ½"{Ë•‰JÓf“i)) Á4¾ |Ë_kn@R*lº„w=·‡<ÛŽN*§–Ÿ£>Y+>•u¾“…¢C×~¬1¥ÅÅ;³å*5™’¡ÉÌ¢Õ猆ŠÏK˜^cMïUñ`Ó1?VAħnI¥‘!©*E8-혨êjìeÊ•&E[>)}I¥&U'‹ãcê;Î[Ú«ÙêÊ‘ÆZ)|¤…¹Kx÷#žœ -ߟ¢Ë$Áˆ/{µ¥57¶›Í¯(-*ŸµÔÖV~VžWΚS’Å -ïlY+=ó©'=rÑðÝËwzáï5÷ ¼ÛðîI=áÙ–|GÅDÅkމw¸ Àš––ÂÒʪÒ\ZRüúþ®ßy G7ÄG4"º‚¨qÜ2}ƒAAMê®^´„F%è2Ya$w‡wÏ«ƒ×N§-Ÿ›Â›„2–—ÖèŒ$ZÚ+M=1 U™IóÙs“¸µ9-µ–ÍrõEŸWVT*Kô¥†b½Ö¨¶Ä›’Š#t1ÑǃÃ3CòÒÈ|uAÜúT‘˜Xªå‰n ¤:w#2­„{…®ì ·!|€týzï« Û]p!]¿¼mÊÿÇð«™‚»¢—ž¢ï=mlË(Ñ3Ϫòš}•NïÄíEäGè IN`RÆbÄ^«÷£E~½²‘tVôb0U}ø„BS¤->¥Ï<›Ò”ÒCо•$¤‡Æd"5Y¹'Utð 7a /ÿú—ŸW…1¢7ƒòÈ¢xq¸ºÊbj´ÔêÙ"“þt¹xæÅÀßš²[R­,× ­l¥¾èôÚ$¿1=Ù{±‡å*7½›§<¤½·[Î[-çÙs–F}‡øbkavÛ¬©QFÐáG?f„p€{á7@niOßMÃ!.¹¶ÍË(¹vwFX™FŒçŸñ§ßØók=;b­„ÿûì=QßÔiê)&'Âv°h×%u„Ù{I,12¼© . >®ˆ!…›O[çí­f§y³Ï(Îàc7$[ Ÿ÷5ç1"F»+#ô}g]qQ -9GÈ»‰Ï-ÀùÚ¤ÔµL®%ÕÄXnqQ2ì½í…â¬Dà\9ÑÐ|±¦[¬d…Í\òN½öš´ÿ¼ã¢Nð…!j ¡¡ºNl6æhªXÑxY¡ÐXFÖŒÖó´EÕ*ó‹Nf -ç¹ÁÂþw°Ývì“VÂã=¶Ð¼@84 -?üŠ×4].-?ÅdT_N½.~ø¤ïO÷C»·7³æÃzèÖšö¾®–dßf¦®¼ð¼ö¦ö_÷ý¢”wo“g4MPCIÂiÌnÂs¢nbZhrgP^ËÅ{o¿÷ø±èÙ÷?ø ÷—–Ž›ƒ–û÷~JIL[noÔû³;®bË’˜Ž•Ý´¡€xuƒypf™Ù÷_Ämv¨¢÷õ£wêÙ÷^ÙŽø ëhbe{h^`¡è÷­e…Bm‰–vª†¢ˆ”ƒfût'ÁfÒ¤¤’œ¨N¥š¦Ÿ¢D‘….©•ÔŸµŽ¡_vŒƒŽ³÷òe…B]‰–v»… ‰•ƒf÷ ™vø6¢Œ÷,÷^÷ ÷‹„À÷%½÷ -´å¤ÂŒÂ‘¢û>t´…˜‰mn7j1m:jÚhíkÞ€©‘’˜­¢û[tÄ„ˆ U÷!ûö÷é™vÿŸ€ÿ€t¢÷$øD÷¸÷t„µ÷´î°ì÷û˦·÷µ÷®ê¡Æ’’»“¢ûFtز†§‡„oyBj"sD‰û÷Îu^û -e#g/‰8÷Ž‚¥”Ÿ¸´’¢ûat¾„ŠV÷ ûù÷¬÷’¸½ø™øË÷’¸ü™^|šùšû{¡÷<Ï‹÷ƒ’ü|— Cyÿ ± -Ù øt÷å %ßú endstream endobj 272 0 obj <> endobj 389 0 obj <>stream -H‰|” PéÆ7À.«œ±²l›d5›{önüöÊõü¸*Xàð°((z -H€ð•˜`ùP HˆÄ@bðëDOh=õN¯rZì8:-Ò»+¶×{ã¬Óé½ö®ÓvvfwæÝwßù=ÏÿÙ‡…A ƒ¿'6&)aùö|q¾D¼2Z"ÊŽ—óEùY—oø †?"DóZµ“2-Q?Ÿ€—@P£qÈZô‹†/ÀÃ5[%…%ÒüÜ<9ïͬ·xkׯ_³"p_Njʖd -xÉ%2¹à Œ/Î’H %R¾\½ŠÇ‹‰xI¯d¼$L UЫ/Axù2Ÿ'—ò³ùR!O’óÿN‚ }AK!h­„ ·!(šÅAÛ (†’ƒ¡‹Ö AÁñC´*èNpN7¤ -&` ²©Í ýÝÎÌÏ{:Ëüa’°Y&¼mÞ3 bXØîßH* °°é#?.ä³Çnõ~yã'6Ò òaæ´q´_¼¯ñ#ªÈÛØ· ¬Äéƒ+uQzå?„4œœ±Ê5³dûåB¹-’Ð¥ëªZïÛÉ`3|yTkؤ#/(€s‘(©ÁIlCî7×Ï'›ZUy¬Ìr¨f߀‰e¾l¾gêB_ìC°¯ÿ­ˆù;ãˆÿÓ>†Þß žsq½pRoþžØ*ÝF=[/„ý¢ïA¥É󋔨\z@—I¼SÙ~ÏNÞß:d5O6°ú`&ˆªr«ú” -pöðÎùŸØØ>¾¿ïHr‹Eb}q&ÚC[ƒ‰ðÐELœÉ~Ÿ¤ò( Þ‰x¬Z¡•Ä68v;v:ùží=… Dï©fav‹[iQÛJ;ØemÊAùe…OvKëBÿäúü“'ð -í¦ .eA°½ðîȉš“¼HCßæ½™¦f3ÇþŸ–+ÃûA8`ƒ0lÒ_`¼Xž«Ôº«³ŽÄFœvƒÐö¿êXØdéQe­¬­“ËLeDddzFùÁŽL -ZÍyïDvÿ‰ó]\OçÐh­ETïÀï•z*š‰ŽÇÞ±ë$ Và²,_&A3óŠÊ«ˆJ½Ã=dý¼sœìïtµÚP«­Õd#-‡u6òHt©¶eú4£`úžQ ²z†”á—@˜ -à“ »à_ëß‹c£©Q‚5ëÉjäxLgàHK¡ý©Tµ{CûzŽÄ.D¾x¿,ö¨Ü¬`ç6-ú˜8}Ã:ú)ùðê8 À<ÎÄÁþt.6•B±q -M¡°…\­Fe(% -d®/ldËßj½Ð3}£Âa-ÌÏhß"}G” '€t`àuÀT{è×/–å)t´Çþ]ÿ“PË`ì¡©²ÒXA$D¤ï%ã¼¾‚óî °÷b¿­™{þôàˆ{¶²x£vV¸ ÷cïÕk$õì4~Öv·ã -×uÅÕÓ~µØ&;ál7TÙI]š”‚JÄŠ‚bi‘ ågËÊ5D¹Öå!™Í=ðÔÇ Ár€ûž¶gOQ‘Rrél½Ñ\SOÎô‚Í7f8¾ÜS[·%Š„™Ü¨ü7Vq¨°Ûâ.>rüåK.Ý'—p«»JÄÏXÊ'›AèiŸ»mh7ʽ8êûªlr>mºßtû™•Õ1Sóé^ûûÝô(Üi'‰M7iÚj­¨µ±Õáæ´×ˆ;øDÜ6~:ŸLß/‹-ýšˆˆrM•0“ZGO-[ æNøO8%Ø46ûLƒw=ö^› ÕݰB’÷*ûõôÙ¿6ø’Í0E¤mMMJ$íØÙ>Øi!ê¹U$6›Déá¸R§ÂCÐň?OÀ÷fˆE§Fz{•ÝÙ$ÓÓ¨èRêk XM—±Ú/ü—•TV•Z³£‚Tw¨UCª!õ¶ÛÖÔlsZœ–>ÓÚZínã´I›EûRöìÜÉ•ÊIòÐj¤,éà '-‡[ÊíϤªwç¢UˆV6•šE¥eP©= mõó9ë¶e¨Áéñ ØyG‚;®9ÝÝÞSÔKôy?¸F2©„FÅs2Àè Ëè0ÏbÓŸc¸yõÍ.{a‡ãÊ[h±´]c×HuLG½˜¶Ë8WÓ€á¿øƒ¨3ÁW´éáSFZxº°àˆH‹0ØjÇÍc ÄÒb÷§Î?˜tŽÃ¢’ÃdµA“\ž¬ÙÅ‹ºÌc-ì©ÑßOº‰æ#Š,Úöó)”ŽS;½ÿaìãÀ॥' Gççûà?:³ìBU¤S‹I±úƒŒ›«kY¶«ðTk¦½„PÐë²P“–Mûy|¾~ÜПC¤ÇükЧ:‰zÐZ2—Z¯ÙU¾‹FbNÏ¥hNÎoAÄvð#Zv´¯A¾3åûÃd;Ñú’tvŽ´´õ•g/Ieˆ^Öëôw¤…D‰\§.ü!‘í0MÄþ_D&6³OsΞc E` X ’5øÕ›žÁ³äÍë§gqžìº±ŠŸZ&ËàÆfG¯¡Xœ-'Ö” Þãx-µ8™bü“ɲi« -ã¸&;¥ÛX5\+kÏr/úÁÅÄÄEq3ê‹Ñeh„Å" £¼–ÖR -¥”®¥½-/£PÚÞöö¶–RhyYÇpÃÁŒ“ Ñð%ƒ…è²ÌMLð‹§Ë]¢ga‰~8_ÏIžç÷ÿÿŽYØãpôX¡R=¿…Ž-oN(ãu2p2¦Ì£Dwxúúp±UŸ~i9K†J×ïr¥³Å.–íÁ©›º<ŠØæ%ÇùçÎéŒÆNî¤åb‹§ª½TÕØ$±V©- ¶:ƒÄ«Œú¢Þ¨[rô±›–[é³6‰*ÅYÈøÌ¥ê¿Ìzç%Ä\½ˆŸìa®‡ƒ[¡õ/nÞ®¬ß½#½_ök´bôè7Däüý„-"€j±ªÞÿß°¼O†¥²SJþŽbËS¢úSìFpMBĹÕá™H\âú|áºl~ŠøÖoóõú<>ã Ž2œ;j ‡,M¾¨’}”[Š53ø~êã˜VCQŽå;4‡ö®fÝýeë!qÝCo‹/Ìœ› #ãÒø(‹M4·†IbÓCº‡8!qó±áAi²""«)oWT’¥r{e½ôìrÓ5-¹Øà7襵ÆfMÍç³J²ƒ5» –v«QçÔ «ûÖ4Wá_»â´Æ’7äóYØÛ³(…²ÅÝý@«+«3CK7—ðP_£ÐîÄUÀï$БK ÖùƒïOƒOU^3Ø”ð.À?Ó©KÁ[»÷RØ¿ïÑý3zþ„o>Dì¤_NŸ;Š[_ïÔ sËO¼¦…çØ"ÕæRƒå@Û˜žÏû¯#è¹lÅ„;¼ ð™Ú9S ›ÉÃŨ·ñåíXgíùàc³¿nŽìÉ^(Oÿ?¢]`ˆ¦-¾ŠöÓ#„ž=ñ+^³3ÝE¼ò=Ú§®„½ d¼¶ê 5Ï@tžú´¢Üí¶^—ƒ"Î ÐöêuÍõЍ~r)±„mSS¹ hdX“„‰ÕäÖ -Õ -E³ù4™'“fJ†Ž€oægfÃÐïutâ -yƒf~'tÑêŠÅÑʰnéÛg°¶è|Q %¢±ëiÍ*Lñ3xŸXOÇVk5'egLi­±F]BêämŠœê® »—„Û¦™zX™_(“SA˜œ -±Ð×§«vSîš/ï.(>]q!çM¶å0:ÄÑ~ ÐI|Þ•$¸‰˜ôJóˆ–™‚È ß¢üðZ¯ÑžÇ&6ƒ.hËþ'sÿÒ$:èÌ¡ÆÒeâ!è%¬ endstream endobj 267 0 obj [268 0 R] endobj 388 0 obj <>stream -H‰\ÁjÃ0 †ï~ -ÛCqÚRv ÑnÃÖ±làØJfXd£8‡¼ý7´0 òÿâ·ô¹¾Ôäè¶Á'Ç8†‰-B‹½'µ?€ó6­]¾í`¢Ò7ó˜p¨© ª,AŠ8&žaóìB‹[¥¯ì=õ°ù>7[ÐÍã/H -¨*pØÉ 7ßÍ€ 3¶«è>Í;aޝ9"r¿¿…±ÁáE6Ô£* © -ÊW©J!¹úJµý1¼¸OGq¿OÇì^ßN¾÷Pvb–> endobj 269 0 obj <> endobj 270 0 obj <> endobj 387 0 obj <>stream -H‰bd`ab`dd”ò ws òÑöM,ÉHÍM,ÉLNÌ ÈÔõÏKÉêÿþ!ÓÍ#÷C–ñ‡8Ë9ÑÜßi¿j~Îg•©]Æ{ŸGé{>ÿ÷RÁïE<ªßOò¨0°22²ñeÕ8¦ä'¥z¦¤æ•d–T:çTe¦g”(h$k*ZZ(€å‚+‹KRs‹<ó’ó‹ -ò‹KRSôsr‚@ê‹‚R‹S‹Ê€¢úþ@ÜòóJB* RôA¤¡BJjgA0ˆ`bddñÿÞÇ÷ã{ã’òK—¿ÿ^óžùÇíŸ³ýæÕ±ü­ð[ñ•åwÞOî~W<^¹'wƒüw{¶ßÏ÷‰Þ[cò›é7s–‰…EÖ£ïÌß™Ö<º'Ï -Îò>stream -H‰\ÁjÃ0 †ï~ -ÛCqêÊ FÇ ‡m¥ÙÀ±•̰ØFqyû*nÉ` ~~}â·ä¹ym‚Ï /m‹zág²>ˆ£çm~¨Òíh’ ·Ë”qlBE]ƒ¼²9eZ`÷âb‡{!?É!ù0ÀîûÜîA¶sJ¿8bÈPÖà°çEï&}˜AìÐ8ö}^ÌüM|- A}¼‡±ÑᔌE2a@QW\ê7.-0¸¾ºS]o mÓÜŸõªNO¬T¥TaSëþ,líLÄéÊEJ¬5¸-ÅL­OÜ%%rD endstream endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 356 0 obj <>stream -H‰bd`ab`ddóuqsÑöÍÌËÌÏÓ JM/ÍI,Éÿþ!ÓÍ#÷C–ñ‡Ë9Ñߊ¿û~=ùy€U–aÊ.Þï>stream -H‰ÔW[oÇ~'Ðÿ0~ –…9žû¥©b9 KA,³ÈCŠ´²˜P¢BÑj‚ ÿ½ß™]R;Ë%¹l‹‚¤ qg8çþÍùÎ -&è—ì—Á«¯?öñq5Ããs&pÍæåàfðë@I†ÿN*棢ÍïÙýàÍx jžTŒå?“l|3ˆi;2)=óJsoÙønP06ÿ\ËÔF%-ØÃ|òt¹(Ù·³ë’ÝÍžÊóòú´¼Y\içöbXIŽ$Wlü–T±?X燎ÿšNàs5›Îæ_M'”|žÿ8¹aÅä¶ð+ŸO>Þ.ø”¬+{Ï'ÿÈ—øÔçÙk6Ÿ-àú9­VjÖL‘ÄêlÙº?»üý3_ÎËŧù=»mžú³Î“âf™§®ÜÖÞî›Ü–»[me—òº!¹Ùm$k™Ø®líð •¯Þ ûôÓtrÅžf“kv]NËEyQ¼+g¿”¿w¦ªU•ÙŒP±¤åËJôóõƒ<€ãoN¿8y·O!—ú«¾dý¬ -ƒ³0~÷p9/Ç3*Pfgb­<Jô¬ëEVehùì3ö¢Wå›*yvõ»K^M -!°ÊCµÓéN0”ÓÇrß@[qî §‚wVäõktK$tÕ[hçþÓtJö/þ²Åƒîtv«áy l×o[_ÜTÀÿ>ä­–6iå ºœÂ›åsK~Éî&÷ ùF¤äšpŒâZ“Ý-¹$ˆ -¢g™†mÒm¤.?„Ø5µø¶C?ï%ô©ñq3ùíþ™÷Ž$JÌ.+fÇØ[1e5·VF¾‰ß(ÞG®(‡#SLñ7‹¡.Jv5”Ål8Ò:ÕÍPhx§§ço˜i¶ޤ*æC)‹²|þ8þfðåxðê»éåUyýÝۯث³ÁÞ¼=aƒ÷Ëi“ƒ¶‘+ËŒO_2’;’Ç—K×ÕàòêÃÎÉDÄ>œ|;Ðì_̰36ø;Õlb…‡œd^j%»ºKÖé¯T\kͦƒ+—${7ÐÒÔ`·Á0/$¾õ³) nØÈ§¯JËû>.é¸R¨L|V8’±Ò_û8†Ðt4±IŽÄ˜¦& ƒøey4KEÍ `HR(îDlJjÍ•v,ráãRp{z‘QëjŒ¾™m€6Jú«­g#Ë•s­¯«Á(péÍjQX-—’õJйú?¯¤2]+•½j)j‘”ÜPr¹m%õ¨B¸MõYï²ÞUuÅCÚ ŠáÞiŒü"ðȤþ’®hU -°6°ç^Œ lnTLQÖQ¥*\;ïñ­29O°ÜmÈPM ©Àr+­K¦3 ˜únôS=Á#=÷Òj„dÑ—q!`;Wq€ÉßÀ€ÇB_ -t5jŒËwb7êŠGRWé›…CáÀcò½/ ºš t ÛIÐr%cÁû>4ˆ©Ùƒ ™hÂæ]#hOüTOT²r€”)%HWó l°jîzÐä9XÍÙ6 š,¨–Œš:1äahH:ŽlS­‚ÛÁ‚B dÛ­ÿïß6/¾Íac÷gÁã ¦? *[6bF’ÒneAŒbQØó CiÍsv‘`¬±ëÀ†Öø¦ ÇH$è· MÖÛ’i‹ñu=÷Yê[™ÏŸå½‘ö,ëMêÈ™c_î;Ïû6L˽ÑTÇ£S1k˜Ý÷ßol”}ƒ7yðªüŠ2Œ‘F“/rºèÍtÇàrß%½¥@mã»ÍF”µ×s'á§µ‚ çM¯÷<Œ>Aºô>i[ÃmÀ[RÆoM9z‰Bÿ 9çElöƒSÏ Æ÷ãEømˆœÐVð`2–ÂÕQލét8‘&òänLh³[U±`·Žæ(Цø ÅدE»Øí˜bé‹Ë¥–`Œ¬„ߊa¸&‘œUºÅm¡ÅmÛ1 "l¸®|Å{+]4TvóIŃôväãæ½gì¯ÍÉ5-šH÷ß·ßûvó" ú ÕV^ìâ@ƒÂ™}9ìa°_{ÃÛ‹É6½G2qtèG¾Ü'ð t꣎íÈìÿ€úLÀû¤hNÏûR=ß§ ,óp{Ÿ‰ BùþÄ—b7ö _Ÿ6ß!»¼'ñ ÐÒ:xïê‘.îãÕ}†Wr×1>˜Mþ@¥© /OYêDæ%Z„qÍŽÉ%"ç:MaacZ…HNÍ À›´"˜ à "’áðè5MO‰GT‘ôáA9KR6¸zZZß&?[j¿@?¬ê}Ô)Pm|\XT „¡S¤"¤…J ‡Û¯d¢V,±H†ŠM™Ñi4PÂ…¬r‚နyZ¸@f´Uœ‘軕 JÖi Ú¢µ×«<- ŒøRÕ™U¤.·¨ïô-dä¹T©Ýcbãk`g6Ío¦“‡‹âöbHgžñ—Ø ½œŽ;ŸŽßÍžÊóòú´¼Y$FäƒÎqj”ãH¦L•„yøðCQGºøm8’²¸¼{ŽT1-ÿ6üqüM»]ai™"‘8ò'd¨°¿æ?yí¡Q.Z¼¾åóÉÇÛ{Íæ³Åå¢<§ÕÅr»Žt†:náuZÏ£ÅEûò섊R®ƹ€az^¾g÷ˆ$lŠ -›À/‘‡ì¬É Ò² ›c#6êê„WÓýÉqÕôX©wéØr—¹„s%Ó»¡Â=ÙÁò•à»:‚‡å!z¬ŽÑå¨o•¨>stream - - - - - application/pdf - - - BSTsearchHit - - - - - Adobe Illustrator CS3 - 2008-07-01T16:47:31-04:00 - 2008-09-14T13:33:33-04:00 - 2008-09-14T13:33:33-04:00 - - - - 196 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADEAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9FeevOml+TPLN15i1SKe aytDGskdsqNKTLIsa8RI8a9W/mxVilp+fPle4tpLv9F6pDaQXE1ncXEkVtSK4tVWS6jdVuGkHoQt 6rtx48QaEt8OKqPmj89dBsNNnGlxvJqsunXeoaX9YWP0ZFgW6aGR0WZZ2imWxd1ZF2UpzKM6gqrL H899AstN09vMUga7vfrcguLSIQRm2gu57aGY2txMbpTKLepjUSMn7fEYqj/KP5l6tr3m5tKl08WF kXvwkUwU3SraW+mTR8zDNPDVjqUleJ6BehDYql15+dn6YjtrbyTZSXl9cailgZpVtZ41V4J51cRr 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 q7FWuK8uVBypSvemKt4q7FXYq7FXYq7FXYq//9k= - - - - - - uuid:B4D572641149DD119EEFF96D7801BC77 - uuid:852ed07c-1a0d-af4f-b9f3-759b446c18bc - - uuid:1674efe0-8233-d14d-b102-fa10d8fdd283 - uuid:92F9E1E974FFDC11AC15B6426E08541E - - - - Document - - - 1 - False - False - - 16.000000 - 21.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - LucidaSansTypewriter - Lucida Sans Typewriter - Regular - Type 1 - 001.000 - False - LucidSanTyp; Lucida Sans Typewriter - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 121 0 obj <> endobj 199 0 obj <> endobj 235 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 386 0 obj <>stream -H‰|SmLSg¾.Ü¡ë2n:,ïÖ÷º‘ìùà²ý€M¦Ã`ðc€ˆB¡-TZZÚKk-öËDŽҖR(ý P’‚“¨ÈÀh²f1Sm?æ\ü1]LÞË® +.û»““óãyÎ99'Ï9,!ãp8¼Ü#9ŸæçmÛ/­“*ê¶çÒB™´jƒHg‡Ù’`ÜÇB¶ã¯_Öæñ×0¬kâEtü%$9újÂ…”<ãn…R§’V×ÐÔ[UoS;233Þ݈ïSÙ"E¥˜*Щi±\MåÖU)TJ…JH‹EïQT¶LFåoT©©|±Z¬ÒÄÐg ¤jJHÑ*¡H,ªj)…äÿ:a1Ø'X¶;€}†ňØ^XvCœcœ¡8M|jüUtŠ‹šŒ(ù ZAÉŸkS¾@q%(Ž,& Ñ&‡'U)%ÉúéHdd`B@F5rÙs€]yNþÇlÀËÔo”i˜¦ Ú”ñûh×2)CÓ³¼cæ€É¼÷¿¾<IŸ)ˆ7È«ë-ÀÒÞ;Ú (1ŒðЛ}‹IßÑa„¤Ì®=Õ¡y‰ËŽÀ¼‚R–“žöáym¨o.Úë\úrfvjžhO¬C:Þ˜ßvÆ[Ätº¡ž £úZI¥ºžŠ„òFpÒ:41æº=|F–¢ÃÃ^‚”9<}v/à2<ã"ú{’3uåßG—w0¯X'ûL7¯t¶÷œuÀGÃhçwÒ&OŒWTJËÙùÂôŒ46yIqalÕóä±€5 ‚çGñ/úˆN—×îý#FÉአ-VB.jëÒ¬móOj9ßÜ™þ9©ÑfžZY"6‚¦¶îP'D\æ>ØÙæ3k.­Ë‚º¹¤Ñö3å¸õ™ߥ弄À÷èÚü䮺4 ü6½¾Œ²ï<]iþ‘|J2kôŸ¼¹„¶€¦öîQ'$Ÿî÷¯ø þ׸IßbÑÂrÍÎ’¬t¢51øþ ¿Ö­ÍÃöÏz“hI ý†/ôtŒ+½§´ vkñpx"Ü \-:±ŠÙÌÆ}–2CÿÞcáŠsø Q”€xó ÜZ/²@›i(4ž.ä/¹íºÀ_Œ ñ®€HsmYLMækÅ‹N;Taлºq\æ$k]ÇÒMØúú² ›@‡&MfÛTÊa´EVÉq$a(ž3<Ûgé 65ƒ}åcyCOŸ>dŠxf§Ê@k5 |s…ÌxÂ"Õñíô°û\WÄÉ—²{ªŸ»¹ØÚ”k"è$döà¡$òø‘NiG‹Û=Ï£Tœo - ¶zÁRß­éK ĵ#«×ÓVJçßPËšÍ5.Sn¼¹÷6š}˜óý¾¥ØSØ™Cæ/¡»¼¯¦.'p¹ÛÔ]pŽàYEÙr`i²;lÐa³y,@sJSëÚÂô(˜[Dàw8Ã’xuOP1Fg¢·®B²MïÃ¥52]#hÐ_1à -´É?ùÑ¡Á`/p»šOÇ­´Ú­ÐòhkEUå,‘ Õ7ð«ZÃy%¨?ZZP¹Þ5—Õ{PŽÿ¦'YÏ=I‚þݺÔõÍ/D“ïnúG€ +¯ endstream endobj 236 0 obj <> endobj 385 0 obj <>stream -H‰„”TWÇgH2»˜žÍ03˜™ö¬›SVPÚãO"XÔ-.4«‚„š`0»¸h<Ò´.(l„.ZÀbU[¬¥Z( md\ËnA¬ÛQ»é¶{‡}œÝèûgÏÌ93ï½;÷~ßçÝïà˜< Ãqç£Ó®-_«Œ‰É@(R‹]BôlŒn&övŇåçdVmbýÎ[Ê”ÀB ä9»Ð ß -Ô÷Ô*çšd7‘žþ fªvfZ9;{ hX¤…È ˆˆ™Õ­˜^[—^­L"{*‡‡6+?M8‹dH¡EòHž’¨Û¹9±,«R©ò‚èeàÒ€ôHO¨€å÷‹ 2?°´ØÀÏ7‚üñSååçX©:.È׈ <šžc „ªÙ C<¼ÍãÓØ‚²iCw Ø‹†°€@aº£á|cG×âÎÞú«ÝÚÁ±mº¦}9Þd ÁHý?zQØs{Ö£ìBUñŶqxq~Á«GÂ!*ƒ¯á&¡(ÒħNß¼üöiÖV×°Œy§ùDíi–꫸¦¨ªp«`Ò¼þ÷Yx…„pËZ·Ëù»,Ý:òÍ3Ÿž™bónËc3Èd9U†´d¦)ãp³Éõñ{ÿ‚•Þ‹¬ÊÍïwй“à*Uß 1HõQew<4OP}£ŠÂÞ|aß× €} é°l(féîµ6ë!j*Àc …ùX:ÈyëÚÝ·õÈŽ\ ë¿8ÀÀÂ×Ђì×X©‡ÄL<ERwi1jxT3J\ñÞ‚È=eå§u_’µE9¾õ *ö".‘MEz#èI2ó°xJÔðîRõ`šêþ÷(þ}Ï•²[ÌÕ‘“çþÌ~õYí$¨µÔ„¸~ IÝOögósº70hãoÐ&¤\~ŪÇ›f.³5D¹A±©²l+ZÌÄïm~3…tÑÓ“‹³˜5&…îê‘w/³-M~&Гæhy¤~÷ŒD¿'€[Ý“ð19t©¥‡™òÍ,’œñ_ò‹Ê6û9]gñÞ†l&m£3Öôÿž eØÏÃBWC#„#L f¡C¢ÐŽüF0Ô?Ü`¢!\Z -n.Y"å—HùC‡Œú`M‹™·%½S  ÝQT_¯ôöw‚šnïé?ÍÔžª<\ÍþÁýzEºv^6ùq«ø,sòT¥»š=^ùz…U;1%F’ÃGßr·êZÝ…ÍùŒ)3i¿SÒú7Oæ{¦8¿<:EQ}’ö5Äã^Æ? -B_Pýn’OÁ’$àÐN´M∖"f= /°¼Ér¿þÐýHÿ‘îeO/Ïç‚U¡ÍNHâÅ¥7&Õß<òÝÄ7ÈD DxøŸ°u_b ´™¦&~Âx¢¬I pðÔ8¤£z@œišzÀ4ÖU;ÅnâIª $5^í(<‘ÅXWU!ܪÓû¨NhÉþ‰þH¡QTklóõ{}cº¿–œ£9Ì+éÇ[‹ØC Çš®h¡ÜŒøŸt'‡? endstream endobj 200 0 obj <> endobj 384 0 obj <>stream -H‰\’ÏŠƒ0ÆïyŠÛC±U“´ B±-xØ?¬»`uì -k Ñ|ûÉ”.l@óKòMø&3QQžJÛÏ2z÷cSÁ,»Þ¶¦ñîW¸õVìbÙöÍüX…3ÔND\-Ó Ci»Qd™Œ>ðpšý"WÇv¼ÂZDo¾ßÛ›\}ÕZFÕݹÀÎr+ó\¶ÐáE/µ{­QÛ”-ž÷ó²Á˜?Åçâ@Æa½c3ÍØÂäê|mo ²-Ž\f¹Ûþ;Ob»vÍwíE“x»Å yϼ'>0ˆOÌ'ä$Œrœ §¼ŸÒ~š2§ÄGæ#qÁ\ +Ö+Ò+¾GÑ=ŠcÅê]`œY£I£Y£ƒF1+bͬ‰ ³!æ¼4å¥9/Myiö£Éæ5å¨ÏÌgâ 3>ffø­ ½•aÿ†üöfÈ›ao†¼öfÈ›ao†¼ö€èQ *v”|öAs÷[ ´]¨=U½·ðìL7:‰Qô‰_¢ ¸ endstream endobj 383 0 obj <>stream -H‰|”{PSWÇo€\."qå›äº¹±êjW««]|[Dy¨X©Bx!4 Ix™@« ÄD <Y… ˆ€ˆÏÊN)hQ·T«3«®ÎŽÛµç2§ÛÙ@ÿhgÿØ93çÌœs~¿ï÷û™9‡†xy 4¶;2<8le„@$È}˜•‘*åg’f—QZड़룠~‘Wþôý÷R¡óIó€~~÷¢ßyùÏ\TîÊ:‘#¤¦Iy+’>â­Ý´éO«fæu¼ÉY‰)¼˜‰4%S %e‰Od‰ùÒ”äÕ<ÞÎŒ ^ôL•„"IËÜ»¿á $<>O*æ'§dòÅB^Öñÿ× AhîøÐ‚à4d ‚,C•ò1‚|â"HŠDx!1^ÈYìŽx žÈFD„h‘'´4Ú<¤·<Ùž÷¼"¼úè ôkh6:á-ƶ`Ã>»}*çdÌùÙ7Þ÷ßssð ó{ĨŏÍ`,™>"§MMxRìé#L¸a×áÆ4ž -£`4À¶V7°BÆÒA¨ls‚¨oÁràñû¥È&<Á²é@æH` Âm©0r\=‚ÌØðͰ± ìuWÑ›Ä<ý˜ÖZ<A 3;XÑÊÇt†S÷–Š›¢ -Ì÷¤-¬éª»ÕÐ/¬`E/8CÀµèä(, Þ>^œ·;n­Û'¦pƒÖÔËèWÚ¯všRBW|´<|?¹/*$*ü&óf8•C”ù?xèæáOÁ‡T½ììéè!:Z³ã6à áÙ¤>•Ž?5ÖÙ Ä_Ç>Ý‘¾uWp|·9ŸTU(‹U§óÔÊu®ö”.פÂÖ›ÒëÄ©‹ÝwÈ‘þ«s¦ö÷‡¹Å%t|Ôem¾PeÆìµ5¶6Îw›Z÷Æ -R¹Q{è °^× \—ª[èð§" } yf!°¡žœoºIµö >á¼ì6sK¼ñ__xÞýN¯Ü™^ǵ¥}f -"`Šk„Ú2 "ìPøÆ½¨4;´lü¸Gµ2õÕz³¡+5ZŠ­DßuIàÖØýKÈ ´>‰‰¿û&cõÊÐ5qÒŠa é·©f]uwÖÑ8àá£ÀošËÄÛ•Øß+V¨4;µl¾@Áœ®?%ÇÈ@7Ç]YÏ Ÿ²ùWusq| ×Â8®Ÿææ—òHY¹®ÞèÄË!»e:ÑAãS|OÀtKj…O´Ü-_ª¢Š’ -ØÒ ÔÔíE¥BÖ¹r£®”»cu]!û{¿¬y7L!¬Z€˜Œ#ƒƒÅ˜p‡¸ï i)‡'ðí6®5þ†P‘f‹–­Ò© ´ÊÙúÚÒžjdIŽJÙrL*Ž×$ë ëW’#àÇÙ¦ã¶ÁáfTdÏuÈeàJ;pÍ"6~„Pg™¡¢ÈCB®"C¤=NœDû€ÞÝbгgÀÛˆ¡ËÉ{H˜³˜h“I-4‘øfëAkT-¿)âÒ à¥m:ËÂ+Ëíòò|K^» NÞ)”õJFÔ6ìﶇÃ/8àˆ]„–£ø!­pìâìœ\¨Á±Ý 5º]³½ù=Ô÷=¹?ðùÌÞÊ6|¬Ä1K‹cг1Qí¤`’ÀÇÁý°¿?0ÜEfÖÐcÚ2}œÁæ1.>öª~KT9Ù¦§ã®âaÝåÒ˪ÒS††›ÓŽ2 ¸`éÈÜzûó¯Ȇ<ú­Ô¦”Î!ÑÞ€å±Àçf!—6éÔý5íô¤Bk cÛÞsê0Ý…ÞmÖæ\ ͹e'rœúŠÓ„±‹­@r­ö$ñÓjôDa‰­T ÊÃŠàœ Ì‰Ö_«¶WVbÖš&óß;úÉO‡góo˜Íϸ[!£þÜwJîßüøâãT 3ÒT¹šÐ›jKI¼§ÐíÀ»þ_§KYøxÞ9y‰¤ +•JôD@À±„£dxd"DÖp¶µ$·µô;þÂmjìê»äÂJÐÜõômyMª*¢á¹ëÖ—$ «˜’¤ ¾$ KLË>UDj­ö.ÓÃÆ{dã½F[3YjôÂZý…ÆBžI/Q+0F¤ò1p8xÿø»ŸË{àÇÌ•I:@$K/ “xûuÒÞÇí¬«;_E\¨UÇ·’ø¨±¨FSWÕT¯ªä´|ÞøYÔîôäxnpDÚ‡Û8«ºcŸ>sÞÿšËxè&Ð{FŽ_ê’û·,Œ|Àħ(5@™ -IšLã&q~†Ä5€P×èmÆ3Õ*B½Tœ»™¹¼ÛtÚ ™ÿ@ǧô……:±7 ýØa2düâUœüÎæ6K·¿£³ÇÞ醢XGß_«²öç®ÛwHø®ƒyÅ2Öp“k»i»T+·Xõ•Dmýé¢JRsT ‘‘,]!Ζ`üdÉ)%qJmk"in(¯zi`X 0Oʰ˜Gcc³“ˆC9ׯ”éŒÅeäëf°ý«×œÞÔö]aû3„‰ÜQüe«9ÐwTtcà™õŸo¸îô:Ód/J‰æ',á“UÀ»£×^*Ηš\ OʨŸ¯‚°÷ûîù¯¤ñ—€AÍe¨>Í…~R¸%w·²SkÔg‹¥¤²LI*ËT§ÕE§µùg31±M]ÓØ[uµ;Ð×û¶ l­}ež4¾3±œt8Çýƒ8‡õ¢•°Ú•âFiVÖ•˜*0SEÕΩ/5ð‰0þ1>y,Nœ÷_º«6¨ëŠÚ¯¼ql%fÙÚÒ¦»n2mó£­3‰›Ôi]lÇu‹íÆÂæ# d‚$’²„@ˆod}!­" !Ø€18†€Ý„&n4É»&N3n‡ºý¡ÌtzE–™ö HÌ´?ôgGsß9çžsï{/á§xEÒƯç,ãÑȵZM@Wx.ìxö˜ UŠ®™±NØu{ =/óYÉb†§sÇHMøBŸU¶•¨…Ygµ§³ẇ¯Løi¸•’ÄŒÎ\hN0ã¾Ò"§„Ê<¥‘f2g²U§Ï -ŒŠ t–¼ÌРi(÷—vpbîÙ‚“g„I“=X‚CWá;“9ûnÒÒ6×)tØ.^´ÒDëBׄ?Øy©gp¢ácÜ[ÏZXÚÞ´öz†ü;È} 䯼ûôÁîdØM|Ï{É&žm*Ûì=øòõå¥ÕQ§Î­bˆµtNÓ·«ÃT¥jšÑ÷`È¥±¼¶¬çõ«wÀŠ-·çxTy©Y[ÈÈÊE’WñzÞGÑ-ÿÛ½/¬½fJ3¥›Ò|nÿ¤ Œ›ƒ8Üø±BD¾4’èÀ鹨jyÁ怸ˆÚö>x°›Ë`.•yøõÓ§¯ëè:¨‹•R9rš«ÁŽUt ÈhË’«ÉdšB\”(ºÞ78ܧé‘0|î¸S½ÊÄt‡'. üEˆ•ÏV r„·‘ˆüpÍ‹3´=âŠñÖ"ë¼W`kôÆ·øñ!‚ÈÄ-7"qãQPâa×<ÄLJÃ^Ò“×уw—'þ´ÔEµ×•×2ùÜËF‘AdLÀî}*û‹`ùí{KÝ”o£g7;ЋðÔÌzÐĬ¡, 낌¿ì¯¹^9¥+3ë‹™býoÅ¿K¨oÞëy[öçxË)5ú.gú£™¢$Ôö6ËZò©¬£ÿp(è¤lHÀjFÊ4¦R$þß×»³Nç6ÄŸ€'í¤˜W¾&³<~©“òo ¬#­ðoj6óÈ+–Ù¾ò5Òu¯èßFä©Eˆ²“þ¢&À8ÅÇ¶Ž¢™ˆîž 2’ï}~‹ùpöÊÃ? ¤üá§Ù¯_P‰éW$IÏq{…‰—žœ†gáÙÌ=%â¶Ê x}MM½‰*,¾vž›^ -{«ÓÑä¤úB… «ƒã“uôûÓq©:ˆ'FÀÝCZÝîuyB•À÷8Á‹Ü)*Çi¦W¢bÒhÏ­È)J¦ÜbcQUVà( º‚Ž Mð£5[µØT\%m‡^7Ö¿=Ý*kip;® ˆ‘|#>6·³õ,uÇ·ðÖÄ>;ßóéÂÏ3ÏaŠüšj-Í?êTÃ_€Ø÷¯˜·ÀäGÓÈÜW¾!–#&–ÌÌr/WŠŒ›Žjv/zçD/;÷æ` øÙfådk«ZâVk•«ÑewÙo—“µM>Üo,q•Q²Ô“2˜z^ÛÑQ£ÎšbŠÿŒñ6ŒÀ¶sqŸ~vçqîÂÏÉɬÁ”0]Ô&íìöv±¡P¸TÓNKöjOŸÅ‰ë¬ËÝÞ&¼”HÍ;W!Í¡3ÄæœóÂäé’Q%=YÔªU ßPêJåyC…t¥Û`Õ+L:U“ -—4Ï˯R_F¾x€ÒJ"Òcâkq‹èÒ0ð‡¬kÁ”ªÌe¬cûíÌ»à{h뿊qñúá© ,ºÛsÿRw{•÷†ÌaÀyiœã¶” -†©›‘»Ãh©ýcÃÝŸÀ“¿Ty±}:zˆ¬iö[Ôøs/ýXIi›º'‘TKãPŒM{Ê»ÕÔk †NÀNÙLÈ¡ÄJ6—Šq;•#úZ¦v6Ä„ØÅ·§¾@¸";eh- :¿9@k6/<A3ðø-X:£éÜ6؆^>gŒèásû“ûÀÿþ¯WxYÝuþ¼¼XÕD›=Ú%ÝP –¦*$•º¢s(C³ÆÖÍÒÔU^- Ä¿:™šÍ°*¬¯¯Ûç¢\Í*™•i=ØÊý¤å η E»úM܉h7‡!7}N,D_D~’(åò&ÆìÔË…ùº¼â4Z%®,—¦¡Úµ³Õ€×ÝÀïYôƒç©œÄ©bÆ‹ª_öûܱêcË pâºÃ¢#ÙYû^p—í…—PH†^‡Ðï‚þq6^)íTÒ|½w•örenHlŸoäAµ}MïÞN¿y¸|Ï¿w>vcðoÚÉE|4ƒüƒG— endstream endobj 122 0 obj <> endobj 367 0 obj <>stream -H‰\“Ñn£0Eßù -?¶ ¶gZ Ej“VÊCwW›ö8)RcCò÷õåV]i‘‚¹sƘr½Ýlc?™òOÚ]˜Ì¡] -çá’Ú`öáØÇbY™®o§ï«ù¿=5cQæâÝõ<…Ó6†¢®Mù7ß>stream -H‰„UmTWžÉdf‚™&ÚD3ÅjÙ¥âÇÑ®uÁ" µE¾"Ä‚ÐA¨HAm“v‘(ˆ€XQ¡`…Š_ˆ‹Œ¢PEü€ºÖ“SÝw²7»g'ØžÓûãž9çÞç}Þç}ÞûÎÅ1±Ãq|Jèªèˆ5+¼Ã²S“ÔQêͺ5†L^›š¥Ñ:ÏU¼ç'‹è+þ¿ÿžONŰšb7ˆ™_L¬ž2!ÔÃ‰É ÊÈ4hSS6f©f%ÎVù.\¸@µ4)cƒFeÐeiÒuª•›3´™Zu–&ÉG¥Zš–¦ŠtâuªHN£Ív_ P¥êTj•V“’*j5Iª,­:I“®Ö~¬ÊHV¦¦hÒ2ôª™ªié†á‚ŒÆ0sa1l -y’Ø_l†-a,ŒÄ¢h,ÃâÆvpL„Ø|ì>>ÏÂ+ñ&ü²È]"J}&:*ê'âˆ:â7±Lì'Nç‰ÏŠ‘óÈU¤…>`|þøÎñO]ÿêšäZé¶Ìígww#`<Ò{@ ¸"ÌÊ 3½P RŽ*ãÇ‘àå¼hfx«£_ -®€!WÊÝÀ­l~ŽÝ—óØû¢Ö -Ì“ Vf?³ˆO•Á›w6¯2µ¹hÿ˯K¼)“Δµ3­xANÚ–¬¨ÆãJ®Ôÿóâ+ù³Å-‹×Mûà€ºfµ’Ù©Ct4š)ŸÝ‹d°¨ñÎ?.ÝVª/JótêŒ÷Ó£m·ëKkªªÙ#u‡öÞ{¹w-¹$a"wž’Vg}ß*o:zêô‰c™1ÙÛBý•îö2=ïZ ¾Æ^&]¿ÝÛ_‰O,zM–£ImHúÔG9ê;Tô]‰ä°'¤<¬_Ù»  å@׃èb¯òZoyËÉk®Q+q yIÏšì‘<}ÚR˜$‡É±ð†ÏSåœÿÒõ_KVÒ-E½ÝïI.Ÿ@"åH¼ ‰#C”aï…ä'|& ÷ÂÁ^ÐéaSÓ—M-’ÓmæÎòÇÈ yuÑ%a;4KÜ¡‚Ãm¼'aƒ -)ïÉ9<©?ËÀ ¸³!<âðN´Øè4H!þ[ØSA%(ÅÅ¡bÄ"e+Úq,'Fž;!wð– ¶Â ˜aBŸ.þÐtÖIÅÿWÝŽE¹ºä~›øU9¼E7ó‚¿$»G#B@Xä=ÚaAe¤;°œ•;oVÊ[8‡…²Š_ÿ,,i v‚„Eм„èªPs|¤7ó³lˆº j*¨›HMÚ(d´§ÞÔ)$• -×ó&‰Ò“88Ò&ÎcÔ -úçËlÌËQDPàZ]zè$ÛQwìêey}á÷š•ñ­1ûÒvKþ„¥ÞR[/©«¯hi•_Èì^U£Ü·¹ÔOâ(k´•úùhaÁA¶ÆP‘®‘'d«?Ö+s6¥þM±‰ -7PÌKnžµ&17I»…Ýš›³Í_1_hÌ ÿ’ÃÛmÞ+=±zo¸bÕô<¿@öýà͈ž%GK†P<|ùðê¡} ÊAúÓQÙ+H†&ŽÀP]†÷`Ñýžô‚ãBk8þ‡_³Â%qM~xt»vÜS{äg¶Ûo+;Ó#@á”l3õ˜:’$ý¥Èm¥µ££¯rý˜9µäsø++ñJÆGpȵPÇ¡:ȇŸ8Ç"gK ƒr7+n2+ôA‡: lœ# °§èñ!+1$³òb -Zb$ºÀO3<#ߦ àM ùì¬0;¸À„Ëø`ØYï1 -âÅÜ'm7x|€im“Ý ˜»vÂDÃ4G ybZa¿Š4ýÇ}Àž"üvÐÇ;äšÊ¿C"ɸ¸0@p²¾ÝDÁ·Žvò±=å]ÇYx†?KΫ¥›ƒÃ>b… 1"Óýˆ‚P7 .ʆ‘:KCEÝÉ7[Ë/ž’w¥õ…V++cá -äôñ -ÕùʈD.F.ì‡c‰YÁ³PYfµ³PÂ9úƒ Ä9‡v_=Þo…êD¿=EêÐÑãÒo>P.o¾»yPñâ»–†¶ù¼¹Ã*çýŸÐ¾éÙÊM9ÑyjEB²¥AËæ-<úDÎgѿ׷‹&à+Ù3 -LÂ5_H¡Ç(ŠáGIaêŠ~\~ÖtÁÛœGϯkeòá!Ü’¢IhÊZ$›{7jäQWûáZ6£Ô×§8RµkO-Ëœ+ºD~^´ug‘"ÚØ|†…OhpMº‚Þš»:gK‚r!½ÿøå〗§°±t¸˜ÉGr:~mlAªb‰áü7ÿ‚yÆÓ¬ûV..‡O¾½Ç°*lÌ9&¸Dx3˜s=¤™ÒV5ÅŠZ9éú„œ܉ò±ÕxLþw­!©ë–«ñ$Jò4 -í¿cï6\ÒAö—I³‹³ •5¾Ï“(ÎÏÛ-£3Ê"N$²qí]Ša¦›!·x«ïV”T—6rÔØá„¦FS_M÷¦÷¬>Ê6lªÐ·9éO©M•tUQCAKu“(./hÒуêK¬á_Y– m¡Æ'Ñ\q7IT·_à 'ª:Zi}¾°ïÎzˆwêttÿù¦>¶ƒ'ׇ½~¤D«Ñâó«%åå'›èú|ÓžVÖ·©Ê›Ù"9‹+öÞ_œU°—Ë -…éûèO‚ïÈØ´ýiªÔ§ÔÝêð:û€¼TÆV®ÃH”¦)è¾êMl,v&µ¯âkQ¼2µ¨VM¢H­ˆŸby[ø}ÆŸ îç‡ endstream endobj 223 0 obj <>stream -H‰œWKs¤È¾ëWpÇÂPU@o^¯½1ŽñeVŽ9HÔÔìÐH+èyü{竊uKŽ5õ®¬||ùåWZEð¿R:²Žž»«OÑxõóõÕ»¿ÿ–G»)RQ4íÆ«w¿B÷aºzw­þ›Ãàõý•*¢þÁ§1‘5yVF×Ç«›ø—.Iu<À¯‰ç$µqÿ˜˜xL>_ÿë*ç-Ñ´î 9ƇDËQ=/?¶c¢Müƒ:Ó$UE|¼Ã3‡tnïâì[HQqš\ÿêJU¦£ë_@ <ÓO ½,-AÎqÏçDi~Ü>¥Ó[lïàa_xP«ºIà!îŒüíà}ßQþ]¢ôjG‡2d‹ï•Ç#êö4É%)ìêÛ!ÂKQMó÷¼bÀɽ\ç4:Ùá -‘íEúš¨ŠÅƒ*Ï#RÜõ_@WC?ÒóTÞ¬\vlðTÜÁé§X™Ø"×@%Ì2À¦£Ÿ/îh2:мx »DB†§5tÇ´•Ð)»ãÐy_w?ZÔ+Ù kèxñâìàæm?°c8 ´“» ¤âÓ¾ïœOq”.n²£¯£ |ƒ-ˆñ€{m|âÇrï5ƒ:_e¿&ðsêïÚ‰û¢qÿF>IR²Zý}Î…aѽiâkHîeƒ?çÃü )e|oìç -¹C?‡?tŒ¢Œ{÷ø;>Ê€SøŒLbb Ë!Í‹“¬h°ðjñ‡q/G;1q5vâoðà]?R 4 Ž`ÄE\äq ËnÔ£è²@§†! °ôæ;§Ç#ݼ/y<9¹Qs>K|9GEÉÙFŸs ˜áßk„:ÇÇiæÖ‡„ÉihŸe–­{àÓx¬__ãÅæÑÓ$“µà ~è`L,måÞvQáZ¼k‰Dˉ·1Ÿ(ÝTŸo“À“H;ßP㇞ÕMšßƒ't¬»inGöÊvˆ6P‡XzèxC„³OJÖ% Z,Èx˜Øqf„»Nœ5¸@8˜"XA¨/Ù OËHx-a°‡7x;Ù­IqHiã,"$c)Äp+¹Ò’(hC0y#Hí -èP*dšDC¢‰Œ-²ª¶Hk2Ý45òˆxß ÝÜÝÆ· ¦Ö³¼£Pu–›Ü¬6ÞÄ$`ÂFÆÎ‡ƯN =r›YÅ«-¦FÏË[CÑSm³¼®µz¬%=˜%³ÛÐÀádzüᾷ–œ÷¯Ã7:ÅQQ•©¼%‘ý8¡4žÈ‰möD§7"LïCÞ…ñ›²ÓªRð]€*Ó­ݨ󯸙ç¾ìò¼0a–‹ì”½âàÝ/È…ÖD—-`oD©Š©«þ‰ò•7rÉ;þÖbF£lŸyÙ²pêJœöáÛ™žÝ(BOËðˆv~㬠°Ïø-çí7²SšgXP<=¾Ìy,€¶NýÐÚµ#}O -¤}Ô>Ÿwµ |Ç% /§ºiæX³ø -€ÄQaãO0–Ë.Bñ`Û6\…"¯2›ë2*«&Ë›Æ*Ü÷ßÿóô:(&ÚÖ«}èß(‚XšÓÁ3é@¶بWPâV24™ÉõeWl*ñEn3chªKn3tkà—Ìà`Ú_Úz ¼Ý‰`¦Ç72ò ƒ4ÖÓŽIúLššà-gÔ¯s•ÕÆØ¨,rÄVV?@I÷<¿ª]”™²ë}/$ÊY:Á‘­!¨@Ÿƒ|ípIB¥l¦óD—YÞdeu‹¤ª²™2¦ØàbK×¹Ç/lSA -h ^E¼’qL*†ø@¢S~ xâò&Ø9²=‹¦ k@JˆÊl Å„Öi¼k‡V8aˆ!.àÞ -ò9!Ý=†!hlq†Ô܃i…ó$ ‹`ZMùŠR4=k÷ýÆ›ëÚy¯¯:`È×SÐFFý#Ê+ ®è×J¥»à6tNOü•Ù—=¨vocÑO-ßδXðNí€(›Ú’Éú½ÃÍî䇯‚ºühË—ùÑéæÂêÄ–Áª?§{)žBQÈ+)vùd¬?yô ´ðSØn`ÕÑ–•ßòà -øýÝÄ\„ºàþµ;QzµµÑÊ#3‰À(ÿ†ÚB/ÑpT+ßo-s¤û&ºXâ>‹§M½/Sdn…bŽ©¬) `’VqŠ¿©24†$€+ Má¨ôØýÍrVæËàI!äпዹshà ;%6Â+¼½ad±·fãHÄ$‚½žÜUÞ•¡ÓŸ\|äøCwq…³ò¦×hyi êÐuéªÊ*GË_ƒW4YÙP¾­(ÿu»ý‡îþuÚ® - öQ‘.õ†·¿¨ØVÕ©+rG¦$Ô~j’…†ø;.ñ]ÊRÕzu=¾ëO o,äûr+»Ï,^Æ·Š¥­6DŠŸ- è²…€a¨¼\¿dß ! )ê¬i ÍÝ¿ûñuó˜zñÕ¾”…±‚—¢|ÅX¦ª€ýí&QÆdOTÃâ뎿à%[T:(…F—xFªW…̹ú³†W -lªMVlâcÿpxÃ#Ê*«v¬¶{—(7Ð]RÆÆÓû´RVËÊ‹i;Èz áIðÒ—/L5x(„í¢_—˨ˆÕÁˆ$ËÔ׋+¬Üó®¡EžÎ©uMë•Ù`Õ¦ TŠêÁí™  ¶žO_.âg*Á¾ótÔ«–"Ѫ³´×!¦ò_Ê.ØL%µñHŒÚ®.õÅ—òùÉzÝÂû·tЇÎrËŒˆ}ÿ‡»Vä`5 `ù“lÂê–ßOî¶%SYÔÇãä.Ý p uÐ1PÑš¥U’-Dºsuœ;”b[ƒÒ´dA¼×%ÔKu†#ÕJ¶E -7ûHqû´ë-âxÂiØGËžö9d„H~žÍÊ 4•™@žælã)ÒØ0` gLtHëœ ÆBìǾðä@ÎQ)Tq.4ÿmâk!ë(wîOÂÐ w¾ž{ìŸI>…ÕYmË&RUéÓ%Ÿ¹{/KUeZAú7ÞÄNOÄð ÅîšELf* û1…q^3uV™2@9©bˆýß måêÔ Ï÷2µï§Ý ¨ª{°‘ð†/W A®^–«Ùšx ‡0ÃlÙ޼Gš¹ Þ0ýújéiÂwÿŠé©1ñÚNŒ‡ªU¢¡êzHƒÁV8‰Úªâ¿÷›Ù‡×ro±g<;;³ûÍËÓU `’®‹F­EN'±9Ný q:¬1_6û•ßÏöàƒÔiàãáL)Ð{‰K•éàÂH€, ¦àLµ¬ÆŸÿ ˜Ö: 1ç,ÞËy«_t’ÕUJŸ ÊÜí.µ¯‹è%Þn¹ßQ˜.oÔÛn÷8ö‰ä›ñH# -o\\ä4‚t5Oní÷\þ½xšOÂ$k©^ {q º|•’2ñ,9á{¹Š̵âÚE>‹€Naow]T&:¼ZêQ¢äQˆ Hòê)TòñYqn¼œ Û©Í´M /Ʋßž-*7téFCoÚ… ?LªÜ=—2nØ»KÖÜvݯ€`I*'QÚ3ÓäÚMs•¿ÈÅ ‹¸–µ­zÚÖ®¡ìÆ@²ÁyþÎ-Ìý ƒ—L§Ÿ/¬ýšÓ:8æ®ÜàU.ÞÅêK•¦»æþÙÓ!&JqÖ$>@nN,±õ»f{¥]¹¬äO™ß+sš’jØ…qíÞ·¬~Õг‹ìÝ¡nïß_WÁPÒý0ŠéGpòa6¤‡6Pù8R%JE˜.ÆI4Æè¢Òi|[÷Á&PhÂc¡JŒ1V‚ù•VÁŵÑftŬë¥Á.ŽY}¦N(Fëý÷®?6ÕéÂäÍ>CƒÛË ücÒAHDÛ¦Ùѹ/ΜÛã³™hÑÔÍ’Ów“îë“Q­Œêõ¶zœï -úÔܾR¡ËW-©îé6,£)ŸÓj_×·Ç8“Ý~»êÌí•Êb»æMÕbp±k±æèˆú<óáÙö$¿^™égÊraiÜïïeMóݲ[¾ n ¿¯~}Y÷TÚÍŸlÇ>›°â4RiS©n.ƒ‡iµè¶1ᶨ4áÂA¥B\˜„«$´“IJÜmÜ€m”¥”'©…àɨ›Ìðf“Oàì'Xªg”Ç -–²z‰7óF*z”œ - ÙZ@^µŒá²˜åÒˆL€› =à}ÀÁÀ)>stream -H‰ÔWmoÛ6þ. ÿáú¥†ˆI‰’¦À’vÚ¬@cû0ƒb3‘VYr-%N1ä¿ïŽ”m9R^¶o“ó"žîŽÏóÜ‘¢èÃ8|uÞþ|Àuã¤RÁbU*L˜„•v®œoŽà€?Š ˆSAÆß rŽ'NÐ%‰)É„ÿ‡É•“s -\Hˆ…da“…ã.o.Ëb³2k8==?~÷Y}×êjÞÀI½Xf«ì²Ôd~¿få~ïMþÂi|ÎL>8îß4žüà¸`ѧ#Á‰„»\·Y«¡i³§»*ª¬„˺.uVÁùÇyíêFör=t|úãÉg ºÊÊÆFíïÔC”‚…e/á—z®aU×íØlV -ry@}úL{!$ÙWýýpü©Ñ n³ò‘çM©¯ÚX×y{8®á0p#Ŭ.ëÕSp–¨xÃ/šqêv¨v§Þò5^m^4 cQÿ!ïÍsLˆÏ7¼Ÿ"´‰0D0âQ:»¨ûÞ´÷ð~±mg[rÎV³|ËyŒè–¦*wæaŸàµÎ‹RÃÔ½ƒ×GPÝ”p;‡¡bEÕÂl±´‚!QZWzRcfð 5,®prÁÔÃÞÞ¬*¸cÃNÂKã*Ø…¼3„þŽQg=çÿ¾ç¿ëÁq©ñê óÃá¶.æ(A£WíXßÝèÄnÒÐðÀ&êR<ßg³í2³ƒ<×g÷[\q¤F÷‘ 3Èà¿Ò3Åȩڶ£ö¥ÖënÕ¾€ð~ ¶¹‹æ\Ïq -Ó˜ÿÍØšLѧZ:?•ÅÍ{3<¶ oí¼×ÚƒMeÐßtå»McÿUðX‹[2±-ƒµŒ4ÆÃL{W§@¯½:Ë‹:ì9Á;uIñת`‰çfŸÁל>%+)?}õ”nOÕ’L»ì»Ôçæ~õD]‡TºÌGàl·…ûq]èøÁíñ)æ©s–JiÂsùÝýä éfÜ[/v3˜yÜ­=_º¸¢ZOº5‹¥ç ·Ôž¯ÜþM]ì::¯ ƒÏ…»ò8wµnP<.Tó ÊÃñÅd/]QÁ5p -iNåÒÛàÉ'çí J0k/4³j«‘ nIpb¡&“}°±çxð>ë¥â - -ð`.”%\ò><´K’Z0…o ªŠe@ÈíÁ˜Œ3žp YÓÜ -+K£$Q1,ß)˜ä®­”)Îã]J<é§¡ÓM‚a¨ðH‘¤;ðHˉ$ä>öz(¿3„”Á—,‘)(&Ót˦>$*ðh…”dàÿïŠb‚TB‚9ºoCØœ)°Ä©ækàÁ~C¡nX»N4Ð4J„f¬djƸ÷Ñ7-ë`n­Og%·À®Èš˜±Oó …'Öÿ[¼Ù8Ñ­u#º%XäÿÐgÎ? ­äŽ‚ endstream endobj 179 0 obj <>stream -H‰”W[o£H~÷¯àF¡(0fEê[F;ÚÞyhKóÐi*IØ`ìqáéî¿çVP€;³ÛSUç~¾sΟ«Lðo­² ¬²àT¯~ºÕÛíêêݧ4ØÙ@Ýu««_àõÉ®®¶ê6·+•)ü…G¥ƒR§Il÷«Ïá¿ê( û¸­£¸M×tOÁ)*Cx͇ø¾¶fåáKÐGqßj}ÙþºJ™lð‚L•cª„iÆ_3bªt¢˜éoçSe*´½9E±*C ­Cd»G|9D¸ÑÓFcéÑ?×ôü5ÊÒÐDpí/¸>³?‚ -:ÜãOצˆT:úŽ«GØKCǹ{æ -”¤·Ÿ¶Qµ™“}>Dª¿ùµÜoº‰ OðI1â Kòvw‘BÉó°«ÆÓ»] 6üª±ýb•dÁö=˜åhžÀÜu‘”±¾¤*îš»T—;VΟ¢"ƒ˜œ1&§x²"\®•®“u•o‚u®’´ª*ÄgHR[Ÿú»ð.¤ºˆçª®z£&?cv–©â¸j¹™dÙ®’h'4öl޶ ¤Ï_`š¯|:šîúúêÍ®?›v[ë¯o?ÜÞfiZÝÜÜoß¿ VÀÄúð–žl:É«ãðŒ¦¦PÞoŸyƒ]E› B†ÀaaM¨'vf@Oxë c€åWöé^dÃ}8=÷.¸hóÕç¨C‰¨£Ý’œÃ7xå´i<©Mã*ÉËÒóóÙºt¡d x ë!Þ‘±|&ȇ&-Ýkåâ#œæØÝóÆLÿ²èއHyü&FBõ]ý‚í[ÜtÅ÷)¦áŽ«»?—>S‹ª\,:¨6³èØ|€Æ‹T8QñEmBkö²" ˆ2Ѐ1Ip”±ùàv?»H¸tèÙêÎv› LÎ X»¬­7á)åfcyµ,Ò(¸ h¦$€­ããÂ`CÙ-‹‡›ÇïLŸ®Ï,6°7tá+6²¼˜4L…k—ÄYþb¥¡GóŒY37Ži-Z<Ë0%yaøñ7ˆ'^Õx]Ê Ï”g›"ÉÖåÅ¡°¡ÜÖæ´{~Êu¶IÖ)@¹‘ <ãë1~d™3.©çä%Vèùž³WnÒ݈]”‹jø|€ÒLhéb–º ;TU²Ö¹âA ÚèûFšÆ =på~ó» èTÚt-ËŽb‹ -PûÞC÷…SÂt¢ï?EùÐ$(”fOÇ<Ï-ü~¡ ž‡´ÜIr‰šÑÛA»Á I$¸¸ˆ·¡%tòð|«(žqAv®B¹zo ÙæÚ2g >÷t2ŠþÙ¬?žï½ÑgÒÏ7öYš‚W€ÅN¨ ‡Öƒ¤y©iÍØqcVùì N‰¤²«¬]6ÉCžPšásƤ3BŒ÷DÃÜ3Ѐ¨q!izVÛuòs¬EkÍ¥¤äÿ(ÃØÈÈeŸ¶-,2Ré`ÿ¼”B™¼´õv0ÈB#î=v1¬Ž ©êe0ž’‚¼pkÄ:Ó9¶Œ÷þ97b€RÇ^]¶p„ã_y6¢‰´­Mç3ÔH ÜQ|FC\å#É E‚ò÷]úG:äoYpF^§i©Søs3-$tbÔ†J@İÆ-å,èÌ#ÏZhk÷Õâè:qé¸(à-1@p>Òë2iþEP‡âæçëm³cà;ã·¥ÿ¸Cë -‡žØ©£j–¶ ýªXÑsG9¤¦ÏnÈ% pÇÕWÀs -qR_†ÊõëUù#ÌÃ3‹uœÓêB¡qçФ۟&ëE:6U®õ*ÂEZá¦_1ᕳ‹n æÅhƒÎØAi,8GÇÔBJˆALÅtäâÏ@ŒàÊjÜc`J¡_*9Ç-$MFSe­7ìÝÍlr8ƒŽUxîF¡3w¨ÀWåöû»ŸŒ ¸ßßSúȵI•9œ-eÃqñ¨0ˆª°3nõZÜq±ÎœíªðßøØòx‹_€ -‰LT"놂 -´$TTÞY£%ó˜û“h>(hûbaj뺻"üœ}¡ó<Ú¹á/—&|Œ¦Ú\àÔ¡ê š”X=ëðynÞY›IŒÑvßé…pž~[: >¡9”Ÿ« vx—Ëðcä:_¢OüüÆ?S$\¦ Å=¡bcÀÓìgXNºNµ Í µ ±Áà»ß‘*2t)2 =xKŸ¼MÄe×u-¥pr>˜Þ0Q—k%ÂiOÁ©¼¹Jy]õEæQÖ`ž"ØX bËð[µÿ)ÂÊ6FÛv&aë ‰ÖXÛì‚˽»D°4Õè´M$<íçb3’ýhFË+(C¥.]­“¬ªJšÑ s±õ©uH+t•:¯¦7:ÿîSì,Üì®[]ý¯O–ȸâ§KhݳÐÚU7•æ<Å\³±/âqŽòFJ¬ztãi(.–µût4ÝõõÕ›]6í¶þÖ_ß~¸½ÍÒ4»¹¹ Þ¾€f(߇°LY‘àåSN>Q³JtZ¸ÁSnÀC4Œx¥¤t.ìà×!./tùÜZ p­›£­—­1skþÁ;\P^a¢ Õ¡—µÖ™1ß&ý•ì¹B ,!w]Ëã§"s¤\½¡ÕP¾æ“\šèÁRxW\6¼Øô1Ÿ÷Æ'âPêE™ç]áRsÇË‹MœÐãÀz:×ÀƬ夽;fÖ6{ÂßêRšÓ%"´;ûmÐØö ±jÚLà»×8H7é  ‹G§^€ HëlÇK6Võco¨*©R7°ž³äýzdðf,ç'ÓìÄ w‘€cIÿ±æ•¡Á:ĵýA©ÀHX†Ïx€ÍÛ€rhᨺ‰[Èl,4åÂYCWã\,}§”Eк4êjÖF‘š I¢ˆØ[|í|zÈ€/´³½Æ$×ó¤dÚC/Nm -³wýÏгLna³Ôq£ˆº+ÎÓ6ÌôýhWéÁb3N½£,ˆFz3 (ØÀ€rh¯œW°à4!²´Ï9|àªø–_†Dƒõ3Т‘ˆˆŒŽâ¶ Kñ4«sì`p€€JGõS6ý ’6 ?¦ªÀÆ©¯’ÝF’#zçWÔ‘:0;÷åêö°1Æns Z¢Fš–Z=Mÿ½_D$«²JT·l€‰¬b.±¾÷‚\‘oÌî뇈òæ6jíîÞt¹¡·w4Õ"…Âf)‰ÏýíóOòî®~V˜ôëë»í/"¨ÜêOòY¹œV ‹žÔp‰üÿ3™Ö#H{î¥}AlºÃJÏáã3dD¯¯Ïø¸­-»©\ kÁW*§ïDI¥©ñr›¬Þòÿ¥ö -ý-Ž“ƒíØFaßµ’øwZs»«ßé¸eBëîYÆÅeˆî=ôº¼üïÕ…S%õœù¢m2üfª¸þ¸å¦ =OƒR ¤ë‡G‚𾂠¤¯Hî{!Q5´D†C³|Wç8…LbÔ„˜©E?NU™4éU¯œ28µ&XöŽï|9øýWh†£îa°¿ª•6ÐÄ5ÿúi9!ìë=¿Û~:é’f¾‹íÝ׆t~ý#œÖKb *.œ^oáû.ñ¦6¤•†DË=Â,‡Æ´=Ê[[©© /ûF‰Å Iì…õ‡ÊÀ;êöñ¶ñ€e+\à #­Mmg!Îd‚°2þí¶÷‡ã—(‡ã©s2^ŽÆ’Ö½ý#ŒîóH}^Ý `É KGî·»î t€ÂÒó‡.`íohåÔ 5¤-IÚê\·g8µàOqk_·!O÷ûÇúuÉ­¹€£•M‰ñóžjòî¦-Ó+½~|ºÝ5«¨›év.ø© åõ­¦¤Mf7ÓéSVÌÊúðþVx_o9ª#û‡n„W>˸ké¿ëA¢—ïªÆ’72ëà+´‹,þ>èa‰ „­Dj‰ð¨_èÑm;gáÕö_ûêqkCük›<Žãbý8’tÁ纂¼ÜiK…-£3îñ÷ïƒÂÛ¹æiCÅ!ú€/áõÇ L;²›õM//š!!ls¤`†l2x¶ø&¿ÊçV> D&ÔÝÏ‚8- i¬yøfæMP£jòáøÏ«wÝÂlGX!$s °éÌï.Wï~¸ß^í®øãŸºwß¿×ÂÉï©ø¯+ß}ßõ2à7¼’¼NªäÎé |Œ®»zà=ø¯t6°0Mw¿ú€Óšm ÃSñ¦s.ªè³?yc†èˆ6tÎâÆâÒ°1¨PºMQT,ÛXļÿ@"æÃû¿­\÷{×’2‘l0^Eíp”ÅHh”.¾4„ÁLψ*ùHgXÉÃØ“³”?M -EŨí’i¾-¥u¢€ke\LË÷¥U1‡ì™2FÞè„,X•m9˜±r­5Pb9 }¥31w_v«»O5D¢­uÒ+“` YK{‡$w‹»é¿ ¸'(ãäãjµÉØîû×FCošÃÎú¤i]ýŽ4–Ë®ÑYý‰rŸ<êºAó!7£<ãÀI°ÎÉ—ÛY×P{z”*ØXŽX_䎱ib}z;ëËÑLœ«í³ÈG£b*‰AÆÅdªõãÂy•ù'ÚZûørÂó±?3ëoOA=U²7¯¼--„“Ë {!Ç—Àße«P¾ƒkÊ×°ŸW)ò"Ç2qXP|Ȱ¸k¦Øo^ƒáGçcg³V9lj7àexã•5åEop’‰uKë`ÆIŒä°áŒ—_b¤ö>DѧëbÌÏwuœÔW-¬0ÆS7êj×Ô•kë*t£#OD¤#œ“SXB¢ »Bà¬exp’õÏÓtBc=žzëñý á¼lŸºÒèÀècìÿ_F|œ‘åõ Â…5 ðe‚m]`¨*¯ÞàòºXèÁ ‰gƒ‘ˆXÄaTI/á.*L™-[…q$¶¸›½%£¢w'¥¡Û££LÇØ`a²Èˆ ¨ÈFXí]d¶döEo`Ía±Œt2ΩÇ,Ì50<]‚ÈÓ¡,n›ƒ!xÉ“¹ËáY*mƒž•+Iй˜6NQH U¸¸1dJ*8¿¤Í»7QDcAÔ´Á·÷Îʃ)z´ÆâPàèš2g]ªW­­F–ÃSµ=õ¿²‰¶ßYëmk~jÁ¿ŒÀ?žÀ[çeû,òøajÙ ]þXÙäW”ÍvOäÝåÊÉ'p×¹Y¿È_Þå’† -Ói,B6 ²€®VÐpÏÆ—o Bj°ª8B¸—(F7s”*¼Ï*¸LîÄñIˆZ-ñbü‚?ó•µlC±º¼E'¹q'ß_…3>/f"68ªqA gsL‚çQõ P­w_%Á]7:r$Áó 0|^¶Käÿp)]yµ§®Ü_}Z½»4ÿôx¸¼Y™ÚaªÆÓ%¸hxm0]>¬Ö7÷wŸ/.]m hÈ+¼½^ý´¾ºØ¸õãEXß?~¹Ø„õþâçË¿°Ñ°`ƒ·NâW“×w¿àíoŸd™V&g}¹È8Ê­Ÿ¶Oø¿ã%ß]ÖÖÇh~;m~M¦¢,“Sà† :Á`c½I'}lQÝ$à‰V z²i$wáØPiǹ ƃénœòž~q@R‰=d#Þ†BˆgùÙAÓÃO}¬A4`ñ­aayµ2*"PX‘i¤ŽæŽÃR:§¢õt´ÕʪTh¯ÆF†Ä«4YÐç‰éõNEÄÄÐÒ(†ôþ´¾ß]lòú¦OL°æ¥Ä´y Ù9(V¦ aQ…”`º—Þˉ@­(ãIMƒˆ’kò‹“åÈw”„Ä_"„ÕøZ2ƒ|ÀL%ã„]€tpú Ò©‰UÀmP‰ø™ÃŠ4¤Lgª~Î…Ež(—1ËÉpŠŽ1Qú|äÄšdŽNfO)MH¼ãV¶1/°f.ʯsÄÖ -k2ÅRú­cCŠ'X`áÀñAôð¦b6+T9U„ZDkhŠ‚uÂ…Ãà»aŠçG1DI®Í)FT…ذ¯¨p…lÇíá¬b-£œ]Ž„ƒ.°Ùs$’‰­GÖ -E;OóÞ<Ôš6Q]¤Ïø¶$t 3ì‡q@H¤„ëƒÒ„öKŒ‰²Øy–[÷üTF‘ÊÐÈìbxWË-,F™Dö¥—u ¼€Ëâ…ں̃¡ÑÁ5kA¿ÉkÛ†uÑîÊjÁ”n†é‰ìGÿSŸ7 5"U7´÷„1%IWP·IAPKæfö–ø‚$yêZb+øP¤!¢|8‘Òj¹£‚–ÐÏx*?ÛFñ¢¬"Z)Í›%SÀ!àE5‹‘LFÅÙF§! ¤#5Ñs¾½ЛЅ/4aªáýD÷>æjª':Ì¡½‘xñ˜‹‰R(¡}etcDhD²+ÍŒÙ^£T#Íp@#C’vY¸g·8n~$Ü\«ÛZ½<ßb;¾õª-.ùÏÈþ™ÞÏTÀˆwâÌô“¦•8žVìxZ±õ¶5?~ÍÀu®¶Ï"Ÿ(#KѸý‘¢)¯)3ªÓoN­›rJäÏÊv‰üD‡·eñGœ‡fÓ¡l…JS ž -‡ F†(Æ ÁeÛŠ‚Eœ›ñ2ÕLò¤ã )òœ?³¼%4‘'à>¨ÌŠ8”š%žs"ˆ™îJø/õeÌÛF Cáý~…F{H#òN:i‘¥Hж> Câ$FR£°Ûÿ_¾GÙpí­2ÝI¦qz%~Ý4ª#'9Ü«;ÿÑ]ùý4@´@Å u0!‹%²\|úÇ„œƒ²Y§–Ø´£„À›AS_¸ Aæ¬÷;}/žŽìšµWÃÒì…:Žô]ÞÂ{2¥dM êì97ŠÛäËéÞ¡Ž¨ãl<î[ã‡jÈYa϶<¢šCc‹ªßàh!}S䪵m±Ðœfr$ ÎaN±ØªÌl,¸äÝàI‡æ(LwEX.îyI(%gjÃhõ´Xú?º—gº­.la¢'Â÷0Õx^“ ‰Hü˜¹“¶Ó£ñ-¢Y…ˆ_™¹h ^§t ÌIL^üÿ)ƒxå&Õí‘ -@sÅ·ä üj:`Ýkw9ɽù¦0=u‚lVÖ\”(¡=öÓ}à:K½å«BÀô£û>û<Òìa·[ožÃCØÎEf«Çð¶Þ¼†ß?Ãzc“77_¯Â¯ù…èÌ_Íï¦ÝõÔ]ß.’ÊeÛÖbX¾]u߇Qp£Fì«1†Äp{ v&‹{5´IÍ:pœûʱ]£Rà«Ç´Y„ígCÆ„ÉäÀf Ç…UœÏ`O±—}^= µÒ®‘è+'‹þÒý`DŒ endstream endobj 168 0 obj <>stream - - - - - application/pdf - - - RBPassUp - - - - - Adobe Illustrator CS3 - 2008-04-28T06:36:52-04:00 - 2008-07-01T14:52:53-04:00 - 2008-07-01T14:52:53-04:00 - - - - 256 - 232 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA6AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FWCfml/vd5E/8Ce1/6g7vFWd4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq8z6rc6Zo0txaIkl9K8NrZJJXgbi6lSCIvTfgr yBmp+yDiqXJ+Xvl+eNH1lX1rUAecl/eOzP6m/wAUSKVjgG54rEqgfPfFW9JF5ovmAaFJcS3el3sE l1pcty7SzQNAyLNbvK5Z5VIlV4y5LbMCSAMVZLirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs 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 - - - - - - uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C - uuid:d81eb84f-0775-844f-8950-327b309a2838 - - uuid:BC14D8DC7C16DD11BCFFD65EC7B1D34C - uuid:7D197ACA7416DD11BCFFD65EC7B1D34C - - - - Document - - - 1 - False - False - - 15.500000 - 14.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - Adobe PDF library 8.00 - - - - endstream endobj 170 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 382 0 obj <>stream -H‰|”kTgÇdÂl]Öq*ÉÔL¬kí­ö¢u×UñB±Pä"¨+HH¸äR“@Œráb0ä -¹$¹ˆA­.*µ®ÚÚ#®»v÷hw©Ûݵ{é;žé‡`wÛÝ;fΙyç}~ÿÿóÞ(.Љ‰aíÙµ÷ÝÝ{V¥ Ë…Òòד¥Aª’'ò£Wx ¹8N÷ÃX*“²¼§}6/… §yà'€†Ç^~a[bt¡n‡TV%––)¹¯ñÂ}sÓ¦7VGïoq· ¤EÅÜì*…²ø}7µœ/•ˤrž²X°†ËÝ.‘p³¢)¸YÅŠb¹Š~û„+Tpy\¥œ'(~Ÿ's¥%ÿo'ˆ¾b åÐëЛÐÛP2´ Ú ½íÒ t(Ê„²¡h” ¡´d(ZµBŽÅ&ÅN-¨Xp?.³áËŒ%ŒpüÏ㯠[‘–¼Âd~n‘3 fLÜŸH¦‚Z’й†—@€ññƒ–ðebf`üÒö“ä±Ý­œñèã_yý‰=¡ure\;qÊÇ@gâû&«QEA¬TêKúQcÜfb¡Áur³´YZmÍH³ÝÝÔŽŸ¿¨HþY^ÆrBÂèâcèÜÝO$kV¥¦¬ý…ÒyÓMD€fÚÌãäþÙ¿,|ÆÁLâY“ý{{ë?5±Lb˜”0|COÜÃ¥ö$E¾RX¡F”òÃÆ"|Cm×=/q |íË>kcÙúaæ´¹h΃©y¥åQ•à#òfÎe³"V®ÿdX¸íí½+×ÈÕV[5¡?Œ}¨…[ÚÌMmXÚúÏY°„}S|–ät¤Û³qªžnßùNMAµÆópàÃÖÿ†Íd§XÌ¿ë»5ýj8; "óBÀB’B²K-ß›+æTJÊM%øÆy`¡‰Ü6 +jWŸ9#x‡ Ê()b„]±‹@7·ïkÏôóÂé½2g -7&¡^G·Ú¡u ²ŽuªG”—TŠ[†òÇÀ§7³Á -é¡ å` ¹&ñÝÿ±rûsÚM»õß´ÕN¹î|µ:q$XˆÎ’UÆ*•¥jnlrù› tÜànßõ·ºæ$töèqõ …iV*,Çðõë -ó‰w÷QÐZö–S‚ÁS“CÁ“œphô|o9ÁÐl€· ×øðà£È•kµ¬Æ| O!EŠÊ*ªõx­©½{Ôõiè:º -t¸—»ÃâÆÛÛên¢A$_n¨D˜'hÈõ jPÒ;ªN(X˜Z€¡I``•Š2•‘†m‰ÂNˆœ‚í m5¸áÇrÍf¢<?h6 )õ*Œ>´ÔÖškð´õ¢‚ýDJÆáe«ÙGx#}Ý>Îäé‘ñîš»ò-x—Ö_Ów?Šürš ¾:uß ^æ.z»<ˆÃÝnñâþ®:½—0æË)¨ª\%ª”W(ž@Q­Ã« 0Áäêî/&bF@Xä"„åçåUðñܪ‹g­f{“•xÒ¶~ô„=Q:¼cO†D\ÄÙžÉ[±†M-¼]þÁ…ß·ÿõK=§1W·¾8‹W¸œGø@üé‰î6ÄæliváÌíTÝùt¬^T'ÊÂ/0(ø zÈÀ:L! \=×Ýl/Î_QVH áT -Öa -ëS#£GÚä*vAne/Õm$|z²ƒ>#K1ôªÆ(4n5">¥Ä)Àó3Ô¥ùÄ>ž"+—½s´ðv5§@ZQ}\}¼ªC¨FЙ×ÊÞ;¸ü…èñ,ØrÄNMr/rJÛÔ^'Ûa³Z›9hËíÀdG¨ëTÏÐäñ»ˆ·ÑSçáØ›BͽÞÁa“RÓ]¨i~vâ HÌ¥èúô+vòQdz†ÐöÀ*iÙ·Á´è܇À _t× ññü‡²2¯öw„¸Õ\Sª'ЧY” N9êW…qú€Âž¥aûe…’â`ÅðxßÐHŸºG@0NÕI þ2¢ákéãBKŠÿ)+ªjkñZƒ½½†Ð5#šQͨvÔÐãnõ¹ý¿£ßr¦éh u²;å>ÉÁܼÌLŽT¦<"-C=`i/`‡pÔ·à +åšóQlŠFQ@âSù…Ô!‡) 0:­aû9×e–cÔæ‡t²=­;ÅW‚ìëê­èÃû#žÓ“²9Uψ(ãH8F‡ÿ):÷ðŠEÏÓ>}õ/œRÝF‹¥íº2MhOÂôhTÒv™ççxÄþk4˜ÁyÏÁbp,N?¢%{±&†ýJÄ9zßN|6Û…w4¨øQ;s)-mgÇ·®FBW R÷ü¤˜ûÔÁðó½2¼JiÔÊ™vW~v2í‡ç:|Í]?X‚ó’ÿÓ¨á·Ñ2¥Ô&]Ž.§:‡Ål  ç@ê”ZE.›NÌû,F# ™\‚5·¶Z|øÀ¤b+þ†bm r·ÓÈ™# 1ô H&gÕòËu}Y%Ë! ¹B޵ò›¡°Ö¦g‰âAo+Ü Yd9Þêc¡‘ x FïÛ=ü¾ïöÙÉ+ȵ[=÷n²—‰‚e%&C%‡I½âTÏÊýÚL›…uƒr?Æßý=1ލ‘‘R›k²uÙºxñ¤e¤õŽ÷ íõÌt{‘`‡ç„ wzêõ-z½Eï2»ì.»Óá 8=¶P­éÐÉ]¸(ï½u‰FFÛÇt©Q§i°gR;u7@Ä¥Ï$Þ{xÿ1:~ 6bSC9aŽä_š“¾p¹ÔŠE3—-[YR>WNøÆ¤æófrï˜9uúÜ9Rk‡§ÆW§'ÉE%´$eKù-ÚZ(·7gZE™TnaUI~êü ™r Óëú+ê««Š{Š9RzÏço–þøáÑ`â‹&¹ Û„.ëˆ ß7}íèc-,ŽÍ¨“®ï˜¹z’ü¡ï³_M\½™õ7'Ûêï2µ3Y…/üæ¶©ra dËÍš\Çz‘-âw?ëo†ÒÅ›¤÷¸µ X@.$¿«ß<¾Mæ~ñC釭hkp¹~[‡I¼¹N¡tEÏÒ½À°º±ë{ëÑ•Kˤ£íy}ñ$éI]À$$ü"ñw8ëožÂ-5Ë€ó¤™Ëä—ͼ¸ûð#`i^íÀê_7-côBH¾€¤ÚVhývùûÖ:6¾šY?åfý.þÝaîùn¶ïÍ“þÔLg—[à\)þŸ‡s×w>î¾ï"?‰×Ó< endstream endobj 171 0 obj <> endobj 381 0 obj <>stream -H‰|•ipS×ÇŸl?ñJ‰2õC€õ’wÅ”™¦%aLé2¡¬!˜ìšX,l°lËF¶emÏ’…Œž -O²%Ù–ð¢ï±›'”°MÃjÜB–! m¡zEWNû¹3wî‡{–ùó?sIKA8ëæíÛ²¶.Ï•ÖHå5ïdSâjiéœaY‚à$–¤Ñ RXÀ¶üëñËIôMq½÷¿•?{cž<}ÎÞ$WèTÒŠƒ”ð­ÒŸ W¾ûnæÛs÷/…Ëä%¡H§¦$2µ0»¦T®RÈUbJR¶B(ÜX]-ÌŸ‹R ó%j‰J“|ý/ƒPªŠ…”J\&‘‰UUByùÿË„ ä=yA²Ò\ÙÎAD)/Y’ŠD9iœ -N"e&U•úmÚª4º -pß઄<ø&}½H“øUÌ Mz×=Ä«áDœ¿ÏÔeôÞG§Î¸ßØÖÊ*”fÂÜÜm]Û Ñà‹#­KŒú–àÕ­ÚC-z"çw’¢Ý GTÈr– ~=¬ úÎtøÉ³ŽÇ&±fn Ôñ;Xý IB-3(1|@_U^¢Vbâ2±¬ž¨³ô :o‡¦@äÚ@(äÅðj»Ç×ê%x'è?À©o÷ŸJŸÆGà˜Æ§ä{ˆˆ‚ºSWnvßÄÁ艾`˜èïÓ«ý¿ÉnomwaøˆÏíözYOEvÎÁò2+·|éÁª ->øføæ5’w†¾ÿ=Ή=€ù÷SásÈãçåèʉ­ÆÚšÛmvð}®ýã7‚ñÊÁ‚â<…ô¹1_¼,SÀο&œñ¼xN²ˆñ;aê™sQ?Öæô¶zˆ@˜.ßY\Ì‚ÀËb•š—Ø0´Æ9¿HDRo'VóÊ:Ã5¬¤×Ö±é -6Ê®ÓcV«©ÉLÐu.»ÐvSƒÕŠYÌæÃF¶Ïäï:㛜 c§ŸA#æŒùaÊ fI°eçsan¤÷Òé¥5Aàhpgœ˜ÓáñuºmŠ ”øð÷Ò=bPV¨\x5ƻ˅2MbqÌ<بM¯yÔr¿ËÁgy_à·7@tòǘ‘Î9èñ÷ºKòßÎݶ¿¢fà:ÀÿdŒ¿:ÀÏÙølb0v7œ=õuX\®‘ öe©w’~Iò“yŠ´b°§D¹}‡`ÛXéeYX]OëF¯v@Kâ_Ù´¢¢"Áæ/+^ƒ¿ÿûlVô»@SO M©¶­_‰åÎ$H´·í¨ßHX6©mºÉyÑfë3XñªØT`*  2x$‘ökáÊ¿¥_Ÿnz¼íþÉéQT–*Ì„Åæé±üé BG]î!A­*}ÜZ4Øs¦ßM8[$f€?ÿ€¢ûh/í#"ÏîE£ÿª<¡çŸ öGîc†€œ(×JÍ Öæ×÷¼L—æåòd8ŸÜ™øK*TÃ|µb¯„&޹ƒmòwО¶csèÙ”n5ÐÿúÒW ºNßAuþï¯LÆI,á|< k¦SáÙD>_YB«K@VɆ¬P°y`íÓ¯†GcäçScÿøJ0sàÒoIv=;ƇoÝym'[]­ q.,YšÙE[ØùâÃX“ÅÐh"DÔÔÀƒ?c-³È2#2;ûЈŒÁíãFMby,}'|Ffð!XžòÁn[€¸§2ÙÅ™ì¢5²Úv ž&vñM•Òjj3LÅÕt¥YªËh¥BLŸ+âȲïWüpL–†l#F̓&œ‡ïßÝ&mib˜ÉŒ^¸ŇºzŽz‰k¾[g/bW®‡g¦Ó…“?UW7š’<ŸKg¿ã@p+В嫲 E»~ÐçD,”Ôç¨n·T²+»Œ» »3¦û[F½ŸþšÑ>êî†û}v†`Ú- p606ÆÎ8\n»Çî>Þae°Ë!w-¡ÌÉËÜ ŽrÛ?E/ºmCÁÓÑç!{†soêË+©0…æ?yòøþ±?wTw‡O -FB½¡>ÆGÚ-n[‡Ûãnm·µc›¤·’(*”ÕªAañ‘R­`ïyj¢’ŒW8Ô*Ay•ªF^å–‘fÆb34`z‹AW/¨²]V¼²¹½0ËiKJ,5"éwîáŠä×넯ó5Ô¾BŠ05O3à2ôý³-EÙ…Ü“p‘Ù¾1¯n=º…+W;hô!7—C×ê:ØIÄ¿~0qðê½/I/«÷À¬Î.´8^Õ{æ‘MºÅ³ ~40ÿþ á×üÿ0ÇÔÎ endstream endobj 150 0 obj <>stream -H‰œWY“ÛÆ~篘G bç0€sTE+Çe—­XZVùAJ¥`’»DD‚Ô´¤¤òßÓ×€Cp¹*ÙÇrº§ÑÓÓýõ1fÖ(ø¯4VùÚªÇõìÕÍ^,f7·wZ-{e”ê—Ýìæ; úÙÍÂüKsq?3¹Òð/üÔNy§³B-v³·É›Ôºd?4C:÷I»O]ÒõªéVj™“ì·ÈyTï´óí¡Oÿ¹øa¦Y‘zǘpŒ‘c,ïZ:ƸÌð1ÿèÖ*­“Mj|òY¨!5:Ù ñüI»NMòQX©±É:Ûd5ÿ5µÉ¶Áõ2-’÷"ñân!«fûæ  “´Ãf×Ë^MXìš¶àÿ¶{¶l‚÷ c¿MçE÷“>»LN’m—Ú‚ÌM9«éÙ<-)€%k1ÉÃuç.6°'ç&³jñtìV E’ªíúé'Š ‹¶k܉¶¿!¥V”®@é«ÔVàÝC3lÔ½Øä’› -9Çè+ òesHàhIþêÕð‘ ñ{2hyLƒ=øño)øŒÎ TÛ¶{ßgdæÍ­МëÌ0ùÏZ6៿.þÊ$N÷Z :°µK}rÜ‘Åì9´æH¨)ZèlÅ~\#ØÙ>ö³EDö°>.Aå†=˜A‡ôÍný{lFsŸ0ºGzžÆP/›»Ã¬ùÌÔ°i†°’¯·hx÷VÝ›è§/H[t5±€þy>Õððt^FRb‰ä*%,;ŠLYˆ“ŠçÞy+–vAu¸{v䪳‡ÔJŒé˜¹(?¹œ„÷ñ‰¥¿Û‡K{2oóçÌñI–² =ÿá‘A>aÔ“;mÒÄ[6NŸˆ {§Ù¶ÿ±/ÿ8ª¤ªÂW˜ã®O>5çõI¢å4ô÷ w£PO6{9uâgöéè¤íº!+?®éš°0Úä~¸”høgjAuVCÇcÎÍp…˜A+±À'ý.´bW„lÅbUd`&¥.d¦åDœŸŒš3D¶Q]ËßSMâ‡Fs3Ï Ì`G—fÜd€Tâ’9)WÁiIÞiCNsÊ`'Ló~­œ5™Ö¹«³¼®=ÎýÉ«ýj=é´§‚ËmVú²8û„ç8 -kdFò(lÈ4äK>‘(ΫÌÅÍAƒЭê@ßF…ÐbžSe 5k?ç©y ‹È@ -` ¥À°›è÷Ƚ&¬ÄßñÙÛàydá Œ«oœöâ csE:Yñ<,DÏÅZ¨Ós ‰MbTm ÇõõW6Ó.7ÊÕefC„ß|ûòz€ë*³•¯Î¾ Ç¶Pô ¹kÎNñ“„4á9…Õ–f^н uîÂWÖLÊz$ÚvcPwô˜; à»óÄñ(¿¼ÓS&´º¨ ãš“ÔE•ŽéS¢Qɹ‡öIh¨¸6òlõ0;ÑʲޠQûaš¸¬Ä -êP|¦I¿?öãë¢ÒS?’¯äõÆâA\ÉÛ©«o˜ñ’ýÀ¹%£?.Q뿜ÅBOŸô†'ú±7×û±k5£m¿çÕ1ýóéLlo®5®žïÜ(1nx¶ñqy´!2ç\˜p–|}|Ó„wŒc(ÏÛÓ%]CEî7“Á -Ù\u==ý #ƒ£¾Œ“™§[rã#ÇêÞ¥Ùɯq€N3;vþž™g'mçnž9^21LÒÙSå+Û¯[9ƒï ‹u/UÔlƒ ÏEð¼èâSÇÑ[²áÀá‚OVáÜͰîÛv_ á#òóÉà‡¦ïù£xص«µ+¡/¾?žC2J’7Æ:Q$ãí‰_3úÖ“‚Ø\¥ë>6¥>Ù4$2gôAûÇ÷#>Øägø0ùåÓŸŒPŽûQ¸£UÓá[õ3­ù% ‹ûÇ ´#šŽ‡_aS -ð†¸,’¹È#mÁìRÛªåŸ `l@Û(ç§ ì^[xH¨“°Ž‚ýòxñl#:ÍÙ{–± ‚ Ï<¼Ç4¡ø -<à¶µKK({ƒ’©àI¤³÷çErªÕ‚ iy~ƒA¸Z’Ë*yq·àŵç,l­Úûûè%ZVc׃%ÏSË&á䉯/P Rü³(G´ò’ÃsÑ!ce“´§ÅX™€ÓvOôŒ}hš§QR0¶ƒqGF - ðLùÕéZÜ´ÉA‚KÈ„ÔVQÎP½Ç´ëÛÅìæçm³\¯~~ùwuóÓ­V/^ÞªÙ뙦ILgF½ŸÝ|w§ÕC?«²µÍL镹»„_ç -jBëÙ}ø¾°6v® -[eõ(˜ÐjCŸhp&}% T‘À‡³ÓrŸô‹êf/rý.—®i˜ íOY¥A·­=‘óù#?P+·S†z¹¡¢J€ÿ -ho% ¡‘*ˆ°tÚ’Å¡ÃÎ¥-Œ³e]œÛ‚a¬xŒs8ÆÑÃqŸâKìª)Ö€“r]>mŠS6¶¥SæFkx@i« -m2oªÓãK="þ×?®ï‡wÌØ°-X~9Kþ+u(QJ}RQ›ì±}Ø ŠØÂ‚ÍOÙtÅ{ÌÁïιË=N9¨ŽVçêÂ&<âÇõp|ìÔ§‘÷?\À_Ïnn¿Ë.®úe7û $.ðÐû‚ ºÜ v3cNHÛ _ˆ‘6g3o=¼r<Ĩö‘NÈ#ØÏ¸w‹DQU®¬Ô\gÎçDÁPUm”ͬ6èk -7¤‘ÚZµœÁ{ÊÒ¸UæUÕ´ç<< 2_ÐŽ®+ÄP•ª,ª@HçHoè’â£Û;ôÑÝí+°±PU®~R_á®»¯vWUº«¨Á¨È]º(à&eíÈ_º"ÂQ’ƒLU*Ï!Q2ƒî‚ûk‡.qDÔ¥/€7 ûÕ:RE(áct|Íî¨Ñ]ÀuiKg#;¢½ÝÅ'J%O‚ÛZŒ©uä#]8N¥ÍÃèê5ŽîðÊ­jH¾útñy aÛ\Vû«XY]@X”ÞFŠ!êìÄ Ž)€]²‚Û#flÅ)tNYž6ñd‚aY#Q™‚€W¼à"†ß †¾¨8®"kn}ßÄØëÁŠåÐÓëk£‡&§xÒbãT:jèÜCÔ—”4`VÔmá_m”jFv&|‰%=í\F{{¦Ê¦¢$°»4–- 2(M¿0ÎÆõçuE1µê¡à‘P Z/ðd8´<ê8¡Ñg„Œô¹Ç²}•¡nP¾5èÌûþ•ä7®¿ÑÇ».yئ`L­%_ï19Ô±ÿ:¹ÓbVF²+ªƒŒdqŽÿHÏ(ÇÇvžêãqžÑמ1<¿gÔe$ÖŒ=c¹÷aÁæÕpõVd%»‘Èà5Õø®ç@]äbômwÑÄrãÒ‹ `b‡?ž!«8ém—\åÛhQ¤v‘\KV²Ž;¬ÕÁïÄÎæ¡ý<›S»Ä8µ·³ßÞý8Ù`‰ bï°ë>R©÷©uŽÎE7üº9¿½lúãøÈ‚ 0ƒ;ùˆ#±;óFUÞò0oóFüñ0o<ÎóÆûøx’[:å`%¬ØàšríÍòáArÙ{:L¹Ž8oícå2±¸bcì¤û—9\éÐM‰ÓñàV --ËÉ=¸µO÷àAÂáO -fƒ#›·«ú62a±S·¥ ™ÿ–]é!ûdó‹¤$ð0£ ³Ø --jù}ê”Å>‘­?Åb3"F†ýôîp‹ÍÎáž¿igpœÉ>…“i³#º3Ú3}­ÍƵŒ!ã}¤=6;¹á×ûm¶MöÆGb9û&H.ØuçºsÝ¡_ÿysÙ”C6÷hå©ý(ݵ×ÍÝ}s£G½zü«Öb§¾kèïKÏ<.åË3joÎÖ·Ÿôã–?#už·³è¹¬M›þÙü‘¶_ -œ+bkûƒ”RÀNÛŠgËej—oþ_‚jì -V;IŠ“Úü‘¶ßK2×w¸ç´ýØ;^_ûæúÃëÍÙw?CS–—?¿üGóÝë¶ùûK<\w,éÚ^¾k(;µ[e‰^¢Vþ~‰\­ .êk˜ý¾ÉVÿë§ýÎry™äe(/ÿµo©6·›†"—3ÛŽ-¶ÁÅaáÐË('ènQof–+彟%çÇÛ¾ÓXÓEëÖ0‡¯$϶×®Çrú}ûkÛ?ÚÜOö ã}n¨þææãí§æy¾Ú± ÚĦwAÝ.®7÷5[=råQÖ˜¹ñIް?[bþtw‰>u\–o>þ~ýøkyr]âÕÔ¼{yÖþ[Æïþ‚]4Í—æûæzq³¼zü[õ´<ù¾ù²¸—Hõ«îf Ÿ^ÜÝ ÓI0ý7ŒÖ¿|óÃËúÅýòñÏûÛæËêÙ:~ÿ2.¾µ¢xfåÚ6ºL¨4×w—S¡C(YÅ ¢7"F¸agRåÐ’“…K¢CˆwÈ1¤P¸Ü’d$W,ƒÂ…&#΢YR}à “(›YD1úX/«²Y¹Èè%è§uS7è¦vg;E¥‘¶Ó„…EúN­m*Øom´<ɼCÐ9ªÁ’4:§è˜ Úïk°vÐ`Ós4Øô¼ –µîÁ¸`IݸÁö·×¼:£‘Q‰B¸d* ½â­^W­é]O’ÜðÆ”ÞõôwWgv¸ C“½0Ž3Ä9ù¸,’’ 7¥äpmÙªeY‰ ²ÔZV£Vø\~'æ!mZÁ mÍÔÝL–J&—%c親ý}ñVìïÛ?¹Í *.ÇSm#æ.@ße„ò°Oáçú.XoŸXH¡lÜùT[Aé ¦è¾T£¸Âè¤J +eÜ=¶ ›³ýÌnd´6˼~Sf b­"–õÊÐtŒ¹d}Ó/ŸÔa®5s(·þDŸ…—ôi‚–€BÈ ‚É)¼ó®ð¦rʲ»Œü {|Î| ~ ` \Ã@y åj!Ìé©îýÀ2,®%¡.rœmIá‡)ôÐ>›PæìÆ"(;•oÄr/m•a‘¡ÌPNTú tQÖ}Cç]•‡£ -‡ÄP²ÐJ4M|mIM ¬Eˆ,Ñ’ÕéŃzÃn±ˆ8Ö—y›‚ÂÕ¨ 5¡ÑnBó‡ù£9ՓɾnÖYVѾxÑ~¸¸-©6£jQ”Çc´U›´M¾G®ç®]Îæ¹}œÍCûy6§v‰qjog¿½ûqºã"T‚•dO«H¥î'N°I6hðys~{Ù¬¦Œ@‰Á†øá”´äŒ-ÙgLžû/õUÓÛÈqDïüÛ0ÇýýÀ—híC‚5¼X>Ø>È"µRV‘“KÿžWUMrz8’(nì]^D6ÕÓSýêU½W¿7-O4ø#˜çñÒ„©kȼîvõøH Ýx=<²œuëë‹»§i 8d ÷‰÷”àÀ“ä‡}Šñd@›GÐæ -ml¡chÓÚ4„V›-¸f’'w×Ó#Ê*‚4¹á²Ò˜>ÌÆtóÒ­.ÖsîQKêI2©˜àh D=¿={ÔH66ÝCt+ A'¢¼¹1ëd_É9k´ùýA!nŸk†7AʳWŸš0È壴XÔ¯¹ucª[OºõŒ¡”Ž‹Aêž[GrunÆ–± ÇU uDn/įڹ¾hÃOé2ÛðÒkã`6’‡»ñ‡Øp$½äJ‹x -_‹ ?¡Ð6áè.6{ÜÉbŽJSMjlÂKs Y×_È¥ÆßÁŸÆ¥Ž±ÞhÝБì]ùs¬w¡kÜÇmzÎ{»>$È^³ýï]zS‚ky–·"ûêЄ¾Œs}O/îcwêK‚íq~ã7´%‚(Œèö¤ã†%”3¥õ>L%Ç1°ñpBœRìÇølÊe)œî“)éÿ골Ũá¬Ýž½mß½=S³o~¼½¸\-|ó½úæí™U}ƒwâ@â"˜“*<ꨅIÖ@ÙxX!_;Î…à8IF“—&PmTõ Þjmz˜_4¥ªÈ†¤ùlÞ0mGƒ.«ì¡ ¹G³Ý¹æŒºÂI8ÄàÏü™· ¹‰ØÑ[~RíÁš 9Ÿ¡ûûÒ'Ow?ˆ>Xjr$½Õôúâù½4¡ñºØDk'ö%’KATdc\oÁÈeO¸…ÿ‚X“ãé‹CÖªýa'ƒC-9Í´Æov£•NL4ºê»}K}0Tï€ÊZ/Pù†P9°‡œ9Pøº‘'1úb ‹cªèy»¶:L ÞUP_ˆ{éIðÇp8^Eãë[­´À14¦˜4‰l® íÜÙ]â¤#(ãK€95Œzí]D¶Âë$cÙñ2Ô‹[ÃW ÁÊ:—Ê!Kœ °ÑÄ jHàŒ`j7ÍÌ"f‚ òÉ«¯Äˆh†Xð[Äð#j Ék©A$êº ‰Mx©“h,Çêa7™¥r#ò5©3$à._;0^óÃV3Ž §f8/¼ÒžCבø 6ª섉g⪪X$+Ž .æiâŸ{K`˜\æ7ò„ƒÜ”RŽi6Á£©ÄÀ_‚oŠkˆš‘ÀDw¢ÅH½…š-³‘;:š‡œalˆZ$V³˜qö ÚÆ=)΢îVÛxJId¶Trɉ±TbZÇÈÆ1¥F½æ`¨^Ýl€P.òé©[¶HI6¥´5¼ª¥ MÄ8±HvŒ€ QÚU‹×ÌÃì‰!@" ¢trªíËJ+–’5´Ÿf~:+Mmû»®LòOšì[M6ð~–Îá*1V4ùºjò»™#økdÏan pù‰ìaŠÝÖë®1c@Y ,€&¦ì s½'»gãŽi|P–Lêc`Ë‚F¯&Å‘-S}íù^˜ˆ Ke2‹–Á³–©ÚQÛ=ÐÂà€ÓØÌ¼Œ™¶•’¸ª‰(© -®°4röD -\-–Hjb™OR÷P^Ý -RÒè¼Rt¦‰úq&ÉJ]ÇXÉ -QŽ(/Sbj³*JÙ–(òB 6Å -%³§m¥.nŸ…÷V0/b&­L,R(™^e|šl‚¾`NÍdŒöúL•å0E"Jg®6¡AVù¦£HV-{vÄòjÇ7"b®D$Pš’ö:añgÂòz…%Æ”8M›˜ çjÓršDnsÌ(m³?¤E˘!™v#ò¹J>ÚÓP“˜+½3 ES×èÿ>3£êÂ=!4ÞG¦ÍÁÍ #A¬CÌYô“¸[/èsÿ¹èèZ¨èèqÛ¡)ØýLšxW@_GœMºZãˆXeñiS¬ò|röžæ“÷g?ì7l\:Z3ѱÓ·~‘ »ájðG„°4ŒsjnŠã ý¥™/ÍÇ%ÍWÝül¨´ÌæÉºÒÜ}廕§š³¶'Êûd©ëš¹jX²o Né.×{”ÃDSUèƒ÷£àm¼ÌŽ›à±ÚoË0x«š#Lĉ†.¸:ŒÕèù4ì÷‰Å³ÂjœíìDÍO–ü³’úk·˜&kƒÙˆª S¢xÚÐtÈÒ–¤/ÔÛ^•Bä’e²ÎÔd/©É>^Þ‰“â¤3ï…6ÉŠŽš½†“þ¹»œ/\w?wÝ¿n—ê7Z¬Ôíj¾ÈÝÕzþëùßxv «ó%¶ß?¨‡9²ÝÝ|À‡ë®×êöæî#ïô–|('Ç›æ¥ÃQ¶[î6Ñq9lÏ»X¯/‚ï®W›ÿgë¶ÿÿçÍrI'Ü®ÔÝ=E·\ñ6´@š¶ê®5â¿WŸèÿõ¥¹»«ñGŒ·<ÅÑüÆÛ›ã@yíGŽìQ=~â·Ü¬ëé…g½áév± @Åø1ð`QU†ÊÄ¢CÇð¬ ?¯‹¾ìIô‘lÅ“Òü´Ÿpp‰Mç —Î¼¤ÔC£ÑÔÒ£{VdZ•§4ׇØ'ö3x¿×ÆÕB5ÙNë -c­õÝÚÁsƒýºëê„cŸT[Ý—œÒD;x^mƒ…Ñ(•umá¾P·Ð=kÉOóõË‹Öd¥Dä[¹ÝôÜ¢´Q”ÖÐàXŠbÅÔ4!òÇæg‹fâb4ªdüÃVýý~¾HÐO¤O7wÔåÜ@ŽCw{ Ý£õÙꓺP~ÑH!‡à%„Âá]Ü+šÄ>ôɤL/ëþ}³TWxÙÙ=Žü¥ûá~¹R׿Ìççÿ`]é­:3ëþCëó?Ï:¥ÔuI›Õ·êOõë_šÿÞ®®ÖÛ-´g÷C»ñáæÃõzxØà‡íÎÿÒ(ëwoÏ{t.¨}ï œ†„S‹p"hâ’Ñêmãß‚ÊÆ K.àóv­çut…׸v*¶n௲§þJÛ6¿ªH?(½H¿f^/è=øÅdÙ€OÙ‚/›MôU¶I£àȵD~"A¿›ýO€Êlj endstream endobj 119 0 obj <>stream - - - - - application/pdf - - - RBrotation - - - - - Adobe Illustrator CS3 - 2008-03-30T09:43:48-04:00 - 2008-07-01T16:04:02-04:00 - 2008-07-01T16:04:02-04:00 - - - - 256 - 80 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAUAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9GWNmLkuC3HjTtXriqL/ AEKn+/T939uKu/Qqf79P3f24q79Cp/v0/d/birv0Kn+/T939uKu/Qqf79P3f24q79Cp/v0/d/bir v0Kn+/T939uKu/Qqf79P3f24qld60Nn6zzSLHBAGaSZyFVVQVZmJ2AA64oSa484+VIJBFJq9oZ2k SIQJMkkvOScWyj00LP8A3x4E0oD16HFVyebPLclpqV7HqML2ekM0eo3CtyjidEEjKXGxKqwrSu+3 XbFUDpv5jeS9Rtorm21NRBNK0EUk8ctuCy25u2P75I/gEA58/s074qirfzn5WuGk9HUonhjaNDeV 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 - - - - - - uuid:39AC52ADCAFFDC11AC15B6426E08541E - uuid:46ba4750-b6d0-a148-b72a-6aac87b46fcf - - uuid:11ce5472-22d3-2e46-9483-571136a36a67 - uuid:96F9E1E974FFDC11AC15B6426E08541E - - - - Document - - - 1 - False - False - - 39.000000 - 7.750000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - LucidaSansTypewriter - Lucida Sans Typewriter - Regular - Type 1 - 001.000 - False - LucidSanTyp; Lucida Sans Typewriter - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 116 0 obj <>stream - - - - - application/pdf - - - RBrotation - - - - - Adobe Illustrator CS3 - 2008-03-29T22:52:51-04:00 - 2008-07-01T16:04:40-04:00 - 2008-07-01T16:04:40-04:00 - - - - 108 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9DQQPPJ6aU5Urv7YoRX6 Iu/FfvP9MUu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/pirv0Rd+K/ef6Yq79EX fiv3n+mKu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/piqjc2U1uoMlKMaChxVU/ 6VX/AD1/hirtJ/3sH+qcVTvFXYq7FXYq7FXYqtmlWKJ5WqVjUsQOtAK4qstbhLm1huYwQk6LIgbq A4BFaV8cVSPzh5rHl6C1uFhN0pnpe28XFplt/q88vNFZ4x1t/wBo9Aab5Cc+Fy9LpvFJHLbbuuwP 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 - - - - - - uuid:96F9E1E974FFDC11AC15B6426E08541E - uuid:725ae99a-7e76-5e45-a638-be54a8b3e099 - - uuid:713cf01d-bbe4-1349-a7d2-b732843c5112 - uuid:C78F7A50FFFEDC11AC15B6426E08541E - - - - Document - - - 1 - False - False - - 11.666667 - 28.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - LucidaSansTypewriter - Lucida Sans Typewriter - Regular - Type 1 - 001.000 - False - LucidSanTyp; Lucida Sans Typewriter - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - LucidaSansTypewriter-Bd - Lucida Sans Typewriter - Bold - Type 1 - 001.000 - False - LucidSanTypBd; Lucida Sans Typewriter - - - Minion-Bold - Minion - Bold - Type 1 - 001.001 - False - MinioBol; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 113 0 obj <>stream - - - - - application/pdf - - - BSTsearchHit - - - - - Adobe Illustrator CS3 - 2008-03-29T22:50:52-04:00 - 2008-07-03T10:39:12-04:00 - 2008-07-03T10:39:12-04:00 - - - - 108 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9DQQPPJ6aU5Urv7YoRX6 Iu/FfvP9MUu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/piqGuoRaSQxTyKklwXE KgMxYxoZG+yp6KpOAyAZxxmQJHRZYCG/JFpMshWKKc7Ov7u4UtGfiUfaA6dR3xEgeSZ4pR5+f2K1 xZm3DetLGhWN5uHIljHFTmwUDkQvIVoO4xJpjGBPJ1pZtd20VzbyI8M8aSxN8SkpIOSniwBFR4jE G0SgYmj0WTwiC8tbOWRVuLwuLZAHIb0l5vVgpVaL/MRiZC6THGSCRyDWnRLqNv8AWbORZIOTIHId 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 gQyX/pVf89f4Ypf/2Q== - - - - - - uuid:92F9E1E974FFDC11AC15B6426E08541E - uuid:f2359209-ca4b-f145-bc24-11a32d3118e1 - - uuid:C88F7A50FFFEDC11AC15B6426E08541E - uuid:C78F7A50FFFEDC11AC15B6426E08541E - - - - Document - - - 1 - False - False - - 11.666667 - 28.000000 - Picas - - - - - Minion-Italic - Minion - Italic - Type 1 - 001.001 - False - MinioIta; Minion - - - LucidaSansTypewriter - Lucida Sans Typewriter - Regular - Type 1 - 001.000 - False - LucidSanTyp; Lucida Sans Typewriter - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - LucidaSansTypewriter-Bd - Lucida Sans Typewriter - Bold - Type 1 - 001.000 - False - LucidSanTypBd; Lucida Sans Typewriter - - - Minion-Bold - Minion - Bold - Type 1 - 001.001 - False - MinioBol; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 135 0 obj <> endobj 137 0 obj <> endobj 139 0 obj <> endobj 141 0 obj <> endobj 143 0 obj <> endobj 145 0 obj <> endobj 147 0 obj <> endobj 123 0 obj <> endobj 125 0 obj <> endobj 127 0 obj <> endobj 129 0 obj <> endobj 131 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 373 0 obj <>stream -H‰|”}PùÇ7ʆ=ÑP²îH²šMÇóêWÏzÚV{VÅЇ"/â+ !AD“@H‹@€¼HHH$¼,`$(/Õó®*ô®ŠíÝ”^ëÝÜÔ¶è\[ì´÷Ä[§m"NïúOggvgv»Ï÷å³?µa0œC¾“xhËaq‰XZòÝ©D”¬HÄÂÈÃM!’Z¥[½‚N£M룴OçÐ bmZÂXÐÆM¬¦Ù‘…ºRY¹\\P¨äo¾ÊÿÞ®]Û^œ·ó÷‹¤yùüŒr…2ÿœ‚Ÿ\"”ÊeR¹@™/ÚÊçï—Høé‘·üô|E¾\¾»,„/Vð|¥\ Ê?'ó¥gÿß—„>7$A£’Ê@2ä‚Ćm"+•H€qœ1½"cåú•£Q¯DÝE7¢ÌuL'ó ‹ÊÚ>ͰZWÇ`|¢x˜?‡‰ä’£Yż2I‰ñ,yž9 &S—ÉÞnâ´šíͽäÜÑO(º–>¦ß¦/¶Qøn×1WšGà?<(ƒ(£¿1wXúÔ­½ÂË©ìV”益÷ô½ØŸ{?þåC.¬£±áÑ&že,þÈh6¨h„“L¾Ôö9ÆbÆ™íÃ{Ûf Ö—VUhÇt•š=là@ ¾*”(S¨õ¤¡Ùæi¥ðk@û ºçïu­ñøBÅu‹¢ kU*L•äÎ9¹ÙÔ;Góhä îžK¢‘K3£Þ~žßœÇZ˜šï£{*üÕNÒû‡ñ÷ïPt"¼N(„BŠå–VÕ’5FW_Ðö±o–òÍúzÝvÌfw›ì¤««Þ`§ŠäõeË®û <šb ¶¶2´â‰ìãÇK…dVù«mMææ6êñìýð1wª`ìÀ¡TIqoš`ÓV.3_róú箿}Á£càaë«ÍOänPNˆ¾<Õ×…µ[/¶ÚHÖ·éóªÐ¿&áÐ?̲·„ÞÅZMTî¬þ±†^£¤¤9¨«Äô}c-©S8Út”®­ºN_[g¬Ô6žÃä½z·oÊ99Í»>=õ—xËó¨ã“Žù'¶xï(J¯bâ pzØ5à"]}:¹Â;tÝ-6+f³º]}ܞ毀L:$ÈP9§‰?ÀR™’S Êš¤ë¦BKõj¯š-L«€&>Æoƒ v -YïíÉXóÁˆ+?{SNJ.…ûOÒI„Ûè¯RcÁó]r7'«,]ì¹ð_žqóà³PßÖýÌ©”XEdvªº ›:&P¤gqßæÎWñr¤¥UÔÊÝÊÞ* ŸÛ\xäÔ1n£¢‡ °ç -¬øYÞ ÿ¯ Kí°r-ímm­<üâ|ïŒÛ×si`tæÂG˜£±³®“gnöµ:FÆ8,`‡Q©A8T³á œ—qøW°ÝA43Ûß÷B”y{píÁ‚—ô4¨„µþì$­E“´.•Ÿìt‹Ò eŠÂš¦çh~uZÑ®<‡Œ,WÊÄTQy†(mÖÈüuAGÌ ]Õ¤þe¹f7U2=ÒdÌ7Po>;]s¢ædÍ ‹¿¬hpÙsÀ΂F`¾ˆ/=Ñáy·æ"óTÒ¿B[¸¶_€½a¯’ÙΤ§R)êé ø,d[SuAXñR:mD“*ˆ[ :âçwý«ÔÝ;—Î}˜ùáVÁ™JE./Q”°Žçî»´0l†Y¢…^ŸA3Šª°F£±±†—Lü¶ÝZðÛ©V«¥ÙJõ‹÷R¬R« -þ8ÿ˦°oPÜgC'aâ7tY"ºŠ ”˜Þ]¡ËÐer ®ßè¸ï¸ÇÁ;çºG½ƒ˜×ÝÙb#­õµ)|öb­­Éf¶™­G¯µ³ÝWãÄÜ:¹­”,:~dÇ)ª‘Ùõ«ð¨ Õ8RB²v‡cçMæN°ï‡7ù1À:¢Á„žWdV‘º†Îa3õ8·_A闘ð¾²Åç阷4o£iÌsE–*ô>óÝŠÒH©·0@ÞXú$à§XZÇSžƒ.í€}®{MLЛŸi;¢yÝÊ×ý{õK×W+¦y5 dkC¯ÿ`${¸u endstream endobj 132 0 obj <> endobj 372 0 obj <>stream -H‰”•kPWÇ»™éža I-q»gS¢qgŘUãÛ1Q"Š ¯áa@pÑQEC£‘AQŒŠ  (¨¨Ñ ¢Ä6 -Q‚@QiŽ®{š½Ôf{°¶²ûq«?tÕ½ÿsîïþï9÷â˜Ô ÃqÜc¹Ïg~K–kVlŒ‹ -_¾Ù°Æ˜¤KÕÇ%ëôŽyµ@ã‚»ÔŒ -„ýs:1ÃjöŒ ïAáx8û¸94Û´‰IF}\Ll²úÃÈÉjïY³>V/ŒJŒÐ©W ɺƒÚwsd¢>)Qž¬‹òR«ÆÇ«zƒ:@gÐéSÄÑwê8ƒ:\­×Åĉz]”:Y¥KסNŒV/Š‹ÑÅ'¦ª'ª—%Æ'è ^†‹æŒcïa˜†1æ‰cŰ)ö†-’cŸb˜?Ž­Æ°@[‡a0,T”‰[Çœ0 æÙ°SØ .Á?Å“ðl¼Î sÚîôDâ-)’¼‘N‘ÖKßjba$.’Näb2—¼,‹–;»º[Sq˜ËK„ša«"xïÌŒ©Þr/¯ô>rW¡±-H1äÅ zÿ”y!K~[V´¤dÅ}y@÷&¡ÙIpºÚÍܼß]ÒT$—k—ÜCžŠó–þ¢ÁùÐP (`¬ -ÜCà}¯!fêÀÌâàB¹¯¬)³{GÇù·>'*$Ý„¤K˜ –˜ÂvË]Íà‰ƒ<%`T‚'x"OÒ1{~GSUùõ_Ö7ÉÏ´XÚo«ž!QuC–=;Í-2¤ÿ‰–ã9¼Q°IU6nÄFòÒwW3'<àð›<\³Kn*a nÇnv²½?Áø.ÕÙ½öȘö„€^äK£U$¯UØó»ò/FÉï¯*Fc|U¨ }böf‚™à(&ËKÞ*…U²ÃQ¨åP-˜à!72Û!fE‹p^¸RðáÐÀ0«!]+R†cRq®®ôJ8e¯Ð–O¹‘6âÙpÌÜ‘óy$:+œ'¦:tÐÁA‡ðh— (yèxJÂ:ÔA€3‰¶Â@­íTYíéquÍ%WT7âïúaÊ7Dšýi¤u _'Ûßš‘Ó'As3DºfÞYÚknÀŸ9·®_!§Lðî)ÐX䈔ÓzV<½ÑVu”M,¶…Þ¥Wì+:ÊR­™×ˆÜÌôœLz½¹ñ, [dàuMšöYÊö0f–¬ôø·ÇûiÀÌKcØ™¿”2!•lc`ÈŽ8z¾ñò7ÿ€ÌgX×t.4EˆîcªÛcÊìT+ezœ¥àHªµ¬‹°úŠú Oh û‚a’H9aíÌD#›EZ~% K#ãG¼v˜±­51‹wùEG±)iñÆX:yý¾[þŽU/NŸêöÐNuS§…#B‰‚ê>hõ¡Q¤1ˆ]eyÝŸ8s3HúqÛAë)ölW’ÿVQᶨ(pºò Œíº–º£^Ì×çó½0sPwØ¡œwP ‹”ü°UƒŒ¤EKd‘GRt-ÓH®Ö õ¢Yhò-$Å›‹jË ™uOá©Õš3h$5ƒ¦îî×§ØŠCµeuteëžåß9aÓ8¼û-ì·K„cpXñb,DÑ´©h<š¸ÖêÕµ’‰h¾eà韮•—4ŠÀÑS–›Óiã´/¯³±¹çskå0B¢aN(¾}æ: còsD+ÖÀA ‡C‚X… J^ ‡,]ä%ó}pÿ¾É”q”y +Jˆ´Î¡Q’©—°«‘§þ3é¼äg±^’}-•Mt¿YÎ"±3~“ÝÙ}D’©KZg‹ ×ÏKñü½fB9.nP.ã©!¨]¨AZ$©Wé¨qÊe´1ýE§E§‡ŒÚµN¾£=… zþ -ªYä;~´.ñ‹vhµK =]¾Ýà‚ñ¾ F+ÐRÑ4ÑèXÉrR$‰~mÿ{ÃKILŽU#bÔŒ°>4<8ª4"È òxeGÿ º¬87ç;Ÿ“QÍ ‘Q=…†ø}a´nz.µÿ ¢w$î0È£Ú–ZÛĮֻ̲́Ƚ‘ô–à‚ê6Í–S~IÕΡt 5ˆDîZp—¹¦®JjRÝžŒšÑ, 5 - zIþÍ/$-‚žaæYРßdK÷o©ŽcbjZMôÙ>M¬*-ëC‚u´&o¯èfås&C(ü…àB¢ PËÀ&Â" -B!ˆ@cHB6‰­hçà5çYÏüû¨!!G|Å>OqËlsL0µyçÆxÕ–¯ Ûjèàt"?«ÀdRù„lõc6jÏ‘-ßy;sÒYêÕ¶éDÞÞ¬/ ª´Â°cñLtÝ%S?}™‹"×Î6ÿ¸?¿ô«J–úú6Qp°àP©ª#¥}Áa¦j_ÕþêSòêæ¦bÕÜŠì*†zµë‘gÉ®²©õ˜¯0 äSö­|F½z&(.“ÔÐáGæº lñ玫ª³«sJÅèíOÅè›MÕÝRÕÉœã6’ËCw•ä[ ¬âú¥O‰|‹å›*Õ¡½M›3 Ñk̦ÿ­pç@ï¿ÝmÝÒUÝ^*ßèÎÚQÓQV%å» ôZ±\IKIsQGQvw|£T]oy±ÜT`Hô—ÔHYÙu‡È¥²ñUÎý™>÷wúôï•ÓÏífû8ý2×kîïD  endstream endobj 130 0 obj <> endobj 371 0 obj <>stream -H‰bd`ab`dd”÷r ðvóÒö)MÎLI NÌ+©,H-/Ê,I-ÒuJ+ù!ÍøC„¥ûwß÷¿LXe–µò~ãÿž(¸òûJ!’*çü‚Ê¢ÌôŒdMCKKSÇ”ü¤T…àÊâ’ÔÜbϼäü¢‚ü¢Ä’Ô=Çœ… úb… ÔâÔ¢2 (Ä -™Å -‰ -E©é™@E©) -%E‰)©¹‰EÙ -ùi -N™é©9ùå -j -ù9¹©Åz @àÉÀÄÈÈäÌ· ì‡îwÉï•匾«~÷ø®Ê|A ȸ˶jþŽ=‡¤NLN–ÿ}(òý]ÂßìFa‘^Er­l?±~oý­ÊÎW9÷gúÜßéÓ¿WNÿ=·›íwâtö×\ßU¹{xø~¼0tuç endstream endobj 128 0 obj <> endobj 370 0 obj <>stream -H‰bd`ab`ddör ðvóÒöÍÌËÌÏÓuÊÏI +þfü!Âò[ãwŸ KõÏK¬² S:x¿GòÜðýªHQ½s~AeQfzF‰‚F²¦‚¡¥¥ˆ4RpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQé*VJ-N-*ŠB¬WÈ,VHT()JLIÍM,ÊVÈOÃg#'#3##‹UÑ÷¾ïŸ~F•3ÞºË|ëûbÑßÞ§~ë}WQ•›¿˜ÕäràwûïRߎ~·tY®|1ëoUŸßz¿½¥ º¾Þeþ¾¨ï»·Ïw½ß*åÊ‹Y9ýmÿÛAê·Cào{g¹ùŬßU>žú®÷¨¯fÖO¹Y¿K§w˜¶›í{ó¤?5ÓÙå8WŠÿçáÜÇõ»‡‡ ÀySŒ¦ endstream endobj 126 0 obj <> endobj 369 0 obj <>stream -H‰|”{T“çÇ ñ•Õô”·Ù$ïš'žy¶º:§uÓVE­(ˆ¢ÄrM !!€¹¹ !7r’p‰ D¡XuZµÖµX¹è´žÎª›º³sž¸—v{ƒž³ÿvžsž?žËïù}ŸÏ÷÷#“¢"Hd2™ž¸u÷ŽøÄvæçñ‹— âæe‡7–†0rhq”ü­àÚ?x5NyD2.‚‡Þ†¢w}5&|N¾…/–æå±ÞÏ^ÆZµvíÊåáùCÖ¦#|.Å– -E¼"!+¡8›_*à—rD¼#+X¬M……¬”ð-!+…'䕊‰Õ×9°ò„,KTÊ9Â+â”°ø9ÿ/‰D&i‰´!%‘IÉd;’”N"Ñ y¤R$i-é>9›<¡Œx)ŽÊˆzNÉ¥.¤¦RŸ,H\0ެFêÆ.÷/cáÛŒ QïQÎòìek˜uÔiø#ÅÝÔàP`ªO…ëÁ蜗nûÎèéF|—'†0½*ÿÙvüE@YU®.Å2=³V@K¯üph8&0ƒÀ)Eñ÷g±±ôòáË·ÚïôŒ‡×Õuz+…€Þ2kѵtÀn6Ûl g‘;7!éh—¿3gÉ'ŒÕ§Óÿ<ô}ÿ­ëLÚmù5Ž8´f°F¥„Âÿ,Ü55ðå+àcBä8õdcX$š¥(ÄWSˆe¨ü„K^w87$îÞÿ«%Œµ~¾·c¬ßbgž÷Ÿ=s梥 -q„lžã½áÑQðš¢H…©Í>=è‡)~¸ç4LAÜM9¦ŽVlh¿Ožû‰^¦ðÇlé¹¼c]^W b´uè½XO§Fåêtá -q€Wš/!nn±£qåárp -¦Ü„/ žœ”.ÍÁ_Ž55¶4èÁÓ.¸þ‹ïü¾ôÃÉ‚¼,æ¦ÎÒ• <ú:ßßwÏòò—A„Þ -#ÏúH“Á¦³`ÎnyÎÞÇqÀ4üC¼Dü -釚òoC=‘·Cëè‚­’r*[%__ŽÇðdQBy%¢Ñ(kU˜¼Ü¨—¹^Y­Ñ j•ꘂ!ñ*mçìãC̾àÙgƒPÜ40â¥i±ËKÁ£©pgçâÖã‘‹] ¹Ú|Âd@ Í»•ÑÞ påa{våíç€#%­Ch2ü¸‰C¿ªúj$1ųڻm®&ƒÞŽƒ h šZ{˜}N·£kç¦,ß¹ãPnqïM€~­™Ë¢'%:¯õïtC»ª·t1Æ ÷2ï¿bÒ‰8GÙ’\ØÏ-ÙÊØ1˜}IÆÌ(¬’W26I¯„‰~£À£RÙ™™Œ­ßåO_‡ Øñ }Œ¾€ -Â>‚ülañ‹[ÐÇ_Â.Šßh>%ÀD«3Ø{€YBq¹Ïuš1à 5¨¨Ûqå Ü&·c=Ͼõùú('TI?éêôÕƒöz™“åHò ¬ÁQéÅhnùU®8{k¾ÅÀMÐ*ô|èãûôÒ2©J†)”&w(ÊúWùå¾S]m^;bimÓ90Gs}]3°Ö8{m ³Â‘—ýÉ–m;˜åâr‰°ˆüC(þMSRnVlÒ o$á¿.ÀŸ‡¯TìS¤ÉÓ§:7º g-Æ€¡ÅðlïØéÙ‡°;]J'æì³]!Šd»QüêƒpŸülr译Pߢ xr¬ºÞìjš$Þªo‚Hºîo-™3Q6TZEí˜ãéåñ  =}Ã=²¦_Nk¾Eð½0r/Œhn#üA †ïŽašyäÃ{ðjJšL'ôÎ#ÝpŠyòêÆyä¶Ù¶™Ö¯‘çž|S%¦¬¬UI@–dãþ?ý©¥ºþF™hцA}šÁN ƒòx=¨Z)*_[•¨Ê”¥ÅÒ¼òлä33°x&ž¥ÐK¸r!ÄsãVà,ÆÖÞõÏ\ëö™7® þóã^ÖÅ5L|#>H‡ïONûZ˜:£UgÂF»y@#þómx4çR«–Õ(1¶èÊ$ m6Šáž!ø*²‰è¥ ì´yãt»ˆ|ê¤û _¥HS¤ÉöÅÎtjý¶οǶøýÞSH§]oÂL-5j0T›LzS³Ñ¬·èÍ'¬bUW˜Ë°ÿªÐÇß J¾“mÆ ÖCÓzÖ•Hó)Ôïûþ{7ãã1gª}ôèáÍu Ë|·ÈçÌOX±ZjÃò%Ë×,­,›-7±yZÏÌiÓ§õÏè™Á± 'uI–tlLni±|LB[r¹TÔ¾’mYr»Ò'I¥eåågO^Ÿ+×4µ¹§®…£º¹®²F*»çházi¾ß" ªÿ?ㄆÿ Š B×nk¶ÉßùEËJ¢cJ¤Ûîœ*ôûìoV¬bý-¶ú»XÓDGÿ -{Vw¶üâIõ¬·Ù|obµ«š—1Wz×Ó[ÛVËó½WfqåBw¯×ßþzC¸ä‡ñsѦJ§æá-a%¿…[„Kö­>>Ør8ð½™uÓ”®%Ò¥®(?¥ñÂ%1¿SY‹7ÕN—^ºzîìÅò'·:¿ë°~Ëÿ-.aJϸJnõÀä–JnMàæú÷w¬l|ß뀩8¨|50+ÿ!Cxƒð…Š?ÜD=³úþfòúÍÌ]—Û¿3tãÞq¾£uC©tf`@T‚üÔJÖ5›çΙ!=­¯8²O¾7uâoïI&KÙ<¼ü]àüw`“fæoÆ)¿™¦ªE^ù.ø=påŽ%ç.])µ¾lAYiiq©\Ó”ºR©”‚èâd¹œ°¬¨ât …Âê¿sÖ}ç©ÿÊÁW3ë§Ü¬ßÕÓ¿»Í=?í{ó¤?5ÓÙå8WŠÿçá\Ãu“û{•È;Q€æt& endstream endobj 124 0 obj <> endobj 368 0 obj <>stream -H‰|”}PwÇ7†­h<²î”d5››Ö;[[ëyÚ;m=*Œ”JyðŽ #Á¼BH"ïy‘¼Hx X@$T“³­ŠgÇ—{™r½³Îy7ÈôîèÍOè:×Ûˆs½û§³3»3»¿ÝçûòÙ ‰^…°X,^ÊwßNJÙòŽ´L*/{5A.“T‰dRqäá¦0É -¯Ö¯YE§Ó­¢uË·ÐbkZ âu ‹›ÜãçFêåå• -iq‰J¸Yü’ðG»vm{%rÞ.Ü/‘ 3+•ª¢SJáÁ2±\Q.WˆTE’­Bá~™L˜yK)Ì(R)4ÌÝ!B©R(ª"IÑ)‘â¤P~⻾„ ,æ@^EIŠFRYH ÉDÃ²Ž±‰¬B¢£È7,1‹^õQTNÔhMôm4e'²p›.‡ï³Ìáá(ˆ]æ“óf‹IC#¼ƒô—Ì¥Îô†™g>‰†el÷è{‹Ž±bK¼2O%Uk1•âç¦BòuCÏ'.ê.<öb·Ìwð:†QÎc›&¼ãJ–;\àA,>®”¨Pk¤©Ùîk£ðË>@û ¦çõmñøü™sÚe;Ö¦R¶V“;wæäQo¿[H#¯ñ÷\Œ\˜õ÷ ‚ЕÁ ¬…]õ:ºçL°ÖMúÿ4ñáMŠN‚W¥X&RʱÂuMi0{úBößæ¨À\ ×ëÀìo«ƒôt5˜ÔÙRÅ Æ -ŒãЦYã°¶^ ñD^NŽZLfWξßÞdin§‡`ïÇ‹üéâ±Ä”4ÙÉBÁþtѦ­|:ö^Ùµ«_xþþ¥€Ž…YÂÞWW”!*xAD¹!æât_Öa;ßf'9ß§OkÂÿž‚”šãn ÿ_Nx Q½³ögUôZýFÕ}5f4ëH½ÒÕ®§ôíµõƺzsµ®ñ¦è5zÓî©+‚«W¦ÿ:oúu~Úyï+{¼¥W³ñy86ìðž>½"@á úî» ³Û¼ž>~Os™_D&§ˆòETþ1eÒ™Ÿ`ilYq«åLÑõÓá¥É­_ËU&†Õ@›FñP;eyï©X{{ÄS”·)?µ€ÂƒGèdÂkVi±Ðé.…†ŸŸ]‘!:è»9¼8ãÀçáb¿Qe’šöš0·Jf“yiÚâ<ê°H™‘Í+Tp¯F/WלӞ«ôªzk0üÖæ’CGó•>œ‡=—`Õ/ -g„³‚â.­ËÆ·v´·· ðó÷zg¼ž £3ç~‹¹õN¥9Ð6èã13¨I´  i¹ðnˆK…8ükØî"šÙú!Ú2€=¸ü`ÞOúÎjÄuþä­C“uMìgºNéÐ -eIÍÖ§h~} ÚОBW9Y©2UH©ÒÊLIú>¬‘ý›0‚ŽXÎvÕ’ÆU»©²‰˜‘&s‘‰úñ“c†\ÃC.#\Q´øÜ[ÀÍ‚F`#¾€/}¥'˜y×oEæiä%Ï~…v¦¶_uԊɼÄãi”KŽúzÆV²½©¶˜Q¼”A›Ñä3>F1þˆåT"·¼@VäW]ÒH(Îmš~ Ѓ´gQÄãºðÉ*u¥Á@ŒO-¥óWW…ªBºqÀÑévø¬>ëpë¥zÌÛœìæw+ܲ£Ù9ééy¹ê´¼„1<>öžµ¡«š4þPQõÓ§¶›#¶%ôq1W@·šãÝÝ´LÙ?àYC¾`Ãg<©}ÉîØážAõ9<áüÃuŠCólše*¢qÖU/á Ÿ-ãÄ{%I|éO\hrM×·õôGê©`âjzZϰÂWÿ¯¼ø4t.¬‡u·aý;ð=fUB„K„+CÀôçó=¤w…€¥ìg¼ÏFÜø–€ú•ÍiáÔ£ñ‰WЕSåºy™ L Î9ô¦£aä)JøoScÙÁ4e¤Šé]ú,}VMó™~*ŒM±Bû . -2õÄGw‚ãïSwn^\ü‚ÿ0ëã­¢ãÕÊA’$aÏßwa;`Ø sD ½!“f•Ö`fs£”–Mþ¶]Ÿ:¨6›µÙFõK÷RµM\ø¸‰ñŠ;àD8—'ý.kDW©‰’Ò»k3õ™ú,Äõ·ŽwÞwÝåáƒÎ[Ý£þAÌïu¶ØI›³¡î<…ϯ³7Ù-v‹Íêêµ9;7æÕ+ìj²4çÐŽ£T#»ë×̨ÍÏÝ&6-Ot1‚îÄÊç¿YóÜÕÕÀ‰m^Ãòõá—‰ÿ0„ü endstream endobj 148 0 obj <> endobj 380 0 obj <>stream -H‰|•}PéÇ7À.Û³†3ëöLVwc­wv´žgÅêMßNOÏP” -’ð.Á$$¼™I $Â[xG^" "øŽJ½SìЫJÅÎÞLñ¦í/ÎúG—ó¦ÓþÓyfö™yöÙßïûûü¾Ï><$ÀáñxÂ{¾ü|﵇S©¿ Q¤Èö«%)‰Ò…—«}Ï·4@ÿs?ök^óf] ¶âÅ Ó’Áåx­`a£~—"-S™Ÿ ¯‘þZüÉÖ­Ö-<7ŠwʱrqX¦J-?­ïO•*”i -¥D-—­‹w¦¤ˆC¾R‰Cå*¹Rí¾"NT‰%bµR"“Ÿ–(“ÅŠ¸ÿ AxÜ@øB"ÈG‚ »ýÏä‚BÃ~H˜"àêEüD„¤#?ðªxÿðëòßÿqÀ‘€t+êÂ>Æ.®4òù›!tŠ×]þ×ÁMælG¡sM¡ü±âNX5î[¡å¹}27ì"Á‚eÿ.ïDaá“ДŒB7VÞùiyI¹mXXý ÁªÆÑ`lÚ·ݱ‹YÄŠY’]‹¿l"ÍL>Ÿ|‰[°£¬å¿æB{®‚y(¹Sàkë!æ €ì‡d´Ûj.î£.a<†¬*¦òlÅ™’Èó2ëu딹‹Ó¦äI“Õ¨aá~ö{nÊ7îy'ç&'ç“r£µa;¬Eg±™Ò‚Lväh<¶Su® ˜âcÓø6]ÑiÝ !,"¦}™€’êx­2–Øë, 1Th36üP`YFLgŸ×–ªÊp‹Ze>KGÇD1ŸË"‹¶uɺ»FzšZèvÏÀ•¶~¼ËÚŒnËnÏ­¦š^ôߺ˰{a©’¦HT -<6!]—Oå™j›ìöÜc<÷Òmj?Û¡ÅÎÔ(5¢èc¡’ýuw½í}#nžùâIâN–1Ѹ݈W«Sl2*ê°6>Š9*Q…툙ÐÑÑŠtÝyíùL·ºQ‡ãk¾ˆ<* -ù.iv¶]¿ÑØñ5:¾F벉*ÊËÊ,4Q9Ñ8âö4tµöŒœŸÄ]EÎ'm-ñXÚ\ݽB>+äº,ÓrúE‚q„É"°‚˜#æ_ëÉ–ýcãLN+ªQ$üäú2†˜û#8ÐkŽ‚)µëdèaÆ¥@뼞 -ª¬87>Ÿ!æCYº/»NÓN³@¾9HO‹I‘7¥÷uôx;´­2†ÏþÖ¦yÃ,k‚Îr¦š'æž¾!È~ìkˆùߺÐ}º.'ãÖ“Ó‚r–Ëàdÿxøæ€ç»ú?–ãÃ{?#€¥t–‚÷¹]!.²³Þj‚€ŠVü/ÃϦ(w¡Fº ó›Ãétÿ”âÎB¥\ -®Ò‚wç{î ßÖI]iT¦Ú˜“Ƥåì‰ - Á‹0ç=ô®ã\w% ù^*ç˜xv«>\® òoë/ûð˼X;`‰?„éÉÛÚ½—˜wû^͈fÿZ/9yVCï•…l`—‰vtmœ†5p,e—‡±¼$^d2åQ‰©ƒaÃØt»ƒ±Ø*JlTGKâv†ÿ-k¸ ûGµßÊ1A‡,XJôƒÅ÷i©ª2WSFTÛâV¸™ -We9lFzÎCê­ÒìȤ4¥0OšªOÉOÈV$zìž -O¹ð£·å†˜<ÃÁ|aR ´U¡',IæóUƒB¢¿ ~“ÆZg‘“z\=qiä~÷aëÔ×¢çQ×Y4-ÎdÈ ù°ià%âsÍ %ç;NJ÷þ¬ŠXIF&‘ý47L¦Â’³·ê‘ë¡hsŽ×÷4µáMng©²9ÏåW2ĽÊ|{±Ýj·Ú*\6g¹'¯wë•öt*)â‹M‘LVó'.Õ€ÍÔJñ·êïC?L=}î¾ï"?\D aí3 endstream endobj 146 0 obj <> endobj 379 0 obj <>stream -H‰„•{XSçÇàÄ#mÓ§œf…œ5oÜÜVWgµnë U´VDQ. -*`€! È ÃMn!@!H!ÜE -^¦eê\½qÑi7ÛNŸWŸç ;´Û ú´ÿmÏyžóÇ{Þó¾ïç|?¿ß¡R|¼(T*•¾sßîðw÷ddgädÿ&LÌÉÊHñßÝdb8364‰VѲ¡ŒÑÓR¢12®x­<ź 2yÉ¢\”“ÊáâùÅý=º›—c¦»³ÓˆbYZCs§*à÷ÓÓ2(¥^¼Óý®žó~´ã´SÕš$5X·œ¦N¬ÔI¸†‘Â~¼gªiðxpé3_gN‰»Ó9ëSÖ}À*§ÍÁïöÚJ“W":¾Œ/ÛÆ/ô¶ÞQ´Ïyij·5Ư„oâUa~±O8š=Lq^þ:qÔop냳Ї!ΉOŠÆãòG/Ýh½ã®6»µ ï°ˆL»Q_ÔXÓ¨G±¾æ†£‘iá·§…E¤ó’Y!{xk>bnˆûãðãÞ3,úMÅUŽÄýA©ÊHB?×Ü;Û÷ËQ¯HÈIÚ©*$–¤Ì"6#äp8ÿ¤ :š–Â÷Åÿ| 3Еco›è54³Î¹ÎŒŒü ­¦‰ )ZÉñþèø8x‘¢XW58µ F¹àþ…¶×V™xñ6Ññ`€õ*‰ÈåïyJûЄñ/Ž‹À>Ñi·6¢zc›ÖŽ;:4j(Žmd -¸Âcb1ÊINË–àôdÅ4ün:4 £îyÃEHgDFÄÉxx¸òúDmUc¥<é„[>{Ì<Öw4R‘ÄÚÅY»‘IøÎä¸zîž-²9D-Ðûì¸Ó„ÖêŒ5ÜÒ¥àÅ=J€d@'Þ'r%Kh/ÔŒQívxßt1¹Õ*ä>M¾I±%Ÿð‘â°üT£Q•©qE¾^+ -­ê„Fƒ«ÕEJ¦Ô®2™Ï6O³z†Î<퇒º!Ý z=«÷·Ú—÷8lÓøæXA݉†“õ:TWghnb¶V -¬øþ½ñz$7¸(¥Ë‰äKÜo ©{J¥~Ù Õ÷Ì®DÞÂnnƒL²zûëûZ¬K»©ŸhMŽZ¿gwbZv÷5€}®[NbD„[® ÷ ÝéºÒöÂî|tLЕÍgŲ,±ä:éÑÒ4ˆOÎÝÃÜÝŸrQÎ:’U¨(`*Òn) »¥$|b¢˜;¿867?øÍiþ`È ‹c‹ìjcVÖ×h›êQìѶËmC»uØ\cf¶”¶7³ô•µ•úJ»ºÍ\ÕÙ|ÊYÒàONÌSó5[5(y@£,·^€Ógõ7¸zR -ó‚c)RñJC»`_]‡ˆKßpZ€‹7‰Þ¤ˆµýlG®;YÌ%+j1”p"‡FE3îxz×éØßxîÆ)k‡³´VÈ-98Oš!¨y•¦;NoW\I–¸n¬t"?¸ý!Vˆsø€!Ì“©å¸RUß^r‡“žç_ê9Ýi¶7£†s 7ÕU”צRK·‘Ù 4e¤|´c×nV¾$_*â“È_»C^6%ÕNÑñ­@vþ%2Ÿøe&ñ^±QyPy@7Ûá_Õ®;c˜Òê]ƒ¶Ð¶=¶ƒht‡UeÁ-=Æ™1²HBõ’¥w=}òÓÛÃõ†"ø*C$8ÄUà'*¬µÒݷɽ*<Ÿ7L, úq¯5ËõÈÖ‚&q+nzrirÐáó•àýàÏæàöÛÏçKïbÏ1÷’ø_Œ<>LòDÕJ’ÏÍ –ù–ÏÑoléž0 ÊÔR$Ùr(h-IÖúylɬ/ÀÕ’9ž·+1èWhÍú%2ÕXíÉå“#Ñ1ž\l¶~™K™ŒÌ…K†«äf;´SvèUg˜ê†>1‰ÛÊsSÕ •”ÇÈcŠbæ:tSí×»¦…Œ ÜQš™@þ“Ü{=i…¶Ïú“—ûAöܳ9Í]l¾íQxe}ÒwRa_øæÞ¡YQxt?q9 ¯ÙWxÑ@³¹?‚šÌ/À‘€ªàÒàø?ü@Þ€t»¢Ïýfudfÿ—ʲ{i*ãøLÎ\ œS¶ç(uData¥e©‰‘5£–™áÛÔæÜÙl¾lg;Ö´–º¹³·Ô-ߦ“™c™‰(º’L¼ñ%ÍÈ -$È‹ ~‹_°æî‚çxžçûùòÙŒ“+|Y¡F^ˆgž;„éÃgw^,¸FǰE¿÷çWáÖíÙd ¦B/]Ùb°VsG+¾v¥àO`\&Œ¾ÓÀi¢Ôz-šKøWp¬#$+Ü Y^pÙG*ÇÆb®ã`p‹çžÉÙmp ³DŒO‚qg*Œ]ƒïD|­©ZMÔ(mA…F¢+S Z‰ºÏ9ÙïÚò 7ÅÓ‡åzm)ÆM3+Að{À—#Anhûê,q®( 곱нšUy$.'I)Rç 6û[Fm‹ŽfôéHŸ‡3Òo7Ò(Íè)oo¤ ´‘6™-F«Ñò¸ãÍé j- -Tv)'éÞÌfÞ 3ƒ‡@¹ š)_E¬ù¿ÌG‚}þööçuÙŸíÃ+º \náóÞá>•ÒŽ)‹¡Ãbµ´2†ã0õJÐ[âJ…<¼[#¼1EŒK°‰“¼ZX\^}OZÞ>R‰éhÊ näÔQjU½°Ü0'A¹0vOµ‚m¡_°IVÌʯ*díà_IܨVï|IãsÀþ»Í5„ÀX¶ÄéŒçsî§"™l©Ü¤A6ØÙЋ¤Ôv•v¢ß>Œ»qînXòkb>®j6~­ñˆÀ©@2_wU•FžOD@<‡ÊZÜ~&djÓ€B¼æG½U¨"ý¿`šõ{ÁäbX„$ʽ V´ÏÝiïÁßúf–&B>!…±áFw¢Ì§=4!¤{8è¾ -v-›[oûƒÙ`dt.YÙ€2ý­·FaŽ ªøàÁýÃÑë@ml …ÿO€™Óš| endstream endobj 144 0 obj <> endobj 378 0 obj <>stream -H‰T”{TwÇgHf’Z§ƒtFgf»¤Õ“s¨ZÔh6š²$ëÛød3oàMÆÄd)ÐdŒç3L†xcªÁ´†OKà’)iþC~~ZJªÑìƒa¸ÔöŽÆ°qÆb˜7†}Œa$¶ÖâØ2,ÃVbØ* £%Ř&Ã|±ÍXÖƒÅ}qþmÈ,²6YŸìòy½üE"®)ŠÑ*•0YÔ#æ¦Q.¨€@:ÅhuH« Ù†:5004’T :-8ÌtËÄ£ƒNMäö鹓&+}|¢ÐäE£±mHÓïÃöM~¸å\žò¦"fßÜ‹:•¡®Õ ‚Å ðøÖÅþØé:кOù6WŸ[vi5g=ûúž(ûûÛ@ciðŠ‚1>ýì¤'ÓK"w+ƒ­[\›®ù+¿:Ždˆ ‘|5’‡ÎeùÏÍŽÙª”thq°‚VVOЂiÉalûŸMÒÔ5íljUžjs\ºI÷"ÉëE¾ßzsB¾RÌ•ÿ78Á-à-b™¬8X& •‘nùÛ¯Êz_|-àí2ñâ`”æàçK÷‡0‹ÿ¼aZ·$h-RL Ñì‡(v>¾Z]ÚÀÞWä$-Ë f'zï Äÿ=øƒ_÷ÔMõœª*k0Ñ‚ ÷àò=™àyOl/"áôP;Ñ;˜8sèl!‰þ"ž%&‘*› ú&‹úÁå¢NŠGÄÊUæ bPœ±ˆûÜ9ýJ{êÇ$ ™Gí ÜÏŠÍé!™’‡:àPàqù)Œ½ñeS§²uݽ°ZÔ× ÒM§²ÅO÷ S‡¬¤COä‘G²ŒmS¤äu(‚£Î£‰×‘ 4¿ÓUWÉ:ȼ;­^oÏeܺÆÛû;N6sU‡ê*™êóÛ\•J0_€)îúöJ¬ŽÁaÍóÍ0E£)“Ðxôa¸ÓçÆ6öÌu³›yø]å©á„ØmŒuÊÎ+‘\RËŽ³;ê”0D¢AA#JnžºÂÀ¨BôNlá091T€0‡T· R=Ýb(8ä¸A^°w‚×­Öìܯ؟ûR㜟1(ÝŽø¹Ü2¤ÕƒV¡BÞï=›EýÃT¹©g¯P&§õBv'ómÇÞ§¹W÷uƒš¦ºÄϦ)¨g!yŠãIqÍ34ë 4)'6¡Éà{îne_;ç suÄì­Ùè}&à˪òD\pR3+2$=†™¶ºÛݼ»ãX;×XÝXÙ¸Z#ÌÕoºï“è㿺Áæ–ýêé†ßÈîkmÕ­L]oàÐ7üKñÓÖ#¦lcú—e±LĬ¬Éa\éxA@žN1œa•£`¤ZšÖ7ƒÛu…£¨Ea$õÒaÃ;rxb¥g"‘j‘Hµ _2º¤Ã^þÍœÁ%›‚]0þãƒG‹ÐI°l4s«3ÓËiKñê£)lmZ³õÈÖß“½Îol±èC”ÏŒÀúƒ±ìp9O û - û -Õ qµÁ0ÏyÉî¼ÍþU±%>n{³.²¸6•[_VPy†Z° Ȥ‘ÈK^ -•ýõ´,ñ¨E]'6SéPìé&Aú'¦’ÔI<4Š3‰ ¤ -I£< À+AÚâ½!ÝT¿X ­æ/¤W°ÎÏžÉů͉N¡×í2o`©þƒ¾DQ^qv6•¹ÖŸ&;ÚÌÁ9…96Žz¹Á—(Üž·ÆL¯ßs,…Mh¼ÝÃ\âÉp?ûý½E廪9ªÿM¢ø`ñ¡rúZÖ%ÿÃlÍžš½µ ÊÚãöÖºtGU~ K½ÜüQèȯ)£»îÚ/³Íÿ×åîî%½ÔËWÈ[s‘¤úwÙÏqÍÇJO×ÓµùµåRôÆ_¤è‚²2ÚÕVÓÁž¢É«ß8Pä,vJõË!ŠޝkèCÛ[×Ö³Í ËKý˜p}“¤øÂ»ß¶Âù™\î<¢ » k½¸*¬ÓÌflËØjJRšÖØ£s霖]f¶d¾DbWF6ýé,ûrÖ(­öŠÁÄ -”è«UØIdp*„îwÅcþ-ÀöM endstream endobj 142 0 obj <> endobj 377 0 obj <>stream -H‰”•TWÇgHfö =Ë43˜Éöˆ–Í.kW-þNk*JEäWøaA0A~hA‘Aj‚€bUAAE­¥ŽU¨PüQ8lG«q×½Ã>Îv'zöt÷Ï=óÇ;ç¾{ïûÜï»wމ0ÇÝVø|æ¿l…zå¶È¸¨ð5á[ kÓ“t©ú¸dÞ¾¯âiœw›P!ÿ¯Î&¦bXíÞI°ñØÿûcnŽ.vŸíšÄ¤t}\Ll²êýH•×¼y©–D%FèTkÒ ÉºƒÊoKd¢>)Qž¬‹òT©–ÄÇ«ìþU€Î Ó§Ö·ª8ƒ*\¥×ÅÄ z]”*Y¥KסJŒV-‹ÑÅ'¦ª¦«–'Æ'è ž† æˆcï`˜†)1ÌÇ>À°1l©ûô8¶Ãql=†mİP ›*Ô9`"L‹Y±ÓØ(.Â?Å“ðü¯QÝ"…h§hPì*¶Š GBEDuGþ™Ô“õ­ä•³ó¸%‡œˆ¯·È‚÷ÍÍœé%õô Aï"WšÜ†dcžÊQ¯³.fKoKŠ–•®¼/ èÛ "  9×ú”Ý÷ûJ[Фosr¢{È]vÁ<\4:"kLV€k¼ë9¦œ92·8ø€ÔOÒ’Õ·³k±ôŸ“H„oFâ€eÊ•‹—ÃöHMàŽC:¸‹ ]îàŽÜI» öþfG3eÕû[¤gÛÌ·O‘àuS’ãfˆÎ‘ò™âÿÄÃr,ÞÌ[EÍÀÈx+;a%9ñÛÕÙÄòX¼›ƒë6Q·æàÒu¼»‡ø¡¦ö*Îí³E~¯ìL@~4ZMr™­ ·àR”ôþêb4ÉO:ÐÇ&/e°=Ô±`dñל赜_Í"ÔA=‹êÁÙ oÒ¹2e<&gàꀈ•ð$œŸè žŽÇ,˜¸O¢süb¦ÝºX¨fñm¢9]OHXºp$Ñ6©·ž.¯?3¥¡µôZ“âfü]ÿcÊŠ‘&-4vÆdçkrø8h>rd‚Hç¬;¾ý°ö&ü‘uéýÒ8Êáž MFnH>«ÍÈ“›ÕuLb±5ô.}´ò`QCµg]'ò²2r³è ¦æs l•€SÔ 4cÖg);”ó$e'¾91LfòaB$Z1eD -ɦÀqô¢ô+_ÿ>4eœ3ØÐ>zÒS]qPn£Ú)ã£lKRí彄™ÔW6n|L ØÏ 3ü@òiëæ&¦3Ù¤ù²ÕnÂKfciFWóÉnÿè(&%->=–NÞpð–Ö~ -ïÉêS]Ú¨>ê Œ/•Q}%!Ej1«-soh™ˆ³Ý±@Ò:[N3$»“´Û—¥@ÃÕŸarïõÔB¾!Ÿïøi¬ºËœš_*çÆ-j”Nš5D6y,E×ö¤*5Ú ˆ…{ƒ†IùÈ1"Ÿzˆ`!Å!A‚œãÀÌ"s/yÙt\¿k1fÖ)HŠ"-ói”dBªeÌä®w‰3 -gaÊ0/g3R]nÚ ’£ž½B>²]-—÷ék=‡Ng~[4. -jŸ?GB=ÓfKNÆF6- ÑÂÏÑ"$õhD^0ûbÅhc&3ÕÄ¢=ÆOÐzéúʲúàŒla°6)Œž³yˆk:Ðs¼ƒi¨j¨h¦ûZ6ªÞЯÔÇâ ƒý$LÀ r¨«­ª…6iÂ$LƯ’;{ŽéO)’Ö[#è S¼ë{†P&“ ”ƒÂ8j êjQ³IêeÊÀIØrz3˜ZA©fA©fû%£N „“o) Þ@PýÿÕ*p¨É·}‰_²A»M2ðë7øLõZ‰|MÐ4D÷ ÷`Ê‘(ú•íïM/¼iÆ{±*D¼#lHÀ5–êµòœ7då® @¥e¿/<<öRjSñVá_Ü*F‚„ŸP(N$Ú•°¬,R  4‚4‰„ d%œ‘0Š6^±.ýT;Dñ¹Âsõ¹p‹[½M1ÁLÔ–]›â[¿4nWRc‡gÙ…F£Â'd›¿r“æ<ÙÓfðÛ•¿+7ƒ¡^nŸMäïËþ H;v<^ÝpÙ8L_a£ÈuÞ¦”}YÅPc_Ý& -)St¥t.>ª¬>X}¨æ´´æ¤©¥XQ’W™S­¤^î¾Cä›sª­ŠÁ~ÓUeùß”†V=¥^¾BÓdWHjìè ©á"Ót¼äü EMNMn™½ã‰kµ*úÚª{”çÙMäŠÐ£½¥–B‹p~Ù¢ÀlþºZqd_Ë–ʦèµ%Þô:M£Pñå‡&ï½ù;r¶1™¾Ä¿ÕQÓQV%å» ôZ±\IKIsQGQvw|£T]oy±ÜT`Hô—ÔHYÙu‡È¥²ñUÎý™>÷wúôï•ÓÏífû8ý2×kîïD ljv endstream endobj 140 0 obj <> endobj 376 0 obj <>stream -H‰bd`ab`dd”÷r ðvóÒö)MÎLI NÌ+©,H-/Ê,I-ÒuJ+ù!ÍøC„¥ûwß÷¿LXe–µò~ãÿž(¸òûJ!’*çü‚Ê¢ÌôŒdMCKKSÇ”ü¤T…àÊâ’ÔÜbϼäü¢‚ü¢Ä’Ô=Çœ… úb… ÔâÔ¢2 (Ä -™Å -‰ -E©é™@E©) -%E‰)©¹‰EÙ -ùi -N™é©9ùå -j -ù9¹©Åz @àÉÀÄÈÈäÌ· ì‡îwÉï•匾«~÷ø®Ê|A ȸ˶jþŽ=‡¤NLN–ÿ}(òý]ÂßìFa‘^Er­l?±~oý­ÊÎW9÷gúÜßéÓ¿WNÿ=·›íwâtö×\ßU¹{xø~¼0tuç endstream endobj 138 0 obj <> endobj 375 0 obj <>stream -H‰bd`ab`ddör ðvóÒöÍÌËÌÏÓuÊÏI +þfü!Âò[ãwŸ KõÏK¬² S:x¿GòÜðýªHQ½s~AeQfzF‰‚F²¦‚¡¥¥ˆ4RpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQé*VJ-N-*ŠB¬WÈ,VHT()JLIÍM,ÊVÈOÃg#'#3##‹UÑ÷¾ïŸ~F•3ÞºË|ëûbÑßÞ§~ë}WQ•›¿˜ÕäràwûïRߎ~·tY®|1ëoUŸßz¿½¥ º¾Þeþ¾¨ï»·Ïw½ß*åÊ‹Y9ýmÿÛAê·Cào{g¹ùŬßU>žú®÷¨¯fÖO¹Y¿K§w˜¶›í{ó¤?5ÓÙå8WŠÿçáÜÇõ»‡‡ ÀySŒ¦ endstream endobj 136 0 obj <> endobj 374 0 obj <>stream -H‰|TkTSW¾ Üxµ6Ž\3•ÜiNìØ5ãªu鴎ΪZiE) -AGäæA “\Ðò"!AЄg €€Hå!Ž:µZmµ¾;âšé¬vÍXÌœ8—Ö¹ÁþžuÖ:?öÙgŸïÛßw6 ‰e#,‹—¸cÏ®„Ä7’ФE2é›;•¢Ò¢üèÁêÁЬŒ5,eÓ€¶ü÷ѳ)ôUq ¾ .ƒšåƒ¿Zd‹æ¶ËäZEQáa¥ð·ùk„6n\¿6ºÿN¸í,O,LÕ’J±„î”æËr™B¤Z'n+-¦Do‘Â1)V¨™è Â"R(*¢Cb‰HQ"”ü¿JÂbò> ÙÁB>b!I’Œ ©l$A¸ C„Ä ]¬7YOÙi1›b®Å®Œ £¯£Mè¿8V.÷†á‹luäía½&®onžÁKáÈï@U å&¼³£ã÷Q'P•¤°ÌHë=ÝVÐ9ˆ¶==Ú°’ª´X /mÐTX*‰Ýgï»S³hÖjþ;aM[óDÈãœ;}vlx -«çH¡–×ë?Zíµbåj}†‡*K -òÈ2LtH$Ñå¦öÁ^ûW—A×ÕPG‡ÃKmîæ/Á½f8 ºEþ! ëâÐ\<3÷ ðÆ9=–ê#X3_h‡ñpZ:,Z›¿æ]Agþˆž²š}aü€¬xŒÏyÞÇŽ@xëï¾4=BšuiôKÑË3% JWnRÙò®Yà~k¸"RGÞ¬Ñ@-ƒ#n`~|¿ÿ.£à?(Sœžú(<‡*¥ßB™pƒ²ü8E$oÊ-̉{öÿzã€,xr2ìnœ8{æÌ5ÌÂ!i MøÓB·ŽŽƒ½V S½«ÛÂ0eî= S°SÖzŸ0m%+¶½äªl ÷¡ûéZ1žÆ|:Þíìvoƒ›hí4|’›Kƒ<ÀµÓG DyeØØ[£‰“ÎZ!ø,ùkü«­í¼Ag¿¿KÐÛzÊ×NLžÈKY›´ë`¡4ôÀoQcó9¼Ý‰­ŸôßéöšSºP96&ï”JøÈOß<ð˜:‡S5…"°?¯lO×`þE½ «Tg¨äS^MH#À¿¦èØ´ÔìlþŽÇÅ3WáôI††¢@rçI¾ÙÙ`ó81|nëå“íÁ6¬+00ö%ß_ã75 f«ÙaÆð+[[ê;š{ººV2‰*£¤zs5ÆôjËœr‚ûġހ+Ç5Pµ|ÿÁäýª;øYø²—g›@¶½Ãï]è†l¸d’è¬-ɦ>–F›ÐtƒMqŠð0ZŸ[ÐZÕºÊâênøøyX~×ZèÔ”¾Ö¤©Š³·lÀê8#4`­c\kÚNVlÚ©EÝ n[7Ÿ[•Q•aȈçÒo9ÔÏÞˆþó·GþI¸”GÊ3ÅâÈ1W›@nä6cýcÑ";•ÚM@;ñs‘UóNts¥Gy‚ð}ijpáâŸéÅAáÌȿ|5Ê,Ù-LfKàŠI¢½zÙè^úš®o ƒ Ì^¸X*f˜©_`6Ô2ÛòÀ {(vVU•µF ÈÑlÙÿ‡ß`µœ¶oÑé&KŸœP~•š\4 ¸{­VlôF]¢1[ŸÏÝçPÃçß± ø2¦FRxŠY©éÑü¶“ÃL~vŠé T:•®ßÿ Ý2à½ÖúÏø¦_8؇…Û›mNÂÙTcrû§Ùis6:\6·ÍuÜSíÄ<¦ -—Š(Û¼>Ôqšþ‚N»Ì}J‚ûŽaÒŸ²î^~|)² ¼¹¹G÷ú¨ö¤!Pz"·³‡ßßèµêfÍä2{\nWC“¹ k5‹ÅDv–DE‚¬Ü£ù~æ„r¤X0VØH*ø% -©¬Ä–ŒN“Y«4éµ:~‰ùbY˜à -£Cù9ËJ!Ï‘Uwû..Çû¡.ã©•²”DUMÛY'¸›ÿcíìFéœøK£m[rùôCŽŒl4 3œ$zÝ\ÑrØOŒýíþH£ªQ5EÓèúÚ帋÷ã7"«" ¼4šD³iã´c7k Rw ÃG¯×V÷«ˆ¢½{2sS‹†Nû}M„ËBî·€z±ÞÕø6äL=º qÆ2ÓÝC³4Û¹š‰ž¿—ý]£X`Àìâ‡Õ­j•ŠT Œ½ŠH~€Ì”¦g’…̃ø \¬‡K ÿƸ:ï3—®tÃÿu7šçuîE‚ÖíÚWž/]Zrï%X±"²†÷?¤Í…ü endstream endobj 96 0 obj <>stream -H‰œWYsÛ8~÷¯à#¸2QÜM¥jrMÍÖQmìÔ,Ñ×å1¨Iüï·/€ %;3§D°Ùúüºû׫\Gð¡ó¨nòè±½úõWïVW¯ß΢µtÙuõúgxÝÚ«×+ýß ˆ«»+]FüÁ£)¢ºÈÒ*Z®®Õ/±ÎT?ÄI­ãZq±‰ uZ­;º¿®þ~•ñÑ=¯ÝñZŽÏùkNÇë"Õ|ü8>Sm'¹Vwp\P¨õÉ2¥ëù9ì:¡<˜‡8©T ¬L! ›œ´K<©Rf?2ÝÁÑ™’cp¬‘Kkõ[œèJu›®ßòç6ÎÕÝMVÔëoêçð°Ç÷̀² ìå{¼D¤ÛEÚÕ•úW.”¿ðWjT,N–ÊQU¯þ¦MtšG«`±É¬;XÉDö N,Õá¿÷Ñ`nA‰}­c]°‘Óõxã>rX [G÷±^®~²L¿‰Œµìtmðk®6š , "ŸZ›’œèêœ]‹°öskñúuœ”jÇœï3sI–ÖD°¾É2:ø÷Ô â¦HófÁ,×*âAÏ£]C1ž‘T¬<ìÀ@[Vãù·¨d‰Ö‹\i“äiU.• !0=‹cû B·Cá xúäÎç§Àl_Å%9 FÍ@ ΂}~ÝL’BÖNØ‚–[ý¬0 Õ·’©Ðsîr¤+ +¶ÖB$§Z𮲋êä69Ùq½³²îƒ¬vËfõŒPföÝÚ+‰Ô9L1• ˆ ¶ ­Šg²b¸SL'Ï#*‹yø@‰}I*V…v±¾@aŽqtèO)\è–b‰W&p'EµAŸ|¢J>]+á¼µ¦¨Ô´2Ú;ˆHoé&¨ž°óî$a½sÅéÀŠá‘Õ¹YL¶ÌÒË´^z×”„‡|V‰-ÍÛ>?˜þÍ›×?­‡“Ù¯ÚïÛO?}ʳ¬yûömôîÃûèJ‘E?þ– Ê´j<þ³ ¥j|ðÀr%@m·=Ž_ÎÔ€²œ6YÅL•ÆAáÌ/ˆ»?B Š=².¬ÖFH‚Wàã¢D[kuèú–¿Ã#wÌáýF×ayæõe¸¤OÓDǸ³üÜ·Öz¡zŸÈ'î¯Ð¨5B*+q^ª€í8ŠÂ× ny5ÆÃ$1Ï£Ëç%ŸÆÔ]õRÙ#?5—#z,]ߢ8 Ïu€K—ÿȉ®uòJb³ÎKÑ™×3Ž™gA._óŽxëFzßqÐîc‚¾„ B¿ :¿D.Cávð6ê«äôc»Î¬¥4g>!Ö²â€-¡™ÍÖÊ™5tžÖcº²8ýý\è$ áVëH½š£h†dhOòÆâš*ìMD³?|\YÍeÚb -ŠrxþyGzÙb\0`Wwdy¤õË(`‰Gâ¶ êL9 ÀÜÒuóæ5†%52ºNË:¨î0w„é×8²´Øõ ô%Ž!—q©Åáî(ìþðò{@q‡¤¹{Rç`Ù˜ÁðÊ—£f>.EZ$™E,U^›ðûžç1?l »ƒl;zz…´³-/‡©K†;’@6í73‘(ÄIAš½¶s>M(PhÓùnŠÉx¨¤¸B¸Ò Üã´üb#ÞñíŸ"®ëÈM1Q·)ÜX‹¬Ó±¶‘–±).#Q‘KæÔ›=ÆE’«P ‡N—ëðˆ£I‰—M²Q„Í:‚ [•Ä-+Åï<Ì| ‚%5oEÉšÂS7‹ÌÒŠ¼H”:³’™…òn 2숺KS7P©nÃyÇÐïöd8Œz? 2|â9˜"Y˛٠}O^-Jqñ¡‘Ñ âTé4ÎÓx eªIe=Ö$Xƒ™@²í™ãéÂÁ¥úW<È8»ëiJÕGêüáíYå8%À9ëçs¸q®»¹¤û¸âÃò@#˦»ãYN ¦–Š]º4 J1ú+§‰Â‹•Ãë–2kdJ e[–FbIÖZÜÝ2õF½û¼¢|3E2y!Ü™â+X_Š+áât¡•H½~;ˆl“²°XL²…»¯Ùƒvç—ðÑÆZ}Ÿô˜½+*<ã±ñ¥VšážAÄV? -R`÷wÃú¹ Õࡼx6J]ŒÁ áÎïû/‘fbx§vÄù²ÒÏF!~òþ—<)œ¼Sç;¦¤ü1NZýøP©ÿüãe~.â¬ÿ¨2zfêë¸g»Ó±ñæ´smü¬,„ ¾yÜÆ¹+m…ëÿ9ùöwÉ›œ#§L¾9Í&ø€Wx0¦ØËÐqg ëéŒ0âBLvðzËåFkAÐäBŽÛEoý;™nb@ذ Åþ @Ò­#ŠX¢t“ê&¥˜—èb"(Ãý†ã`q2PV€‚Œ‚ôsQelt½øÊÞ»ndÁÖ¹ÖÅ×óê’.oÔu-üøò3Ρ§¤¦Wr9LZïõ €1®>ªDVb ±„-ÖbìK_ ý~3˜ÓO|ˆx–ÀSÄÔÀÃÀ¯óÑi|¢tξ¦öÜÃB8üηâÏàó¿eóÁ× ö’Y¬Ñ÷³BBTr?<¥¾]â Ê)p‹Q£Qã°2öÚw¹ˆ9N8À;M `&Z^{á<éKf¬”µð,’ OqÇ 6^ÐrÂ1ÖÍœ.À•·0‘¦B"Å]û\vbë)Ë‚pº“Â$$ ôÖ¹Ms‘½¤7(¹ÏJëIÝEØ?RâÈÛ ™dK/‹©nâðX] Çyv½žI-S(<ûã ‹–CY¬u9ì:`ЀÓ"¼}ŠõrDÌ‚bwïvaaðû¹A–“gÕR²I²yÈRº@¬Héiè7¨ôìP MðÆP&ñ–Ùd!¢©J F‹ñ<¯|îç•·O(óìø9­ c“à Í£¥Ô¬’ô–ýå´M‡oCvåIÉ,Pœ—å`ÿñ´¥qf‡¯ïbW4¸³À"N÷\W_ñ„¡ƒÂ“ƒºÛN@ø`CO1wÅùR -ºQ©i””ùÕ4íæHc]cªP%GLÁŒ=Fg‚IƒÈúÚcDb±L(Ð,{¢—€ó4}“#j›>Î1.]ûH³ ÌÈ>˜1úÏ{Ã÷”{åtŒÑ¾bƒÕŽvàH<¶`~äO­™Îœ}±8ЭçÕn¶N(î -õ{b:³ÙðKt—ƒÊá`º€FÍxL-Ct›5ŠE™ÍÂ5Šk@‹M:f8ôˆ»yG˜diVD«õÿ©¯¶·$ú®¯èG é¾_ž±ìlàÝ œhâìƒv.ñÀ#%±f°ùü=ÕݤšEÓv0´Ù쪮®Ë©Slù5#œâô\)µ}j³Gíív»ˆf‘lA³l3ãšæˆi³¶¤Å°—ðS” JSE ¤}eeS€v<v(ö8²Úæ6- -"ߤcbШãÚåõöaK¿‡&+ 2UĨc¶´Åv Ê!©Ù%t¼¯í;ma¤Ö_}•.ûf%1ÚQ3L°šVßfS©Eé´üróŠýk¥AÖîþL+ÔÏwM…5ÃÙ§èV©Ö[ª'ŒÌ˜_ÖÙ»•`$ +y¤IÉ"ƒ 'àćbУ×m¹˜‚»Øíã}ü’¼K[FÜû·¸ã’¢1_.s¤›mÛ¤ì´KÈÇ8¦Q?­/âÚ( 8™ób)“áw·¿på@~ÒB;LľZI‘gƒÞ–ìÀÜJ«lýîãÄšžû1J« ƒ%&uÏv4ÆKí}HA+ -'N~Þï«Ä‚༒œgÑ»}D.):xœ®ú~V"ZŸÌ/¢ìïwWú8âãœvØÿ|K€÷xO¡ý¼lÜЖ´`ŽEŸ! _ŽyPK~M §Ãb>6l]Ée[ñmí»„äåk«LBÚÄñª¼tL™8m9·üEJEܬ†]Ãîm3q]g°K¯Œ§J¤Ið' OáD2?ÄçøEžðHm,…–R¦­MÊá±çȦÜ};ÙE]wé¸rr+f;|ɬ„ö´SÊ¡8q›4mékÞA½ ÊrÑFhˆgQ3<&Uœ7q—#ŠÉÐÐÝî·¸r“>¥®‡íÁ~HÏ.îìiúv•þ:õxWÒrk D®ÓKq»¶S÷Ì(IÕ×G5Ù‡…’Ò‰ÑþôsÛV½õÛ@ὑ*iε²èØ¿·CÊÝ!–À§E»LK‡]JK‘°Eõ÷Å89Ÿ?$׊s3¿iRé§Á-‚Z9Òb9(ð»1'Ž£‰ôÐãçœÆ=Ÿ•íKóZÓE-ØxmbßæöGÂQ:§ ÍEDíÁ¸»#g«.‰iCªÏNÂZ¢à(åCuDóèäO‡' n˜˜-ÐVvMàœ¼.jaüH³Ð¦ 3MÏ=̃Íb^W˜5¦ÉT-™úf kg“4æµ³”ùyx¡‡5³²}"ÖPñ6ä.ÓýÇÚ½âz ‚c-óyx¡×îgeûÄ” -sš‘±[p+c_-Ó -á™âƒ§N ›|×ÒÖtPÜ¿sýòöÝ˧s&Äm&O Î,:27µâ*Åk=/ßpTt}vÂ'í$~=+ÛÇ#ˆYR0‡Ñ!# è“2º6Î%–}1FdÎaŸiw£7 “§• -&—µMÙ}“ãÕçºÔ˜ÛÔ&¤.º„©)UCðŸ]‹LÀrE]Fê‚!ÃÆ÷KÝAÒ›û“pxÕñø•Ëùd9¥¹³ºÂD̶ª–A‡ÔbIÉóÏ3É£e‰0+©ÆÓK6 ¨8¥(µ4“ÓÎÃáâìy£‚Vó/>œ_Rv«gHQœ'|­5E XïÂÀÅ9ÉJ`¨”*Šz5 iRE©àkBÝVPÕ^ê(Fž===H­Çƒ°½öS)ÊŠ$ -¯ÎžT×9 1²OMu™ÑºKõ¤¢œÕ>œDQaîösÖÿÿ eØz6sµýÄó`m®©XTÏx<ýXŸìE£¬Ú'²È7/÷8TÔJ¨vm£@§ à¶°f'6hIIz›I]<5½Æ; {vöOlHÊ×Ê#l*X¨Häó5{CIÔÅ=áòz±üŽVe­ñÊã¹Æ°ŒÎJ`i o t&—ÐY+{ -³@ea“—CWø’ °ø óí  ØrGî–ˆyÀºñ©¨¼ðz¨s ôok3,Vu<#¼-}–“fÚqCë±q"€1£ö Rݙ霉DÐÍ—ˆhb©æ“÷rb÷GvK}†lHJÔ(ÇYcÎZ8Ø‚½JÒ§©ù û×p žÕúÀpVœVjÇúðÄÖ‡ -x^¶Ÿ´à ©®üh=‘õÃóT8;ÎÕö‰­×añ–F -Uçlì½¹ÇÆÆË‘bÔg¤Å -3Mý؉¸ü6·ß! 3å ýÐãaiÏc%_1 ]1ñb&?»ð-YÁjvY|ˆÞŠžJÜÅ·\…‘†FY¢&]¢ÝERƒE6çÅÙp6$129 «Z(Îöûy$~DÌdÓ•éµ¹‚qºGd¾iztÓLe›-Ù>stream - - - - - application/pdf - - - BSTdesign - - - - - Adobe Illustrator CS3 - 2008-04-27T19:25:19-04:00 - 2008-07-01T15:04:52-04:00 - 2008-07-01T15:04:52-04:00 - - - - 256 - 204 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAzAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FWL6pDNr/mObRJJZIdG0+3inv44XaJ7qa5ZxHCzoQ4ijSIs4UjmWUVoG BVeReTPNel+ZL/ybptvoNhouq6mtyddv9KiNncWjNaS3dibaSNq/v44ebLLzUjYg4Ve2+VtSvb3T ZI9QKtqNhPLZXsiLwR5IWoJVWp4iWMq/Gu1adsCpxirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVYx5r/Mfyx5amjsrmZ73WrigtdEsF+sX0pPTjCpqoP8 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 rsVdir//2Q== - - - - - - uuid:D604B9AA2016DD118D05AA6D720C964E - uuid:1f382f0a-0ae0-7240-90c9-052bfa9b93bb - - uuid:29342be3-7e33-de4c-b6a3-50180e31c442 - uuid:A55D623089FEDC11AC15B6426E08541E - - - - Document - - - 1 - False - False - - 15.000000 - 12.000000 - Picas - - - - - LucidaSansTypewriter - Lucida Sans Typewriter - Regular - Type 1 - 001.000 - False - LucidSanTyp; Lucida Sans Typewriter - - - Minion-BoldItalic - Minion - Bold Italic - Type 1 - 001.001 - False - MinioBolIta; Minion - - - - - - Black - Red 2 - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 100.000000 - - - Yellow - CMYK - PROCESS - 0.000000 - 0.000000 - 100.000000 - 0.000000 - - - Lime - CMYK - PROCESS - 33.000000 - 0.000000 - 72.999992 - 0.000000 - - - Night Blue - CMYK - PROCESS - 100.000000 - 50.000000 - 0.000000 - 0.000000 - - - Pigeon - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 30.000002 - - - Red - SPOT - 100.000000 - CMYK - 0.000000 - 100.000000 - 0.000000 - 0.000000 - - - Red 2 - SPOT - 100.000000 - CMYK - 9.000000 - 82.000000 - 60.000004 - 14.999999 - - - - - - - - - - endstream endobj 91 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 365 0 obj <>stream -H‰|• PSÙÆo€®º†šËÝ’\Í«»ëŽÖWKWíº*VðÓ 5fi-ÙXšíªjŒ¼2Ó20N}1:tçžp&p4 BT\‚âS}¶¶êÚ*Ìé°7v -l<·÷P¨*>V´sNb;,›¤—h8vZên‡í”r3>Ìù¤ `ƒQ`LD¡“[Þ¾©¼¸Ü<,¨}€>âVM¢¾Üiz º•Ë,døŒ#ff%ö]qûÑ݇w¿ÃJ¹™j”ª\§¶]£†ÁnèHlçÓñ ÀÐñt!±+ù@X¢(-)ÙCžäŽ€ÉTg²–›¥ÖâFrò¼t'ÅÄ1r¢™ë²-¾ÉvÐä¸öµ¦€‡ÑUèƒ×T:5•:kF“ ³^Ó«º¬V~ahÄþÔøÕçO„ðskaSÉÅÃŒ‰wyjìb~`?¹yÛ^Këc¥m)7V8ðþaVÓ¿ÉÒð;X€OÓé€iªXÌ+¶8J)ü‚P'x6ü5¿ÔŸÎ8­)Q–a¥*¥)“ôõŒŠ ö8Î k„›;¤£]MgE®æþ‘Ö>¬„«ý5º9Õ]K6=î»vƒbüa¡ŒN’(åØñ¸Ô¬\2Çhsö[¾jž š'šíVÌbµ›¬¤­îTž•*HP,3¤a¼gú˜½W¤èÖ~  h˜oü"½Ž>Là#áÛdk7R…Ü/á1ÚYQP—M–+´›¨ä>ÏÎ"£,Â/úþ´3Óÿ´ªB-ˆ­Lý”ì¹i¹MÍ\Ÿæ 'OtFŠðoÃÁ`a ~,EdÐkó3Èeã7Vªîo%澋Øùö‘.i³¤É(^¶þ°ž¼Âï>>?ÂBB«:JJU­ŸSx÷¤í¾sDÔ[_¦–¬vŽ£ð©Š\{^}f¯=S[#ìoþ$hG‚ô˜È_Ü;›…«=¼ü¨ëö-x,ßá ÄÌ >8,ž|†6—HSÆ©óX:gæè\„¾ø¿eË™÷P|Æ”“S”MîõMˆM](3Ÿ‹OÃÑv[ ËÙ©W4Søl•¾¾ÄbÆ,f»Í)l(Nn’»%‘*ò¨Ò?ãC,›kÊAyb–™TóAÈŸ~ KðYüù =qöqßø$¥kAÕò¸7ûªŒú3°¢cÖü®h2b{xp U#G ½Í•dYQvl.…?fŒh@†Cí"ñ'@¼ÜKN‰J’5¥v_hëêmÓ´H)ÞÌê³j`þ sQ5àƒëèÄ¿ªÔôœ2ÇPa˦tMÚ^m¿¶_×oh±VÕZ•ŽÊvÓù|Ì^è¨Ö+j“Ž„ - -ÉST'åqX!·–´‚ÐBì\婺LÒð¾B»áU°Šç‚%e£™ˆ(&¼ÒèÜú2WÅ媠²¿Üáraø¨m¯3 6;ØÐšÚF¶÷Uÿ~œâ1³ú%5·ÆaðÊd£üŸy‰}Ü7[ôù{?Õ Yu¬XÖ®kã”î,Ê=µ«èÕ14 úÒË_™Îoðúx±£üjˆbnŵ&ð¨lÁ¾~0Ý@Ú ÔÑs~†1:ÖOû›ŸÎaK°Dò_Ÿt³W ý£#º&…LWåéR¨ÝŽˆ?Öê ô†õTg )ñû©îf3YÎ’2P±ÌF}¨>4+TÀ›ÑÑØ§ÁVö…=qý–«wºu£çé#á“Л«%á™Ê(‘¿Ôo-ã#ÜÚ±0¬€ ¢„YÂp²°B£±0‡ŒOøÖŽO»þ $Ûý˜”“Œ”ª¦i?÷ ûƒ¹÷I½wvø!ÅW÷X÷z÷´÷ø——Ž›­¼s?Üû6ûTsz˜”„èø`’c{Zjprcnl‚hx“i¤•¤“¤‘'ü‘ƒ`ƒL‚j÷¨—«YjŽŠ—“¶´£÷Ô„™‰™ٛз¼ÃÇϧ×Íà]Àûpf…ƒxu”v÷å÷ ö‹w÷÷˜÷føXcF\ROšoŸ¡°¤“‘‹€j„iû:€SST÷¦Ž²—њϨ™É ¯£¨£ž™•”™‡‚–È–‚•‹•’•’”“𢔙‘¤›žr•ujWN4Z‰œÒ˜µ”…®nSË÷´÷MÉ×ÞÙä¸÷Ú÷8½^¯T©lœg¡§¨¢™¦¦©twØ’ƒ˜ˆž™¸™•—œ¬a£We_{gbZ`„bkLÅrµq½l–xvmqztoeŸ°i€—~x{zsŒsdÏo³ñðâä:”vø¹`¶Ñ÷ °÷²÷ˆŽqs]h~ˆ™«’Â÷›ê‘«³û «÷}™Ðû > endobj 364 0 obj <>stream -H‰$’oL[UÆÏéåž:§ [µ½5Ë–f¹M­àÈ`( MkÜd\Kµåâm¡vÿbÔOvCP3†¡èPF0†!޹‘¹1¢câ1A6%sY?,—l!¾§;uñßç}ÎóüÞ÷Œ2Lc¼ª|Ç ¯l-q•7×ùë½5ÞÆÐöh“ÑüaEK÷%æÀìáŒoewïl³:þÁýðÚ -hÉì½S¶2-Ù[¬6E5¿¯!,¯©[+¯w»7É…õêE®‰†ÂJ0$—5Ö©Z“ªyÃJ}®,ruZ’«•¢µ§ÿçËþì•5Åç7.jJ½Ö¼õJЫ½%«oÈE~ŸP#òjy«*¡\dF¢ÇÑj´¹Ð:”‹Ö£ h#r£|d1D&$ Mè]ô%º€îb+Þãø¦ÉcúÈôÅòE x)«ŽàvvMh·Í‘iðŠ'ÓÜ+.KúDâV+ >-ò ±D/³ÛŸZØ™ä.kWÕKG*í}ªHÚ¶¥‘›×Øùss¼ÿ}áØÑçeóÁ†šæ2·ñÌìù<ù] øZ²Ä(ôQØOñ¢.,ÚXå Ðý”÷Ã~¸BSù$Í7Oa"‚©ݺ@m:ÌC7Ÿ×“>ŸàÝ0á2(»A1p]˜o³¾70~à¬ãÇÓýƒÒÔxûï@ìl'¿X ÁT©¹$–Ë3•æ{7;ô¤Á€u°m¡<‘”\éĤpë‰ë+G§žÍµM‘¬?’Â!3䤊Ä?IÖä° -ñп–Ù¤ßGøªTžø!áÙ,Oä÷,SøÞàÉÐá“2 æáirû\ßÀ˜tfèØÌÏvØÎ bn'¯%z±U'#@b|¹'RФ°ªì{ÖQ¹ä3I¡‡â„ê‚0\&¯x•OаŒðfHô6ï|äÄHçÙ!ûDà·{Ý;ëb•^œö=OÆcÜôŒ§€/“>stream -H‰¬WmsÛ6þ®_û^C†à›¤ŽÇ7¶·—I;™X~¨nn`Y²˜P”jRuÜ_ûE)içúb‘¸»Ø}öÙÝßG‰ð_¡1ž&âi9úUÔ£ëÙ(ø¯ŸG¯¸‹Åc3z=SÿÅ•Ùj¤rÞÍE’N¢DM31N¦Ñ8³Íè7ù~$rÕ†Õ2s©ë²~ƒ$–ðžÈ‡ð:(d¥A&?‹Y0åS0æ½eügöŽT)£*eU©H&q”áaO"eT} T!·’÷A˜‚Œd…j,[qGòHác€OJ>ÃV!ËEËÏžÄèQ¬Ü‘Qò‹iMóX±¢7AX ¸©Ü¡&j”láo,7°>‘u+¶p-‰›@¥r»Ùê} iàŠ'q·€íT–üÅ‚mDS’(Ërª(³Ð÷!˜ÐU&²´Ç@7JÚÖâ— U².áÀµX4þiJ6è…DÆQ\dß(òU 2)~~'âIže윈û¢÷ˆfQ# Tû,ÓTY -°îº -’DÞ7`ÎuN¥^´,õn§ë‹‹×W‹v¯«ÙòK{qûöö6‰ãôòòR\¿¹#)‚Ù§ÑÛŸàq† ï&¤?)¢´Ó?Ãû­—"ÈЯ,Â{ˆG¥ñ™P@û-†Öâ6[ óG¾¡Åú -1FoåfW!â6ø§nñ<"·îu¥ÁÇJ½´Ø,5iYJÖƒš›WA -Ø!áµÝÌdgʾ/òß_èñ‡`¿/ïuC¯ºæGi€A!:86ØxþòSCÀs.ÛuiR‰û«/d,Ü®Ã+ú1@ “Lãq±4›5¤f.Ÿù…¼·G»X>ßmÿ¯«í¶[ÞÛîŸøaAY„>ÞѶf/ãJ­+£«^=a6éÆx Ž‚th!9öìÞÈÙL”ž„YÖŠ §Íþ ~âDðsG³`&( qhB ý4-D‚¿âõ6˜Â±±üÒ¢‰ôÅwû¹¡} -þzšÚ5ÿ‚ó‚Žå2YÁà hÏw¨Z·Ú¨=í :àA³˜ ›S…­&ÏðQÆù0n öý¸À5Ò± ¨¦÷›ï¾3ø€—wX 4ö8&µÛù`®¼´&inëúî ýþd1ß·C.ƒß®1¶/ô²§ñýpÇËæ”ÝÂfÁÅStÖ”66MÔ ýmdøruBcUaä…tú^¢]Ï=x(Œ½¬À@6K~ì±Gσxbm<„Jy¥a¨ÄÍãt|@t„²ÅœPï6Œ”Gþát‚-FµY®ySkyel›CìDlL5, æzµ¯I%ÎùÆ”êÔÖË,Cµ—‘t·”;<h©ù—Z‹•¥emôÊs¾ŠÏù—:'¶Î‰=Ò_â7ûIŽå?·(ÒñÄZþƒƒÏxh]¦§Ý»jÔ< ¤Ðú/–у—¤H» ÇäÜÎql7Pý© ÂÖN;³ç5kÒ–5ÿÔÔ&ñseh‰ßˆÑá÷g5AqXÉÄ^·êhþRó3°@slˆ—D,y,ÍM†˜õ¤L!欮[çŒ.º½&ÀùîˆÿÕûÃâZ·ø»Yšr -A£ —úê@¥â°¨SAQGy¦zY¦˜Ö  |`CLÚ(Ù`?på…!¨+üÔ ¶-þŸðÍ@Îr .y sGY7^ ýz(8`Õ²i8¥„üeȵÝbBØ7Ðäï9úÚa|–aߥɆ³vß¾¨WöšÚ+Øâ›cœÓó͈/.»r /ÐDué–³5?žêùp/ Swþ©[ ³³Š -%YblP4â:) ˆè² ÐèžÐ÷çcWYcŸáø·0ŠÜ"æ^ƒn«hA-éÔ+ ˆãBâÿµ ncOZñiØßÝZÙÁ–áŽÂõîE—çÅ1‚ ¢¤ÂUa#Ux£×¸˜”Ç뢳¨íšþ’äêæû#ˆÁ´5æ]háÎ/öÔûUç ž#3PÅvr -c˜•`tùq~qq0.F,u“^G¯&Ò Kf.XãÆÓ‰»Mtƒe8Tc •BdAyÕ܈zípGÒhÅŸ<½ØÏï±{aIô×kèpl a~TGš%+6-­2]÷†z ítjt9U¤I6ÝyÞñsMŒÝÔ0T,–R§ßQU¦¾a&'œÉIÅã g;¤ñašÿF_•ugÁ@ØTô„çQVœ—ýÈY‹c¤I±®s3-  ²êÂBN”[Û›m鈫RPï£<+|ÏáL”7ao·ƒŸ]7ô¦"žùhC?°®!i»rqÐ6†¶Ó…‡Foø»£¸ÀÚJ7Ž®Ígµyàð -=¬ØæEQbU[³oX. •I„^7ø£ ¢ÉGá»ÛéúââõÕ¢Ýëj¶üÒ^ܾ½½ã«øòòR\¿¹#P -BÞþ^´Ó(™æg¢J;™Puü -4ÔÅdÒùÐ&×¾2Ý$CÔ¾8Ù‰ -¥iH´àæN.¿Kë.~ CWºæ°û&õ o5Øâv«lN©qUÞÊ5ôÀs0E €K`Ìåø'ÏT¸öþ )…ǹ_ -á½ÆbL(U¶ ¥wÕÇæí{µ>šäÖTV,pe¤A×FïœC5W.»x"ËÕAßÞ±[b2èOî@Pm¼Éë`\MНŒ1Iq|9QØ»c”ŽðüŒôÏ:vÄÉŸÞ’«GƒPëoóÎ|"X—eìúÎÄÕž7yÑó$]Žá˜Ø È2ùÊÝz«>t³.˜8Ô½ü‹vè‡w í®G œÜ %NX>J©î;ØfŸ¦OVµü•á‚\6k7RÂö߃¼× ˜†ýr$ØLþ€ ¦A ]Ù,<àœ-. ïXF>Îwh¾Í%jÑ’Xrä¾a,œ¼3žA”–ó8û•%(?&¶„x-áÛ‰Úþ×¾’[Ð!›hÑ%9¼$y¯Æ§“(g'hŸ EhÎ8¢;vÓÇ#ä•8ú†PBÙÃ)Ô4«}%Û,W]`š³ÝÏ·:æ~ªˆ&ÅÙëáBj¾i‡£x’Òó$)‚þLŒß€ºˆ ~Yä–;TÐÃ~ÃY·'çx(\#¬]¢@ÆjÓpË Ì¤ièÇ^­­¸3õѹÆÈ(µ3¨8Òb4½(±$¬;¸@Zdv­ti ³E û -ÅeÅ#ª:Ù@ÑÉlо²nºkÔË᲌ÌÉÈÉå­ôÛIEâ;ÃÚ‚‹*á.ž°ÁYñxZ½åžÄ±W8ŽÉ¹ðsºå'7à ²“HDVÝZ -†½cÆ…Åó” :*\žË÷ï?^Ÿ8‚­n¬½¬9¸H ‘ßoL9Šÿ£¾jzÛ‚è_1ÇXŠÀãk£¨·J©zÈ ƒk“bÔt±¢üû¾ùX 6Ê!=õ» »³³oÞ›ÁìQlÜZ¤AlljHpa -ŸWV›¡–;‹ß? h¿“ª¶ªÑ1¹ŽµƒÍk-s…¬¿©ü¶íþT»©ØN⃆B¦Y¨l¢}Ðgr_,®R_ò„J”Ö°ÔG­¯ìÄ6©e¶,]ï$!­$'^à÷ÉuT¶(¨Þ¨ܨuž|,°ª}ÉŸ>J“:ç÷YÜ5µÒîÌà»æHçƒ ¬Í©Öç{²†üè;»:3àš»Õ@ ôž„aœÖøÂ}FÄâå"Icµy¾qLÑ;f°fW -wöuNÔ/B²Kº¹íUß– -y:^$Iæ—˜í¯ËEž-:¸¥«Bªÿk/7ªñ]r—‹A«$“׋èºN˜¥Ñí¹G5~™hd­mUÔìtprÂn§F‡C}`S}lÏä{*|mŽ/£>M»O¼ƒÇõóˆ™0vïx@Õ´6iæÏpÝMÀÓ€•GÐom5áýï!ÃèTÉ‚sÙòT…$¢ë³Ç°Gž~-–¡mÁêsŽÂ…ÃäÝrr¼îÍ»ÔÔÛÂ>$½Àý=dîSkM͇§à1x®BJW eË„þì‚ÔãyD÷9>P~ÿ-Âã‚»¯˜Þ»àÈà¿€eÑ’Ê£¬rDÂùÐiœÈ8]ndÒ|½‰Í@^ÕÆfÙÌÏRÊG2Àl&ã9(S<Õ/Þˆ_Õ,ÇÉ"u>4çÿ§ƒ¿ _ / endstream endobj 65 0 obj <> endobj 66 0 obj <> endobj 363 0 obj <>stream -H‰\ÝjÄ …ï}йܽXL, -([ -¹èMûF'©Ð¨LÌEÞ¾£»l¡*Ã9ßpyîŸúà3ÈwŠvÀ “ŽpY„gD«Ày›¯]½íb’ ûšqéÃ…Ö ?X\3ípxtqÄ£oä|˜áðuŽ ‡-¥\0dh ëÀáă^Lz5 ‚¬Ø©w¬û¼Ÿ˜ùs|î AÕ¾½„±ÑᚌE2aF¡®ô3W'0¸ººPãd¿ ýpÏ^Õ´w]!U!ëSÈ«§Ìà¯Â- Ýˆ8[ÝG Uâø€·•¥˜€©rįZÒqä endstream endobj 362 0 obj <>stream -H‰bd`ab`dd”õ õ -÷pÓöÍÌËÌÏÓ NÍÍLÊÏIñ,IÌÉL)Pþ!ÍøCŠ¥ž‡é·Òï¾_ß~žd•e`˜r˜÷{*ÿ÷ Áõß;…@Êêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&1A>##‹Ì÷4¾ß#Ž3öý˜Â<ëûÑzÖlÓ³òÕÌú)7ëwõôïnsÏw³}ožô§f:»ÜçJñÿ<œ;¹>q÷ðð–½dï endstream endobj 349 0 obj <> endobj xref 0 407 0000000003 65535 f -0000000016 00000 n -0000024323 00000 n -0000000004 00001 f -0000000005 00000 f -0000000006 00001 f -0000000008 00001 f -0000024445 00000 n -0000000009 00001 f -0000000010 00001 f -0000000011 00001 f -0000000013 00001 f -0000138717 00000 n -0000000014 00001 f -0000000015 00001 f -0000000016 00001 f -0000000017 00001 f -0000000018 00001 f -0000000019 00001 f -0000000020 00001 f -0000000021 00001 f -0000000022 00001 f -0000000023 00001 f -0000000024 00001 f -0000000025 00001 f -0000000026 00001 f -0000000027 00001 f -0000000028 00001 f -0000000029 00001 f -0000000030 00001 f -0000000031 00001 f -0000000032 00001 f -0000000033 00001 f -0000000034 00001 f -0000000035 00001 f -0000000036 00001 f -0000000037 00001 f -0000000038 00001 f -0000000039 00001 f -0000000040 00001 f -0000000041 00001 f -0000000042 00001 f -0000000043 00001 f -0000000044 00001 f -0000000045 00001 f -0000000046 00001 f -0000000047 00001 f -0000000048 00001 f -0000000049 00001 f -0000000050 00001 f -0000000051 00001 f -0000000056 00001 f -0000165105 00000 n -0000182194 00000 n -0000164536 00000 n -0000187269 00000 n -0000000069 00001 f -0000165533 00000 n -0000174804 00000 n -0000195546 00000 n -0000561297 00000 n -0000573423 00000 n -0000573753 00000 n -0000573905 00000 n -0000574158 00000 n -0000810366 00000 n -0000810553 00000 n -0000195732 00000 n -0000138828 00000 n -0000000072 00001 f -0000806794 00000 n -0000024831 00000 n -0000000073 00001 f -0000000074 00001 f -0000000075 00001 f -0000000076 00001 f -0000000077 00001 f -0000000078 00001 f -0000000079 00001 f -0000000080 00001 f -0000000081 00001 f -0000000082 00001 f -0000000083 00001 f -0000000084 00001 f -0000000085 00001 f -0000000086 00001 f -0000000087 00001 f -0000000088 00001 f -0000000090 00001 f -0000773703 00000 n -0000000095 00001 f -0000801823 00000 n -0000805497 00000 n -0000802129 00000 n -0000802501 00000 n -0000000098 00001 f -0000767969 00000 n -0000025269 00000 n -0000000099 00001 f -0000000100 00001 f -0000000101 00001 f -0000000102 00001 f -0000000103 00001 f -0000000104 00001 f -0000000105 00001 f -0000000106 00001 f -0000000107 00001 f -0000000108 00001 f -0000000109 00001 f -0000000110 00001 f -0000000111 00001 f -0000000112 00001 f -0000000114 00001 f -0000712938 00000 n -0000000115 00001 f -0000000117 00001 f -0000687704 00000 n -0000000118 00001 f -0000000120 00001 f -0000668808 00000 n -0000000149 00001 f -0000600704 00000 n -0000610492 00000 n -0000740694 00000 n -0000751689 00000 n -0000741054 00000 n -0000748677 00000 n -0000741428 00000 n -0000748008 00000 n -0000741591 00000 n -0000747339 00000 n -0000741764 00000 n -0000744803 00000 n -0000742175 00000 n -0000742535 00000 n -0000738446 00000 n -0000765751 00000 n -0000738806 00000 n -0000765082 00000 n -0000738969 00000 n -0000764413 00000 n -0000739142 00000 n -0000761898 00000 n -0000739551 00000 n -0000759549 00000 n -0000739954 00000 n -0000756329 00000 n -0000740328 00000 n -0000753876 00000 n -0000000152 00001 f -0000660788 00000 n -0000025924 00000 n -0000000153 00001 f -0000000154 00001 f -0000000155 00001 f -0000000156 00001 f -0000000157 00001 f -0000000158 00001 f -0000000159 00001 f -0000000160 00001 f -0000000161 00001 f -0000000162 00001 f -0000000163 00001 f -0000000164 00001 f -0000000165 00001 f -0000000166 00001 f -0000000167 00001 f -0000000169 00001 f -0000626397 00000 n -0000000174 00001 f -0000655168 00000 n -0000658571 00000 n -0000655392 00000 n -0000655762 00000 n -0000000175 00001 f -0000000176 00001 f -0000000177 00001 f -0000000178 00001 f -0000000181 00001 f -0000620083 00000 n -0000026380 00000 n -0000000182 00001 f -0000000183 00001 f -0000000184 00001 f -0000000185 00001 f -0000000186 00001 f -0000000187 00001 f -0000000188 00001 f -0000000189 00001 f -0000000190 00001 f -0000000191 00001 f -0000000192 00001 f -0000000193 00001 f -0000000194 00001 f -0000000195 00001 f -0000000196 00001 f -0000000197 00001 f -0000000198 00001 f -0000000201 00001 f -0000601179 00000 n -0000605916 00000 n -0000000202 00001 f -0000000203 00001 f -0000000204 00001 f -0000000205 00001 f -0000000206 00001 f -0000000207 00001 f -0000000208 00001 f -0000000209 00001 f -0000000210 00001 f -0000000211 00001 f -0000000212 00001 f -0000000213 00001 f -0000000214 00001 f -0000000217 00001 f -0000618700 00000 n -0000026747 00000 n -0000000218 00001 f -0000000219 00001 f -0000000220 00001 f -0000000221 00001 f -0000000222 00001 f -0000000225 00001 f -0000614894 00000 n -0000027138 00000 n -0000000226 00001 f -0000000227 00001 f -0000000228 00001 f -0000000229 00001 f -0000000230 00001 f -0000000231 00001 f -0000000232 00001 f -0000000234 00001 f -0000577031 00000 n -0000000239 00001 f -0000601603 00000 n -0000603822 00000 n -0000601988 00000 n -0000602286 00000 n -0000000242 00001 f -0000574643 00000 n -0000027559 00000 n -0000000243 00001 f -0000000244 00001 f -0000000245 00001 f -0000000246 00001 f -0000000247 00001 f -0000000248 00001 f -0000000249 00001 f -0000000250 00001 f -0000000251 00001 f -0000000252 00001 f -0000000253 00001 f -0000000254 00001 f -0000000255 00001 f -0000000256 00001 f -0000000257 00001 f -0000000258 00001 f -0000000259 00001 f -0000000260 00001 f -0000000261 00001 f -0000000262 00001 f -0000000263 00001 f -0000000265 00001 f -0000526140 00000 n -0000000275 00001 f -0000561434 00000 n -0000572191 00000 n -0000572519 00000 n -0000572671 00000 n -0000572938 00000 n -0000561577 00000 n -0000568747 00000 n -0000561965 00000 n -0000565693 00000 n -0000000278 00001 f -0000562352 00000 n -0000562732 00000 n -0000000279 00001 f -0000000280 00001 f -0000000281 00001 f -0000000282 00001 f -0000000285 00001 f -0000506173 00000 n -0000028028 00000 n -0000000286 00001 f -0000000287 00001 f -0000000288 00001 f -0000000289 00001 f -0000000290 00001 f -0000000291 00001 f -0000000293 00001 f -0000457874 00000 n -0000000294 00001 f -0000000296 00001 f -0000427865 00000 n -0000000297 00001 f -0000000299 00001 f -0000396945 00000 n -0000000318 00001 f -0000483761 00000 n -0000499707 00000 n -0000484137 00000 n -0000496507 00000 n -0000484511 00000 n -0000494748 00000 n -0000484862 00000 n -0000492252 00000 n -0000485230 00000 n -0000491204 00000 n -0000485420 00000 n -0000488660 00000 n -0000485794 00000 n -0000486160 00000 n -0000483197 00000 n -0000505250 00000 n -0000483381 00000 n -0000502543 00000 n -0000000319 00001 f -0000000320 00001 f -0000000323 00001 f -0000195845 00000 n -0000028602 00000 n -0000000324 00001 f -0000000325 00001 f -0000000326 00001 f -0000000327 00001 f -0000000328 00001 f -0000000329 00001 f -0000000330 00001 f -0000000331 00001 f -0000000332 00001 f -0000000334 00001 f -0000138941 00000 n -0000000343 00001 f -0000166058 00000 n -0000172891 00000 n -0000166317 00000 n -0000169587 00000 n -0000166697 00000 n -0000168701 00000 n -0000166875 00000 n -0000167231 00000 n -0000000344 00001 f -0000000345 00001 f -0000000346 00001 f -0000000000 00001 f -0000029059 00000 n -0000000131 00000 n -0000811464 00000 n -0000182946 00000 n -0000188174 00000 n -0000175626 00000 n -0000565948 00000 n -0000183030 00000 n -0000182451 00000 n -0000574227 00000 n -0000573448 00000 n -0000188267 00000 n -0000187523 00000 n -0000175713 00000 n -0000175059 00000 n -0000811123 00000 n -0000810816 00000 n -0000805769 00000 n -0000802761 00000 n -0000611297 00000 n -0000610763 00000 n -0000751950 00000 n -0000748933 00000 n -0000748261 00000 n -0000747616 00000 n -0000745076 00000 n -0000742796 00000 n -0000766007 00000 n -0000765335 00000 n -0000764690 00000 n -0000762171 00000 n -0000759822 00000 n -0000756585 00000 n -0000754137 00000 n -0000658827 00000 n -0000656023 00000 n -0000606630 00000 n -0000606182 00000 n -0000604095 00000 n -0000602542 00000 n -0000573008 00000 n -0000572218 00000 n -0000569008 00000 n -0000566035 00000 n -0000562988 00000 n -0000499968 00000 n -0000496763 00000 n -0000495003 00000 n -0000492513 00000 n -0000491459 00000 n -0000488916 00000 n -0000486421 00000 n -0000505505 00000 n -0000502799 00000 n -0000173505 00000 n -0000173154 00000 n -0000169848 00000 n -0000168956 00000 n -0000167487 00000 n -0000000175 00000 n -trailer <]>> startxref 811639 %%EOF \ No newline at end of file diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java deleted file mode 100644 index 55ac177f8..000000000 --- a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java +++ /dev/null @@ -1,475 +0,0 @@ -public class RedBlackBST, Value> -{ - private static final int BST = 0; - private static final int TD234 = 1; - private static final int BU23 = 2; - private static final boolean RED = true; - private static final boolean BLACK = false; - - private Node root; // root of the BST - private int k; // ordinal for drawing - private final int species; // species kind of tree for insert - private int heightBLACK; // black height of tree - - RedBlackBST(int species) - { this.species = species; } - - private class Node - { - Key key; // key - Value value; // associated data - Node left, right; // left and right subtrees - boolean color; // color of parent link - private int N; // number of nodes in tree rooted here - private int height; // height of tree rooted here - private double xc, yc; // for drawing - - Node(Key key, Value value) - { - this.key = key; - this.value = value; - this.color = RED; - this.N = 1; - this.height = 1; - } - } - - public int size() - { return size(root); } - - private int size(Node x) - { - if (x == null) return 0; - else return x.N; - } - - public int rootRank() - { - if (root == null) return 0; - else return size(root.left); - } - - public int height() - { return height(root); } - - public int heightB() - { return heightBLACK; } - - private int height(Node x) - { - if (x == null) return 0; - else return x.height; - } - - public boolean contains(Key key) - { return (get(key) != null); } - - public Value get(Key key) - { return get(root, key); } - - private Value get(Node x, Key key) - { - if (x == null) return null; - if (eq (key, x.key)) return x.value; - if (less(key, x.key)) return get(x.left, key); - else return get(x.right, key); - } - - public Key min() - { - if (root == null) return null; - else return min(root); - } - - private Key min(Node x) - { - if (x.left == null) return x.key; - else return min(x.left); - } - - public Key max() - { - if (root == null) return null; - else return max(root); - } - - private Key max(Node x) - { - if (x.right == null) return x.key; - else return max(x.right); - } - - public void put(Key key, Value value) - { - root = insert(root, key, value); - if (isRed(root)) heightBLACK++; - root.color = BLACK; - } - - private Node insert(Node h, Key key, Value value) - { - if (h == null) - return new Node(key, value); - - if (species == TD234) - if (isRed(h.left) && isRed(h.right)) - colorFlip(h); - - if (eq(key, h.key)) - h.value = value; - else if (less(key, h.key)) - h.left = insert(h.left, key, value); - else - h.right = insert(h.right, key, value); - - if (species == BST) return setN(h); - - if (isRed(h.right)) - h = rotateLeft(h); - - if (isRed(h.left) && isRed(h.left.left)) - h = rotateRight(h); - - if (species == BU23) - if (isRed(h.left) && isRed(h.right)) - colorFlip(h); - - return setN(h); - } - - public void deleteMin() - { - root = deleteMin(root); - root.color = BLACK; - } - - private Node deleteMin(Node h) - { - if (h.left == null) - return null; - - if (!isRed(h.left) && !isRed(h.left.left)) - h = moveRedLeft(h); - - h.left = deleteMin(h.left); - - return fixUp(h); - } - - public void deleteMax() - { - root = deleteMax(root); - root.color = BLACK; - } - - private Node deleteMax(Node h) - { - // if (h.right == null) - // { - // if (h.left != null) - // h.left.color = BLACK; - // return h.left; - // } - - if (isRed(h.left)) - h = rotateRight(h); - - if (h.right == null) - return null; - - if (!isRed(h.right) && !isRed(h.right.left)) - h = moveRedRight(h); - - h.right = deleteMax(h.right); - - return fixUp(h); - } - - public void delete(Key key) - { - root = delete(root, key); - root.color = BLACK; - } - - private Node delete(Node h, Key key) - { - if (less(key, h.key)) - { - if (!isRed(h.left) && !isRed(h.left.left)) - h = moveRedLeft(h); - h.left = delete(h.left, key); - } - else - { - if (isRed(h.left)) - h = rotateRight(h); - if (eq(key, h.key) && (h.right == null)) - return null; - if (!isRed(h.right) && !isRed(h.right.left)) - h = moveRedRight(h); - if (eq(key, h.key)) - { - h.value = get(h.right, min(h.right)); - h.key = min(h.right); - h.right = deleteMin(h.right); - } - else h.right = delete(h.right, key); - } - - return fixUp(h); - } - -// Helper methods - - private boolean less(Key a, Key b) { return a.compareTo(b) < 0; } - private boolean eq (Key a, Key b) { return a.compareTo(b) == 0; } - - private boolean isRed(Node x) - { - if (x == null) return false; - return (x.color == RED); - } - - private void colorFlip(Node h) - { - h.color = !h.color; - h.left.color = !h.left.color; - h.right.color = !h.right.color; - } - - private Node rotateLeft(Node h) - { // Make a right-leaning 3-node lean to the left. - Node x = h.right; - h.right = x.left; - x.left = setN(h); - x.color = x.left.color; - x.left.color = RED; - return setN(x); - } - - private Node rotateRight(Node h) - { // Make a left-leaning 3-node lean to the right. - Node x = h.left; - h.left = x.right; - x.right = setN(h); - x.color = x.right.color; - x.right.color = RED; - return setN(x); - } - - private Node moveRedLeft(Node h) - { // Assuming that h is red and both h.left and h.left.left - // are black, make h.left or one of its children red. - colorFlip(h); - if (isRed(h.right.left)) - { - h.right = rotateRight(h.right); - h = rotateLeft(h); - colorFlip(h); - } - return h; - } - - private Node moveRedRight(Node h) - { // Assuming that h is red and both h.right and h.right.left - // are black, make h.right or one of its children red. - colorFlip(h); - if (isRed(h.left.left)) - { - h = rotateRight(h); - colorFlip(h); - } - return h; - } - - private Node fixUp(Node h) - { - if (isRed(h.right)) - h = rotateLeft(h); - - if (isRed(h.left) && isRed(h.left.left)) - h = rotateRight(h); - - if (isRed(h.left) && isRed(h.right)) - colorFlip(h); - - return setN(h); - } - - private Node setN(Node h) - { - h.N = size(h.left) + size(h.right) + 1; - if (height(h.left) > height(h.right)) h.height = height(h.left) + 1; - else h.height = height(h.right) + 1; - return h; - } - - public String toString() - { - if (root == null) return ""; - else return heightB() + " " + toString(root); - } - - public String toString(Node x) - { - String s = "("; - if (x.left == null) s += "("; else s += toString(x.left); - if (isRed(x)) s += "*"; - if (x.right == null) s += ")"; else s += toString(x.right); - return s + ")"; - } - -// Methods for tree drawing - - public void draw(double y, double lineWidth, double nodeSize) - { - k = 0; - setcoords(root, y); - StdDraw.setPenColor(StdDraw.BLACK); - StdDraw.setPenRadius(lineWidth); - drawlines(root); - StdDraw.setPenColor(StdDraw.WHITE); - drawnodes(root, nodeSize); - } - - public void setcoords(Node x, double d) - { - if (x == null) return; - setcoords(x.left, d-.04); - x.xc = (0.5 + k++)/size(); x.yc = d - .04; - setcoords(x.right, d-.04); - } - - public void drawlines(Node x) - { - if (x == null) return; - drawlines(x.left); - if (x.left != null) - { - if (x.left.color == RED) StdDraw.setPenColor(StdDraw.RED); - else StdDraw.setPenColor(StdDraw.BLACK); - StdDraw.line(x.xc, x.yc, x.left.xc, x.left.yc); - } - if (x.right != null) - { - if (x.right.color == RED) StdDraw.setPenColor(StdDraw.RED); - else StdDraw.setPenColor(StdDraw.BLACK); - StdDraw.line(x.xc, x.yc, x.right.xc, x.right.yc); - } - drawlines(x.right); - } - - public void drawnodes(Node x, double nodeSize) - { - if (x == null) return; - drawnodes(x.left, nodeSize); - StdDraw.filledCircle(x.xc, x.yc, nodeSize); - drawnodes(x.right, nodeSize); - } - - public void mark(Key key) - { - StdDraw.setPenColor(StdDraw.BLACK); - marknodes(key, root); - } - - public void marknodes(Key key, Node x) - { - if (x == null) return; - marknodes(key, x.left); - if (eq(key, x.key)) - StdDraw.filledCircle(x.xc, x.yc, .004); - marknodes(key, x.right); - } - - public int ipl() - { return ipl(root); } - - public int ipl(Node x) - { - if (x == null) return 0; - return size(x) - 1 + ipl(x.left) + ipl(x.right); - } - - public int sizeRed() - { return sizeRed(root); } - - public int sizeRed(Node x) - { - if (x == null) return 0; - if (isRed(x)) return 1 + sizeRed(x.left) + sizeRed(x.right); - else return sizeRed(x.left) + sizeRed(x.right); - } - -// Integrity checks - - public boolean check() - { // Is this tree a red-black tree? - return isBST() && is234() && isBalanced(); - } - - private boolean isBST() - { // Is this tree a BST? - return isBST(root, min(), max()); - } - - private boolean isBST(Node x, Key min, Key max) - { // Are all the values in the BST rooted at x between min and max, - // and does the same property hold for both subtrees? - if (x == null) return true; - if (less(x.key, min) || less(max, x.key)) return false; - return isBST(x.left, min, x.key) && isBST(x.right, x.key, max); - } - - private boolean is234() { return is234(root); } - private boolean is234(Node x) - { // Does the tree have no red right links, and at most two (left) - // red links in a row on any path? - if (x == null) return true; - if (isRed(x.right)) return false; - if (isRed(x)) - if (isRed(x.left)) - if (isRed(x.left.left)) return false; - return is234(x.left) && is234(x.right); - } - - private boolean isBalanced() - { // Do all paths from root to leaf have same number of black edges? - int black = 0; // number of black links on path from root to min - Node x = root; - while (x != null) - { - if (!isRed(x)) black++; - x = x.left; - } - return isBalanced(root, black); - } - - private boolean isBalanced(Node x, int black) - { // Does every path from the root to a leaf have the given number - // of black links? - if (x == null && black == 0) return true; - else if (x == null && black != 0) return false; - if (!isRed(x)) black--; - return isBalanced(x.left, black) && isBalanced(x.right, black); - } - - - public static void main(String[] args) - { - StdDraw.setPenRadius(.0025); - int species = Integer.parseInt(args[0]); - RedBlackBST st; - st = new RedBlackBST(species); - int[] a = { 3, 1, 4, 2, 5, 9, 6, 8, 7 }; - for (int i = 0; i < a.length; i++) - st.put(a[i], i); - StdOut.println(st); - StdDraw.clear(StdDraw.LIGHT_GRAY); - st.draw(.95, .0025, .008); - StdOut.println(st.min() + " " + st.max() + " " + st.check()); - StdOut.println(st.ipl()); - StdOut.println(st.heightB()); - } - -} diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf deleted file mode 100644 index 07861abed..000000000 Binary files a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf and /dev/null differ diff --git a/vendor/github.com/petar/GoLLRB/example/ex1.go b/vendor/github.com/petar/GoLLRB/example/ex1.go deleted file mode 100644 index 6ebe4a686..000000000 --- a/vendor/github.com/petar/GoLLRB/example/ex1.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -import ( - "fmt" - "github.com/petar/GoLLRB/llrb" -) - -func lessInt(a, b interface{}) bool { return a.(int) < b.(int) } - -func main() { - tree := llrb.New(lessInt) - tree.ReplaceOrInsert(1) - tree.ReplaceOrInsert(2) - tree.ReplaceOrInsert(3) - tree.ReplaceOrInsert(4) - tree.DeleteMin() - tree.Delete(4) - c := tree.IterAscend() - for { - u := <-c - if u == nil { - break - } - fmt.Printf("%d\n", int(u.(int))) - } -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/avgvar.go b/vendor/github.com/petar/GoLLRB/llrb/avgvar.go deleted file mode 100644 index 2d7e2a326..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/avgvar.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -import "math" - -// avgVar maintains the average and variance of a stream of numbers -// in a space-efficient manner. -type avgVar struct { - count int64 - sum, sumsq float64 -} - -func (av *avgVar) Init() { - av.count = 0 - av.sum = 0.0 - av.sumsq = 0.0 -} - -func (av *avgVar) Add(sample float64) { - av.count++ - av.sum += sample - av.sumsq += sample * sample -} - -func (av *avgVar) GetCount() int64 { return av.count } - -func (av *avgVar) GetAvg() float64 { return av.sum / float64(av.count) } - -func (av *avgVar) GetTotal() float64 { return av.sum } - -func (av *avgVar) GetVar() float64 { - a := av.GetAvg() - return av.sumsq/float64(av.count) - a*a -} - -func (av *avgVar) GetStdDev() float64 { return math.Sqrt(av.GetVar()) } diff --git a/vendor/github.com/petar/GoLLRB/llrb/iterator.go b/vendor/github.com/petar/GoLLRB/llrb/iterator.go deleted file mode 100644 index ee7b27f44..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/iterator.go +++ /dev/null @@ -1,93 +0,0 @@ -package llrb - -type ItemIterator func(i Item) bool - -//func (t *Tree) Ascend(iterator ItemIterator) { -// t.AscendGreaterOrEqual(Inf(-1), iterator) -//} - -func (t *LLRB) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator) { - t.ascendRange(t.root, greaterOrEqual, lessThan, iterator) -} - -func (t *LLRB) ascendRange(h *Node, inf, sup Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !less(h.Item, sup) { - return t.ascendRange(h.Left, inf, sup, iterator) - } - if less(h.Item, inf) { - return t.ascendRange(h.Right, inf, sup, iterator) - } - - if !t.ascendRange(h.Left, inf, sup, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - return t.ascendRange(h.Right, inf, sup, iterator) -} - -// AscendGreaterOrEqual will call iterator once for each element greater or equal to -// pivot in ascending order. It will stop whenever the iterator returns false. -func (t *LLRB) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { - t.ascendGreaterOrEqual(t.root, pivot, iterator) -} - -func (t *LLRB) ascendGreaterOrEqual(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !less(h.Item, pivot) { - if !t.ascendGreaterOrEqual(h.Left, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - } - return t.ascendGreaterOrEqual(h.Right, pivot, iterator) -} - -func (t *LLRB) AscendLessThan(pivot Item, iterator ItemIterator) { - t.ascendLessThan(t.root, pivot, iterator) -} - -func (t *LLRB) ascendLessThan(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if !t.ascendLessThan(h.Left, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - if less(h.Item, pivot) { - return t.ascendLessThan(h.Left, pivot, iterator) - } - return true -} - -// DescendLessOrEqual will call iterator once for each element less than the -// pivot in descending order. It will stop whenever the iterator returns false. -func (t *LLRB) DescendLessOrEqual(pivot Item, iterator ItemIterator) { - t.descendLessOrEqual(t.root, pivot, iterator) -} - -func (t *LLRB) descendLessOrEqual(h *Node, pivot Item, iterator ItemIterator) bool { - if h == nil { - return true - } - if less(h.Item, pivot) || !less(pivot, h.Item) { - if !t.descendLessOrEqual(h.Right, pivot, iterator) { - return false - } - if !iterator(h.Item) { - return false - } - } - return t.descendLessOrEqual(h.Left, pivot, iterator) -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/iterator_test.go b/vendor/github.com/petar/GoLLRB/llrb/iterator_test.go deleted file mode 100644 index db5e12c92..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/iterator_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package llrb - -import ( - "reflect" - "testing" -) - -func TestAscendGreaterOrEqual(t *testing.T) { - tree := New() - tree.InsertNoReplace(Int(4)) - tree.InsertNoReplace(Int(6)) - tree.InsertNoReplace(Int(1)) - tree.InsertNoReplace(Int(3)) - var ary []Item - tree.AscendGreaterOrEqual(Int(-1), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected := []Item{Int(1), Int(3), Int(4), Int(6)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } - ary = nil - tree.AscendGreaterOrEqual(Int(3), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected = []Item{Int(3), Int(4), Int(6)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } - ary = nil - tree.AscendGreaterOrEqual(Int(2), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected = []Item{Int(3), Int(4), Int(6)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } -} - -func TestDescendLessOrEqual(t *testing.T) { - tree := New() - tree.InsertNoReplace(Int(4)) - tree.InsertNoReplace(Int(6)) - tree.InsertNoReplace(Int(1)) - tree.InsertNoReplace(Int(3)) - var ary []Item - tree.DescendLessOrEqual(Int(10), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected := []Item{Int(6), Int(4), Int(3), Int(1)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } - ary = nil - tree.DescendLessOrEqual(Int(4), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected = []Item{Int(4), Int(3), Int(1)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } - ary = nil - tree.DescendLessOrEqual(Int(5), func(i Item) bool { - ary = append(ary, i) - return true - }) - expected = []Item{Int(4), Int(3), Int(1)} - if !reflect.DeepEqual(ary, expected) { - t.Errorf("expected %v but got %v", expected, ary) - } -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go b/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go deleted file mode 100644 index 47126a3be..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -// GetHeight() returns an item in the tree with key @key, and it's height in the tree -func (t *LLRB) GetHeight(key Item) (result Item, depth int) { - return t.getHeight(t.root, key) -} - -func (t *LLRB) getHeight(h *Node, item Item) (Item, int) { - if h == nil { - return nil, 0 - } - if less(item, h.Item) { - result, depth := t.getHeight(h.Left, item) - return result, depth + 1 - } - if less(h.Item, item) { - result, depth := t.getHeight(h.Right, item) - return result, depth + 1 - } - return h.Item, 0 -} - -// HeightStats() returns the average and standard deviation of the height -// of elements in the tree -func (t *LLRB) HeightStats() (avg, stddev float64) { - av := &avgVar{} - heightStats(t.root, 0, av) - return av.GetAvg(), av.GetStdDev() -} - -func heightStats(h *Node, d int, av *avgVar) { - if h == nil { - return - } - av.Add(float64(d)) - if h.Left != nil { - heightStats(h.Left, d+1, av) - } - if h.Right != nil { - heightStats(h.Right, d+1, av) - } -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/llrb.go b/vendor/github.com/petar/GoLLRB/llrb/llrb.go deleted file mode 100644 index 81373fbfd..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/llrb.go +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// A Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary search trees, -// based on the following work: -// -// http://www.cs.princeton.edu/~rs/talks/LLRB/08Penn.pdf -// http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf -// http://www.cs.princeton.edu/~rs/talks/LLRB/Java/RedBlackBST.java -// -// 2-3 trees (and the run-time equivalent 2-3-4 trees) are the de facto standard BST -// algoritms found in implementations of Python, Java, and other libraries. The LLRB -// implementation of 2-3 trees is a recent improvement on the traditional implementation, -// observed and documented by Robert Sedgewick. -// -package llrb - -// Tree is a Left-Leaning Red-Black (LLRB) implementation of 2-3 trees -type LLRB struct { - count int - root *Node -} - -type Node struct { - Item - Left, Right *Node // Pointers to left and right child nodes - Black bool // If set, the color of the link (incoming from the parent) is black - // In the LLRB, new nodes are always red, hence the zero-value for node -} - -type Item interface { - Less(than Item) bool -} - -// -func less(x, y Item) bool { - if x == pinf { - return false - } - if x == ninf { - return true - } - return x.Less(y) -} - -// Inf returns an Item that is "bigger than" any other item, if sign is positive. -// Otherwise it returns an Item that is "smaller than" any other item. -func Inf(sign int) Item { - if sign == 0 { - panic("sign") - } - if sign > 0 { - return pinf - } - return ninf -} - -var ( - ninf = nInf{} - pinf = pInf{} -) - -type nInf struct{} - -func (nInf) Less(Item) bool { - return true -} - -type pInf struct{} - -func (pInf) Less(Item) bool { - return false -} - -// New() allocates a new tree -func New() *LLRB { - return &LLRB{} -} - -// SetRoot sets the root node of the tree. -// It is intended to be used by functions that deserialize the tree. -func (t *LLRB) SetRoot(r *Node) { - t.root = r -} - -// Root returns the root node of the tree. -// It is intended to be used by functions that serialize the tree. -func (t *LLRB) Root() *Node { - return t.root -} - -// Len returns the number of nodes in the tree. -func (t *LLRB) Len() int { return t.count } - -// Has returns true if the tree contains an element whose order is the same as that of key. -func (t *LLRB) Has(key Item) bool { - return t.Get(key) != nil -} - -// Get retrieves an element from the tree whose order is the same as that of key. -func (t *LLRB) Get(key Item) Item { - h := t.root - for h != nil { - switch { - case less(key, h.Item): - h = h.Left - case less(h.Item, key): - h = h.Right - default: - return h.Item - } - } - return nil -} - -// Min returns the minimum element in the tree. -func (t *LLRB) Min() Item { - h := t.root - if h == nil { - return nil - } - for h.Left != nil { - h = h.Left - } - return h.Item -} - -// Max returns the maximum element in the tree. -func (t *LLRB) Max() Item { - h := t.root - if h == nil { - return nil - } - for h.Right != nil { - h = h.Right - } - return h.Item -} - -func (t *LLRB) ReplaceOrInsertBulk(items ...Item) { - for _, i := range items { - t.ReplaceOrInsert(i) - } -} - -func (t *LLRB) InsertNoReplaceBulk(items ...Item) { - for _, i := range items { - t.InsertNoReplace(i) - } -} - -// ReplaceOrInsert inserts item into the tree. If an existing -// element has the same order, it is removed from the tree and returned. -func (t *LLRB) ReplaceOrInsert(item Item) Item { - if item == nil { - panic("inserting nil item") - } - var replaced Item - t.root, replaced = t.replaceOrInsert(t.root, item) - t.root.Black = true - if replaced == nil { - t.count++ - } - return replaced -} - -func (t *LLRB) replaceOrInsert(h *Node, item Item) (*Node, Item) { - if h == nil { - return newNode(item), nil - } - - h = walkDownRot23(h) - - var replaced Item - if less(item, h.Item) { // BUG - h.Left, replaced = t.replaceOrInsert(h.Left, item) - } else if less(h.Item, item) { - h.Right, replaced = t.replaceOrInsert(h.Right, item) - } else { - replaced, h.Item = h.Item, item - } - - h = walkUpRot23(h) - - return h, replaced -} - -// InsertNoReplace inserts item into the tree. If an existing -// element has the same order, both elements remain in the tree. -func (t *LLRB) InsertNoReplace(item Item) { - if item == nil { - panic("inserting nil item") - } - t.root = t.insertNoReplace(t.root, item) - t.root.Black = true - t.count++ -} - -func (t *LLRB) insertNoReplace(h *Node, item Item) *Node { - if h == nil { - return newNode(item) - } - - h = walkDownRot23(h) - - if less(item, h.Item) { - h.Left = t.insertNoReplace(h.Left, item) - } else { - h.Right = t.insertNoReplace(h.Right, item) - } - - return walkUpRot23(h) -} - -// Rotation driver routines for 2-3 algorithm - -func walkDownRot23(h *Node) *Node { return h } - -func walkUpRot23(h *Node) *Node { - if isRed(h.Right) && !isRed(h.Left) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} - -// Rotation driver routines for 2-3-4 algorithm - -func walkDownRot234(h *Node) *Node { - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} - -func walkUpRot234(h *Node) *Node { - if isRed(h.Right) && !isRed(h.Left) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - return h -} - -// DeleteMin deletes the minimum element in the tree and returns the -// deleted item or nil otherwise. -func (t *LLRB) DeleteMin() Item { - var deleted Item - t.root, deleted = deleteMin(t.root) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -// deleteMin code for LLRB 2-3 trees -func deleteMin(h *Node) (*Node, Item) { - if h == nil { - return nil, nil - } - if h.Left == nil { - return nil, h.Item - } - - if !isRed(h.Left) && !isRed(h.Left.Left) { - h = moveRedLeft(h) - } - - var deleted Item - h.Left, deleted = deleteMin(h.Left) - - return fixUp(h), deleted -} - -// DeleteMax deletes the maximum element in the tree and returns -// the deleted item or nil otherwise -func (t *LLRB) DeleteMax() Item { - var deleted Item - t.root, deleted = deleteMax(t.root) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -func deleteMax(h *Node) (*Node, Item) { - if h == nil { - return nil, nil - } - if isRed(h.Left) { - h = rotateRight(h) - } - if h.Right == nil { - return nil, h.Item - } - if !isRed(h.Right) && !isRed(h.Right.Left) { - h = moveRedRight(h) - } - var deleted Item - h.Right, deleted = deleteMax(h.Right) - - return fixUp(h), deleted -} - -// Delete deletes an item from the tree whose key equals key. -// The deleted item is return, otherwise nil is returned. -func (t *LLRB) Delete(key Item) Item { - var deleted Item - t.root, deleted = t.delete(t.root, key) - if t.root != nil { - t.root.Black = true - } - if deleted != nil { - t.count-- - } - return deleted -} - -func (t *LLRB) delete(h *Node, item Item) (*Node, Item) { - var deleted Item - if h == nil { - return nil, nil - } - if less(item, h.Item) { - if h.Left == nil { // item not present. Nothing to delete - return h, nil - } - if !isRed(h.Left) && !isRed(h.Left.Left) { - h = moveRedLeft(h) - } - h.Left, deleted = t.delete(h.Left, item) - } else { - if isRed(h.Left) { - h = rotateRight(h) - } - // If @item equals @h.Item and no right children at @h - if !less(h.Item, item) && h.Right == nil { - return nil, h.Item - } - // PETAR: Added 'h.Right != nil' below - if h.Right != nil && !isRed(h.Right) && !isRed(h.Right.Left) { - h = moveRedRight(h) - } - // If @item equals @h.Item, and (from above) 'h.Right != nil' - if !less(h.Item, item) { - var subDeleted Item - h.Right, subDeleted = deleteMin(h.Right) - if subDeleted == nil { - panic("logic") - } - deleted, h.Item = h.Item, subDeleted - } else { // Else, @item is bigger than @h.Item - h.Right, deleted = t.delete(h.Right, item) - } - } - - return fixUp(h), deleted -} - -// Internal node manipulation routines - -func newNode(item Item) *Node { return &Node{Item: item} } - -func isRed(h *Node) bool { - if h == nil { - return false - } - return !h.Black -} - -func rotateLeft(h *Node) *Node { - x := h.Right - if x.Black { - panic("rotating a black link") - } - h.Right = x.Left - x.Left = h - x.Black = h.Black - h.Black = false - return x -} - -func rotateRight(h *Node) *Node { - x := h.Left - if x.Black { - panic("rotating a black link") - } - h.Left = x.Right - x.Right = h - x.Black = h.Black - h.Black = false - return x -} - -// REQUIRE: Left and Right children must be present -func flip(h *Node) { - h.Black = !h.Black - h.Left.Black = !h.Left.Black - h.Right.Black = !h.Right.Black -} - -// REQUIRE: Left and Right children must be present -func moveRedLeft(h *Node) *Node { - flip(h) - if isRed(h.Right.Left) { - h.Right = rotateRight(h.Right) - h = rotateLeft(h) - flip(h) - } - return h -} - -// REQUIRE: Left and Right children must be present -func moveRedRight(h *Node) *Node { - flip(h) - if isRed(h.Left.Left) { - h = rotateRight(h) - flip(h) - } - return h -} - -func fixUp(h *Node) *Node { - if isRed(h.Right) { - h = rotateLeft(h) - } - - if isRed(h.Left) && isRed(h.Left.Left) { - h = rotateRight(h) - } - - if isRed(h.Left) && isRed(h.Right) { - flip(h) - } - - return h -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/llrb_test.go b/vendor/github.com/petar/GoLLRB/llrb/llrb_test.go deleted file mode 100644 index b7bc97800..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/llrb_test.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -import ( - "math" - "math/rand" - "testing" -) - -func TestCases(t *testing.T) { - tree := New() - tree.ReplaceOrInsert(Int(1)) - tree.ReplaceOrInsert(Int(1)) - if tree.Len() != 1 { - t.Errorf("expecting len 1") - } - if !tree.Has(Int(1)) { - t.Errorf("expecting to find key=1") - } - - tree.Delete(Int(1)) - if tree.Len() != 0 { - t.Errorf("expecting len 0") - } - if tree.Has(Int(1)) { - t.Errorf("not expecting to find key=1") - } - - tree.Delete(Int(1)) - if tree.Len() != 0 { - t.Errorf("expecting len 0") - } - if tree.Has(Int(1)) { - t.Errorf("not expecting to find key=1") - } -} - -func TestReverseInsertOrder(t *testing.T) { - tree := New() - n := 100 - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(n - i)) - } - i := 0 - tree.AscendGreaterOrEqual(Int(0), func(item Item) bool { - i++ - if item.(Int) != Int(i) { - t.Errorf("bad order: got %d, expect %d", item.(Int), i) - } - return true - }) -} - -func TestRange(t *testing.T) { - tree := New() - order := []String{ - "ab", "aba", "abc", "a", "aa", "aaa", "b", "a-", "a!", - } - for _, i := range order { - tree.ReplaceOrInsert(i) - } - k := 0 - tree.AscendRange(String("ab"), String("ac"), func(item Item) bool { - if k > 3 { - t.Fatalf("returned more items than expected") - } - i1 := order[k] - i2 := item.(String) - if i1 != i2 { - t.Errorf("expecting %s, got %s", i1, i2) - } - k++ - return true - }) -} - -func TestRandomInsertOrder(t *testing.T) { - tree := New() - n := 1000 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - j := 0 - tree.AscendGreaterOrEqual(Int(0), func(item Item) bool { - if item.(Int) != Int(j) { - t.Fatalf("bad order") - } - j++ - return true - }) -} - -func TestRandomReplace(t *testing.T) { - tree := New() - n := 100 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - perm = rand.Perm(n) - for i := 0; i < n; i++ { - if replaced := tree.ReplaceOrInsert(Int(perm[i])); replaced == nil || replaced.(Int) != Int(perm[i]) { - t.Errorf("error replacing") - } - } -} - -func TestRandomInsertSequentialDelete(t *testing.T) { - tree := New() - n := 1000 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - for i := 0; i < n; i++ { - tree.Delete(Int(i)) - } -} - -func TestRandomInsertDeleteNonExistent(t *testing.T) { - tree := New() - n := 100 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - if tree.Delete(Int(200)) != nil { - t.Errorf("deleted non-existent item") - } - if tree.Delete(Int(-2)) != nil { - t.Errorf("deleted non-existent item") - } - for i := 0; i < n; i++ { - if u := tree.Delete(Int(i)); u == nil || u.(Int) != Int(i) { - t.Errorf("delete failed") - } - } - if tree.Delete(Int(200)) != nil { - t.Errorf("deleted non-existent item") - } - if tree.Delete(Int(-2)) != nil { - t.Errorf("deleted non-existent item") - } -} - -func TestRandomInsertPartialDeleteOrder(t *testing.T) { - tree := New() - n := 100 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - for i := 1; i < n-1; i++ { - tree.Delete(Int(i)) - } - j := 0 - tree.AscendGreaterOrEqual(Int(0), func(item Item) bool { - switch j { - case 0: - if item.(Int) != Int(0) { - t.Errorf("expecting 0") - } - case 1: - if item.(Int) != Int(n-1) { - t.Errorf("expecting %d", n-1) - } - } - j++ - return true - }) -} - -func TestRandomInsertStats(t *testing.T) { - tree := New() - n := 100000 - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.ReplaceOrInsert(Int(perm[i])) - } - avg, _ := tree.HeightStats() - expAvg := math.Log2(float64(n)) - 1.5 - if math.Abs(avg-expAvg) >= 2.0 { - t.Errorf("too much deviation from expected average height") - } -} - -func BenchmarkInsert(b *testing.B) { - tree := New() - for i := 0; i < b.N; i++ { - tree.ReplaceOrInsert(Int(b.N - i)) - } -} - -func BenchmarkDelete(b *testing.B) { - b.StopTimer() - tree := New() - for i := 0; i < b.N; i++ { - tree.ReplaceOrInsert(Int(b.N - i)) - } - b.StartTimer() - for i := 0; i < b.N; i++ { - tree.Delete(Int(i)) - } -} - -func BenchmarkDeleteMin(b *testing.B) { - b.StopTimer() - tree := New() - for i := 0; i < b.N; i++ { - tree.ReplaceOrInsert(Int(b.N - i)) - } - b.StartTimer() - for i := 0; i < b.N; i++ { - tree.DeleteMin() - } -} - -func TestInsertNoReplace(t *testing.T) { - tree := New() - n := 1000 - for q := 0; q < 2; q++ { - perm := rand.Perm(n) - for i := 0; i < n; i++ { - tree.InsertNoReplace(Int(perm[i])) - } - } - j := 0 - tree.AscendGreaterOrEqual(Int(0), func(item Item) bool { - if item.(Int) != Int(j/2) { - t.Fatalf("bad order") - } - j++ - return true - }) -} diff --git a/vendor/github.com/petar/GoLLRB/llrb/util.go b/vendor/github.com/petar/GoLLRB/llrb/util.go deleted file mode 100644 index 63dbdb2df..000000000 --- a/vendor/github.com/petar/GoLLRB/llrb/util.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2010 Petar Maymounkov. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package llrb - -type Int int - -func (x Int) Less(than Item) bool { - return x < than.(Int) -} - -type String string - -func (x String) Less(than Item) bool { - return x < than.(String) -} diff --git a/vendor/github.com/peterbourgon/diskv/LICENSE b/vendor/github.com/peterbourgon/diskv/LICENSE deleted file mode 100644 index 41ce7f16e..000000000 --- a/vendor/github.com/peterbourgon/diskv/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-2012 Peter Bourgon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/peterbourgon/diskv/README.md b/vendor/github.com/peterbourgon/diskv/README.md deleted file mode 100644 index 3474739ed..000000000 --- a/vendor/github.com/peterbourgon/diskv/README.md +++ /dev/null @@ -1,141 +0,0 @@ -# What is diskv? - -Diskv (disk-vee) is a simple, persistent key-value store written in the Go -language. It starts with an incredibly simple API for storing arbitrary data on -a filesystem by key, and builds several layers of performance-enhancing -abstraction on top. The end result is a conceptually simple, but highly -performant, disk-backed storage system. - -[![Build Status][1]][2] - -[1]: https://drone.io/github.com/peterbourgon/diskv/status.png -[2]: https://drone.io/github.com/peterbourgon/diskv/latest - - -# Installing - -Install [Go 1][3], either [from source][4] or [with a prepackaged binary][5]. -Then, - -```bash -$ go get github.com/peterbourgon/diskv -``` - -[3]: http://golang.org -[4]: http://golang.org/doc/install/source -[5]: http://golang.org/doc/install - - -# Usage - -```go -package main - -import ( - "fmt" - "github.com/peterbourgon/diskv" -) - -func main() { - // Simplest transform function: put all the data files into the base dir. - flatTransform := func(s string) []string { return []string{} } - - // Initialize a new diskv store, rooted at "my-data-dir", with a 1MB cache. - d := diskv.New(diskv.Options{ - BasePath: "my-data-dir", - Transform: flatTransform, - CacheSizeMax: 1024 * 1024, - }) - - // Write three bytes to the key "alpha". - key := "alpha" - d.Write(key, []byte{'1', '2', '3'}) - - // Read the value back out of the store. - value, _ := d.Read(key) - fmt.Printf("%v\n", value) - - // Erase the key+value from the store (and the disk). - d.Erase(key) -} -``` - -More complex examples can be found in the "examples" subdirectory. - - -# Theory - -## Basic idea - -At its core, diskv is a map of a key (`string`) to arbitrary data (`[]byte`). -The data is written to a single file on disk, with the same name as the key. -The key determines where that file will be stored, via a user-provided -`TransformFunc`, which takes a key and returns a slice (`[]string`) -corresponding to a path list where the key file will be stored. The simplest -TransformFunc, - -```go -func SimpleTransform (key string) []string { - return []string{} -} -``` - -will place all keys in the same, base directory. The design is inspired by -[Redis diskstore][6]; a TransformFunc which emulates the default diskstore -behavior is available in the content-addressable-storage example. - -[6]: http://groups.google.com/group/redis-db/browse_thread/thread/d444bc786689bde9?pli=1 - -**Note** that your TransformFunc should ensure that one valid key doesn't -transform to a subset of another valid key. That is, it shouldn't be possible -to construct valid keys that resolve to directory names. As a concrete example, -if your TransformFunc splits on every 3 characters, then - -```go -d.Write("abcabc", val) // OK: written to /abc/abc/abcabc -d.Write("abc", val) // Error: attempted write to /abc/abc, but it's a directory -``` - -This will be addressed in an upcoming version of diskv. - -Probably the most important design principle behind diskv is that your data is -always flatly available on the disk. diskv will never do anything that would -prevent you from accessing, copying, backing up, or otherwise interacting with -your data via common UNIX commandline tools. - -## Adding a cache - -An in-memory caching layer is provided by combining the BasicStore -functionality with a simple map structure, and keeping it up-to-date as -appropriate. Since the map structure in Go is not threadsafe, it's combined -with a RWMutex to provide safe concurrent access. - -## Adding order - -diskv is a key-value store and therefore inherently unordered. An ordering -system can be injected into the store by passing something which satisfies the -diskv.Index interface. (A default implementation, using Google's -[btree][7] package, is provided.) Basically, diskv keeps an ordered (by a -user-provided Less function) index of the keys, which can be queried. - -[7]: https://github.com/google/btree - -## Adding compression - -Something which implements the diskv.Compression interface may be passed -during store creation, so that all Writes and Reads are filtered through -a compression/decompression pipeline. Several default implementations, -using stdlib compression algorithms, are provided. Note that data is cached -compressed; the cost of decompression is borne with each Read. - -## Streaming - -diskv also now provides ReadStream and WriteStream methods, to allow very large -data to be handled efficiently. - - -# Future plans - - * Needs plenty of robust testing: huge datasets, etc... - * More thorough benchmarking - * Your suggestions for use-cases I haven't thought of diff --git a/vendor/github.com/peterbourgon/diskv/basic_test.go b/vendor/github.com/peterbourgon/diskv/basic_test.go deleted file mode 100644 index 0ef0b17fe..000000000 --- a/vendor/github.com/peterbourgon/diskv/basic_test.go +++ /dev/null @@ -1,336 +0,0 @@ -package diskv - -import ( - "bytes" - "errors" - "testing" - "time" -) - -func cmpBytes(a, b []byte) bool { - if len(a) != len(b) { - return false - } - for i := 0; i < len(a); i++ { - if a[i] != b[i] { - return false - } - } - return true -} - -func (d *Diskv) isCached(key string) bool { - d.mu.RLock() - defer d.mu.RUnlock() - _, ok := d.cache[key] - return ok -} - -func TestWriteReadErase(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - }) - defer d.EraseAll() - k, v := "a", []byte{'b'} - if err := d.Write(k, v); err != nil { - t.Fatalf("write: %s", err) - } - if readVal, err := d.Read(k); err != nil { - t.Fatalf("read: %s", err) - } else if bytes.Compare(v, readVal) != 0 { - t.Fatalf("read: expected %s, got %s", v, readVal) - } - if err := d.Erase(k); err != nil { - t.Fatalf("erase: %s", err) - } -} - -func TestWRECache(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - }) - defer d.EraseAll() - k, v := "xxx", []byte{' ', ' ', ' '} - if d.isCached(k) { - t.Fatalf("key cached before Write and Read") - } - if err := d.Write(k, v); err != nil { - t.Fatalf("write: %s", err) - } - if d.isCached(k) { - t.Fatalf("key cached before Read") - } - if readVal, err := d.Read(k); err != nil { - t.Fatalf("read: %s", err) - } else if bytes.Compare(v, readVal) != 0 { - t.Fatalf("read: expected %s, got %s", v, readVal) - } - for i := 0; i < 10 && !d.isCached(k); i++ { - time.Sleep(10 * time.Millisecond) - } - if !d.isCached(k) { - t.Fatalf("key not cached after Read") - } - if err := d.Erase(k); err != nil { - t.Fatalf("erase: %s", err) - } - if d.isCached(k) { - t.Fatalf("key cached after Erase") - } -} - -func TestStrings(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - }) - defer d.EraseAll() - - keys := map[string]bool{"a": false, "b": false, "c": false, "d": false} - v := []byte{'1'} - for k := range keys { - if err := d.Write(k, v); err != nil { - t.Fatalf("write: %s: %s", k, err) - } - } - - for k := range d.Keys(nil) { - if _, present := keys[k]; present { - t.Logf("got: %s", k) - keys[k] = true - } else { - t.Fatalf("strings() returns unknown key: %s", k) - } - } - - for k, found := range keys { - if !found { - t.Errorf("never got %s", k) - } - } -} - -func TestZeroByteCache(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 0, - }) - defer d.EraseAll() - - k, v := "a", []byte{'1', '2', '3'} - if err := d.Write(k, v); err != nil { - t.Fatalf("Write: %s", err) - } - - if d.isCached(k) { - t.Fatalf("key cached, expected not-cached") - } - - if _, err := d.Read(k); err != nil { - t.Fatalf("Read: %s", err) - } - - if d.isCached(k) { - t.Fatalf("key cached, expected not-cached") - } -} - -func TestOneByteCache(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1, - }) - defer d.EraseAll() - - k1, k2, v1, v2 := "a", "b", []byte{'1'}, []byte{'1', '2'} - if err := d.Write(k1, v1); err != nil { - t.Fatal(err) - } - - if v, err := d.Read(k1); err != nil { - t.Fatal(err) - } else if !cmpBytes(v, v1) { - t.Fatalf("Read: expected %s, got %s", string(v1), string(v)) - } - - for i := 0; i < 10 && !d.isCached(k1); i++ { - time.Sleep(10 * time.Millisecond) - } - if !d.isCached(k1) { - t.Fatalf("expected 1-byte value to be cached, but it wasn't") - } - - if err := d.Write(k2, v2); err != nil { - t.Fatal(err) - } - if _, err := d.Read(k2); err != nil { - t.Fatalf("--> %s", err) - } - - for i := 0; i < 10 && (!d.isCached(k1) || d.isCached(k2)); i++ { - time.Sleep(10 * time.Millisecond) // just wait for lazy-cache - } - if !d.isCached(k1) { - t.Fatalf("1-byte value was uncached for no reason") - } - - if d.isCached(k2) { - t.Fatalf("2-byte value was cached, but cache max size is 1") - } -} - -func TestStaleCache(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1, - }) - defer d.EraseAll() - - k, first, second := "a", "first", "second" - if err := d.Write(k, []byte(first)); err != nil { - t.Fatal(err) - } - - v, err := d.Read(k) - if err != nil { - t.Fatal(err) - } - if string(v) != first { - t.Errorf("expected '%s', got '%s'", first, v) - } - - if err := d.Write(k, []byte(second)); err != nil { - t.Fatal(err) - } - - v, err = d.Read(k) - if err != nil { - t.Fatal(err) - } - - if string(v) != second { - t.Errorf("expected '%s', got '%s'", second, v) - } -} - -func TestHas(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - }) - defer d.EraseAll() - - for k, v := range map[string]string{ - "a": "1", - "foo": "2", - "012345": "3", - } { - d.Write(k, []byte(v)) - } - - d.Read("foo") // cache one of them - if !d.isCached("foo") { - t.Errorf("'foo' didn't get cached") - } - - for _, tuple := range []struct { - key string - expected bool - }{ - {"a", true}, - {"b", false}, - {"foo", true}, - {"bar", false}, - {"01234", false}, - {"012345", true}, - {"0123456", false}, - } { - if expected, got := tuple.expected, d.Has(tuple.key); expected != got { - t.Errorf("Has(%s): expected %v, got %v", tuple.key, expected, got) - } - } -} - -type BrokenReader struct{} - -func (BrokenReader) Read(p []byte) (n int, err error) { - return 0, errors.New("failed to read") -} - -func TestRemovesIncompleteFiles(t *testing.T) { - opts := Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - } - d := New(opts) - defer d.EraseAll() - - key, stream, sync := "key", BrokenReader{}, false - - if err := d.WriteStream(key, stream, sync); err == nil { - t.Fatalf("Expected i/o copy error, none received.") - } - - if _, err := d.Read(key); err == nil { - t.Fatal("Could read the key, but it shouldn't exist") - } -} - -func TestTempDir(t *testing.T) { - opts := Options{ - BasePath: "test-data", - TempDir: "test-data-temp", - CacheSizeMax: 1024, - } - d := New(opts) - defer d.EraseAll() - - k, v := "a", []byte{'b'} - if err := d.Write(k, v); err != nil { - t.Fatalf("write: %s", err) - } - if readVal, err := d.Read(k); err != nil { - t.Fatalf("read: %s", err) - } else if bytes.Compare(v, readVal) != 0 { - t.Fatalf("read: expected %s, got %s", v, readVal) - } - if err := d.Erase(k); err != nil { - t.Fatalf("erase: %s", err) - } -} - -type CrashingReader struct{} - -func (CrashingReader) Read(p []byte) (n int, err error) { - panic("System has crashed while reading the stream") -} - -func TestAtomicWrite(t *testing.T) { - opts := Options{ - BasePath: "test-data", - // Test would fail if TempDir is not set here. - TempDir: "test-data-temp", - CacheSizeMax: 1024, - } - d := New(opts) - defer d.EraseAll() - - key := "key" - func() { - defer func() { - recover() // Ignore panicking error - }() - - stream := CrashingReader{} - d.WriteStream(key, stream, false) - }() - - if d.Has(key) { - t.Fatal("Has key, but it shouldn't exist") - } - if _, ok := <-d.Keys(nil); ok { - t.Fatal("Store isn't empty") - } -} diff --git a/vendor/github.com/peterbourgon/diskv/compression.go b/vendor/github.com/peterbourgon/diskv/compression.go deleted file mode 100644 index 5192b0273..000000000 --- a/vendor/github.com/peterbourgon/diskv/compression.go +++ /dev/null @@ -1,64 +0,0 @@ -package diskv - -import ( - "compress/flate" - "compress/gzip" - "compress/zlib" - "io" -) - -// Compression is an interface that Diskv uses to implement compression of -// data. Writer takes a destination io.Writer and returns a WriteCloser that -// compresses all data written through it. Reader takes a source io.Reader and -// returns a ReadCloser that decompresses all data read through it. You may -// define these methods on your own type, or use one of the NewCompression -// helpers. -type Compression interface { - Writer(dst io.Writer) (io.WriteCloser, error) - Reader(src io.Reader) (io.ReadCloser, error) -} - -// NewGzipCompression returns a Gzip-based Compression. -func NewGzipCompression() Compression { - return NewGzipCompressionLevel(flate.DefaultCompression) -} - -// NewGzipCompressionLevel returns a Gzip-based Compression with the given level. -func NewGzipCompressionLevel(level int) Compression { - return &genericCompression{ - wf: func(w io.Writer) (io.WriteCloser, error) { return gzip.NewWriterLevel(w, level) }, - rf: func(r io.Reader) (io.ReadCloser, error) { return gzip.NewReader(r) }, - } -} - -// NewZlibCompression returns a Zlib-based Compression. -func NewZlibCompression() Compression { - return NewZlibCompressionLevel(flate.DefaultCompression) -} - -// NewZlibCompressionLevel returns a Zlib-based Compression with the given level. -func NewZlibCompressionLevel(level int) Compression { - return NewZlibCompressionLevelDict(level, nil) -} - -// NewZlibCompressionLevelDict returns a Zlib-based Compression with the given -// level, based on the given dictionary. -func NewZlibCompressionLevelDict(level int, dict []byte) Compression { - return &genericCompression{ - func(w io.Writer) (io.WriteCloser, error) { return zlib.NewWriterLevelDict(w, level, dict) }, - func(r io.Reader) (io.ReadCloser, error) { return zlib.NewReaderDict(r, dict) }, - } -} - -type genericCompression struct { - wf func(w io.Writer) (io.WriteCloser, error) - rf func(r io.Reader) (io.ReadCloser, error) -} - -func (g *genericCompression) Writer(dst io.Writer) (io.WriteCloser, error) { - return g.wf(dst) -} - -func (g *genericCompression) Reader(src io.Reader) (io.ReadCloser, error) { - return g.rf(src) -} diff --git a/vendor/github.com/peterbourgon/diskv/compression_test.go b/vendor/github.com/peterbourgon/diskv/compression_test.go deleted file mode 100644 index 2d6142037..000000000 --- a/vendor/github.com/peterbourgon/diskv/compression_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package diskv - -import ( - "compress/flate" - "fmt" - "math/rand" - "os" - "testing" - "time" -) - -func init() { - rand.Seed(time.Now().UnixNano()) -} - -func testCompressionWith(t *testing.T, c Compression, name string) { - d := New(Options{ - BasePath: "compression-test", - CacheSizeMax: 0, - Compression: c, - }) - defer d.EraseAll() - - sz := 4096 - val := make([]byte, sz) - for i := 0; i < sz; i++ { - val[i] = byte('a' + rand.Intn(26)) // {a-z}; should compress some - } - - key := "a" - if err := d.Write(key, val); err != nil { - t.Fatalf("write failed: %s", err) - } - - targetFile := fmt.Sprintf("%s%c%s", d.BasePath, os.PathSeparator, key) - fi, err := os.Stat(targetFile) - if err != nil { - t.Fatalf("%s: %s", targetFile, err) - } - - if fi.Size() >= int64(sz) { - t.Fatalf("%s: size=%d, expected smaller", targetFile, fi.Size()) - } - t.Logf("%s compressed %d to %d", name, sz, fi.Size()) - - readVal, err := d.Read(key) - if len(readVal) != sz { - t.Fatalf("read: expected size=%d, got size=%d", sz, len(readVal)) - } - - for i := 0; i < sz; i++ { - if readVal[i] != val[i] { - t.Fatalf("i=%d: expected %v, got %v", i, val[i], readVal[i]) - } - } -} - -func TestGzipDefault(t *testing.T) { - testCompressionWith(t, NewGzipCompression(), "gzip") -} - -func TestGzipBestCompression(t *testing.T) { - testCompressionWith(t, NewGzipCompressionLevel(flate.BestCompression), "gzip-max") -} - -func TestGzipBestSpeed(t *testing.T) { - testCompressionWith(t, NewGzipCompressionLevel(flate.BestSpeed), "gzip-min") -} - -func TestZlib(t *testing.T) { - testCompressionWith(t, NewZlibCompression(), "zlib") -} diff --git a/vendor/github.com/peterbourgon/diskv/diskv.go b/vendor/github.com/peterbourgon/diskv/diskv.go deleted file mode 100644 index 524dc0a6e..000000000 --- a/vendor/github.com/peterbourgon/diskv/diskv.go +++ /dev/null @@ -1,624 +0,0 @@ -// Diskv (disk-vee) is a simple, persistent, key-value store. -// It stores all data flatly on the filesystem. - -package diskv - -import ( - "bytes" - "errors" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "sync" - "syscall" -) - -const ( - defaultBasePath = "diskv" - defaultFilePerm os.FileMode = 0666 - defaultPathPerm os.FileMode = 0777 -) - -var ( - defaultTransform = func(s string) []string { return []string{} } - errCanceled = errors.New("canceled") - errEmptyKey = errors.New("empty key") - errBadKey = errors.New("bad key") - errImportDirectory = errors.New("can't import a directory") -) - -// TransformFunction transforms a key into a slice of strings, with each -// element in the slice representing a directory in the file path where the -// key's entry will eventually be stored. -// -// For example, if TransformFunc transforms "abcdef" to ["ab", "cde", "f"], -// the final location of the data file will be /ab/cde/f/abcdef -type TransformFunction func(s string) []string - -// Options define a set of properties that dictate Diskv behavior. -// All values are optional. -type Options struct { - BasePath string - Transform TransformFunction - CacheSizeMax uint64 // bytes - PathPerm os.FileMode - FilePerm os.FileMode - // If TempDir is set, it will enable filesystem atomic writes by - // writing temporary files to that location before being moved - // to BasePath. - // Note that TempDir MUST be on the same device/partition as - // BasePath. - TempDir string - - Index Index - IndexLess LessFunction - - Compression Compression -} - -// Diskv implements the Diskv interface. You shouldn't construct Diskv -// structures directly; instead, use the New constructor. -type Diskv struct { - Options - mu sync.RWMutex - cache map[string][]byte - cacheSize uint64 -} - -// New returns an initialized Diskv structure, ready to use. -// If the path identified by baseDir already contains data, -// it will be accessible, but not yet cached. -func New(o Options) *Diskv { - if o.BasePath == "" { - o.BasePath = defaultBasePath - } - if o.Transform == nil { - o.Transform = defaultTransform - } - if o.PathPerm == 0 { - o.PathPerm = defaultPathPerm - } - if o.FilePerm == 0 { - o.FilePerm = defaultFilePerm - } - - d := &Diskv{ - Options: o, - cache: map[string][]byte{}, - cacheSize: 0, - } - - if d.Index != nil && d.IndexLess != nil { - d.Index.Initialize(d.IndexLess, d.Keys(nil)) - } - - return d -} - -// Write synchronously writes the key-value pair to disk, making it immediately -// available for reads. Write relies on the filesystem to perform an eventual -// sync to physical media. If you need stronger guarantees, see WriteStream. -func (d *Diskv) Write(key string, val []byte) error { - return d.WriteStream(key, bytes.NewBuffer(val), false) -} - -// WriteStream writes the data represented by the io.Reader to the disk, under -// the provided key. If sync is true, WriteStream performs an explicit sync on -// the file as soon as it's written. -// -// bytes.Buffer provides io.Reader semantics for basic data types. -func (d *Diskv) WriteStream(key string, r io.Reader, sync bool) error { - if len(key) <= 0 { - return errEmptyKey - } - - d.mu.Lock() - defer d.mu.Unlock() - - return d.writeStreamWithLock(key, r, sync) -} - -// createKeyFileWithLock either creates the key file directly, or -// creates a temporary file in TempDir if it is set. -func (d *Diskv) createKeyFileWithLock(key string) (*os.File, error) { - if d.TempDir != "" { - if err := os.MkdirAll(d.TempDir, d.PathPerm); err != nil { - return nil, fmt.Errorf("temp mkdir: %s", err) - } - f, err := ioutil.TempFile(d.TempDir, "") - if err != nil { - return nil, fmt.Errorf("temp file: %s", err) - } - - if err := f.Chmod(d.FilePerm); err != nil { - f.Close() // error deliberately ignored - os.Remove(f.Name()) // error deliberately ignored - return nil, fmt.Errorf("chmod: %s", err) - } - return f, nil - } - - mode := os.O_WRONLY | os.O_CREATE | os.O_TRUNC // overwrite if exists - f, err := os.OpenFile(d.completeFilename(key), mode, d.FilePerm) - if err != nil { - return nil, fmt.Errorf("open file: %s", err) - } - return f, nil -} - -// writeStream does no input validation checking. -func (d *Diskv) writeStreamWithLock(key string, r io.Reader, sync bool) error { - if err := d.ensurePathWithLock(key); err != nil { - return fmt.Errorf("ensure path: %s", err) - } - - f, err := d.createKeyFileWithLock(key) - if err != nil { - return fmt.Errorf("create key file: %s", err) - } - - wc := io.WriteCloser(&nopWriteCloser{f}) - if d.Compression != nil { - wc, err = d.Compression.Writer(f) - if err != nil { - f.Close() // error deliberately ignored - os.Remove(f.Name()) // error deliberately ignored - return fmt.Errorf("compression writer: %s", err) - } - } - - if _, err := io.Copy(wc, r); err != nil { - f.Close() // error deliberately ignored - os.Remove(f.Name()) // error deliberately ignored - return fmt.Errorf("i/o copy: %s", err) - } - - if err := wc.Close(); err != nil { - f.Close() // error deliberately ignored - os.Remove(f.Name()) // error deliberately ignored - return fmt.Errorf("compression close: %s", err) - } - - if sync { - if err := f.Sync(); err != nil { - f.Close() // error deliberately ignored - os.Remove(f.Name()) // error deliberately ignored - return fmt.Errorf("file sync: %s", err) - } - } - - if err := f.Close(); err != nil { - return fmt.Errorf("file close: %s", err) - } - - if f.Name() != d.completeFilename(key) { - if err := os.Rename(f.Name(), d.completeFilename(key)); err != nil { - os.Remove(f.Name()) // error deliberately ignored - return fmt.Errorf("rename: %s", err) - } - } - - if d.Index != nil { - d.Index.Insert(key) - } - - d.bustCacheWithLock(key) // cache only on read - - return nil -} - -// Import imports the source file into diskv under the destination key. If the -// destination key already exists, it's overwritten. If move is true, the -// source file is removed after a successful import. -func (d *Diskv) Import(srcFilename, dstKey string, move bool) (err error) { - if dstKey == "" { - return errEmptyKey - } - - if fi, err := os.Stat(srcFilename); err != nil { - return err - } else if fi.IsDir() { - return errImportDirectory - } - - d.mu.Lock() - defer d.mu.Unlock() - - if err := d.ensurePathWithLock(dstKey); err != nil { - return fmt.Errorf("ensure path: %s", err) - } - - if move { - if err := syscall.Rename(srcFilename, d.completeFilename(dstKey)); err == nil { - d.bustCacheWithLock(dstKey) - return nil - } else if err != syscall.EXDEV { - // If it failed due to being on a different device, fall back to copying - return err - } - } - - f, err := os.Open(srcFilename) - if err != nil { - return err - } - defer f.Close() - err = d.writeStreamWithLock(dstKey, f, false) - if err == nil && move { - err = os.Remove(srcFilename) - } - return err -} - -// Read reads the key and returns the value. -// If the key is available in the cache, Read won't touch the disk. -// If the key is not in the cache, Read will have the side-effect of -// lazily caching the value. -func (d *Diskv) Read(key string) ([]byte, error) { - rc, err := d.ReadStream(key, false) - if err != nil { - return []byte{}, err - } - defer rc.Close() - return ioutil.ReadAll(rc) -} - -// ReadStream reads the key and returns the value (data) as an io.ReadCloser. -// If the value is cached from a previous read, and direct is false, -// ReadStream will use the cached value. Otherwise, it will return a handle to -// the file on disk, and cache the data on read. -// -// If direct is true, ReadStream will lazily delete any cached value for the -// key, and return a direct handle to the file on disk. -// -// If compression is enabled, ReadStream taps into the io.Reader stream prior -// to decompression, and caches the compressed data. -func (d *Diskv) ReadStream(key string, direct bool) (io.ReadCloser, error) { - d.mu.RLock() - defer d.mu.RUnlock() - - if val, ok := d.cache[key]; ok { - if !direct { - buf := bytes.NewBuffer(val) - if d.Compression != nil { - return d.Compression.Reader(buf) - } - return ioutil.NopCloser(buf), nil - } - - go func() { - d.mu.Lock() - defer d.mu.Unlock() - d.uncacheWithLock(key, uint64(len(val))) - }() - } - - return d.readWithRLock(key) -} - -// read ignores the cache, and returns an io.ReadCloser representing the -// decompressed data for the given key, streamed from the disk. Clients should -// acquire a read lock on the Diskv and check the cache themselves before -// calling read. -func (d *Diskv) readWithRLock(key string) (io.ReadCloser, error) { - filename := d.completeFilename(key) - - fi, err := os.Stat(filename) - if err != nil { - return nil, err - } - if fi.IsDir() { - return nil, os.ErrNotExist - } - - f, err := os.Open(filename) - if err != nil { - return nil, err - } - - var r io.Reader - if d.CacheSizeMax > 0 { - r = newSiphon(f, d, key) - } else { - r = &closingReader{f} - } - - var rc = io.ReadCloser(ioutil.NopCloser(r)) - if d.Compression != nil { - rc, err = d.Compression.Reader(r) - if err != nil { - return nil, err - } - } - - return rc, nil -} - -// closingReader provides a Reader that automatically closes the -// embedded ReadCloser when it reaches EOF -type closingReader struct { - rc io.ReadCloser -} - -func (cr closingReader) Read(p []byte) (int, error) { - n, err := cr.rc.Read(p) - if err == io.EOF { - if closeErr := cr.rc.Close(); closeErr != nil { - return n, closeErr // close must succeed for Read to succeed - } - } - return n, err -} - -// siphon is like a TeeReader: it copies all data read through it to an -// internal buffer, and moves that buffer to the cache at EOF. -type siphon struct { - f *os.File - d *Diskv - key string - buf *bytes.Buffer -} - -// newSiphon constructs a siphoning reader that represents the passed file. -// When a successful series of reads ends in an EOF, the siphon will write -// the buffered data to Diskv's cache under the given key. -func newSiphon(f *os.File, d *Diskv, key string) io.Reader { - return &siphon{ - f: f, - d: d, - key: key, - buf: &bytes.Buffer{}, - } -} - -// Read implements the io.Reader interface for siphon. -func (s *siphon) Read(p []byte) (int, error) { - n, err := s.f.Read(p) - - if err == nil { - return s.buf.Write(p[0:n]) // Write must succeed for Read to succeed - } - - if err == io.EOF { - s.d.cacheWithoutLock(s.key, s.buf.Bytes()) // cache may fail - if closeErr := s.f.Close(); closeErr != nil { - return n, closeErr // close must succeed for Read to succeed - } - return n, err - } - - return n, err -} - -// Erase synchronously erases the given key from the disk and the cache. -func (d *Diskv) Erase(key string) error { - d.mu.Lock() - defer d.mu.Unlock() - - d.bustCacheWithLock(key) - - // erase from index - if d.Index != nil { - d.Index.Delete(key) - } - - // erase from disk - filename := d.completeFilename(key) - if s, err := os.Stat(filename); err == nil { - if s.IsDir() { - return errBadKey - } - if err = os.Remove(filename); err != nil { - return err - } - } else { - // Return err as-is so caller can do os.IsNotExist(err). - return err - } - - // clean up and return - d.pruneDirsWithLock(key) - return nil -} - -// EraseAll will delete all of the data from the store, both in the cache and on -// the disk. Note that EraseAll doesn't distinguish diskv-related data from non- -// diskv-related data. Care should be taken to always specify a diskv base -// directory that is exclusively for diskv data. -func (d *Diskv) EraseAll() error { - d.mu.Lock() - defer d.mu.Unlock() - d.cache = make(map[string][]byte) - d.cacheSize = 0 - if d.TempDir != "" { - os.RemoveAll(d.TempDir) // errors ignored - } - return os.RemoveAll(d.BasePath) -} - -// Has returns true if the given key exists. -func (d *Diskv) Has(key string) bool { - d.mu.Lock() - defer d.mu.Unlock() - - if _, ok := d.cache[key]; ok { - return true - } - - filename := d.completeFilename(key) - s, err := os.Stat(filename) - if err != nil { - return false - } - if s.IsDir() { - return false - } - - return true -} - -// Keys returns a channel that will yield every key accessible by the store, -// in undefined order. If a cancel channel is provided, closing it will -// terminate and close the keys channel. -func (d *Diskv) Keys(cancel <-chan struct{}) <-chan string { - return d.KeysPrefix("", cancel) -} - -// KeysPrefix returns a channel that will yield every key accessible by the -// store with the given prefix, in undefined order. If a cancel channel is -// provided, closing it will terminate and close the keys channel. If the -// provided prefix is the empty string, all keys will be yielded. -func (d *Diskv) KeysPrefix(prefix string, cancel <-chan struct{}) <-chan string { - var prepath string - if prefix == "" { - prepath = d.BasePath - } else { - prepath = d.pathFor(prefix) - } - c := make(chan string) - go func() { - filepath.Walk(prepath, walker(c, prefix, cancel)) - close(c) - }() - return c -} - -// walker returns a function which satisfies the filepath.WalkFunc interface. -// It sends every non-directory file entry down the channel c. -func walker(c chan<- string, prefix string, cancel <-chan struct{}) filepath.WalkFunc { - return func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - if info.IsDir() || !strings.HasPrefix(info.Name(), prefix) { - return nil // "pass" - } - - select { - case c <- info.Name(): - case <-cancel: - return errCanceled - } - - return nil - } -} - -// pathFor returns the absolute path for location on the filesystem where the -// data for the given key will be stored. -func (d *Diskv) pathFor(key string) string { - return filepath.Join(d.BasePath, filepath.Join(d.Transform(key)...)) -} - -// ensurePathWithLock is a helper function that generates all necessary -// directories on the filesystem for the given key. -func (d *Diskv) ensurePathWithLock(key string) error { - return os.MkdirAll(d.pathFor(key), d.PathPerm) -} - -// completeFilename returns the absolute path to the file for the given key. -func (d *Diskv) completeFilename(key string) string { - return filepath.Join(d.pathFor(key), key) -} - -// cacheWithLock attempts to cache the given key-value pair in the store's -// cache. It can fail if the value is larger than the cache's maximum size. -func (d *Diskv) cacheWithLock(key string, val []byte) error { - valueSize := uint64(len(val)) - if err := d.ensureCacheSpaceWithLock(valueSize); err != nil { - return fmt.Errorf("%s; not caching", err) - } - - // be very strict about memory guarantees - if (d.cacheSize + valueSize) > d.CacheSizeMax { - panic(fmt.Sprintf("failed to make room for value (%d/%d)", valueSize, d.CacheSizeMax)) - } - - d.cache[key] = val - d.cacheSize += valueSize - return nil -} - -// cacheWithoutLock acquires the store's (write) mutex and calls cacheWithLock. -func (d *Diskv) cacheWithoutLock(key string, val []byte) error { - d.mu.Lock() - defer d.mu.Unlock() - return d.cacheWithLock(key, val) -} - -func (d *Diskv) bustCacheWithLock(key string) { - if val, ok := d.cache[key]; ok { - d.uncacheWithLock(key, uint64(len(val))) - } -} - -func (d *Diskv) uncacheWithLock(key string, sz uint64) { - d.cacheSize -= sz - delete(d.cache, key) -} - -// pruneDirsWithLock deletes empty directories in the path walk leading to the -// key k. Typically this function is called after an Erase is made. -func (d *Diskv) pruneDirsWithLock(key string) error { - pathlist := d.Transform(key) - for i := range pathlist { - dir := filepath.Join(d.BasePath, filepath.Join(pathlist[:len(pathlist)-i]...)) - - // thanks to Steven Blenkinsop for this snippet - switch fi, err := os.Stat(dir); true { - case err != nil: - return err - case !fi.IsDir(): - panic(fmt.Sprintf("corrupt dirstate at %s", dir)) - } - - nlinks, err := filepath.Glob(filepath.Join(dir, "*")) - if err != nil { - return err - } else if len(nlinks) > 0 { - return nil // has subdirs -- do not prune - } - if err = os.Remove(dir); err != nil { - return err - } - } - - return nil -} - -// ensureCacheSpaceWithLock deletes entries from the cache in arbitrary order -// until the cache has at least valueSize bytes available. -func (d *Diskv) ensureCacheSpaceWithLock(valueSize uint64) error { - if valueSize > d.CacheSizeMax { - return fmt.Errorf("value size (%d bytes) too large for cache (%d bytes)", valueSize, d.CacheSizeMax) - } - - safe := func() bool { return (d.cacheSize + valueSize) <= d.CacheSizeMax } - - for key, val := range d.cache { - if safe() { - break - } - - d.uncacheWithLock(key, uint64(len(val))) - } - - if !safe() { - panic(fmt.Sprintf("%d bytes still won't fit in the cache! (max %d bytes)", valueSize, d.CacheSizeMax)) - } - - return nil -} - -// nopWriteCloser wraps an io.Writer and provides a no-op Close method to -// satisfy the io.WriteCloser interface. -type nopWriteCloser struct { - io.Writer -} - -func (wc *nopWriteCloser) Write(p []byte) (int, error) { return wc.Writer.Write(p) } -func (wc *nopWriteCloser) Close() error { return nil } diff --git a/vendor/github.com/peterbourgon/diskv/examples/content-addressable-store/cas.go b/vendor/github.com/peterbourgon/diskv/examples/content-addressable-store/cas.go deleted file mode 100644 index a3abaaf77..000000000 --- a/vendor/github.com/peterbourgon/diskv/examples/content-addressable-store/cas.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "crypto/md5" - "fmt" - "io" - - "github.com/peterbourgon/diskv" -) - -const transformBlockSize = 2 // grouping of chars per directory depth - -func blockTransform(s string) []string { - var ( - sliceSize = len(s) / transformBlockSize - pathSlice = make([]string, sliceSize) - ) - for i := 0; i < sliceSize; i++ { - from, to := i*transformBlockSize, (i*transformBlockSize)+transformBlockSize - pathSlice[i] = s[from:to] - } - return pathSlice -} - -func main() { - d := diskv.New(diskv.Options{ - BasePath: "data", - Transform: blockTransform, - CacheSizeMax: 1024 * 1024, // 1MB - }) - - for _, valueStr := range []string{ - "I am the very model of a modern Major-General", - "I've information vegetable, animal, and mineral", - "I know the kings of England, and I quote the fights historical", - "From Marathon to Waterloo, in order categorical", - "I'm very well acquainted, too, with matters mathematical", - "I understand equations, both the simple and quadratical", - "About binomial theorem I'm teeming with a lot o' news", - "With many cheerful facts about the square of the hypotenuse", - } { - d.Write(md5sum(valueStr), []byte(valueStr)) - } - - var keyCount int - for key := range d.Keys(nil) { - val, err := d.Read(key) - if err != nil { - panic(fmt.Sprintf("key %s had no value", key)) - } - fmt.Printf("%s: %s\n", key, val) - keyCount++ - } - fmt.Printf("%d total keys\n", keyCount) - - // d.EraseAll() // leave it commented out to see how data is kept on disk -} - -func md5sum(s string) string { - h := md5.New() - io.WriteString(h, s) - return fmt.Sprintf("%x", h.Sum(nil)) -} diff --git a/vendor/github.com/peterbourgon/diskv/examples/super-simple-store/super-simple-store.go b/vendor/github.com/peterbourgon/diskv/examples/super-simple-store/super-simple-store.go deleted file mode 100644 index b5da11d64..000000000 --- a/vendor/github.com/peterbourgon/diskv/examples/super-simple-store/super-simple-store.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/peterbourgon/diskv" -) - -func main() { - d := diskv.New(diskv.Options{ - BasePath: "my-diskv-data-directory", - Transform: func(s string) []string { return []string{} }, - CacheSizeMax: 1024 * 1024, // 1MB - }) - - key := "alpha" - if err := d.Write(key, []byte{'1', '2', '3'}); err != nil { - panic(err) - } - - value, err := d.Read(key) - if err != nil { - panic(err) - } - fmt.Printf("%v\n", value) - - if err := d.Erase(key); err != nil { - panic(err) - } -} diff --git a/vendor/github.com/peterbourgon/diskv/import_test.go b/vendor/github.com/peterbourgon/diskv/import_test.go deleted file mode 100644 index a08ac7c70..000000000 --- a/vendor/github.com/peterbourgon/diskv/import_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package diskv_test - -import ( - "bytes" - "io/ioutil" - "os" - - "github.com/peterbourgon/diskv" - - "testing" -) - -func TestImportMove(t *testing.T) { - b := []byte(`0123456789`) - f, err := ioutil.TempFile("", "temp-test") - if err != nil { - t.Fatal(err) - } - if _, err := f.Write(b); err != nil { - t.Fatal(err) - } - f.Close() - - d := diskv.New(diskv.Options{ - BasePath: "test-import-move", - }) - defer d.EraseAll() - - key := "key" - - if err := d.Write(key, []byte(`TBD`)); err != nil { - t.Fatal(err) - } - - if err := d.Import(f.Name(), key, true); err != nil { - t.Fatal(err) - } - - if _, err := os.Stat(f.Name()); err == nil || !os.IsNotExist(err) { - t.Errorf("expected temp file to be gone, but err = %v", err) - } - - if !d.Has(key) { - t.Errorf("%q not present", key) - } - - if buf, err := d.Read(key); err != nil || bytes.Compare(b, buf) != 0 { - t.Errorf("want %q, have %q (err = %v)", string(b), string(buf), err) - } -} - -func TestImportCopy(t *testing.T) { - b := []byte(`¡åéîòü!`) - - f, err := ioutil.TempFile("", "temp-test") - if err != nil { - t.Fatal(err) - } - if _, err := f.Write(b); err != nil { - t.Fatal(err) - } - f.Close() - - d := diskv.New(diskv.Options{ - BasePath: "test-import-copy", - }) - defer d.EraseAll() - - if err := d.Import(f.Name(), "key", false); err != nil { - t.Fatal(err) - } - - if _, err := os.Stat(f.Name()); err != nil { - t.Errorf("expected temp file to remain, but got err = %v", err) - } -} diff --git a/vendor/github.com/peterbourgon/diskv/index.go b/vendor/github.com/peterbourgon/diskv/index.go deleted file mode 100644 index 96fee5152..000000000 --- a/vendor/github.com/peterbourgon/diskv/index.go +++ /dev/null @@ -1,115 +0,0 @@ -package diskv - -import ( - "sync" - - "github.com/google/btree" -) - -// Index is a generic interface for things that can -// provide an ordered list of keys. -type Index interface { - Initialize(less LessFunction, keys <-chan string) - Insert(key string) - Delete(key string) - Keys(from string, n int) []string -} - -// LessFunction is used to initialize an Index of keys in a specific order. -type LessFunction func(string, string) bool - -// btreeString is a custom data type that satisfies the BTree Less interface, -// making the strings it wraps sortable by the BTree package. -type btreeString struct { - s string - l LessFunction -} - -// Less satisfies the BTree.Less interface using the btreeString's LessFunction. -func (s btreeString) Less(i btree.Item) bool { - return s.l(s.s, i.(btreeString).s) -} - -// BTreeIndex is an implementation of the Index interface using google/btree. -type BTreeIndex struct { - sync.RWMutex - LessFunction - *btree.BTree -} - -// Initialize populates the BTree tree with data from the keys channel, -// according to the passed less function. It's destructive to the BTreeIndex. -func (i *BTreeIndex) Initialize(less LessFunction, keys <-chan string) { - i.Lock() - defer i.Unlock() - i.LessFunction = less - i.BTree = rebuild(less, keys) -} - -// Insert inserts the given key (only) into the BTree tree. -func (i *BTreeIndex) Insert(key string) { - i.Lock() - defer i.Unlock() - if i.BTree == nil || i.LessFunction == nil { - panic("uninitialized index") - } - i.BTree.ReplaceOrInsert(btreeString{s: key, l: i.LessFunction}) -} - -// Delete removes the given key (only) from the BTree tree. -func (i *BTreeIndex) Delete(key string) { - i.Lock() - defer i.Unlock() - if i.BTree == nil || i.LessFunction == nil { - panic("uninitialized index") - } - i.BTree.Delete(btreeString{s: key, l: i.LessFunction}) -} - -// Keys yields a maximum of n keys in order. If the passed 'from' key is empty, -// Keys will return the first n keys. If the passed 'from' key is non-empty, the -// first key in the returned slice will be the key that immediately follows the -// passed key, in key order. -func (i *BTreeIndex) Keys(from string, n int) []string { - i.RLock() - defer i.RUnlock() - - if i.BTree == nil || i.LessFunction == nil { - panic("uninitialized index") - } - - if i.BTree.Len() <= 0 { - return []string{} - } - - btreeFrom := btreeString{s: from, l: i.LessFunction} - skipFirst := true - if len(from) <= 0 || !i.BTree.Has(btreeFrom) { - // no such key, so fabricate an always-smallest item - btreeFrom = btreeString{s: "", l: func(string, string) bool { return true }} - skipFirst = false - } - - keys := []string{} - iterator := func(i btree.Item) bool { - keys = append(keys, i.(btreeString).s) - return len(keys) < n - } - i.BTree.AscendGreaterOrEqual(btreeFrom, iterator) - - if skipFirst && len(keys) > 0 { - keys = keys[1:] - } - - return keys -} - -// rebuildIndex does the work of regenerating the index -// with the given keys. -func rebuild(less LessFunction, keys <-chan string) *btree.BTree { - tree := btree.New(2) - for key := range keys { - tree.ReplaceOrInsert(btreeString{s: key, l: less}) - } - return tree -} diff --git a/vendor/github.com/peterbourgon/diskv/index_test.go b/vendor/github.com/peterbourgon/diskv/index_test.go deleted file mode 100644 index 72f52a9ff..000000000 --- a/vendor/github.com/peterbourgon/diskv/index_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package diskv - -import ( - "bytes" - "reflect" - "testing" - "time" -) - -func strLess(a, b string) bool { return a < b } - -func cmpStrings(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := 0; i < len(a); i++ { - if a[i] != b[i] { - return false - } - } - return true -} - -func (d *Diskv) isIndexed(key string) bool { - if d.Index == nil { - return false - } - - for _, got := range d.Index.Keys("", 1000) { - if got == key { - return true - } - } - return false -} - -func TestIndexOrder(t *testing.T) { - d := New(Options{ - BasePath: "index-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 1024, - Index: &BTreeIndex{}, - IndexLess: strLess, - }) - defer d.EraseAll() - - v := []byte{'1', '2', '3'} - d.Write("a", v) - if !d.isIndexed("a") { - t.Fatalf("'a' not indexed after write") - } - d.Write("1", v) - d.Write("m", v) - d.Write("-", v) - d.Write("A", v) - - expectedKeys := []string{"-", "1", "A", "a", "m"} - keys := []string{} - for _, key := range d.Index.Keys("", 100) { - keys = append(keys, key) - } - - if !cmpStrings(keys, expectedKeys) { - t.Fatalf("got %s, expected %s", keys, expectedKeys) - } -} - -func TestIndexLoad(t *testing.T) { - d1 := New(Options{ - BasePath: "index-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 1024, - }) - defer d1.EraseAll() - - val := []byte{'1', '2', '3'} - keys := []string{"a", "b", "c", "d", "e", "f", "g"} - for _, key := range keys { - d1.Write(key, val) - } - - d2 := New(Options{ - BasePath: "index-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 1024, - Index: &BTreeIndex{}, - IndexLess: strLess, - }) - defer d2.EraseAll() - - // check d2 has properly loaded existing d1 data - for _, key := range keys { - if !d2.isIndexed(key) { - t.Fatalf("key '%s' not indexed on secondary", key) - } - } - - // cache one - if readValue, err := d2.Read(keys[0]); err != nil { - t.Fatalf("%s", err) - } else if bytes.Compare(val, readValue) != 0 { - t.Fatalf("%s: got %s, expected %s", keys[0], readValue, val) - } - - // make sure it got cached - for i := 0; i < 10 && !d2.isCached(keys[0]); i++ { - time.Sleep(10 * time.Millisecond) - } - if !d2.isCached(keys[0]) { - t.Fatalf("key '%s' not cached", keys[0]) - } - - // kill the disk - d1.EraseAll() - - // cached value should still be there in the second - if readValue, err := d2.Read(keys[0]); err != nil { - t.Fatalf("%s", err) - } else if bytes.Compare(val, readValue) != 0 { - t.Fatalf("%s: got %s, expected %s", keys[0], readValue, val) - } - - // but not in the original - if _, err := d1.Read(keys[0]); err == nil { - t.Fatalf("expected error reading from flushed store") - } -} - -func TestIndexKeysEmptyFrom(t *testing.T) { - d := New(Options{ - BasePath: "index-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 1024, - Index: &BTreeIndex{}, - IndexLess: strLess, - }) - defer d.EraseAll() - - for _, k := range []string{"a", "c", "z", "b", "x", "b", "y"} { - d.Write(k, []byte("1")) - } - - want := []string{"a", "b", "c", "x", "y", "z"} - have := d.Index.Keys("", 99) - if !reflect.DeepEqual(want, have) { - t.Errorf("want %v, have %v", want, have) - } -} diff --git a/vendor/github.com/peterbourgon/diskv/issues_test.go b/vendor/github.com/peterbourgon/diskv/issues_test.go deleted file mode 100644 index 0b0b10908..000000000 --- a/vendor/github.com/peterbourgon/diskv/issues_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package diskv - -import ( - "bytes" - "io/ioutil" - "sync" - "testing" - "time" -) - -// ReadStream from cache shouldn't panic on a nil dereference from a nonexistent -// Compression :) -func TestIssue2A(t *testing.T) { - d := New(Options{ - BasePath: "test-issue-2a", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 1024, - }) - defer d.EraseAll() - - input := "abcdefghijklmnopqrstuvwxy" - key, writeBuf, sync := "a", bytes.NewBufferString(input), false - if err := d.WriteStream(key, writeBuf, sync); err != nil { - t.Fatal(err) - } - - for i := 0; i < 2; i++ { - began := time.Now() - rc, err := d.ReadStream(key, false) - if err != nil { - t.Fatal(err) - } - buf, err := ioutil.ReadAll(rc) - if err != nil { - t.Fatal(err) - } - if !cmpBytes(buf, []byte(input)) { - t.Fatalf("read #%d: '%s' != '%s'", i+1, string(buf), input) - } - rc.Close() - t.Logf("read #%d in %s", i+1, time.Since(began)) - } -} - -// ReadStream on a key that resolves to a directory should return an error. -func TestIssue2B(t *testing.T) { - blockTransform := func(s string) []string { - transformBlockSize := 3 - sliceSize := len(s) / transformBlockSize - pathSlice := make([]string, sliceSize) - for i := 0; i < sliceSize; i++ { - from, to := i*transformBlockSize, (i*transformBlockSize)+transformBlockSize - pathSlice[i] = s[from:to] - } - return pathSlice - } - - d := New(Options{ - BasePath: "test-issue-2b", - Transform: blockTransform, - CacheSizeMax: 0, - }) - defer d.EraseAll() - - v := []byte{'1', '2', '3'} - if err := d.Write("abcabc", v); err != nil { - t.Fatal(err) - } - - _, err := d.ReadStream("abc", false) - if err == nil { - t.Fatal("ReadStream('abc') should return error") - } - t.Logf("ReadStream('abc') returned error: %v", err) -} - -// Ensure ReadStream with direct=true isn't racy. -func TestIssue17(t *testing.T) { - var ( - basePath = "test-data" - ) - - dWrite := New(Options{ - BasePath: basePath, - CacheSizeMax: 0, - }) - defer dWrite.EraseAll() - - dRead := New(Options{ - BasePath: basePath, - CacheSizeMax: 50, - }) - - cases := map[string]string{ - "a": `1234567890`, - "b": `2345678901`, - "c": `3456789012`, - "d": `4567890123`, - "e": `5678901234`, - } - - for k, v := range cases { - if err := dWrite.Write(k, []byte(v)); err != nil { - t.Fatalf("during write: %s", err) - } - dRead.Read(k) // ensure it's added to cache - } - - var wg sync.WaitGroup - start := make(chan struct{}) - for k, v := range cases { - wg.Add(1) - go func(k, v string) { - <-start - dRead.ReadStream(k, true) - wg.Done() - }(k, v) - } - close(start) - wg.Wait() -} diff --git a/vendor/github.com/peterbourgon/diskv/keys_test.go b/vendor/github.com/peterbourgon/diskv/keys_test.go deleted file mode 100644 index 222e1c444..000000000 --- a/vendor/github.com/peterbourgon/diskv/keys_test.go +++ /dev/null @@ -1,231 +0,0 @@ -package diskv_test - -import ( - "reflect" - "runtime" - "strings" - "testing" - - "github.com/peterbourgon/diskv" -) - -var ( - keysTestData = map[string]string{ - "ab01cd01": "When we started building CoreOS", - "ab01cd02": "we looked at all the various components available to us", - "ab01cd03": "re-using the best tools", - "ef01gh04": "and building the ones that did not exist", - "ef02gh05": "We believe strongly in the Unix philosophy", - "xxxxxxxx": "tools should be independently useful", - } - - prefixes = []string{ - "", // all - "a", - "ab", - "ab0", - "ab01", - "ab01cd0", - "ab01cd01", - "ab01cd01x", // none - "b", // none - "b0", // none - "0", // none - "01", // none - "e", - "ef", - "efx", // none - "ef01gh0", - "ef01gh04", - "ef01gh05", - "ef01gh06", // none - } -) - -func TestKeysFlat(t *testing.T) { - transform := func(s string) []string { - if s == "" { - t.Fatalf(`transform should not be called with ""`) - } - return []string{} - } - d := diskv.New(diskv.Options{ - BasePath: "test-data", - Transform: transform, - }) - defer d.EraseAll() - - for k, v := range keysTestData { - d.Write(k, []byte(v)) - } - - checkKeys(t, d.Keys(nil), keysTestData) -} - -func TestKeysNested(t *testing.T) { - d := diskv.New(diskv.Options{ - BasePath: "test-data", - Transform: blockTransform(2), - }) - defer d.EraseAll() - - for k, v := range keysTestData { - d.Write(k, []byte(v)) - } - - checkKeys(t, d.Keys(nil), keysTestData) -} - -func TestKeysPrefixFlat(t *testing.T) { - d := diskv.New(diskv.Options{ - BasePath: "test-data", - }) - defer d.EraseAll() - - for k, v := range keysTestData { - d.Write(k, []byte(v)) - } - - for _, prefix := range prefixes { - checkKeys(t, d.KeysPrefix(prefix, nil), filterPrefix(keysTestData, prefix)) - } -} - -func TestKeysPrefixNested(t *testing.T) { - d := diskv.New(diskv.Options{ - BasePath: "test-data", - Transform: blockTransform(2), - }) - defer d.EraseAll() - - for k, v := range keysTestData { - d.Write(k, []byte(v)) - } - - for _, prefix := range prefixes { - checkKeys(t, d.KeysPrefix(prefix, nil), filterPrefix(keysTestData, prefix)) - } -} - -func TestKeysCancel(t *testing.T) { - d := diskv.New(diskv.Options{ - BasePath: "test-data", - }) - defer d.EraseAll() - - for k, v := range keysTestData { - d.Write(k, []byte(v)) - } - - var ( - cancel = make(chan struct{}) - received = 0 - cancelAfter = len(keysTestData) / 2 - ) - - for key := range d.Keys(cancel) { - received++ - - if received >= cancelAfter { - close(cancel) - runtime.Gosched() // allow walker to detect cancel - } - - t.Logf("received %d: %q", received, key) - } - - if want, have := cancelAfter, received; want != have { - t.Errorf("want %d, have %d") - } -} - -func checkKeys(t *testing.T, c <-chan string, want map[string]string) { - for k := range c { - if _, ok := want[k]; !ok { - t.Errorf("%q yielded but not expected", k) - continue - } - - delete(want, k) - t.Logf("%q yielded OK", k) - } - - if len(want) != 0 { - t.Errorf("%d expected key(s) not yielded: %s", len(want), strings.Join(flattenKeys(want), ", ")) - } -} - -func blockTransform(blockSize int) func(string) []string { - return func(s string) []string { - var ( - sliceSize = len(s) / blockSize - pathSlice = make([]string, sliceSize) - ) - for i := 0; i < sliceSize; i++ { - from, to := i*blockSize, (i*blockSize)+blockSize - pathSlice[i] = s[from:to] - } - return pathSlice - } -} - -func filterPrefix(in map[string]string, prefix string) map[string]string { - out := map[string]string{} - for k, v := range in { - if strings.HasPrefix(k, prefix) { - out[k] = v - } - } - return out -} - -func TestFilterPrefix(t *testing.T) { - input := map[string]string{ - "all": "", - "and": "", - "at": "", - "available": "", - "best": "", - "building": "", - "components": "", - "coreos": "", - "did": "", - "exist": "", - "looked": "", - "not": "", - "ones": "", - "re-using": "", - "started": "", - "that": "", - "the": "", - "to": "", - "tools": "", - "us": "", - "various": "", - "we": "", - "when": "", - } - - for prefix, want := range map[string]map[string]string{ - "a": map[string]string{"all": "", "and": "", "at": "", "available": ""}, - "al": map[string]string{"all": ""}, - "all": map[string]string{"all": ""}, - "alll": map[string]string{}, - "c": map[string]string{"components": "", "coreos": ""}, - "co": map[string]string{"components": "", "coreos": ""}, - "com": map[string]string{"components": ""}, - } { - have := filterPrefix(input, prefix) - if !reflect.DeepEqual(want, have) { - t.Errorf("%q: want %v, have %v", prefix, flattenKeys(want), flattenKeys(have)) - } - } -} - -func flattenKeys(m map[string]string) []string { - a := make([]string, 0, len(m)) - for k := range m { - a = append(a, k) - } - return a -} diff --git a/vendor/github.com/peterbourgon/diskv/speed_test.go b/vendor/github.com/peterbourgon/diskv/speed_test.go deleted file mode 100644 index 67d05ff27..000000000 --- a/vendor/github.com/peterbourgon/diskv/speed_test.go +++ /dev/null @@ -1,153 +0,0 @@ -package diskv - -import ( - "fmt" - "math/rand" - "testing" -) - -func shuffle(keys []string) { - ints := rand.Perm(len(keys)) - for i := range keys { - keys[i], keys[ints[i]] = keys[ints[i]], keys[i] - } -} - -func genValue(size int) []byte { - v := make([]byte, size) - for i := 0; i < size; i++ { - v[i] = uint8((rand.Int() % 26) + 97) // a-z - } - return v -} - -const ( - keyCount = 1000 -) - -func genKeys() []string { - keys := make([]string, keyCount) - for i := 0; i < keyCount; i++ { - keys[i] = fmt.Sprintf("%d", i) - } - return keys -} - -func (d *Diskv) load(keys []string, val []byte) { - for _, key := range keys { - d.Write(key, val) - } -} - -func benchRead(b *testing.B, size, cachesz int) { - b.StopTimer() - d := New(Options{ - BasePath: "speed-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: uint64(cachesz), - }) - defer d.EraseAll() - - keys := genKeys() - value := genValue(size) - d.load(keys, value) - shuffle(keys) - b.SetBytes(int64(size)) - - b.StartTimer() - for i := 0; i < b.N; i++ { - _, _ = d.Read(keys[i%len(keys)]) - } - b.StopTimer() -} - -func benchWrite(b *testing.B, size int, withIndex bool) { - b.StopTimer() - - options := Options{ - BasePath: "speed-test", - Transform: func(string) []string { return []string{} }, - CacheSizeMax: 0, - } - if withIndex { - options.Index = &BTreeIndex{} - options.IndexLess = strLess - } - - d := New(options) - defer d.EraseAll() - keys := genKeys() - value := genValue(size) - shuffle(keys) - b.SetBytes(int64(size)) - - b.StartTimer() - for i := 0; i < b.N; i++ { - d.Write(keys[i%len(keys)], value) - } - b.StopTimer() -} - -func BenchmarkWrite__32B_NoIndex(b *testing.B) { - benchWrite(b, 32, false) -} - -func BenchmarkWrite__1KB_NoIndex(b *testing.B) { - benchWrite(b, 1024, false) -} - -func BenchmarkWrite__4KB_NoIndex(b *testing.B) { - benchWrite(b, 4096, false) -} - -func BenchmarkWrite_10KB_NoIndex(b *testing.B) { - benchWrite(b, 10240, false) -} - -func BenchmarkWrite__32B_WithIndex(b *testing.B) { - benchWrite(b, 32, true) -} - -func BenchmarkWrite__1KB_WithIndex(b *testing.B) { - benchWrite(b, 1024, true) -} - -func BenchmarkWrite__4KB_WithIndex(b *testing.B) { - benchWrite(b, 4096, true) -} - -func BenchmarkWrite_10KB_WithIndex(b *testing.B) { - benchWrite(b, 10240, true) -} - -func BenchmarkRead__32B_NoCache(b *testing.B) { - benchRead(b, 32, 0) -} - -func BenchmarkRead__1KB_NoCache(b *testing.B) { - benchRead(b, 1024, 0) -} - -func BenchmarkRead__4KB_NoCache(b *testing.B) { - benchRead(b, 4096, 0) -} - -func BenchmarkRead_10KB_NoCache(b *testing.B) { - benchRead(b, 10240, 0) -} - -func BenchmarkRead__32B_WithCache(b *testing.B) { - benchRead(b, 32, keyCount*32*2) -} - -func BenchmarkRead__1KB_WithCache(b *testing.B) { - benchRead(b, 1024, keyCount*1024*2) -} - -func BenchmarkRead__4KB_WithCache(b *testing.B) { - benchRead(b, 4096, keyCount*4096*2) -} - -func BenchmarkRead_10KB_WithCache(b *testing.B) { - benchRead(b, 10240, keyCount*4096*2) -} diff --git a/vendor/github.com/peterbourgon/diskv/stream_test.go b/vendor/github.com/peterbourgon/diskv/stream_test.go deleted file mode 100644 index 7991dbff2..000000000 --- a/vendor/github.com/peterbourgon/diskv/stream_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package diskv - -import ( - "bytes" - "io/ioutil" - "testing" -) - -func TestBasicStreamCaching(t *testing.T) { - d := New(Options{ - BasePath: "test-data", - CacheSizeMax: 1024, - }) - defer d.EraseAll() - - input := "a1b2c3" - key, writeBuf, sync := "a", bytes.NewBufferString(input), true - if err := d.WriteStream(key, writeBuf, sync); err != nil { - t.Fatal(err) - } - - if d.isCached(key) { - t.Fatalf("'%s' cached, but shouldn't be (yet)", key) - } - - rc, err := d.ReadStream(key, false) - if err != nil { - t.Fatal(err) - } - - readBuf, err := ioutil.ReadAll(rc) - if err != nil { - t.Fatal(err) - } - - if !cmpBytes(readBuf, []byte(input)) { - t.Fatalf("'%s' != '%s'", string(readBuf), input) - } - - if !d.isCached(key) { - t.Fatalf("'%s' isn't cached, but should be", key) - } -} - -func TestReadStreamDirect(t *testing.T) { - var ( - basePath = "test-data" - ) - dWrite := New(Options{ - BasePath: basePath, - CacheSizeMax: 0, - }) - defer dWrite.EraseAll() - dRead := New(Options{ - BasePath: basePath, - CacheSizeMax: 1024, - }) - - // Write - key, val1, val2 := "a", []byte(`1234567890`), []byte(`aaaaaaaaaa`) - if err := dWrite.Write(key, val1); err != nil { - t.Fatalf("during first write: %s", err) - } - - // First, caching read. - val, err := dRead.Read(key) - if err != nil { - t.Fatalf("during initial read: %s", err) - } - t.Logf("read 1: %s => %s", key, string(val)) - if !cmpBytes(val1, val) { - t.Errorf("expected %q, got %q", string(val1), string(val)) - } - if !dRead.isCached(key) { - t.Errorf("%q should be cached, but isn't", key) - } - - // Write a different value. - if err := dWrite.Write(key, val2); err != nil { - t.Fatalf("during second write: %s", err) - } - - // Second read, should hit cache and get the old value. - val, err = dRead.Read(key) - if err != nil { - t.Fatalf("during second (cache-hit) read: %s", err) - } - t.Logf("read 2: %s => %s", key, string(val)) - if !cmpBytes(val1, val) { - t.Errorf("expected %q, got %q", string(val1), string(val)) - } - - // Third, direct read, should get the updated value. - rc, err := dRead.ReadStream(key, true) - if err != nil { - t.Fatalf("during third (direct) read, ReadStream: %s", err) - } - defer rc.Close() - val, err = ioutil.ReadAll(rc) - if err != nil { - t.Fatalf("during third (direct) read, ReadAll: %s", err) - } - t.Logf("read 3: %s => %s", key, string(val)) - if !cmpBytes(val2, val) { - t.Errorf("expected %q, got %q", string(val1), string(val)) - } - - // Fourth read, should hit cache and get the new value. - val, err = dRead.Read(key) - if err != nil { - t.Fatalf("during fourth (cache-hit) read: %s", err) - } - t.Logf("read 4: %s => %s", key, string(val)) - if !cmpBytes(val2, val) { - t.Errorf("expected %q, got %q", string(val1), string(val)) - } -} diff --git a/vendor/golang.org/x/time/AUTHORS b/vendor/golang.org/x/time/AUTHORS new file mode 100644 index 000000000..15167cd74 --- /dev/null +++ b/vendor/golang.org/x/time/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/time/CONTRIBUTING.md b/vendor/golang.org/x/time/CONTRIBUTING.md new file mode 100644 index 000000000..d0485e887 --- /dev/null +++ b/vendor/golang.org/x/time/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. diff --git a/vendor/golang.org/x/time/CONTRIBUTORS b/vendor/golang.org/x/time/CONTRIBUTORS new file mode 100644 index 000000000..1c4577e96 --- /dev/null +++ b/vendor/golang.org/x/time/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/time/LICENSE b/vendor/golang.org/x/time/LICENSE new file mode 100644 index 000000000..6a66aea5e --- /dev/null +++ b/vendor/golang.org/x/time/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/time/PATENTS b/vendor/golang.org/x/time/PATENTS new file mode 100644 index 000000000..733099041 --- /dev/null +++ b/vendor/golang.org/x/time/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/time/README.md b/vendor/golang.org/x/time/README.md new file mode 100644 index 000000000..ce9becdde --- /dev/null +++ b/vendor/golang.org/x/time/README.md @@ -0,0 +1,17 @@ +# Go Time + +This repository provides supplementary Go time packages. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/time`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/time`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the time repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/time:" in the +subject line, so it is easy to find. diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go new file mode 100644 index 000000000..7228d97e9 --- /dev/null +++ b/vendor/golang.org/x/time/rate/rate.go @@ -0,0 +1,384 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package rate provides a rate limiter. +package rate + +import ( + "fmt" + "math" + "sync" + "time" +) + +// Limit defines the maximum frequency of some events. +// Limit is represented as number of events per second. +// A zero Limit allows no events. +type Limit float64 + +// Inf is the infinite rate limit; it allows all events (even if burst is zero). +const Inf = Limit(math.MaxFloat64) + +// Every converts a minimum time interval between events to a Limit. +func Every(interval time.Duration) Limit { + if interval <= 0 { + return Inf + } + return 1 / Limit(interval.Seconds()) +} + +// A Limiter controls how frequently events are allowed to happen. +// It implements a "token bucket" of size b, initially full and refilled +// at rate r tokens per second. +// Informally, in any large enough time interval, the Limiter limits the +// rate to r tokens per second, with a maximum burst size of b events. +// As a special case, if r == Inf (the infinite rate), b is ignored. +// See https://en.wikipedia.org/wiki/Token_bucket for more about token buckets. +// +// The zero value is a valid Limiter, but it will reject all events. +// Use NewLimiter to create non-zero Limiters. +// +// Limiter has three main methods, Allow, Reserve, and Wait. +// Most callers should use Wait. +// +// Each of the three methods consumes a single token. +// They differ in their behavior when no token is available. +// If no token is available, Allow returns false. +// If no token is available, Reserve returns a reservation for a future token +// and the amount of time the caller must wait before using it. +// If no token is available, Wait blocks until one can be obtained +// or its associated context.Context is canceled. +// +// The methods AllowN, ReserveN, and WaitN consume n tokens. +type Limiter struct { + limit Limit + burst int + + mu sync.Mutex + tokens float64 + // last is the last time the limiter's tokens field was updated + last time.Time + // lastEvent is the latest time of a rate-limited event (past or future) + lastEvent time.Time +} + +// Limit returns the maximum overall event rate. +func (lim *Limiter) Limit() Limit { + lim.mu.Lock() + defer lim.mu.Unlock() + return lim.limit +} + +// Burst returns the maximum burst size. Burst is the maximum number of tokens +// that can be consumed in a single call to Allow, Reserve, or Wait, so higher +// Burst values allow more events to happen at once. +// A zero Burst allows no events, unless limit == Inf. +func (lim *Limiter) Burst() int { + return lim.burst +} + +// NewLimiter returns a new Limiter that allows events up to rate r and permits +// bursts of at most b tokens. +func NewLimiter(r Limit, b int) *Limiter { + return &Limiter{ + limit: r, + burst: b, + } +} + +// Allow is shorthand for AllowN(time.Now(), 1). +func (lim *Limiter) Allow() bool { + return lim.AllowN(time.Now(), 1) +} + +// AllowN reports whether n events may happen at time now. +// Use this method if you intend to drop / skip events that exceed the rate limit. +// Otherwise use Reserve or Wait. +func (lim *Limiter) AllowN(now time.Time, n int) bool { + return lim.reserveN(now, n, 0).ok +} + +// A Reservation holds information about events that are permitted by a Limiter to happen after a delay. +// A Reservation may be canceled, which may enable the Limiter to permit additional events. +type Reservation struct { + ok bool + lim *Limiter + tokens int + timeToAct time.Time + // This is the Limit at reservation time, it can change later. + limit Limit +} + +// OK returns whether the limiter can provide the requested number of tokens +// within the maximum wait time. If OK is false, Delay returns InfDuration, and +// Cancel does nothing. +func (r *Reservation) OK() bool { + return r.ok +} + +// Delay is shorthand for DelayFrom(time.Now()). +func (r *Reservation) Delay() time.Duration { + return r.DelayFrom(time.Now()) +} + +// InfDuration is the duration returned by Delay when a Reservation is not OK. +const InfDuration = time.Duration(1<<63 - 1) + +// DelayFrom returns the duration for which the reservation holder must wait +// before taking the reserved action. Zero duration means act immediately. +// InfDuration means the limiter cannot grant the tokens requested in this +// Reservation within the maximum wait time. +func (r *Reservation) DelayFrom(now time.Time) time.Duration { + if !r.ok { + return InfDuration + } + delay := r.timeToAct.Sub(now) + if delay < 0 { + return 0 + } + return delay +} + +// Cancel is shorthand for CancelAt(time.Now()). +func (r *Reservation) Cancel() { + r.CancelAt(time.Now()) + return +} + +// CancelAt indicates that the reservation holder will not perform the reserved action +// and reverses the effects of this Reservation on the rate limit as much as possible, +// considering that other reservations may have already been made. +func (r *Reservation) CancelAt(now time.Time) { + if !r.ok { + return + } + + r.lim.mu.Lock() + defer r.lim.mu.Unlock() + + if r.lim.limit == Inf || r.tokens == 0 || r.timeToAct.Before(now) { + return + } + + // calculate tokens to restore + // The duration between lim.lastEvent and r.timeToAct tells us how many tokens were reserved + // after r was obtained. These tokens should not be restored. + restoreTokens := float64(r.tokens) - r.limit.tokensFromDuration(r.lim.lastEvent.Sub(r.timeToAct)) + if restoreTokens <= 0 { + return + } + // advance time to now + now, _, tokens := r.lim.advance(now) + // calculate new number of tokens + tokens += restoreTokens + if burst := float64(r.lim.burst); tokens > burst { + tokens = burst + } + // update state + r.lim.last = now + r.lim.tokens = tokens + if r.timeToAct == r.lim.lastEvent { + prevEvent := r.timeToAct.Add(r.limit.durationFromTokens(float64(-r.tokens))) + if !prevEvent.Before(now) { + r.lim.lastEvent = prevEvent + } + } + + return +} + +// Reserve is shorthand for ReserveN(time.Now(), 1). +func (lim *Limiter) Reserve() *Reservation { + return lim.ReserveN(time.Now(), 1) +} + +// ReserveN returns a Reservation that indicates how long the caller must wait before n events happen. +// The Limiter takes this Reservation into account when allowing future events. +// ReserveN returns false if n exceeds the Limiter's burst size. +// Usage example: +// r := lim.ReserveN(time.Now(), 1) +// if !r.OK() { +// // Not allowed to act! Did you remember to set lim.burst to be > 0 ? +// return +// } +// time.Sleep(r.Delay()) +// Act() +// Use this method if you wish to wait and slow down in accordance with the rate limit without dropping events. +// If you need to respect a deadline or cancel the delay, use Wait instead. +// To drop or skip events exceeding rate limit, use Allow instead. +func (lim *Limiter) ReserveN(now time.Time, n int) *Reservation { + r := lim.reserveN(now, n, InfDuration) + return &r +} + +// contextContext is a temporary(?) copy of the context.Context type +// to support both Go 1.6 using golang.org/x/net/context and Go 1.7+ +// with the built-in context package. If people ever stop using Go 1.6 +// we can remove this. +type contextContext interface { + Deadline() (deadline time.Time, ok bool) + Done() <-chan struct{} + Err() error + Value(key interface{}) interface{} +} + +// Wait is shorthand for WaitN(ctx, 1). +func (lim *Limiter) wait(ctx contextContext) (err error) { + return lim.WaitN(ctx, 1) +} + +// WaitN blocks until lim permits n events to happen. +// It returns an error if n exceeds the Limiter's burst size, the Context is +// canceled, or the expected wait time exceeds the Context's Deadline. +// The burst limit is ignored if the rate limit is Inf. +func (lim *Limiter) waitN(ctx contextContext, n int) (err error) { + if n > lim.burst && lim.limit != Inf { + return fmt.Errorf("rate: Wait(n=%d) exceeds limiter's burst %d", n, lim.burst) + } + // Check if ctx is already cancelled + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + // Determine wait limit + now := time.Now() + waitLimit := InfDuration + if deadline, ok := ctx.Deadline(); ok { + waitLimit = deadline.Sub(now) + } + // Reserve + r := lim.reserveN(now, n, waitLimit) + if !r.ok { + return fmt.Errorf("rate: Wait(n=%d) would exceed context deadline", n) + } + // Wait if necessary + delay := r.DelayFrom(now) + if delay == 0 { + return nil + } + t := time.NewTimer(delay) + defer t.Stop() + select { + case <-t.C: + // We can proceed. + return nil + case <-ctx.Done(): + // Context was canceled before we could proceed. Cancel the + // reservation, which may permit other events to proceed sooner. + r.Cancel() + return ctx.Err() + } +} + +// SetLimit is shorthand for SetLimitAt(time.Now(), newLimit). +func (lim *Limiter) SetLimit(newLimit Limit) { + lim.SetLimitAt(time.Now(), newLimit) +} + +// SetLimitAt sets a new Limit for the limiter. The new Limit, and Burst, may be violated +// or underutilized by those which reserved (using Reserve or Wait) but did not yet act +// before SetLimitAt was called. +func (lim *Limiter) SetLimitAt(now time.Time, newLimit Limit) { + lim.mu.Lock() + defer lim.mu.Unlock() + + now, _, tokens := lim.advance(now) + + lim.last = now + lim.tokens = tokens + lim.limit = newLimit +} + +// reserveN is a helper method for AllowN, ReserveN, and WaitN. +// maxFutureReserve specifies the maximum reservation wait duration allowed. +// reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN. +func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation { + lim.mu.Lock() + + if lim.limit == Inf { + lim.mu.Unlock() + return Reservation{ + ok: true, + lim: lim, + tokens: n, + timeToAct: now, + } + } + + now, last, tokens := lim.advance(now) + + // Calculate the remaining number of tokens resulting from the request. + tokens -= float64(n) + + // Calculate the wait duration + var waitDuration time.Duration + if tokens < 0 { + waitDuration = lim.limit.durationFromTokens(-tokens) + } + + // Decide result + ok := n <= lim.burst && waitDuration <= maxFutureReserve + + // Prepare reservation + r := Reservation{ + ok: ok, + lim: lim, + limit: lim.limit, + } + if ok { + r.tokens = n + r.timeToAct = now.Add(waitDuration) + } + + // Update state + if ok { + lim.last = now + lim.tokens = tokens + lim.lastEvent = r.timeToAct + } else { + lim.last = last + } + + lim.mu.Unlock() + return r +} + +// advance calculates and returns an updated state for lim resulting from the passage of time. +// lim is not changed. +func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time, newTokens float64) { + last := lim.last + if now.Before(last) { + last = now + } + + // Avoid making delta overflow below when last is very old. + maxElapsed := lim.limit.durationFromTokens(float64(lim.burst) - lim.tokens) + elapsed := now.Sub(last) + if elapsed > maxElapsed { + elapsed = maxElapsed + } + + // Calculate the new number of tokens, due to time that passed. + delta := lim.limit.tokensFromDuration(elapsed) + tokens := lim.tokens + delta + if burst := float64(lim.burst); tokens > burst { + tokens = burst + } + + return now, last, tokens +} + +// durationFromTokens is a unit conversion function from the number of tokens to the duration +// of time it takes to accumulate them at a rate of limit tokens per second. +func (limit Limit) durationFromTokens(tokens float64) time.Duration { + seconds := tokens / float64(limit) + return time.Nanosecond * time.Duration(1e9*seconds) +} + +// tokensFromDuration is a unit conversion function from a time duration to the number of tokens +// which could be accumulated during that duration at a rate of limit tokens per second. +func (limit Limit) tokensFromDuration(d time.Duration) float64 { + return d.Seconds() * float64(limit) +} diff --git a/vendor/golang.org/x/time/rate/rate_go16.go b/vendor/golang.org/x/time/rate/rate_go16.go new file mode 100644 index 000000000..6bab1850f --- /dev/null +++ b/vendor/golang.org/x/time/rate/rate_go16.go @@ -0,0 +1,21 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package rate + +import "golang.org/x/net/context" + +// Wait is shorthand for WaitN(ctx, 1). +func (lim *Limiter) Wait(ctx context.Context) (err error) { + return lim.waitN(ctx, 1) +} + +// WaitN blocks until lim permits n events to happen. +// It returns an error if n exceeds the Limiter's burst size, the Context is +// canceled, or the expected wait time exceeds the Context's Deadline. +func (lim *Limiter) WaitN(ctx context.Context, n int) (err error) { + return lim.waitN(ctx, n) +} diff --git a/vendor/golang.org/x/time/rate/rate_go17.go b/vendor/golang.org/x/time/rate/rate_go17.go new file mode 100644 index 000000000..f90d85f51 --- /dev/null +++ b/vendor/golang.org/x/time/rate/rate_go17.go @@ -0,0 +1,21 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package rate + +import "context" + +// Wait is shorthand for WaitN(ctx, 1). +func (lim *Limiter) Wait(ctx context.Context) (err error) { + return lim.waitN(ctx, 1) +} + +// WaitN blocks until lim permits n events to happen. +// It returns an error if n exceeds the Limiter's burst size, the Context is +// canceled, or the expected wait time exceeds the Context's Deadline. +func (lim *Limiter) WaitN(ctx context.Context, n int) (err error) { + return lim.waitN(ctx, n) +} diff --git a/vendor/golang.org/x/time/rate/rate_test.go b/vendor/golang.org/x/time/rate/rate_test.go new file mode 100644 index 000000000..ec8c66ddf --- /dev/null +++ b/vendor/golang.org/x/time/rate/rate_test.go @@ -0,0 +1,459 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package rate + +import ( + "context" + "math" + "runtime" + "sync" + "sync/atomic" + "testing" + "time" +) + +func TestLimit(t *testing.T) { + if Limit(10) == Inf { + t.Errorf("Limit(10) == Inf should be false") + } +} + +func closeEnough(a, b Limit) bool { + return (math.Abs(float64(a)/float64(b)) - 1.0) < 1e-9 +} + +func TestEvery(t *testing.T) { + cases := []struct { + interval time.Duration + lim Limit + }{ + {0, Inf}, + {-1, Inf}, + {1 * time.Nanosecond, Limit(1e9)}, + {1 * time.Microsecond, Limit(1e6)}, + {1 * time.Millisecond, Limit(1e3)}, + {10 * time.Millisecond, Limit(100)}, + {100 * time.Millisecond, Limit(10)}, + {1 * time.Second, Limit(1)}, + {2 * time.Second, Limit(0.5)}, + {time.Duration(2.5 * float64(time.Second)), Limit(0.4)}, + {4 * time.Second, Limit(0.25)}, + {10 * time.Second, Limit(0.1)}, + {time.Duration(math.MaxInt64), Limit(1e9 / float64(math.MaxInt64))}, + } + for _, tc := range cases { + lim := Every(tc.interval) + if !closeEnough(lim, tc.lim) { + t.Errorf("Every(%v) = %v want %v", tc.interval, lim, tc.lim) + } + } +} + +const ( + d = 100 * time.Millisecond +) + +var ( + t0 = time.Now() + t1 = t0.Add(time.Duration(1) * d) + t2 = t0.Add(time.Duration(2) * d) + t3 = t0.Add(time.Duration(3) * d) + t4 = t0.Add(time.Duration(4) * d) + t5 = t0.Add(time.Duration(5) * d) + t9 = t0.Add(time.Duration(9) * d) +) + +type allow struct { + t time.Time + n int + ok bool +} + +func run(t *testing.T, lim *Limiter, allows []allow) { + for i, allow := range allows { + ok := lim.AllowN(allow.t, allow.n) + if ok != allow.ok { + t.Errorf("step %d: lim.AllowN(%v, %v) = %v want %v", + i, allow.t, allow.n, ok, allow.ok) + } + } +} + +func TestLimiterBurst1(t *testing.T) { + run(t, NewLimiter(10, 1), []allow{ + {t0, 1, true}, + {t0, 1, false}, + {t0, 1, false}, + {t1, 1, true}, + {t1, 1, false}, + {t1, 1, false}, + {t2, 2, false}, // burst size is 1, so n=2 always fails + {t2, 1, true}, + {t2, 1, false}, + }) +} + +func TestLimiterBurst3(t *testing.T) { + run(t, NewLimiter(10, 3), []allow{ + {t0, 2, true}, + {t0, 2, false}, + {t0, 1, true}, + {t0, 1, false}, + {t1, 4, false}, + {t2, 1, true}, + {t3, 1, true}, + {t4, 1, true}, + {t4, 1, true}, + {t4, 1, false}, + {t4, 1, false}, + {t9, 3, true}, + {t9, 0, true}, + }) +} + +func TestLimiterJumpBackwards(t *testing.T) { + run(t, NewLimiter(10, 3), []allow{ + {t1, 1, true}, // start at t1 + {t0, 1, true}, // jump back to t0, two tokens remain + {t0, 1, true}, + {t0, 1, false}, + {t0, 1, false}, + {t1, 1, true}, // got a token + {t1, 1, false}, + {t1, 1, false}, + {t2, 1, true}, // got another token + {t2, 1, false}, + {t2, 1, false}, + }) +} + +func TestSimultaneousRequests(t *testing.T) { + const ( + limit = 1 + burst = 5 + numRequests = 15 + ) + var ( + wg sync.WaitGroup + numOK = uint32(0) + ) + + // Very slow replenishing bucket. + lim := NewLimiter(limit, burst) + + // Tries to take a token, atomically updates the counter and decreases the wait + // group counter. + f := func() { + defer wg.Done() + if ok := lim.Allow(); ok { + atomic.AddUint32(&numOK, 1) + } + } + + wg.Add(numRequests) + for i := 0; i < numRequests; i++ { + go f() + } + wg.Wait() + if numOK != burst { + t.Errorf("numOK = %d, want %d", numOK, burst) + } +} + +func TestLongRunningQPS(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + if runtime.GOOS == "openbsd" { + t.Skip("low resolution time.Sleep invalidates test (golang.org/issue/14183)") + return + } + + // The test runs for a few seconds executing many requests and then checks + // that overall number of requests is reasonable. + const ( + limit = 100 + burst = 100 + ) + var numOK = int32(0) + + lim := NewLimiter(limit, burst) + + var wg sync.WaitGroup + f := func() { + if ok := lim.Allow(); ok { + atomic.AddInt32(&numOK, 1) + } + wg.Done() + } + + start := time.Now() + end := start.Add(5 * time.Second) + for time.Now().Before(end) { + wg.Add(1) + go f() + + // This will still offer ~500 requests per second, but won't consume + // outrageous amount of CPU. + time.Sleep(2 * time.Millisecond) + } + wg.Wait() + elapsed := time.Since(start) + ideal := burst + (limit * float64(elapsed) / float64(time.Second)) + + // We should never get more requests than allowed. + if want := int32(ideal + 1); numOK > want { + t.Errorf("numOK = %d, want %d (ideal %f)", numOK, want, ideal) + } + // We should get very close to the number of requests allowed. + if want := int32(0.999 * ideal); numOK < want { + t.Errorf("numOK = %d, want %d (ideal %f)", numOK, want, ideal) + } +} + +type request struct { + t time.Time + n int + act time.Time + ok bool +} + +// dFromDuration converts a duration to a multiple of the global constant d +func dFromDuration(dur time.Duration) int { + // Adding a millisecond to be swallowed by the integer division + // because we don't care about small inaccuracies + return int((dur + time.Millisecond) / d) +} + +// dSince returns multiples of d since t0 +func dSince(t time.Time) int { + return dFromDuration(t.Sub(t0)) +} + +func runReserve(t *testing.T, lim *Limiter, req request) *Reservation { + return runReserveMax(t, lim, req, InfDuration) +} + +func runReserveMax(t *testing.T, lim *Limiter, req request, maxReserve time.Duration) *Reservation { + r := lim.reserveN(req.t, req.n, maxReserve) + if r.ok && (dSince(r.timeToAct) != dSince(req.act)) || r.ok != req.ok { + t.Errorf("lim.reserveN(t%d, %v, %v) = (t%d, %v) want (t%d, %v)", + dSince(req.t), req.n, maxReserve, dSince(r.timeToAct), r.ok, dSince(req.act), req.ok) + } + return &r +} + +func TestSimpleReserve(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + runReserve(t, lim, request{t0, 2, t2, true}) + runReserve(t, lim, request{t3, 2, t4, true}) +} + +func TestMix(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 3, t1, false}) // should return false because n > Burst + runReserve(t, lim, request{t0, 2, t0, true}) + run(t, lim, []allow{{t1, 2, false}}) // not enought tokens - don't allow + runReserve(t, lim, request{t1, 2, t2, true}) + run(t, lim, []allow{{t1, 1, false}}) // negative tokens - don't allow + run(t, lim, []allow{{t3, 1, true}}) +} + +func TestCancelInvalid(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 3, t3, false}) + r.CancelAt(t0) // should have no effect + runReserve(t, lim, request{t0, 2, t2, true}) // did not get extra tokens +} + +func TestCancelLast(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 2, t2, true}) + r.CancelAt(t1) // got 2 tokens back + runReserve(t, lim, request{t1, 2, t2, true}) +} + +func TestCancelTooLate(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 2, t2, true}) + r.CancelAt(t3) // too late to cancel - should have no effect + runReserve(t, lim, request{t3, 2, t4, true}) +} + +func TestCancel0Tokens(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 1, t1, true}) + runReserve(t, lim, request{t0, 1, t2, true}) + r.CancelAt(t0) // got 0 tokens back + runReserve(t, lim, request{t0, 1, t3, true}) +} + +func TestCancel1Token(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 2, t2, true}) + runReserve(t, lim, request{t0, 1, t3, true}) + r.CancelAt(t2) // got 1 token back + runReserve(t, lim, request{t2, 2, t4, true}) +} + +func TestCancelMulti(t *testing.T) { + lim := NewLimiter(10, 4) + + runReserve(t, lim, request{t0, 4, t0, true}) + rA := runReserve(t, lim, request{t0, 3, t3, true}) + runReserve(t, lim, request{t0, 1, t4, true}) + rC := runReserve(t, lim, request{t0, 1, t5, true}) + rC.CancelAt(t1) // get 1 token back + rA.CancelAt(t1) // get 2 tokens back, as if C was never reserved + runReserve(t, lim, request{t1, 3, t5, true}) +} + +func TestReserveJumpBack(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t1, 2, t1, true}) // start at t1 + runReserve(t, lim, request{t0, 1, t1, true}) // should violate Limit,Burst + runReserve(t, lim, request{t2, 2, t3, true}) +} + +func TestReserveJumpBackCancel(t *testing.T) { + lim := NewLimiter(10, 2) + + runReserve(t, lim, request{t1, 2, t1, true}) // start at t1 + r := runReserve(t, lim, request{t1, 2, t3, true}) + runReserve(t, lim, request{t1, 1, t4, true}) + r.CancelAt(t0) // cancel at t0, get 1 token back + runReserve(t, lim, request{t1, 2, t4, true}) // should violate Limit,Burst +} + +func TestReserveSetLimit(t *testing.T) { + lim := NewLimiter(5, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + runReserve(t, lim, request{t0, 2, t4, true}) + lim.SetLimitAt(t2, 10) + runReserve(t, lim, request{t2, 1, t4, true}) // violates Limit and Burst +} + +func TestReserveSetLimitCancel(t *testing.T) { + lim := NewLimiter(5, 2) + + runReserve(t, lim, request{t0, 2, t0, true}) + r := runReserve(t, lim, request{t0, 2, t4, true}) + lim.SetLimitAt(t2, 10) + r.CancelAt(t2) // 2 tokens back + runReserve(t, lim, request{t2, 2, t3, true}) +} + +func TestReserveMax(t *testing.T) { + lim := NewLimiter(10, 2) + maxT := d + + runReserveMax(t, lim, request{t0, 2, t0, true}, maxT) + runReserveMax(t, lim, request{t0, 1, t1, true}, maxT) // reserve for close future + runReserveMax(t, lim, request{t0, 1, t2, false}, maxT) // time to act too far in the future +} + +type wait struct { + name string + ctx context.Context + n int + delay int // in multiples of d + nilErr bool +} + +func runWait(t *testing.T, lim *Limiter, w wait) { + start := time.Now() + err := lim.WaitN(w.ctx, w.n) + delay := time.Now().Sub(start) + if (w.nilErr && err != nil) || (!w.nilErr && err == nil) || w.delay != dFromDuration(delay) { + errString := "" + if !w.nilErr { + errString = "" + } + t.Errorf("lim.WaitN(%v, lim, %v) = %v with delay %v ; want %v with delay %v", + w.name, w.n, err, delay, errString, d*time.Duration(w.delay)) + } +} + +func TestWaitSimple(t *testing.T) { + lim := NewLimiter(10, 3) + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + runWait(t, lim, wait{"already-cancelled", ctx, 1, 0, false}) + + runWait(t, lim, wait{"exceed-burst-error", context.Background(), 4, 0, false}) + + runWait(t, lim, wait{"act-now", context.Background(), 2, 0, true}) + runWait(t, lim, wait{"act-later", context.Background(), 3, 2, true}) +} + +func TestWaitCancel(t *testing.T) { + lim := NewLimiter(10, 3) + + ctx, cancel := context.WithCancel(context.Background()) + runWait(t, lim, wait{"act-now", ctx, 2, 0, true}) // after this lim.tokens = 1 + go func() { + time.Sleep(d) + cancel() + }() + runWait(t, lim, wait{"will-cancel", ctx, 3, 1, false}) + // should get 3 tokens back, and have lim.tokens = 2 + t.Logf("tokens:%v last:%v lastEvent:%v", lim.tokens, lim.last, lim.lastEvent) + runWait(t, lim, wait{"act-now-after-cancel", context.Background(), 2, 0, true}) +} + +func TestWaitTimeout(t *testing.T) { + lim := NewLimiter(10, 3) + + ctx, cancel := context.WithTimeout(context.Background(), d) + defer cancel() + runWait(t, lim, wait{"act-now", ctx, 2, 0, true}) + runWait(t, lim, wait{"w-timeout-err", ctx, 3, 0, false}) +} + +func TestWaitInf(t *testing.T) { + lim := NewLimiter(Inf, 0) + + runWait(t, lim, wait{"exceed-burst-no-error", context.Background(), 3, 0, true}) +} + +func BenchmarkAllowN(b *testing.B) { + lim := NewLimiter(Every(1*time.Second), 1) + now := time.Now() + b.ReportAllocs() + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + lim.AllowN(now, 1) + } + }) +} + +func BenchmarkWaitNNoDelay(b *testing.B) { + lim := NewLimiter(Limit(b.N), b.N) + ctx := context.Background() + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + lim.WaitN(ctx, 1) + } +} diff --git a/vendor/k8s.io/client-go/.github/PULL_REQUEST_TEMPLATE.md b/vendor/k8s.io/client-go/.github/PULL_REQUEST_TEMPLATE.md index ad11b57a8..e559c074b 100644 --- a/vendor/k8s.io/client-go/.github/PULL_REQUEST_TEMPLATE.md +++ b/vendor/k8s.io/client-go/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,2 @@ -Sorry, client-go does not accept changes via pull requests at this time. Please -submit your pull request to the main repository: -https://github.com/kubernetes/kubernetes. See the guidance here: -https://github.com/kubernetes/client-go#contributing-code. +Sorry, we do not accept changes directly against this repository. Please see +CONTRIBUTING.md for information on where and how to contribute instead. diff --git a/vendor/k8s.io/client-go/CHANGELOG.md b/vendor/k8s.io/client-go/CHANGELOG.md index 88ffb2201..bfa8a453d 100644 --- a/vendor/k8s.io/client-go/CHANGELOG.md +++ b/vendor/k8s.io/client-go/CHANGELOG.md @@ -2,6 +2,111 @@ TODO: This document was manually maintained so might be incomplete. The automation effort is tracked in https://github.com/kubernetes/client-go/issues/234. +Changes in `k8s.io/api` and `k8s.io/apimachinery` are mentioned here +because `k8s.io/client-go` depends on them. + +# v6.0.0 + +**Breaking Changes:** + +* If you upgrade your client-go libs and use the `AppsV1() or Apps()` interface, please note that the default garbage collection behavior is changed. + + * [https://github.com/kubernetes/kubernetes/pull/55148](https://github.com/kubernetes/kubernetes/pull/55148) + +* Swagger 1.2 retriever `DiscoveryClient.SwaggerSchema` was removed from the discovery client + + * [https://github.com/kubernetes/kubernetes/pull/53441](https://github.com/kubernetes/kubernetes/pull/53441) + +* Informers got a NewFilteredSharedInformerFactory to e.g. filter by namespace + + * [https://github.com/kubernetes/kubernetes/pull/54660](https://github.com/kubernetes/kubernetes/pull/54660) + +* [k8s.io/api] The dynamic admission webhook is split into two kinds, mutating and validating. +The kinds have changed completely and old code must be ported to `admissionregistration.k8s.io/v1beta1` - +`MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` + + * [https://github.com/kubernetes/kubernetes/pull/55282](https://github.com/kubernetes/kubernetes/pull/55282) + +* [k8s.io/api] Renamed `core/v1.ScaleIOVolumeSource` to `ScaleIOPersistentVolumeSource` + + * [https://github.com/kubernetes/kubernetes/pull/54013](https://github.com/kubernetes/kubernetes/pull/54013) + +* [k8s.io/api] Renamed `core/v1.RBDVolumeSource` to `RBDPersistentVolumeSource` + + * [https://github.com/kubernetes/kubernetes/pull/54302](https://github.com/kubernetes/kubernetes/pull/54302) + +* [k8s.io/api] Removed `core/v1.CreatedByAnnotation` + + * [https://github.com/kubernetes/kubernetes/pull/54445](https://github.com/kubernetes/kubernetes/pull/54445) + +* [k8s.io/api] Renamed `core/v1.StorageMediumHugepages` to `StorageMediumHugePages` + + * [https://github.com/kubernetes/kubernetes/pull/54748](https://github.com/kubernetes/kubernetes/pull/54748) + +* [k8s.io/api] `core/v1.Taint.TimeAdded` became a pointer + + * [https://github.com/kubernetes/kubernetes/pull/43016](https://github.com/kubernetes/kubernetes/pull/43016) + +* [k8s.io/api] `core/v1.DefaultHardPodAffinitySymmetricWeight` type changed from int to int32 + + * [https://github.com/kubernetes/kubernetes/pull/53850](https://github.com/kubernetes/kubernetes/pull/53850) + +* [k8s.io/apimachinery] `ObjectCopier` interface was removed (requires switch to new generators with DeepCopy methods) + + * [https://github.com/kubernetes/kubernetes/pull/53525](https://github.com/kubernetes/kubernetes/pull/53525) + +**New Features:** + +* Certificate manager was moved from kubelet to `k8s.io/client-go/util/certificates` + + * [https://github.com/kubernetes/kubernetes/pull/49654](https://github.com/kubernetes/kubernetes/pull/49654) + +* [k8s.io/api] Workloads api types are promoted to `apps/v1` version + + * [https://github.com/kubernetes/kubernetes/pull/53679](https://github.com/kubernetes/kubernetes/pull/53679) + +* [k8s.io/api] Added `storage.k8s.io/v1alpha1` API group + + * [https://github.com/kubernetes/kubernetes/pull/54463](https://github.com/kubernetes/kubernetes/pull/54463) + +* [k8s.io/api] Added support for conditions in StatefulSet status + + * [https://github.com/kubernetes/kubernetes/pull/55268](https://github.com/kubernetes/kubernetes/pull/55268) + +* [k8s.io/api] Added support for conditions in DaemonSet status + + * [https://github.com/kubernetes/kubernetes/pull/55272](https://github.com/kubernetes/kubernetes/pull/55272) + +* [k8s.io/apimachinery] Added polymorphic scale client in `k8s.io/client-go/scale`, which supports scaling of resources in arbitrary API groups + + * [https://github.com/kubernetes/kubernetes/pull/53743](https://github.com/kubernetes/kubernetes/pull/53743) + +* [k8s.io/apimachinery] `meta.MetadataAccessor` got API chunking support + + * [https://github.com/kubernetes/kubernetes/pull/53768](https://github.com/kubernetes/kubernetes/pull/53768) + +* [k8s.io/apimachinery] `unstructured.Unstructured` got getters and setters + + * [https://github.com/kubernetes/kubernetes/pull/51940](https://github.com/kubernetes/kubernetes/pull/51940) + +**Bug fixes and Improvements:** + +* The body in glog output is not truncated with log level 10 + + * [https://github.com/kubernetes/kubernetes/pull/54801](https://github.com/kubernetes/kubernetes/pull/54801) + +* [k8s.io/api] Unset `creationTimestamp` field is output as null if encoded from an unstructured object + + * [https://github.com/kubernetes/kubernetes/pull/53464](https://github.com/kubernetes/kubernetes/pull/53464) + +* [k8s.io/apimachinery] Redirect behavior is restored for proxy subresources + + * [https://github.com/kubernetes/kubernetes/pull/52933](https://github.com/kubernetes/kubernetes/pull/52933) + +* [k8s.io/apimachinery] Random string generation functions are optimized + + * [https://github.com/kubernetes/kubernetes/pull/53720](https://github.com/kubernetes/kubernetes/pull/53720) + # v5.0.1 Bug fix: picked up a security fix [kubernetes/kubernetes#53443](https://github.com/kubernetes/kubernetes/pull/53443) for `PodSecurityPolicy`. diff --git a/vendor/k8s.io/client-go/CONTRIBUTING.md b/vendor/k8s.io/client-go/CONTRIBUTING.md new file mode 100644 index 000000000..b01f8abb0 --- /dev/null +++ b/vendor/k8s.io/client-go/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing guidelines + +Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. + +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/client-go](https://git.k8s.io/kubernetes/staging/src/k8s.io/client-go) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). + +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/staging.md) for more information diff --git a/vendor/k8s.io/client-go/Godeps/Godeps.json b/vendor/k8s.io/client-go/Godeps/Godeps.json index a70d2abb0..3598fddc7 100644 --- a/vendor/k8s.io/client-go/Godeps/Godeps.json +++ b/vendor/k8s.io/client-go/Godeps/Godeps.json @@ -16,59 +16,19 @@ }, { "ImportPath": "github.com/Azure/go-autorest/autorest", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + "Rev": "d4e6b95c12a08b4de2d48b45d5b4d594e5d32fab" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/adal", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + "Rev": "d4e6b95c12a08b4de2d48b45d5b4d594e5d32fab" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/azure", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + "Rev": "d4e6b95c12a08b4de2d48b45d5b4d594e5d32fab" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/date", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" - }, - { - "ImportPath": "github.com/PuerkitoBio/purell", - "Rev": "8a290539e2e8629dbc4e6bad948158f790ec31f4" - }, - { - "ImportPath": "github.com/PuerkitoBio/urlesc", - "Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e" - }, - { - "ImportPath": "github.com/coreos/go-oidc/http", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/jose", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/key", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/oauth2", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/oidc", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/pkg/health", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "ImportPath": "github.com/coreos/pkg/httputil", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "ImportPath": "github.com/coreos/pkg/timeutil", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" + "Rev": "d4e6b95c12a08b4de2d48b45d5b4d594e5d32fab" }, { "ImportPath": "github.com/davecgh/go-spew/spew", @@ -86,34 +46,10 @@ "ImportPath": "github.com/docker/spdystream/spdy", "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" }, - { - "ImportPath": "github.com/emicklei/go-restful", - "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" - }, - { - "ImportPath": "github.com/emicklei/go-restful/log", - "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" - }, { "ImportPath": "github.com/ghodss/yaml", "Rev": "73d445a93680fa1a78ae23a5839bad48f32ba1ee" }, - { - "ImportPath": "github.com/go-openapi/jsonpointer", - "Rev": "46af16f9f7b149af66e5d1bd010e3574dc06de98" - }, - { - "ImportPath": "github.com/go-openapi/jsonreference", - "Rev": "13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272" - }, - { - "ImportPath": "github.com/go-openapi/spec", - "Rev": "7abd5745472fff5eb3685386d5fb8bf38683154d" - }, - { - "ImportPath": "github.com/go-openapi/swag", - "Rev": "f3f9494671f93fcff853e3c6e9e948b3eb71e590" - }, { "ImportPath": "github.com/gogo/protobuf/proto", "Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7" @@ -150,10 +86,6 @@ "ImportPath": "github.com/golang/protobuf/ptypes/timestamp", "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" }, - { - "ImportPath": "github.com/google/btree", - "Rev": "7d79101e329e5a3adf994758c578dab82b90c017" - }, { "ImportPath": "github.com/google/gofuzz", "Rev": "44d81051d367757e1c7c6a5a86423ece9afcf63c" @@ -172,39 +104,31 @@ }, { "ImportPath": "github.com/gophercloud/gophercloud", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/openstack", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/openstack/utils", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/gophercloud/gophercloud/pagination", - "Rev": "8183543f90d1aef267a5ecc209f2e0715b355acb" - }, - { - "ImportPath": "github.com/gregjones/httpcache", - "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" - }, - { - "ImportPath": "github.com/gregjones/httpcache/diskcache", - "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" + "Rev": "6da026c32e2d622cc242d32984259c77237aefe1" }, { "ImportPath": "github.com/hashicorp/golang-lru", @@ -222,33 +146,9 @@ "ImportPath": "github.com/imdario/mergo", "Rev": "6633656539c1639d9d78127b7d47c622b5d7b6dc" }, - { - "ImportPath": "github.com/jonboulle/clockwork", - "Rev": "72f9bd7c4e0c2a40055ab3d0f09654f730cce982" - }, { "ImportPath": "github.com/json-iterator/go", - "Rev": "36b14963da70d11297d313183d7e6388c8510e1e" - }, - { - "ImportPath": "github.com/juju/ratelimit", - "Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342" - }, - { - "ImportPath": "github.com/mailru/easyjson/buffer", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/mailru/easyjson/jlexer", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/mailru/easyjson/jwriter", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/peterbourgon/diskv", - "Rev": "5f041e8faa004a95c88a202771f4cc3e991971e6" + "Rev": "13f86432b882000a51c6e610c620974462691a97" }, { "ImportPath": "github.com/pmezard/go-difflib/difflib", @@ -256,7 +156,7 @@ }, { "ImportPath": "github.com/spf13/pflag", - "Rev": "9ff6c6923cfffbcd502984b8e0c80539a94968b7" + "Rev": "4c012f6dcd9546820e378d0bdda4d8fc772cdfea" }, { "ImportPath": "github.com/stretchr/testify/assert", @@ -318,34 +218,10 @@ "ImportPath": "golang.org/x/sys/windows", "Rev": "95c6576299259db960f6c5b9b69ea52422860fce" }, - { - "ImportPath": "golang.org/x/text/cases", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/internal", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/internal/tag", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/language", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/runes", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, { "ImportPath": "golang.org/x/text/secure/bidirule", "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" }, - { - "ImportPath": "golang.org/x/text/secure/precis", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, { "ImportPath": "golang.org/x/text/transform", "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" @@ -359,8 +235,8 @@ "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" }, { - "ImportPath": "golang.org/x/text/width", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + "ImportPath": "golang.org/x/time/rate", + "Rev": "f51c12702a4d776e4c1fa9b0fabab841babae631" }, { "ImportPath": "gopkg.in/inf.v0", @@ -368,343 +244,339 @@ }, { "ImportPath": "gopkg.in/yaml.v2", - "Rev": "53feefa2559fb8dfa8d81baad31be332c97d6c77" + "Rev": "670d4cfef0544295bc27a114dbac37980d83185a" }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "11147472b7c934c474a2c484af3c0c5210b7a3af" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "180eddb345a5be3a157cea1c624700ad5bd27b8f" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/common", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + "Rev": "50ae88d24ede7b8bad68e23c805b5d3da5c8abaf" } ] } diff --git a/vendor/k8s.io/client-go/Godeps/OWNERS b/vendor/k8s.io/client-go/Godeps/OWNERS new file mode 100644 index 000000000..3d49f3060 --- /dev/null +++ b/vendor/k8s.io/client-go/Godeps/OWNERS @@ -0,0 +1,2 @@ +approvers: +- dep-approvers diff --git a/vendor/k8s.io/client-go/INSTALL.md b/vendor/k8s.io/client-go/INSTALL.md index 3417e0cd7..42656284f 100644 --- a/vendor/k8s.io/client-go/INSTALL.md +++ b/vendor/k8s.io/client-go/INSTALL.md @@ -63,7 +63,7 @@ To install `client-go` and place its dependencies in your `$GOPATH`: ```sh go get k8s.io/client-go/... cd $GOPATH/src/k8s.io/client-go -git checkout v2.0.0 +git checkout v6.0.0 # cd 1.5 # only necessary with 1.5 and 1.4 clients. godep restore ./... ``` @@ -99,7 +99,7 @@ your project: package: ( your project's import path ) # e.g. github.com/foo/bar import: - package: k8s.io/client-go - version: v2.0.0 + version: v6.0.0 ``` Second, add a Go file that imports `client-go` somewhere in your project, @@ -132,7 +132,7 @@ requests can override the version manually in `glide.yaml`. For example: package: ( your project's import path ) # e.g. github.com/foo/bar import: - package: k8s.io/client-go - version: v2.0.0 + version: v6.0.0 # Use a newer version of go-spew even though client-go wants an old one. - package: github.com/davecgh/go-spew version: v1.1.0 diff --git a/vendor/k8s.io/client-go/README.md b/vendor/k8s.io/client-go/README.md index ed1b887fc..82f41d738 100644 --- a/vendor/k8s.io/client-go/README.md +++ b/vendor/k8s.io/client-go/README.md @@ -2,12 +2,22 @@ Go clients for talking to a [kubernetes](http://kubernetes.io/) cluster. -We currently recommend using the v4.0.0 tag. See [INSTALL.md](/INSTALL.md) for +We currently recommend using the v6.0.0 tag. See [INSTALL.md](/INSTALL.md) for detailed installation instructions. `go get k8s.io/client-go/...` works, but will give you head and doesn't handle the dependencies well. -[![Build Status](https://travis-ci.org/kubernetes/client-go.svg?branch=master)](https://travis-ci.org/kubernetes/client-go) -[![GoDoc](https://godoc.org/k8s.io/client-go?status.svg)](https://godoc.org/k8s.io/client-go) +[![BuildStatus Widget]][BuildStatus Result] +[![GoReport Widget]][GoReport Status] +[![GoDocWidget]][GoDocReference] + +[BuildStatus Result]: https://travis-ci.org/kubernetes/client-go +[BuildStatus Widget]: https://travis-ci.org/kubernetes/client-go.svg?branch=master + +[GoReport Status]: https://goreportcard.com/report/github.com/kubernetes/client-go +[GoReport Widget]: https://goreportcard.com/badge/github.com/kubernetes/client-go + +[GoDocWidget]: https://godoc.org/k8s.io/client-go?status.svg +[GoDocReference]:https://godoc.org/k8s.io/client-go ## Table of Contents @@ -17,7 +27,7 @@ will give you head and doesn't handle the dependencies well. - [Compatibility: client-go <-> Kubernetes clusters](#compatibility-client-go---kubernetes-clusters) - [Compatibility matrix](#compatibility-matrix) - [Why do the 1.4 and 1.5 branch contain top-level folder named after the version?](#why-do-the-14-and-15-branch-contain-top-level-folder-named-after-the-version) -- [Kuberentes tags](#kubernetes-tags) +- [Kubernetes tags](#kubernetes-tags) - [How to get it](#how-to-get-it) - [How to use it](#how-to-use-it) - [Dependency management](#dependency-management) @@ -81,15 +91,16 @@ We will backport bugfixes--but not new features--into older versions of #### Compatibility matrix -| | Kubernetes 1.4 | Kubernetes 1.5 | Kubernetes 1.6 | Kubernetes 1.7 | Kubernetes 1.8 | -|---------------------|----------------|----------------|----------------|----------------|----------------| -| client-go 1.4 | ✓ | - | - | - | - | -| client-go 1.5 | + | - | - | - | - | -| client-go 2.0 | +- | ✓ | +- | +- | +- | -| client-go 3.0 | +- | +- | ✓ | - | +- | -| client-go 4.0 | +- | +- | +- | ✓ | +- | -| client-go 5.0 | +- | +- | +- | +- | ✓ | -| client-go HEAD | +- | +- | +- | +- | + | +| | Kubernetes 1.4 | Kubernetes 1.5 | Kubernetes 1.6 | Kubernetes 1.7 | Kubernetes 1.8 | Kubernetes 1.9 | +|---------------------|----------------|----------------|----------------|----------------|----------------|----------------| +| client-go 1.4 | ✓ | - | - | - | - | - | +| client-go 1.5 | + | - | - | - | - | - | +| client-go 2.0 | +- | ✓ | +- | +- | +- | +- | +| client-go 3.0 | +- | +- | ✓ | - | +- | +- | +| client-go 4.0 | +- | +- | +- | ✓ | +- | +- | +| client-go 5.0 | +- | +- | +- | +- | ✓ | +- | +| client-go 6.0 | +- | +- | +- | +- | +- | ✓ | +| client-go HEAD | +- | +- | +- | +- | +- | + | Key: @@ -112,10 +123,11 @@ between client-go versions. |----------------|--------------------------------------|-------------------------------| | client-go 1.4 | Kubernetes main repo, 1.4 branch | = - | | client-go 1.5 | Kubernetes main repo, 1.5 branch | = - | -| client-go 2.0 | Kubernetes main repo, 1.5 branch | ✓ | -| client-go 3.0 | Kubernetes main repo, 1.6 branch | ✓ | +| client-go 2.0 | Kubernetes main repo, 1.5 branch | = - | +| client-go 3.0 | Kubernetes main repo, 1.6 branch | = - | | client-go 4.0 | Kubernetes main repo, 1.7 branch | ✓ | | client-go 5.0 | Kubernetes main repo, 1.8 branch | ✓ | +| client-go 6.0 | Kubernetes main repo, 1.9 branch | ✓ | | client-go HEAD | Kubernetes main repo, master branch | ✓ | Key: diff --git a/vendor/k8s.io/client-go/code-of-conduct.md b/vendor/k8s.io/client-go/code-of-conduct.md new file mode 100644 index 000000000..0d15c00cf --- /dev/null +++ b/vendor/k8s.io/client-go/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/vendor/k8s.io/client-go/discovery/BUILD b/vendor/k8s.io/client-go/discovery/BUILD index e47b05276..19523ba53 100644 --- a/vendor/k8s.io/client-go/discovery/BUILD +++ b/vendor/k8s.io/client-go/discovery/BUILD @@ -39,7 +39,6 @@ go_test( "helper_blackbox_test.go", "restmapper_test.go", ], - importpath = "k8s.io/client-go/discovery_test", deps = [ "//vendor/github.com/gogo/protobuf/proto:go_default_library", "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", diff --git a/vendor/k8s.io/client-go/discovery/cached/BUILD b/vendor/k8s.io/client-go/discovery/cached/BUILD index 7f95f83e4..279e0ff9a 100644 --- a/vendor/k8s.io/client-go/discovery/cached/BUILD +++ b/vendor/k8s.io/client-go/discovery/cached/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["memcache_test.go"], - importpath = "k8s.io/client-go/discovery/cached", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/client-go/discovery/fake:go_default_library", diff --git a/vendor/k8s.io/client-go/discovery/discovery_client.go b/vendor/k8s.io/client-go/discovery/discovery_client.go index 26319f494..3c685a955 100644 --- a/vendor/k8s.io/client-go/discovery/discovery_client.go +++ b/vendor/k8s.io/client-go/discovery/discovery_client.go @@ -36,8 +36,12 @@ import ( restclient "k8s.io/client-go/rest" ) -// defaultRetries is the number of times a resource discovery is repeated if an api group disappears on the fly (e.g. ThirdPartyResources). -const defaultRetries = 2 +const ( + // defaultRetries is the number of times a resource discovery is repeated if an api group disappears on the fly (e.g. ThirdPartyResources). + defaultRetries = 2 + // protobuf mime type + mimePb = "application/com.github.proto-openapi.spec.v2@v1.0+protobuf" +) // DiscoveryInterface holds the methods that discover server-supported API groups, // versions and resources. @@ -145,9 +149,9 @@ func (d *DiscoveryClient) ServerGroups() (apiGroupList *metav1.APIGroupList, err apiGroupList = &metav1.APIGroupList{} } - // append the group retrieved from /api to the list if not empty + // prepend the group retrieved from /api to the list if not empty if len(v.Versions) != 0 { - apiGroupList.Groups = append(apiGroupList.Groups, apiGroup) + apiGroupList.Groups = append([]metav1.APIGroup{apiGroup}, apiGroupList.Groups...) } return apiGroupList, nil } @@ -329,9 +333,18 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { // OpenAPISchema fetches the open api schema using a rest client and parses the proto. func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { - data, err := d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() + data, err := d.restClient.Get().AbsPath("/openapi/v2").SetHeader("Accept", mimePb).Do().Raw() if err != nil { - return nil, err + if errors.IsForbidden(err) || errors.IsNotFound(err) { + // single endpoint not found/registered in old server, try to fetch old endpoint + // TODO(roycaihw): remove this in 1.11 + data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() + if err != nil { + return nil, err + } + } else { + return nil, err + } } document := &openapi_v2.Document{} err = proto.Unmarshal(data, document) @@ -395,15 +408,6 @@ func NewDiscoveryClient(c restclient.Interface) *DiscoveryClient { return &DiscoveryClient{restClient: c, LegacyPrefix: "/api"} } -func stringDoesntExistIn(str string, slice []string) bool { - for _, s := range slice { - if s == str { - return false - } - } - return true -} - // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. func (c *DiscoveryClient) RESTClient() restclient.Interface { diff --git a/vendor/k8s.io/client-go/discovery/discovery_client_test.go b/vendor/k8s.io/client-go/discovery/discovery_client_test.go index 409add2bf..ad855139a 100644 --- a/vendor/k8s.io/client-go/discovery/discovery_client_test.go +++ b/vendor/k8s.io/client-go/discovery/discovery_client_test.go @@ -74,6 +74,17 @@ func TestGetServerGroupsWithV1Server(t *testing.T) { "v1", }, } + case "/apis": + obj = &metav1.APIGroupList{ + Groups: []metav1.APIGroup{ + { + Name: "extensions", + Versions: []metav1.GroupVersionForDiscovery{ + {GroupVersion: "extensions/v1beta1"}, + }, + }, + }, + } default: w.WriteHeader(http.StatusNotFound) return @@ -95,8 +106,8 @@ func TestGetServerGroupsWithV1Server(t *testing.T) { t.Fatalf("unexpected error: %v", err) } groupVersions := metav1.ExtractGroupVersions(apiGroupList) - if !reflect.DeepEqual(groupVersions, []string{"v1"}) { - t.Errorf("expected: %q, got: %q", []string{"v1"}, groupVersions) + if !reflect.DeepEqual(groupVersions, []string{"v1", "extensions/v1beta1"}) { + t.Errorf("expected: %q, got: %q", []string{"v1", "extensions/v1beta1"}, groupVersions) } } @@ -315,9 +326,14 @@ var returnedOpenAPI = openapi_v2.Document{ }, } -func openapiSchemaFakeServer() (*httptest.Server, error) { +func openapiSchemaDeprecatedFakeServer() (*httptest.Server, error) { var sErr error server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + // old server returns 403 on new endpoint request + if req.URL.Path == "/openapi/v2" { + w.WriteHeader(http.StatusForbidden) + return + } if req.URL.Path != "/swagger-2.0.0.pb-v1" { sErr = fmt.Errorf("Unexpected url %v", req.URL) } @@ -338,6 +354,33 @@ func openapiSchemaFakeServer() (*httptest.Server, error) { return server, sErr } +func openapiSchemaFakeServer() (*httptest.Server, error) { + var sErr error + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if req.URL.Path != "/openapi/v2" { + sErr = fmt.Errorf("Unexpected url %v", req.URL) + } + if req.Method != "GET" { + sErr = fmt.Errorf("Unexpected method %v", req.Method) + } + decipherableFormat := req.Header.Get("Accept") + if decipherableFormat != "application/com.github.proto-openapi.spec.v2@v1.0+protobuf" { + sErr = fmt.Errorf("Unexpected accept mime type %v", decipherableFormat) + } + + mime.AddExtensionType(".pb-v1", "application/com.github.googleapis.gnostic.OpenAPIv2@68f4ded+protobuf") + + output, err := proto.Marshal(&returnedOpenAPI) + if err != nil { + sErr = err + return + } + w.WriteHeader(http.StatusOK) + w.Write(output) + })) + return server, sErr +} + func TestGetOpenAPISchema(t *testing.T) { server, err := openapiSchemaFakeServer() if err != nil { @@ -355,6 +398,23 @@ func TestGetOpenAPISchema(t *testing.T) { } } +func TestGetOpenAPISchemaFallback(t *testing.T) { + server, err := openapiSchemaDeprecatedFakeServer() + if err != nil { + t.Errorf("unexpected error starting fake server: %v", err) + } + defer server.Close() + + client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL}) + got, err := client.OpenAPISchema() + if err != nil { + t.Fatalf("unexpected error getting openapi: %v", err) + } + if e, a := returnedOpenAPI, *got; !reflect.DeepEqual(e, a) { + t.Errorf("expected %v, got %v", e, a) + } +} + func TestServerPreferredResources(t *testing.T) { stable := metav1.APIResourceList{ GroupVersion: "v1", diff --git a/vendor/k8s.io/client-go/discovery/fake/BUILD b/vendor/k8s.io/client-go/discovery/fake/BUILD index 1477088da..5b50832a8 100644 --- a/vendor/k8s.io/client-go/discovery/fake/BUILD +++ b/vendor/k8s.io/client-go/discovery/fake/BUILD @@ -37,7 +37,6 @@ filegroup( go_test( name = "go_default_xtest", srcs = ["discovery_test.go"], - importpath = "k8s.io/client-go/discovery/fake_test", deps = [ "//vendor/k8s.io/apimachinery/pkg/version:go_default_library", "//vendor/k8s.io/client-go/discovery/fake:go_default_library", diff --git a/vendor/k8s.io/client-go/discovery/restmapper.go b/vendor/k8s.io/client-go/discovery/restmapper.go index 6d1de8c1b..df5ab0358 100644 --- a/vendor/k8s.io/client-go/discovery/restmapper.go +++ b/vendor/k8s.io/client-go/discovery/restmapper.go @@ -18,6 +18,7 @@ package discovery import ( "fmt" + "strings" "sync" "k8s.io/apimachinery/pkg/api/meta" @@ -108,6 +109,7 @@ func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.V plural := gv.WithResource(resource.Name) singular := gv.WithResource(resource.SingularName) versionMapper.AddSpecific(gv.WithKind(resource.Kind), plural, singular, scope) + versionMapper.AddSpecific(gv.WithKind(strings.ToLower(resource.Kind)), plural, singular, scope) // TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope) } diff --git a/vendor/k8s.io/client-go/dynamic/BUILD b/vendor/k8s.io/client-go/dynamic/BUILD index a0271859e..3642f6a0f 100644 --- a/vendor/k8s.io/client-go/dynamic/BUILD +++ b/vendor/k8s.io/client-go/dynamic/BUILD @@ -12,8 +12,7 @@ go_test( "client_test.go", "dynamic_util_test.go", ], - importpath = "k8s.io/client-go/dynamic", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", diff --git a/vendor/k8s.io/client-go/dynamic/client.go b/vendor/k8s.io/client-go/dynamic/client.go index a941189d7..833e43537 100644 --- a/vendor/k8s.io/client-go/dynamic/client.go +++ b/vendor/k8s.io/client-go/dynamic/client.go @@ -47,7 +47,7 @@ type Interface interface { GetRateLimiter() flowcontrol.RateLimiter // Resource returns an API interface to the specified resource for this client's // group and version. If resource is not a namespaced resource, then namespace - // is ignored. The ResourceInterface inherits the paramater codec of this client. + // is ignored. The ResourceInterface inherits the parameter codec of this client. Resource(resource *metav1.APIResource, namespace string) ResourceInterface // ParameterCodec returns a client with the provided parameter codec. ParameterCodec(parameterCodec runtime.ParameterCodec) Interface @@ -145,6 +145,19 @@ type ResourceClient struct { parameterCodec runtime.ParameterCodec } +func (rc *ResourceClient) parseResourceSubresourceName() (string, []string) { + var resourceName string + var subresourceName []string + if strings.Contains(rc.resource.Name, "/") { + resourceName = strings.Split(rc.resource.Name, "/")[0] + subresourceName = strings.Split(rc.resource.Name, "/")[1:] + } else { + resourceName = rc.resource.Name + } + + return resourceName, subresourceName +} + // List returns a list of objects for this resource. func (rc *ResourceClient) List(opts metav1.ListOptions) (runtime.Object, error) { parameterEncoder := rc.parameterCodec @@ -166,9 +179,11 @@ func (rc *ResourceClient) Get(name string, opts metav1.GetOptions) (*unstructure parameterEncoder = defaultParameterEncoder } result := new(unstructured.Unstructured) + resourceName, subresourceName := rc.parseResourceSubresourceName() err := rc.cl.Get(). NamespaceIfScoped(rc.ns, rc.resource.Namespaced). - Resource(rc.resource.Name). + Resource(resourceName). + SubResource(subresourceName...). VersionedParams(&opts, parameterEncoder). Name(name). Do(). @@ -205,11 +220,26 @@ func (rc *ResourceClient) DeleteCollection(deleteOptions *metav1.DeleteOptions, // Create creates the provided resource. func (rc *ResourceClient) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) { result := new(unstructured.Unstructured) - err := rc.cl.Post(). + resourceName, subresourceName := rc.parseResourceSubresourceName() + req := rc.cl.Post(). NamespaceIfScoped(rc.ns, rc.resource.Namespaced). - Resource(rc.resource.Name). - Body(obj). - Do(). + Resource(resourceName). + Body(obj) + if len(subresourceName) > 0 { + // If the provided resource is a subresource, the POST request should contain + // object name. Examples of subresources that support Create operation: + // core/v1/pods/{name}/binding + // core/v1/pods/{name}/eviction + // extensions/v1beta1/deployments/{name}/rollback + // apps/v1beta1/deployments/{name}/rollback + // NOTE: Currently our system assumes every subresource object has the same + // name as the parent resource object. E.g. a pods/binding object having + // metadada.name "foo" means pod "foo" is being bound. We may need to + // change this if we break the assumption in the future. + req = req.SubResource(subresourceName...). + Name(obj.GetName()) + } + err := req.Do(). Into(result) return result, err } @@ -220,9 +250,15 @@ func (rc *ResourceClient) Update(obj *unstructured.Unstructured) (*unstructured. if len(obj.GetName()) == 0 { return result, errors.New("object missing name") } + resourceName, subresourceName := rc.parseResourceSubresourceName() err := rc.cl.Put(). NamespaceIfScoped(rc.ns, rc.resource.Namespaced). - Resource(rc.resource.Name). + Resource(resourceName). + SubResource(subresourceName...). + // NOTE: Currently our system assumes every subresource object has the same + // name as the parent resource object. E.g. a pods/binding object having + // metadada.name "foo" means pod "foo" is being bound. We may need to + // change this if we break the assumption in the future. Name(obj.GetName()). Body(obj). Do(). @@ -244,11 +280,14 @@ func (rc *ResourceClient) Watch(opts metav1.ListOptions) (watch.Interface, error Watch() } +// Patch applies the patch and returns the patched resource. func (rc *ResourceClient) Patch(name string, pt types.PatchType, data []byte) (*unstructured.Unstructured, error) { result := new(unstructured.Unstructured) + resourceName, subresourceName := rc.parseResourceSubresourceName() err := rc.cl.Patch(pt). NamespaceIfScoped(rc.ns, rc.resource.Namespaced). - Resource(rc.resource.Name). + Resource(resourceName). + SubResource(subresourceName...). Name(name). Body(data). Do(). diff --git a/vendor/k8s.io/client-go/dynamic/client_test.go b/vendor/k8s.io/client-go/dynamic/client_test.go index 1459429c0..ffa550ed5 100644 --- a/vendor/k8s.io/client-go/dynamic/client_test.go +++ b/vendor/k8s.io/client-go/dynamic/client_test.go @@ -150,6 +150,7 @@ func TestList(t *testing.T) { func TestGet(t *testing.T) { tcs := []struct { + resource string namespace string name string path string @@ -157,22 +158,39 @@ func TestGet(t *testing.T) { want *unstructured.Unstructured }{ { - name: "normal_get", - path: "/api/gtest/vtest/rtest/normal_get", - resp: getJSON("vTest", "rTest", "normal_get"), - want: getObject("vTest", "rTest", "normal_get"), + resource: "rtest", + name: "normal_get", + path: "/api/gtest/vtest/rtest/normal_get", + resp: getJSON("vTest", "rTest", "normal_get"), + want: getObject("vTest", "rTest", "normal_get"), }, { + resource: "rtest", namespace: "nstest", name: "namespaced_get", path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_get", resp: getJSON("vTest", "rTest", "namespaced_get"), want: getObject("vTest", "rTest", "namespaced_get"), }, + { + resource: "rtest/srtest", + name: "normal_subresource_get", + path: "/api/gtest/vtest/rtest/normal_subresource_get/srtest", + resp: getJSON("vTest", "srTest", "normal_subresource_get"), + want: getObject("vTest", "srTest", "normal_subresource_get"), + }, + { + resource: "rtest/srtest", + namespace: "nstest", + name: "namespaced_subresource_get", + path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_subresource_get/srtest", + resp: getJSON("vTest", "srTest", "namespaced_subresource_get"), + want: getObject("vTest", "srTest", "namespaced_subresource_get"), + }, } for _, tc := range tcs { gv := &schema.GroupVersion{Group: "gtest", Version: "vtest"} - resource := &metav1.APIResource{Name: "rtest", Namespaced: len(tc.namespace) != 0} + resource := &metav1.APIResource{Name: tc.resource, Namespaced: len(tc.namespace) != 0} cl, srv, err := getClientServer(gv, func(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { t.Errorf("Get(%q) got HTTP method %s. wanted GET", tc.name, r.Method) @@ -303,26 +321,42 @@ func TestDeleteCollection(t *testing.T) { func TestCreate(t *testing.T) { tcs := []struct { + resource string name string namespace string obj *unstructured.Unstructured path string }{ { - name: "normal_create", - path: "/api/gtest/vtest/rtest", - obj: getObject("vTest", "rTest", "normal_create"), + resource: "rtest", + name: "normal_create", + path: "/api/gtest/vtest/rtest", + obj: getObject("vTest", "rTest", "normal_create"), }, { + resource: "rtest", name: "namespaced_create", namespace: "nstest", path: "/api/gtest/vtest/namespaces/nstest/rtest", obj: getObject("vTest", "rTest", "namespaced_create"), }, + { + resource: "rtest/srtest", + name: "normal_subresource_create", + path: "/api/gtest/vtest/rtest/normal_subresource_create/srtest", + obj: getObject("vTest", "srTest", "normal_subresource_create"), + }, + { + resource: "rtest/srtest", + name: "namespaced_subresource_create", + namespace: "nstest", + path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_subresource_create/srtest", + obj: getObject("vTest", "srTest", "namespaced_subresource_create"), + }, } for _, tc := range tcs { gv := &schema.GroupVersion{Group: "gtest", Version: "vtest"} - resource := &metav1.APIResource{Name: "rtest", Namespaced: len(tc.namespace) != 0} + resource := &metav1.APIResource{Name: tc.resource, Namespaced: len(tc.namespace) != 0} cl, srv, err := getClientServer(gv, func(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { t.Errorf("Create(%q) got HTTP method %s. wanted POST", tc.name, r.Method) @@ -362,26 +396,42 @@ func TestCreate(t *testing.T) { func TestUpdate(t *testing.T) { tcs := []struct { + resource string name string namespace string obj *unstructured.Unstructured path string }{ { - name: "normal_update", - path: "/api/gtest/vtest/rtest/normal_update", - obj: getObject("vTest", "rTest", "normal_update"), + resource: "rtest", + name: "normal_update", + path: "/api/gtest/vtest/rtest/normal_update", + obj: getObject("vTest", "rTest", "normal_update"), }, { + resource: "rtest", name: "namespaced_update", namespace: "nstest", path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_update", obj: getObject("vTest", "rTest", "namespaced_update"), }, + { + resource: "rtest/srtest", + name: "normal_subresource_update", + path: "/api/gtest/vtest/rtest/normal_update/srtest", + obj: getObject("vTest", "srTest", "normal_update"), + }, + { + resource: "rtest/srtest", + name: "namespaced_subresource_update", + namespace: "nstest", + path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_update/srtest", + obj: getObject("vTest", "srTest", "namespaced_update"), + }, } for _, tc := range tcs { gv := &schema.GroupVersion{Group: "gtest", Version: "vtest"} - resource := &metav1.APIResource{Name: "rtest", Namespaced: len(tc.namespace) != 0} + resource := &metav1.APIResource{Name: tc.resource, Namespaced: len(tc.namespace) != 0} cl, srv, err := getClientServer(gv, func(w http.ResponseWriter, r *http.Request) { if r.Method != "PUT" { t.Errorf("Update(%q) got HTTP method %s. wanted PUT", tc.name, r.Method) @@ -492,6 +542,7 @@ func TestWatch(t *testing.T) { func TestPatch(t *testing.T) { tcs := []struct { + resource string name string namespace string patch []byte @@ -499,22 +550,39 @@ func TestPatch(t *testing.T) { path string }{ { - name: "normal_patch", - path: "/api/gtest/vtest/rtest/normal_patch", - patch: getJSON("vTest", "rTest", "normal_patch"), - want: getObject("vTest", "rTest", "normal_patch"), + resource: "rtest", + name: "normal_patch", + path: "/api/gtest/vtest/rtest/normal_patch", + patch: getJSON("vTest", "rTest", "normal_patch"), + want: getObject("vTest", "rTest", "normal_patch"), }, { + resource: "rtest", name: "namespaced_patch", namespace: "nstest", path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_patch", patch: getJSON("vTest", "rTest", "namespaced_patch"), want: getObject("vTest", "rTest", "namespaced_patch"), }, + { + resource: "rtest/srtest", + name: "normal_subresource_patch", + path: "/api/gtest/vtest/rtest/normal_subresource_patch/srtest", + patch: getJSON("vTest", "srTest", "normal_subresource_patch"), + want: getObject("vTest", "srTest", "normal_subresource_patch"), + }, + { + resource: "rtest/srtest", + name: "namespaced_subresource_patch", + namespace: "nstest", + path: "/api/gtest/vtest/namespaces/nstest/rtest/namespaced_subresource_patch/srtest", + patch: getJSON("vTest", "srTest", "namespaced_subresource_patch"), + want: getObject("vTest", "srTest", "namespaced_subresource_patch"), + }, } for _, tc := range tcs { gv := &schema.GroupVersion{Group: "gtest", Version: "vtest"} - resource := &metav1.APIResource{Name: "rtest", Namespaced: len(tc.namespace) != 0} + resource := &metav1.APIResource{Name: tc.resource, Namespaced: len(tc.namespace) != 0} cl, srv, err := getClientServer(gv, func(w http.ResponseWriter, r *http.Request) { if r.Method != "PATCH" { t.Errorf("Patch(%q) got HTTP method %s. wanted PATCH", tc.name, r.Method) diff --git a/vendor/k8s.io/client-go/dynamic/fake/client.go b/vendor/k8s.io/client-go/dynamic/fake/client.go index 6c11d4227..8399076c2 100644 --- a/vendor/k8s.io/client-go/dynamic/fake/client.go +++ b/vendor/k8s.io/client-go/dynamic/fake/client.go @@ -46,7 +46,7 @@ func (c *FakeClient) GetRateLimiter() flowcontrol.RateLimiter { // Resource returns an API interface to the specified resource for this client's // group and version. If resource is not a namespaced resource, then namespace -// is ignored. The ResourceClient inherits the paramater codec of this client +// is ignored. The ResourceClient inherits the parameter codec of this client func (c *FakeClient) Resource(resource *metav1.APIResource, namespace string) dynamic.ResourceInterface { return &FakeResourceClient{ Resource: c.GroupVersion.WithResource(resource.Name), diff --git a/vendor/k8s.io/client-go/examples/create-update-delete-deployment/BUILD b/vendor/k8s.io/client-go/examples/create-update-delete-deployment/BUILD index 741403b31..2da72ec9f 100644 --- a/vendor/k8s.io/client-go/examples/create-update-delete-deployment/BUILD +++ b/vendor/k8s.io/client-go/examples/create-update-delete-deployment/BUILD @@ -8,8 +8,7 @@ load( go_binary( name = "create-update-delete-deployment", - importpath = "k8s.io/client-go/examples/create-update-delete-deployment", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/examples/create-update-delete-deployment/README.md b/vendor/k8s.io/client-go/examples/create-update-delete-deployment/README.md index e9c11a935..47d8dd1ee 100644 --- a/vendor/k8s.io/client-go/examples/create-update-delete-deployment/README.md +++ b/vendor/k8s.io/client-go/examples/create-update-delete-deployment/README.md @@ -48,7 +48,7 @@ Running this command will execute the following operations on your cluster: dependent ReplicaSet resource. Verify with `kubectl get deployments`. Each step is separated by an interactive prompt. You must hit the -Return key to proceeed to the next step. You can use these prompts as +Return key to proceed to the next step. You can use these prompts as a break to take time to run `kubectl` and inspect the result of the operations executed. diff --git a/vendor/k8s.io/client-go/examples/in-cluster-client-configuration/BUILD b/vendor/k8s.io/client-go/examples/in-cluster-client-configuration/BUILD index d6c8dacc1..f4146ae37 100644 --- a/vendor/k8s.io/client-go/examples/in-cluster-client-configuration/BUILD +++ b/vendor/k8s.io/client-go/examples/in-cluster-client-configuration/BUILD @@ -8,8 +8,7 @@ load( go_binary( name = "in-cluster-client-configuration", - importpath = "k8s.io/client-go/examples/in-cluster-client-configuration", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/BUILD b/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/BUILD index cf8f05e2b..2fda9686f 100644 --- a/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/BUILD +++ b/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/BUILD @@ -8,8 +8,7 @@ load( go_binary( name = "out-of-cluster-client-configuration", - importpath = "k8s.io/client-go/examples/out-of-cluster-client-configuration", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go b/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go index 252307b18..9d79b9776 100644 --- a/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go +++ b/vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go @@ -62,15 +62,18 @@ func main() { // Examples for error handling: // - Use helper functions like e.g. errors.IsNotFound() // - And/or cast to StatusError and use its properties like e.g. ErrStatus.Message - _, err = clientset.CoreV1().Pods("default").Get("example-xxxxx", metav1.GetOptions{}) + namespace := "default" + pod := "example-xxxxx" + _, err = clientset.CoreV1().Pods(namespace).Get(pod, metav1.GetOptions{}) if errors.IsNotFound(err) { - fmt.Printf("Pod not found\n") + fmt.Printf("Pod %s in namespace %s not found\n", pod, namespace) } else if statusError, isStatus := err.(*errors.StatusError); isStatus { - fmt.Printf("Error getting pod %v\n", statusError.ErrStatus.Message) + fmt.Printf("Error getting pod %s in namespace %s: %v\n", + pod, namespace, statusError.ErrStatus.Message) } else if err != nil { panic(err.Error()) } else { - fmt.Printf("Found pod\n") + fmt.Printf("Found pod %s in namespace %s\n", pod, namespace) } time.Sleep(10 * time.Second) diff --git a/vendor/k8s.io/client-go/examples/workqueue/BUILD b/vendor/k8s.io/client-go/examples/workqueue/BUILD index b0890ae79..8c3c7cb51 100644 --- a/vendor/k8s.io/client-go/examples/workqueue/BUILD +++ b/vendor/k8s.io/client-go/examples/workqueue/BUILD @@ -8,8 +8,7 @@ load( go_binary( name = "workqueue", - importpath = "k8s.io/client-go/examples/workqueue", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/interface.go index 74bfb6019..138dccc26 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/interface.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package admissionregistration diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/initializerconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/initializerconfiguration.go index 0f55c737f..659a04caf 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/initializerconfiguration.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/initializerconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + admissionregistration_v1alpha1 "k8s.io/api/admissionregistration/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/admissionregistration/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // InitializerConfigurationInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go index 44da04796..54df1caf3 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go index 4f08d69a0..5364c1ae1 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go index 31a2a865c..6e65a86c3 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + admissionregistration_v1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // MutatingWebhookConfigurationInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go index d87ab9002..42d16177c 100644 --- a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + admissionregistration_v1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ValidatingWebhookConfigurationInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/interface.go b/vendor/k8s.io/client-go/informers/apps/interface.go index fdd32de0f..7013d4d6f 100644 --- a/vendor/k8s.io/client-go/informers/apps/interface.go +++ b/vendor/k8s.io/client-go/informers/apps/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package apps diff --git a/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go index a69be9c70..3fe6630ff 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + apps_v1 "k8s.io/api/apps/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/apps/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ControllerRevisionInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go index 1c7abf7d0..4e10d6f6f 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + apps_v1 "k8s.io/api/apps/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/apps/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // DaemonSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1/deployment.go index 9f6beed6e..e08f42ddb 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/deployment.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + apps_v1 "k8s.io/api/apps/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/apps/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // DeploymentInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1/interface.go index 6145fd6cc..f3abfa9aa 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go index 1ac50607f..2a17836cb 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + apps_v1 "k8s.io/api/apps/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/apps/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ReplicaSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go index 535790df9..e7084af58 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + apps_v1 "k8s.io/api/apps/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/apps/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // StatefulSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go index 1e2de416b..b4878e724 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + apps_v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/apps/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ControllerRevisionInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go index 4d2dea575..589ec39a5 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + apps_v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/apps/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // DeploymentInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go index 3a51a1f5b..c0a487ca2 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go index 779ae2c60..f12364c51 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + apps_v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/apps/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // StatefulSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go index a7d55ab4c..a2f3ceaac 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 import ( + time "time" + apps_v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta2 "k8s.io/client-go/listers/apps/v1beta2" cache "k8s.io/client-go/tools/cache" - time "time" ) // ControllerRevisionInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go index 5d3288026..700895e61 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 import ( + time "time" + apps_v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta2 "k8s.io/client-go/listers/apps/v1beta2" cache "k8s.io/client-go/tools/cache" - time "time" ) // DaemonSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go index 6b6cd6035..ba1a3cf9b 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 import ( + time "time" + apps_v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta2 "k8s.io/client-go/listers/apps/v1beta2" cache "k8s.io/client-go/tools/cache" - time "time" ) // DeploymentInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go index 59a6e73d4..93a1940d9 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go index 988a3e4fb..6a46b810b 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 import ( + time "time" + apps_v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta2 "k8s.io/client-go/listers/apps/v1beta2" cache "k8s.io/client-go/tools/cache" - time "time" ) // ReplicaSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go index dff9c2408..841cbd8ab 100644 --- a/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go +++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta2 import ( + time "time" + apps_v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta2 "k8s.io/client-go/listers/apps/v1beta2" cache "k8s.io/client-go/tools/cache" - time "time" ) // StatefulSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/autoscaling/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/interface.go index 63a5c0ccd..347d6f628 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/interface.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package autoscaling diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go index 7d875e735..1215c7f3b 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + autoscaling_v1 "k8s.io/api/autoscaling/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/autoscaling/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // HorizontalPodAutoscalerInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go index 5ba907012..ffa7a168e 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go index 9865f8e13..208757de3 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v2beta1 import ( + time "time" + autoscaling_v2beta1 "k8s.io/api/autoscaling/v2beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v2beta1 "k8s.io/client-go/listers/autoscaling/v2beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // HorizontalPodAutoscalerInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go index 4c9ea8499..37ce2bc5f 100644 --- a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v2beta1 diff --git a/vendor/k8s.io/client-go/informers/batch/interface.go b/vendor/k8s.io/client-go/informers/batch/interface.go index bbaec7964..f08227ba4 100644 --- a/vendor/k8s.io/client-go/informers/batch/interface.go +++ b/vendor/k8s.io/client-go/informers/batch/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package batch diff --git a/vendor/k8s.io/client-go/informers/batch/v1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1/interface.go index 41c08ea2d..5a09dc7ce 100644 --- a/vendor/k8s.io/client-go/informers/batch/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/batch/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/batch/v1/job.go b/vendor/k8s.io/client-go/informers/batch/v1/job.go index 8a2e5f0d8..36d3cef42 100644 --- a/vendor/k8s.io/client-go/informers/batch/v1/job.go +++ b/vendor/k8s.io/client-go/informers/batch/v1/job.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + batch_v1 "k8s.io/api/batch/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/batch/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // JobInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go index 4edfd4153..9dfaed490 100644 --- a/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go +++ b/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + batch_v1beta1 "k8s.io/api/batch/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/batch/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // CronJobInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go index 0ba1935dc..3ba8401ac 100644 --- a/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go index 03a6e6f88..82bc9422f 100644 --- a/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go +++ b/vendor/k8s.io/client-go/informers/batch/v2alpha1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v2alpha1 import ( + time "time" + batch_v2alpha1 "k8s.io/api/batch/v2alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v2alpha1 "k8s.io/client-go/listers/batch/v2alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // CronJobInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go b/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go index 39b6f33f0..3c2780fd2 100644 --- a/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/batch/v2alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v2alpha1 diff --git a/vendor/k8s.io/client-go/informers/certificates/interface.go b/vendor/k8s.io/client-go/informers/certificates/interface.go index 1eefe4797..9b3121186 100644 --- a/vendor/k8s.io/client-go/informers/certificates/interface.go +++ b/vendor/k8s.io/client-go/informers/certificates/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package certificates diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go index 44aac5c72..a3d6c2d6a 100644 --- a/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go +++ b/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + certificates_v1beta1 "k8s.io/api/certificates/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/certificates/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // CertificateSigningRequestInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go index 8578023c7..718f370ee 100644 --- a/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/core/interface.go b/vendor/k8s.io/client-go/informers/core/interface.go index 7fc2a5cd5..aba68f349 100644 --- a/vendor/k8s.io/client-go/informers/core/interface.go +++ b/vendor/k8s.io/client-go/informers/core/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package core diff --git a/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go index 77b17fd3e..33fc65a52 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go +++ b/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ComponentStatusInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/configmap.go b/vendor/k8s.io/client-go/informers/core/v1/configmap.go index ed0f4c2d9..618e74994 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/configmap.go +++ b/vendor/k8s.io/client-go/informers/core/v1/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ConfigMapInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/endpoints.go b/vendor/k8s.io/client-go/informers/core/v1/endpoints.go index 8a7228baf..fa56fbc25 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/endpoints.go +++ b/vendor/k8s.io/client-go/informers/core/v1/endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // EndpointsInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/event.go b/vendor/k8s.io/client-go/informers/core/v1/event.go index 23f5ead66..515784175 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/event.go +++ b/vendor/k8s.io/client-go/informers/core/v1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // EventInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/interface.go b/vendor/k8s.io/client-go/informers/core/v1/interface.go index e560b12f8..9580dd9e0 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/core/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/core/v1/limitrange.go b/vendor/k8s.io/client-go/informers/core/v1/limitrange.go index 9588b9402..8edffdfb7 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/limitrange.go +++ b/vendor/k8s.io/client-go/informers/core/v1/limitrange.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // LimitRangeInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/namespace.go b/vendor/k8s.io/client-go/informers/core/v1/namespace.go index eb841b157..e1925fed1 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/namespace.go +++ b/vendor/k8s.io/client-go/informers/core/v1/namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // NamespaceInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/node.go b/vendor/k8s.io/client-go/informers/core/v1/node.go index 3c70e52b0..dc829bcd6 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/node.go +++ b/vendor/k8s.io/client-go/informers/core/v1/node.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // NodeInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go index e944560f7..b3ed3c0d0 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go +++ b/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PersistentVolumeInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go index 136884d4c..9b4fde573 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go +++ b/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PersistentVolumeClaimInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/pod.go b/vendor/k8s.io/client-go/informers/core/v1/pod.go index b97208290..18e61b225 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/pod.go +++ b/vendor/k8s.io/client-go/informers/core/v1/pod.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PodInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go index c05753850..a7de79b18 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go +++ b/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PodTemplateInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go index e04cd1469..df0a1d604 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go +++ b/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ReplicationControllerInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go index 3ef4f4c12..89a56acb8 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go +++ b/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ResourceQuotaInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/secret.go b/vendor/k8s.io/client-go/informers/core/v1/secret.go index 7bc6395a4..05939c861 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/secret.go +++ b/vendor/k8s.io/client-go/informers/core/v1/secret.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // SecretInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/service.go b/vendor/k8s.io/client-go/informers/core/v1/service.go index d1b5ed02f..0e8aa0f7a 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/service.go +++ b/vendor/k8s.io/client-go/informers/core/v1/service.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ServiceInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go index fb9c50aa3..bf3b5a7bb 100644 --- a/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go +++ b/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + core_v1 "k8s.io/api/core/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/core/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ServiceAccountInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/events/interface.go b/vendor/k8s.io/client-go/informers/events/interface.go index 81f6646f7..e8ad97c3c 100644 --- a/vendor/k8s.io/client-go/informers/events/interface.go +++ b/vendor/k8s.io/client-go/informers/events/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package events diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/event.go b/vendor/k8s.io/client-go/informers/events/v1beta1/event.go index d604b4cf0..8f2b27cf5 100644 --- a/vendor/k8s.io/client-go/informers/events/v1beta1/event.go +++ b/vendor/k8s.io/client-go/informers/events/v1beta1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + events_v1beta1 "k8s.io/api/events/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/events/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // EventInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go index d079afed5..0c67badb2 100644 --- a/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/extensions/interface.go b/vendor/k8s.io/client-go/informers/extensions/interface.go index a6bfc3b44..93d912ca5 100644 --- a/vendor/k8s.io/client-go/informers/extensions/interface.go +++ b/vendor/k8s.io/client-go/informers/extensions/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package extensions diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go index c64b14c3d..0f24af5ca 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + extensions_v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // DaemonSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go index 4bcfc5c25..980eecb0f 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + extensions_v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // DeploymentInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go index 22dac92b9..b250d22a3 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + extensions_v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // IngressInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go index ce060e0d9..10aa1b704 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go index 18ef2735b..76b83b823 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + extensions_v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PodSecurityPolicyInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go index 856cb30ba..31c6a1b86 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + extensions_v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ReplicaSetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/factory.go b/vendor/k8s.io/client-go/informers/factory.go index e922c1276..455afc2b9 100644 --- a/vendor/k8s.io/client-go/informers/factory.go +++ b/vendor/k8s.io/client-go/informers/factory.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package informers import ( + reflect "reflect" + sync "sync" + time "time" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" @@ -39,9 +43,6 @@ import ( storage "k8s.io/client-go/informers/storage" kubernetes "k8s.io/client-go/kubernetes" cache "k8s.io/client-go/tools/cache" - reflect "reflect" - sync "sync" - time "time" ) type sharedInformerFactory struct { diff --git a/vendor/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/client-go/informers/generic.go index 70ed43317..801267edf 100644 --- a/vendor/k8s.io/client-go/informers/generic.go +++ b/vendor/k8s.io/client-go/informers/generic.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,12 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package informers import ( "fmt" + v1alpha1 "k8s.io/api/admissionregistration/v1alpha1" v1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/api/apps/v1" @@ -197,6 +198,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource // Group=policy, Version=v1beta1 case policy_v1beta1.SchemeGroupVersion.WithResource("poddisruptionbudgets"): return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodDisruptionBudgets().Informer()}, nil + case policy_v1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodSecurityPolicies().Informer()}, nil // Group=rbac.authorization.k8s.io, Version=v1 case rbac_v1.SchemeGroupVersion.WithResource("clusterroles"): @@ -247,6 +250,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource // Group=storage.k8s.io, Version=v1beta1 case storage_v1beta1.SchemeGroupVersion.WithResource("storageclasses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().StorageClasses().Informer()}, nil + case storage_v1beta1.SchemeGroupVersion.WithResource("volumeattachments"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().VolumeAttachments().Informer()}, nil } diff --git a/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go b/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go index 61155f740..4e2a28fc7 100644 --- a/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go +++ b/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,16 +14,17 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package internalinterfaces import ( + time "time" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" kubernetes "k8s.io/client-go/kubernetes" cache "k8s.io/client-go/tools/cache" - time "time" ) type NewInformerFunc func(kubernetes.Interface, time.Duration) cache.SharedIndexInformer diff --git a/vendor/k8s.io/client-go/informers/networking/interface.go b/vendor/k8s.io/client-go/informers/networking/interface.go index 79e0d0c15..0f6c45649 100644 --- a/vendor/k8s.io/client-go/informers/networking/interface.go +++ b/vendor/k8s.io/client-go/informers/networking/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package networking diff --git a/vendor/k8s.io/client-go/informers/networking/v1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1/interface.go index 980a7be99..819a86146 100644 --- a/vendor/k8s.io/client-go/informers/networking/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/networking/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go index b712ba030..20ac9909d 100644 --- a/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go +++ b/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + networking_v1 "k8s.io/api/networking/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/networking/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // NetworkPolicyInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/policy/interface.go b/vendor/k8s.io/client-go/informers/policy/interface.go index f893c3d5b..e77ab2b24 100644 --- a/vendor/k8s.io/client-go/informers/policy/interface.go +++ b/vendor/k8s.io/client-go/informers/policy/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package policy diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/policy/v1beta1/BUILD index 39a7a9d34..547a0a397 100644 --- a/vendor/k8s.io/client-go/informers/policy/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/BUILD @@ -10,6 +10,7 @@ go_library( srcs = [ "interface.go", "poddisruptionbudget.go", + "podsecuritypolicy.go", ], importpath = "k8s.io/client-go/informers/policy/v1beta1", deps = [ diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go index f235ee1d0..b368f068f 100644 --- a/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 @@ -26,6 +26,8 @@ import ( type Interface interface { // PodDisruptionBudgets returns a PodDisruptionBudgetInformer. PodDisruptionBudgets() PodDisruptionBudgetInformer + // PodSecurityPolicies returns a PodSecurityPolicyInformer. + PodSecurityPolicies() PodSecurityPolicyInformer } type version struct { @@ -43,3 +45,8 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList func (v *version) PodDisruptionBudgets() PodDisruptionBudgetInformer { return &podDisruptionBudgetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } + +// PodSecurityPolicies returns a PodSecurityPolicyInformer. +func (v *version) PodSecurityPolicies() PodSecurityPolicyInformer { + return &podSecurityPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go index ba0da35b1..d5178652a 100644 --- a/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go +++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + policy_v1beta1 "k8s.io/api/policy/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/policy/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PodDisruptionBudgetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go new file mode 100644 index 000000000..c9bcc8bab --- /dev/null +++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go @@ -0,0 +1,88 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + policy_v1beta1 "k8s.io/api/policy/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/policy/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// PodSecurityPolicyInformer provides access to a shared informer and lister for +// PodSecurityPolicies. +type PodSecurityPolicyInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.PodSecurityPolicyLister +} + +type podSecurityPolicyInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewPodSecurityPolicyInformer constructs a new informer for PodSecurityPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewPodSecurityPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredPodSecurityPolicyInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredPodSecurityPolicyInformer constructs a new informer for PodSecurityPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredPodSecurityPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PolicyV1beta1().PodSecurityPolicies().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PolicyV1beta1().PodSecurityPolicies().Watch(options) + }, + }, + &policy_v1beta1.PodSecurityPolicy{}, + resyncPeriod, + indexers, + ) +} + +func (f *podSecurityPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredPodSecurityPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *podSecurityPolicyInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&policy_v1beta1.PodSecurityPolicy{}, f.defaultInformer) +} + +func (f *podSecurityPolicyInformer) Lister() v1beta1.PodSecurityPolicyLister { + return v1beta1.NewPodSecurityPolicyLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/informers/rbac/interface.go b/vendor/k8s.io/client-go/informers/rbac/interface.go index df7adfcd3..ac491ee42 100644 --- a/vendor/k8s.io/client-go/informers/rbac/interface.go +++ b/vendor/k8s.io/client-go/informers/rbac/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package rbac diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go index ac75abbc8..f541957a2 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + rbac_v1 "k8s.io/api/rbac/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/rbac/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go index a3c73e586..bf1d7bdc1 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + rbac_v1 "k8s.io/api/rbac/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/rbac/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1/interface.go index 1e46b039b..fca0e807b 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1/role.go index fb1de4614..f08e1fde3 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1/role.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + rbac_v1 "k8s.io/api/rbac/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/rbac/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go index 78c78fa1a..f91c2ef03 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + rbac_v1 "k8s.io/api/rbac/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/rbac/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go index ec257965b..9293439f4 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + rbac_v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go index a2d0c3960..d13561274 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + rbac_v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go index 586283d4a..1c972ec82 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go index 4564b3361..5b4148fa9 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + rbac_v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go index 556f966a8..54bae16e7 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + rbac_v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go index 821746b90..f429eeca1 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + rbac_v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/rbac/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go index c517ac456..5900eae9a 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + rbac_v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/rbac/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // ClusterRoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go index 9d375d947..c36d644e1 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go index 0f13d3aaf..479044b42 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + rbac_v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/rbac/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go index c951d97d5..34feed183 100644 --- a/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go +++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + rbac_v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/rbac/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // RoleBindingInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/scheduling/interface.go b/vendor/k8s.io/client-go/informers/scheduling/interface.go index 60b63e8e5..89aaac195 100644 --- a/vendor/k8s.io/client-go/informers/scheduling/interface.go +++ b/vendor/k8s.io/client-go/informers/scheduling/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package scheduling diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go index 1cceef7b2..091dd90b6 100644 --- a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go index 5c90f43df..8a27631be 100644 --- a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go +++ b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + scheduling_v1alpha1 "k8s.io/api/scheduling/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/scheduling/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PriorityClassInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/settings/interface.go b/vendor/k8s.io/client-go/informers/settings/interface.go index 53bc66217..cc134f706 100644 --- a/vendor/k8s.io/client-go/informers/settings/interface.go +++ b/vendor/k8s.io/client-go/informers/settings/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package settings diff --git a/vendor/k8s.io/client-go/informers/settings/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/settings/v1alpha1/interface.go index 39007ebe2..d2964352a 100644 --- a/vendor/k8s.io/client-go/informers/settings/v1alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/settings/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/informers/settings/v1alpha1/podpreset.go b/vendor/k8s.io/client-go/informers/settings/v1alpha1/podpreset.go index 2e630c73d..7e241b2be 100644 --- a/vendor/k8s.io/client-go/informers/settings/v1alpha1/podpreset.go +++ b/vendor/k8s.io/client-go/informers/settings/v1alpha1/podpreset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + settings_v1alpha1 "k8s.io/api/settings/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/settings/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // PodPresetInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/storage/interface.go b/vendor/k8s.io/client-go/informers/storage/interface.go index b91613a92..6581a2a8d 100644 --- a/vendor/k8s.io/client-go/informers/storage/interface.go +++ b/vendor/k8s.io/client-go/informers/storage/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package storage diff --git a/vendor/k8s.io/client-go/informers/storage/v1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1/interface.go index fadb1a073..ebdb1d98a 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1/interface.go +++ b/vendor/k8s.io/client-go/informers/storage/v1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go index 341549f0f..5ef571eb4 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go +++ b/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1 import ( + time "time" + storage_v1 "k8s.io/api/storage/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/listers/storage/v1" cache "k8s.io/client-go/tools/cache" - time "time" ) // StorageClassInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go index d84eb5fd2..f1b1a9bbd 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go +++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go index cab9ffc46..506517acd 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go +++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1alpha1 import ( + time "time" + storage_v1alpha1 "k8s.io/api/storage/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1alpha1 "k8s.io/client-go/listers/storage/v1alpha1" cache "k8s.io/client-go/tools/cache" - time "time" ) // VolumeAttachmentInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD index 0a7ad316b..64aae5165 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD @@ -10,6 +10,7 @@ go_library( srcs = [ "interface.go", "storageclass.go", + "volumeattachment.go", ], importpath = "k8s.io/client-go/informers/storage/v1beta1", deps = [ diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go index 7fa1abf5f..5a63728f1 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 @@ -26,6 +26,8 @@ import ( type Interface interface { // StorageClasses returns a StorageClassInformer. StorageClasses() StorageClassInformer + // VolumeAttachments returns a VolumeAttachmentInformer. + VolumeAttachments() VolumeAttachmentInformer } type version struct { @@ -43,3 +45,8 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList func (v *version) StorageClasses() StorageClassInformer { return &storageClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} } + +// VolumeAttachments returns a VolumeAttachmentInformer. +func (v *version) VolumeAttachments() VolumeAttachmentInformer { + return &volumeAttachmentInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go index 3e96b2820..0b4edbf52 100644 --- a/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by informer-gen +// Code generated by informer-gen. DO NOT EDIT. package v1beta1 import ( + time "time" + storage_v1beta1 "k8s.io/api/storage/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" @@ -27,7 +29,6 @@ import ( kubernetes "k8s.io/client-go/kubernetes" v1beta1 "k8s.io/client-go/listers/storage/v1beta1" cache "k8s.io/client-go/tools/cache" - time "time" ) // StorageClassInformer provides access to a shared informer and lister for diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go new file mode 100644 index 000000000..ae3c2fd71 --- /dev/null +++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go @@ -0,0 +1,88 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + time "time" + + storage_v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/storage/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// VolumeAttachmentInformer provides access to a shared informer and lister for +// VolumeAttachments. +type VolumeAttachmentInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.VolumeAttachmentLister +} + +type volumeAttachmentInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewVolumeAttachmentInformer constructs a new informer for VolumeAttachment type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredVolumeAttachmentInformer constructs a new informer for VolumeAttachment type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().VolumeAttachments().List(options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.StorageV1beta1().VolumeAttachments().Watch(options) + }, + }, + &storage_v1beta1.VolumeAttachment{}, + resyncPeriod, + indexers, + ) +} + +func (f *volumeAttachmentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *volumeAttachmentInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&storage_v1beta1.VolumeAttachment{}, f.defaultInformer) +} + +func (f *volumeAttachmentInformer) Lister() v1beta1.VolumeAttachmentLister { + return v1beta1.NewVolumeAttachmentLister(f.Informer().GetIndexer()) +} diff --git a/vendor/k8s.io/client-go/kubernetes/clientset.go b/vendor/k8s.io/client-go/kubernetes/clientset.go index 7dcf86a70..d867a58b2 100644 --- a/vendor/k8s.io/client-go/kubernetes/clientset.go +++ b/vendor/k8s.io/client-go/kubernetes/clientset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package kubernetes import ( diff --git a/vendor/k8s.io/client-go/kubernetes/doc.go b/vendor/k8s.io/client-go/kubernetes/doc.go index d8e920a5c..c5870c01a 100644 --- a/vendor/k8s.io/client-go/kubernetes/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated clientset. package kubernetes diff --git a/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go b/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go index 12cfac0a8..0eb5ac9e5 100644 --- a/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go +++ b/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( @@ -95,7 +97,15 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { fakePtr := testing.Fake{} fakePtr.AddReactor("*", "*", testing.ObjectReaction(o)) - fakePtr.AddWatchReactor("*", testing.DefaultWatchReactor(watch.NewFake(), nil)) + fakePtr.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) return &Clientset{fakePtr, &fakediscovery.FakeDiscovery{Fake: &fakePtr}} } diff --git a/vendor/k8s.io/client-go/kubernetes/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/fake/doc.go index 3fd8e1e2c..0bc260bca 100644 --- a/vendor/k8s.io/client-go/kubernetes/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated fake clientset. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/fake/register.go b/vendor/k8s.io/client-go/kubernetes/fake/register.go index 7c78f5670..45fdf124c 100644 --- a/vendor/k8s.io/client-go/kubernetes/fake/register.go +++ b/vendor/k8s.io/client-go/kubernetes/fake/register.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( @@ -65,7 +67,7 @@ func init() { // // import ( // "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kuberentes/scheme" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" // aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" // ) // @@ -103,5 +105,4 @@ func AddToScheme(scheme *runtime.Scheme) { storagev1beta1.AddToScheme(scheme) storagev1.AddToScheme(scheme) storagev1alpha1.AddToScheme(scheme) - } diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/doc.go b/vendor/k8s.io/client-go/kubernetes/scheme/doc.go index 3ec2200d0..5c5c8debb 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/scheme/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package contains the scheme of the automatically generated clientset. package scheme diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/vendor/k8s.io/client-go/kubernetes/scheme/register.go index 7bfd33618..66e2dcd18 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/register.go +++ b/vendor/k8s.io/client-go/kubernetes/scheme/register.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package scheme import ( @@ -65,7 +67,7 @@ func init() { // // import ( // "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kuberentes/scheme" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" // aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" // ) // @@ -103,5 +105,4 @@ func AddToScheme(scheme *runtime.Scheme) { storagev1beta1.AddToScheme(scheme) storagev1.AddToScheme(scheme) storagev1alpha1.AddToScheme(scheme) - } diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go index 5150fee3c..8137129fc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go index cdaaf6207..69ca30111 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_admissionregistration_client.go index d73267ee6..2917c0ae4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_admissionregistration_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_admissionregistration_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_initializerconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_initializerconfiguration.go index a06b59f63..699261cd4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_initializerconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/fake_initializerconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go index ccdfb43f6..710bc4ea4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 type InitializerConfigurationExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go index 757a1c1d9..77c6b8fcc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go index 8d3774b4e..44b20b577 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go index 148eaf9f8..3255acb47 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_mutatingwebhookconfiguration.go index a02bf7b7c..044636ead 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_mutatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_mutatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingwebhookconfiguration.go index 422a0a241..f06582d4e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go index 012a8da7e..293697555 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type MutatingWebhookConfigurationExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go index 36711a500..d37f68448 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go index d66849225..30dcfddbc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go index 07936304e..b0af79806 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go index 1d9f83134..26d020747 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go index fd38c53c5..73fd1e9bd 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go index 34c06c8de..1a3e8f730 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_apps_client.go index d4e34411b..11accc235 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_controllerrevision.go index ae9d4f3ff..fb43bea4c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_daemonset.go index 3f32ed1f3..0ee4cd33d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_deployment.go index b0e8f82d7..852b628ad 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_replicaset.go index ba8539578..03f7558d4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_statefulset.go index 39d3c59fb..af0a90720 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/fake_statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go index 500d67dd3..0f603bb8c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type ControllerRevisionExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go index 5047b0c5f..f2f9c7256 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go index 2c927ac0c..78fe23f84 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go index 7d1fd9e6a..1aebc2176 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go index 348c955a0..312ba3c47 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go index 8a72cefbc..2ff58aeac 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_apps_client.go index f1280bc3f..5cc316882 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_controllerrevision.go index f75db1bad..2360bb07a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_deployment.go index 2907c2a8c..5282d8cd9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_scale.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_scale.go index 8abb429ac..72615c803 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeScales implements ScaleInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_statefulset.go index 1ae9c6a58..6e1d7a560 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/fake_statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go index a091b902a..a44a94b63 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type ControllerRevisionExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go index d3bf9e103..e8c507326 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go index 8e5b9f570..6f89ca73a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go index 771c7447e..8d5a78c44 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go index d28240339..28b30e8be 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go index 4657c1b2c..c21fc50a8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go index 7da8d2696..270be527e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go index e8d65fa24..01d0ed2c2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta2 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_apps_client.go index 20bd67d24..7223cd24e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_apps_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_apps_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_controllerrevision.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_controllerrevision.go index 62b89e209..720972e7d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_controllerrevision.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_daemonset.go index dfd1c4abe..3576b8427 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_deployment.go index 3b204f2a7..1f654a3cc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_replicaset.go index 338f92c11..f8e69a3a3 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_scale.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_scale.go index a6ad9f1e7..fb5eb5c59 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeScales implements ScaleInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_statefulset.go index bdff83300..0413428eb 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/fake_statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go index b0fe7ef70..a88e1721f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 type ControllerRevisionExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go index dc6ce1052..298ec26a2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go index 2c2aa185f..84f27a797 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go index 516587faa..64b7c8c8f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta2 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go index dcc31d654..25b86152d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_authentication_client.go index 85eb00ddf..93a0633e8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_authentication_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_authentication_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_tokenreview.go index b1c527a71..d98aa03d8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_tokenreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/fake_tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeTokenReviews implements TokenReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go index 42e76d5e4..7c92b9147 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go index 9cfef4e6a..88f759f2b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go index 6004b0e30..744c26c9e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_authentication_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_authentication_client.go index 8f66d8c5b..abc1fedd1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_authentication_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_authentication_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_tokenreview.go index e8c57210b..c7c3e5631 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_tokenreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/fake_tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeTokenReviews implements TokenReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go index 2b7e8ca0b..7fd68c803 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go index 7f9f1e9fa..fa611825e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go index 385dffcd1..852720f34 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_authorization_client.go index 7ee26250b..5db9b9f34 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_authorization_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_authorization_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_localsubjectaccessreview.go index a49fc9b72..5f1aab8a4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeLocalSubjectAccessReviews implements LocalSubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectaccessreview.go index 26d9011b4..7e466e1ec 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSelfSubjectAccessReviews implements SelfSubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go index dfe947b90..82c1ac9cf 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSelfSubjectRulesReviews implements SelfSubjectRulesReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_subjectaccessreview.go index 778d06e59..cbc440e71 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_subjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/fake_subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSubjectAccessReviews implements SubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go index 42e76d5e4..7c92b9147 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go index b2085bceb..20461f132 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go index cfb019eaa..202e7c90d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go index fbd374a13..5fb1cab5c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go index 08f6d6095..881641494 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go index 7c0534123..cbe5bdcee 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_authorization_client.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_authorization_client.go index 33d5746a5..7c3fc1746 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_authorization_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_authorization_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_localsubjectaccessreview.go index 11987f125..c7949a7df 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeLocalSubjectAccessReviews implements LocalSubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectaccessreview.go index aeba43895..20904d179 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSelfSubjectAccessReviews implements SelfSubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectrulesreview.go index 4e221c282..2acd5f279 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSelfSubjectRulesReviews implements SelfSubjectRulesReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_subjectaccessreview.go index 4413c6d34..218ed3d8f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_subjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/fake_subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeSubjectAccessReviews implements SubjectAccessReviewInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go index 2b7e8ca0b..7fd68c803 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go index 9b8e10341..8029837f9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go index 1ef3e49af..36feb1530 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go index 7f640d91b..57079c8d9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go index cd60e9df6..d91fa87ec 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go index 5464ab59d..b336bbd39 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_autoscaling_client.go index c3e0d3734..540eb5f5c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_autoscaling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_autoscaling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_horizontalpodautoscaler.go index e7e660bdd..532e6f51c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/fake_horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go index effefbd50..a5c694ffb 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type HorizontalPodAutoscalerExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go index 4191c920f..9245e41a2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go index 753e5dc77..25446452f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go index de272bd12..1f70aedf8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v2beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_autoscaling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_autoscaling_client.go index e997033c4..6d3437a23 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_autoscaling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_autoscaling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_horizontalpodautoscaler.go index 6b70822ad..549196c5e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/fake_horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go index eddac4a78..561fbb0e6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2beta1 type HorizontalPodAutoscalerExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go index 9ff497c10..1be9b80ca 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go index 5cf75f9c3..c092a3ca1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_batch_client.go index 4e2d361e8..27d54c4c4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_job.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_job.go index b51c8f5cd..4d9ba490f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_job.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/fake_job.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go index 68d7741fa..04a37a49d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type JobExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go index d80205ddf..dc0c79997 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go index 88baefe3b..5ee39b5be 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go index 48b68988b..32ac52fac 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_batch_client.go index fe95cd4c9..9de70f8fe 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_cronjob.go index 5bcb84e8a..756585d7d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_cronjob.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/fake_cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go index 22939f58d..a093bbad4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type CronJobExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go index 1dd5b82c7..ff26a76d5 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go index a8aaa9474..e5b135314 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go index 7f1ef91b1..ba60ac54b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v2alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_batch_client.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_batch_client.go index c8f5a40de..52ad499cc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_batch_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_cronjob.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_cronjob.go index 9ea0d3459..f80e94cae 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_cronjob.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/fake_cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go index 078027ef4..ed2c942b0 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v2alpha1 type CronJobExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go index 7226d92d7..7d69ce9f6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go index 769f71c67..ecca7aedc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go index 550c5bba1..455ac56b5 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go index 7b515240f..f3ea4c464 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go index 2b7e8ca0b..7fd68c803 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/BUILD index dd86cfecd..4c9f03aa4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/BUILD @@ -32,9 +32,11 @@ go_library( "service.go", "service_expansion.go", "serviceaccount.go", + "serviceaccount_expansion.go", ], importpath = "k8s.io/client-go/kubernetes/typed/core/v1", deps = [ + "//vendor/k8s.io/api/authentication/v1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/policy/v1beta1:go_default_library", diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go index 89c645a0e..1717e7c19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go index 899e492ad..6e7a12e5d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go index e5b901e5c..1c86c47d4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go index 3c463daaa..03b2a6919 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go index 857c885ad..b9570e689 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD index f62201d87..7403a4997 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD @@ -31,9 +31,11 @@ go_library( "fake_service.go", "fake_service_expansion.go", "fake_serviceaccount.go", + "fake_serviceaccount_expansion.go", ], importpath = "k8s.io/client-go/kubernetes/typed/core/v1/fake", deps = [ + "//vendor/k8s.io/api/authentication/v1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/policy/v1beta1:go_default_library", diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_componentstatus.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_componentstatus.go index 1f358b7e3..42039aea9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_componentstatus.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_componentstatus.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_configmap.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_configmap.go index 262a4c5e8..8de1cde17 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_configmap.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go index 0956b4c63..b30c02de1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_endpoints.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_endpoints.go index d1fad00dd..7b54929f6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_endpoints.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event.go index 60d6b45a5..5ba47f419 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_limitrange.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_limitrange.go index dc58c335c..bd736980e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_limitrange.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_limitrange.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_namespace.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_namespace.go index 8c03925a7..84743469a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_namespace.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_node.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_node.go index 76d2ac1e5..c7e042fc8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_node.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_node.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolume.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolume.go index 65b76e95e..1be38a89e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolume.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolume.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolumeclaim.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolumeclaim.go index cb55df14b..ea189bb9c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolumeclaim.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_pod.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_pod.go index ed35ed7cb..6f5faef99 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_pod.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_pod.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_podtemplate.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_podtemplate.go index fa6233850..1dd272e78 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_podtemplate.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_podtemplate.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_replicationcontroller.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_replicationcontroller.go index 2fe0a6cf3..047831a31 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_replicationcontroller.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_replicationcontroller.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_resourcequota.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_resourcequota.go index 36a64903d..afdc8c88a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_resourcequota.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_resourcequota.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_secret.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_secret.go index 58c6dc9c6..abf7db090 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_secret.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_secret.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_service.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_service.go index c734ff5b5..7ce885ae8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_service.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_service.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount.go index 4c5f67b49..635b2c32b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount_expansion.go new file mode 100644 index 000000000..a0efbcc2f --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_serviceaccount_expansion.go @@ -0,0 +1,31 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fake + +import ( + authenticationv1 "k8s.io/api/authentication/v1" + core "k8s.io/client-go/testing" +) + +func (c *FakeServiceAccounts) CreateToken(name string, tr *authenticationv1.TokenRequest) (*authenticationv1.TokenRequest, error) { + obj, err := c.Fake.Invokes(core.NewCreateSubresourceAction(serviceaccountsResource, name, "token", c.ns, tr), &authenticationv1.TokenRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*authenticationv1.TokenRequest), err +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go index 5fe0585b4..430bd6c5a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type ComponentStatusExpansion interface{} @@ -35,5 +37,3 @@ type ReplicationControllerExpansion interface{} type ResourceQuotaExpansion interface{} type SecretExpansion interface{} - -type ServiceAccountExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go index 63ac612b4..b67997d70 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go index 0effd3e09..a298d7c02 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go index 202a91df3..b16f92f00 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go index 175f38821..f23b95f30 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go index a6159f125..f168a985a 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go index 267cd7f60..423d81ad8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go index c286e2964..730b54330 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go index 196c8d05a..a0f36a1fa 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go index 311d0e8cc..011e72a91 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go index db4a70d95..931afb5db 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go index ff9560201..156bcc235 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go index 9e3b126b6..0a87feb5b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount_expansion.go new file mode 100644 index 000000000..eaf643f15 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount_expansion.go @@ -0,0 +1,41 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + authenticationv1 "k8s.io/api/authentication/v1" +) + +// The ServiceAccountExpansion interface allows manually adding extra methods +// to the ServiceAccountInterface. +type ServiceAccountExpansion interface { + CreateToken(name string, tr *authenticationv1.TokenRequest) (*authenticationv1.TokenRequest, error) +} + +// CreateToken creates a new token for a serviceaccount. +func (c *serviceAccounts) CreateToken(name string, tr *authenticationv1.TokenRequest) (*authenticationv1.TokenRequest, error) { + result := &authenticationv1.TokenRequest{} + err := c.client.Post(). + Namespace(c.ns). + Resource("serviceaccounts"). + SubResource("token"). + Name(name). + Body(tr). + Do(). + Into(result) + return result, err +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go index 3473e99c4..e8737cf9e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go index 05cee7fb2..7225d90d8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_event.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_event.go index 4b9ebd6e5..02fa70fbd 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_event.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_events_client.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_events_client.go index 54b28b6ee..c6eb06623 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_events_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/fake_events_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go index 82b2fb4a1..871411abb 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type EventExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go index 95ca28afb..20cd58728 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go index 65f3820b9..91ada9e54 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go index b4f8886ad..c359a58f2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_daemonset.go index 3a3220a05..083bed820 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_daemonset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_deployment.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_deployment.go index d5abace97..1ce8fb34b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_deployment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go index 8ec490c50..d8b6741e6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_ingress.go index 5a6f93e0e..60efe17c8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_ingress.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_podsecuritypolicy.go index 28bbbbb7f..c381e62f1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_podsecuritypolicy.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_replicaset.go index e8d22c6b4..20e8f76f6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_scale.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_scale.go index 77f8c61a7..0bbcbd15f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeScales implements ScaleInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go index e693fe68c..eef05e765 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type DaemonSetExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go index 0bef3972a..26b21baa5 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go index 071f78eac..19475a5c0 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go index 8daa1cc01..b307ac70e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go index 733012ade..e654d9537 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networking_client.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networking_client.go index d9733a0bf..8bce64250 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networking_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networking_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go index 6fc226e18..fbab3ca16 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go index cdd70ae35..c6dd5c323 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type NetworkPolicyExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go index 1b9099eeb..ac8200f82 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go index 96487885c..b0a85c5c5 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/BUILD index 2abeb549d..92606b3c4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/BUILD @@ -13,6 +13,7 @@ go_library( "eviction_expansion.go", "generated_expansion.go", "poddisruptionbudget.go", + "podsecuritypolicy.go", "policy_client.go", ], importpath = "k8s.io/client-go/kubernetes/typed/policy/v1beta1", diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go index 9c4133e36..b0abf6563 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/eviction.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/BUILD index 5fc7afdc9..9b6941ce9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/BUILD @@ -12,6 +12,7 @@ go_library( "fake_eviction.go", "fake_eviction_expansion.go", "fake_poddisruptionbudget.go", + "fake_podsecuritypolicy.go", "fake_policy_client.go", ], importpath = "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake", diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_eviction.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_eviction.go index a091d8de3..06aba37b4 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_eviction.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_eviction.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake // FakeEvictions implements EvictionInterface diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_poddisruptionbudget.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_poddisruptionbudget.go index b00af7188..d85a67e4f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_poddisruptionbudget.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_poddisruptionbudget.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go new file mode 100644 index 000000000..068515a36 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go @@ -0,0 +1,120 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1beta1 "k8s.io/api/policy/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakePodSecurityPolicies implements PodSecurityPolicyInterface +type FakePodSecurityPolicies struct { + Fake *FakePolicyV1beta1 +} + +var podsecuritypoliciesResource = schema.GroupVersionResource{Group: "policy", Version: "v1beta1", Resource: "podsecuritypolicies"} + +var podsecuritypoliciesKind = schema.GroupVersionKind{Group: "policy", Version: "v1beta1", Kind: "PodSecurityPolicy"} + +// Get takes name of the podSecurityPolicy, and returns the corresponding podSecurityPolicy object, and an error if there is any. +func (c *FakePodSecurityPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.PodSecurityPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(podsecuritypoliciesResource, name), &v1beta1.PodSecurityPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.PodSecurityPolicy), err +} + +// List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. +func (c *FakePodSecurityPolicies) List(opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(podsecuritypoliciesResource, podsecuritypoliciesKind, opts), &v1beta1.PodSecurityPolicyList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.PodSecurityPolicyList{} + for _, item := range obj.(*v1beta1.PodSecurityPolicyList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested podSecurityPolicies. +func (c *FakePodSecurityPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(podsecuritypoliciesResource, opts)) +} + +// Create takes the representation of a podSecurityPolicy and creates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. +func (c *FakePodSecurityPolicies) Create(podSecurityPolicy *v1beta1.PodSecurityPolicy) (result *v1beta1.PodSecurityPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(podsecuritypoliciesResource, podSecurityPolicy), &v1beta1.PodSecurityPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.PodSecurityPolicy), err +} + +// Update takes the representation of a podSecurityPolicy and updates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. +func (c *FakePodSecurityPolicies) Update(podSecurityPolicy *v1beta1.PodSecurityPolicy) (result *v1beta1.PodSecurityPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(podsecuritypoliciesResource, podSecurityPolicy), &v1beta1.PodSecurityPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.PodSecurityPolicy), err +} + +// Delete takes name of the podSecurityPolicy and deletes it. Returns an error if one occurs. +func (c *FakePodSecurityPolicies) Delete(name string, options *v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(podsecuritypoliciesResource, name), &v1beta1.PodSecurityPolicy{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakePodSecurityPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(podsecuritypoliciesResource, listOptions) + + _, err := c.Fake.Invokes(action, &v1beta1.PodSecurityPolicyList{}) + return err +} + +// Patch applies the patch and returns the patched podSecurityPolicy. +func (c *FakePodSecurityPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(podsecuritypoliciesResource, name, data, subresources...), &v1beta1.PodSecurityPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.PodSecurityPolicy), err +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go index c9039b519..3b7e5415e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( @@ -34,6 +36,10 @@ func (c *FakePolicyV1beta1) PodDisruptionBudgets(namespace string) v1beta1.PodDi return &FakePodDisruptionBudgets{c, namespace} } +func (c *FakePolicyV1beta1) PodSecurityPolicies() v1beta1.PodSecurityPolicyInterface { + return &FakePodSecurityPolicies{c} +} + // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. func (c *FakePolicyV1beta1) RESTClient() rest.Interface { diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go index 511adc6ef..d39f527be 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type PodDisruptionBudgetExpansion interface{} + +type PodSecurityPolicyExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go index 47b391d80..d154dfcf8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go new file mode 100644 index 000000000..de6760b14 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go @@ -0,0 +1,147 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/policy/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// PodSecurityPoliciesGetter has a method to return a PodSecurityPolicyInterface. +// A group's client should implement this interface. +type PodSecurityPoliciesGetter interface { + PodSecurityPolicies() PodSecurityPolicyInterface +} + +// PodSecurityPolicyInterface has methods to work with PodSecurityPolicy resources. +type PodSecurityPolicyInterface interface { + Create(*v1beta1.PodSecurityPolicy) (*v1beta1.PodSecurityPolicy, error) + Update(*v1beta1.PodSecurityPolicy) (*v1beta1.PodSecurityPolicy, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.PodSecurityPolicy, error) + List(opts v1.ListOptions) (*v1beta1.PodSecurityPolicyList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) + PodSecurityPolicyExpansion +} + +// podSecurityPolicies implements PodSecurityPolicyInterface +type podSecurityPolicies struct { + client rest.Interface +} + +// newPodSecurityPolicies returns a PodSecurityPolicies +func newPodSecurityPolicies(c *PolicyV1beta1Client) *podSecurityPolicies { + return &podSecurityPolicies{ + client: c.RESTClient(), + } +} + +// Get takes name of the podSecurityPolicy, and returns the corresponding podSecurityPolicy object, and an error if there is any. +func (c *podSecurityPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.PodSecurityPolicy, err error) { + result = &v1beta1.PodSecurityPolicy{} + err = c.client.Get(). + Resource("podsecuritypolicies"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. +func (c *podSecurityPolicies) List(opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { + result = &v1beta1.PodSecurityPolicyList{} + err = c.client.Get(). + Resource("podsecuritypolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested podSecurityPolicies. +func (c *podSecurityPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.client.Get(). + Resource("podsecuritypolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch() +} + +// Create takes the representation of a podSecurityPolicy and creates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. +func (c *podSecurityPolicies) Create(podSecurityPolicy *v1beta1.PodSecurityPolicy) (result *v1beta1.PodSecurityPolicy, err error) { + result = &v1beta1.PodSecurityPolicy{} + err = c.client.Post(). + Resource("podsecuritypolicies"). + Body(podSecurityPolicy). + Do(). + Into(result) + return +} + +// Update takes the representation of a podSecurityPolicy and updates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. +func (c *podSecurityPolicies) Update(podSecurityPolicy *v1beta1.PodSecurityPolicy) (result *v1beta1.PodSecurityPolicy, err error) { + result = &v1beta1.PodSecurityPolicy{} + err = c.client.Put(). + Resource("podsecuritypolicies"). + Name(podSecurityPolicy.Name). + Body(podSecurityPolicy). + Do(). + Into(result) + return +} + +// Delete takes name of the podSecurityPolicy and deletes it. Returns an error if one occurs. +func (c *podSecurityPolicies) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("podsecuritypolicies"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *podSecurityPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + return c.client.Delete(). + Resource("podsecuritypolicies"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched podSecurityPolicy. +func (c *podSecurityPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) { + result = &v1beta1.PodSecurityPolicy{} + err = c.client.Patch(pt). + Resource("podsecuritypolicies"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go index 40588ce97..f45cfdf37 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( @@ -27,6 +29,7 @@ type PolicyV1beta1Interface interface { RESTClient() rest.Interface EvictionsGetter PodDisruptionBudgetsGetter + PodSecurityPoliciesGetter } // PolicyV1beta1Client is used to interact with features provided by the policy group. @@ -42,6 +45,10 @@ func (c *PolicyV1beta1Client) PodDisruptionBudgets(namespace string) PodDisrupti return newPodDisruptionBudgets(c, namespace) } +func (c *PolicyV1beta1Client) PodSecurityPolicies() PodSecurityPolicyInterface { + return newPodSecurityPolicies(c) +} + // NewForConfig creates a new PolicyV1beta1Client for the given config. func NewForConfig(c *rest.Config) (*PolicyV1beta1Client, error) { config := *c diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go index e0ea45148..e1af3a99b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go index 11b2e2165..c49ac6dd2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrole.go index 645126f2c..b07323c50 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrolebinding.go index a9c0bb089..5e960c8ca 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rbac_client.go index cddaf6d50..5311f0618 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_role.go index f64ede638..733760de2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rolebinding.go index e499cf95b..11a75f939 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/fake_rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go index aa3df0df2..0977cc00c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type ClusterRoleExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go index dd0a0cb0d..e5b7b561d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go index d83e722b7..678e284b7 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go index a42436580..7fd9e29fa 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go index e6c65ba99..901ef7f46 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go index a7156214a..c5c5360b9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go index cdaaf6207..69ca30111 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrole.go index 1b6bfc311..1b3eec014 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrolebinding.go index 0aadc16b4..d54eb6f25 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rbac_client.go index 11470696d..12a96c5b6 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_role.go index 42de54874..8c365efcb 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rolebinding.go index 958da4a92..4346589a8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/fake_rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go index f506fc346..aebf50655 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 type ClusterRoleExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go index 936008d4a..06b5f5cab 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go index 8591128af..8af1d7784 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go index 0616691bb..43888d066 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go index 6fdb04379..fd6effd46 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go index 1aedea6ea..469307000 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrole.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrole.go index 643988bb8..738ca1ea9 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrole.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrolebinding.go index 461b54665..144bf70d3 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rbac_client.go index 929d03529..0856ee084 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_role.go index 7038bcf0d..2e9d46b51 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rolebinding.go index a04a2f89a..bb363d874 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/fake_rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go index d7f80c004..538b09833 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type ClusterRoleExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go index 87932b58d..eecdd45a8 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go index 95e252937..363b2c6cd 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go index e8e611a95..8d9f1f617 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go index cdaaf6207..69ca30111 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_priorityclass.go index 8c82c186a..9946411e2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_priorityclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_priorityclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_scheduling_client.go index cd0d80d43..6e0a9659e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_scheduling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/fake_scheduling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go index 3eb42e018..682f0f3bf 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 type PriorityClassExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go index 2b77c44eb..055a0e3f3 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go index 030e9db32..f030b319e 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go index cdaaf6207..69ca30111 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_podpreset.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_podpreset.go index 292458ee4..512b38f54 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_podpreset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_podpreset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_settings_client.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_settings_client.go index 6feb9b218..fb07a8248 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_settings_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/fake_settings_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/generated_expansion.go index d599b2935..f0dbcc607 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 type PodPresetExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go index ce3868083..25ed8f543 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go index 595b23f04..77fa64040 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go index b6a2a4672..d007a2903 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storage_client.go index 97972f0f7..9ba1f5104 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storageclass.go index 7e3378ad7..147ad8028 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storageclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go index 39df9fb87..08fedd7ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 type StorageClassExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go index 1102653ae..36a189c46 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go index 4e7c5b71b..24133cd62 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go index cdaaf6207..69ca30111 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_storage_client.go index 1d06eba6b..5a9ed0964 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_volumeattachment.go index 5213d10be..c5db88531 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_volumeattachment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/fake_volumeattachment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go index afa636a2f..e3fc3f399 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 type VolumeAttachmentExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go index 3e8c70bf1..63834e462 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go index 08bdfb259..7bf79a6c1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1alpha1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD index 08cb7f6d1..79d13929c 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD @@ -12,6 +12,7 @@ go_library( "generated_expansion.go", "storage_client.go", "storageclass.go", + "volumeattachment.go", ], importpath = "k8s.io/client-go/kubernetes/typed/storage/v1beta1", deps = [ diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go index 1b50aa199..11ae7049d 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/BUILD b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/BUILD index a7457e7d2..743008884 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/BUILD +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/BUILD @@ -11,6 +11,7 @@ go_library( "doc.go", "fake_storage_client.go", "fake_storageclass.go", + "fake_volumeattachment.go", ], importpath = "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake", deps = [ diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go index c58fac35e..87a1873ed 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + // Package fake has the automatically generated clients. package fake diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storage_client.go index a178091d9..a81d90542 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( @@ -30,6 +32,10 @@ func (c *FakeStorageV1beta1) StorageClasses() v1beta1.StorageClassInterface { return &FakeStorageClasses{c} } +func (c *FakeStorageV1beta1) VolumeAttachments() v1beta1.VolumeAttachmentInterface { + return &FakeVolumeAttachments{c} +} + // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. func (c *FakeStorageV1beta1) RESTClient() rest.Interface { diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storageclass.go index 9a830881a..ce1e72d53 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storageclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package fake import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_volumeattachment.go new file mode 100644 index 000000000..8bbf197dd --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/fake_volumeattachment.go @@ -0,0 +1,131 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeVolumeAttachments implements VolumeAttachmentInterface +type FakeVolumeAttachments struct { + Fake *FakeStorageV1beta1 +} + +var volumeattachmentsResource = schema.GroupVersionResource{Group: "storage.k8s.io", Version: "v1beta1", Resource: "volumeattachments"} + +var volumeattachmentsKind = schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1beta1", Kind: "VolumeAttachment"} + +// Get takes name of the volumeAttachment, and returns the corresponding volumeAttachment object, and an error if there is any. +func (c *FakeVolumeAttachments) Get(name string, options v1.GetOptions) (result *v1beta1.VolumeAttachment, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(volumeattachmentsResource, name), &v1beta1.VolumeAttachment{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.VolumeAttachment), err +} + +// List takes label and field selectors, and returns the list of VolumeAttachments that match those selectors. +func (c *FakeVolumeAttachments) List(opts v1.ListOptions) (result *v1beta1.VolumeAttachmentList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(volumeattachmentsResource, volumeattachmentsKind, opts), &v1beta1.VolumeAttachmentList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.VolumeAttachmentList{} + for _, item := range obj.(*v1beta1.VolumeAttachmentList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested volumeAttachments. +func (c *FakeVolumeAttachments) Watch(opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(volumeattachmentsResource, opts)) +} + +// Create takes the representation of a volumeAttachment and creates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *FakeVolumeAttachments) Create(volumeAttachment *v1beta1.VolumeAttachment) (result *v1beta1.VolumeAttachment, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(volumeattachmentsResource, volumeAttachment), &v1beta1.VolumeAttachment{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.VolumeAttachment), err +} + +// Update takes the representation of a volumeAttachment and updates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *FakeVolumeAttachments) Update(volumeAttachment *v1beta1.VolumeAttachment) (result *v1beta1.VolumeAttachment, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(volumeattachmentsResource, volumeAttachment), &v1beta1.VolumeAttachment{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.VolumeAttachment), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeVolumeAttachments) UpdateStatus(volumeAttachment *v1beta1.VolumeAttachment) (*v1beta1.VolumeAttachment, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(volumeattachmentsResource, "status", volumeAttachment), &v1beta1.VolumeAttachment{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.VolumeAttachment), err +} + +// Delete takes name of the volumeAttachment and deletes it. Returns an error if one occurs. +func (c *FakeVolumeAttachments) Delete(name string, options *v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(volumeattachmentsResource, name), &v1beta1.VolumeAttachment{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeVolumeAttachments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(volumeattachmentsResource, listOptions) + + _, err := c.Fake.Invokes(action, &v1beta1.VolumeAttachmentList{}) + return err +} + +// Patch applies the patch and returns the patched volumeAttachment. +func (c *FakeVolumeAttachments) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.VolumeAttachment, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(volumeattachmentsResource, name, data, subresources...), &v1beta1.VolumeAttachment{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.VolumeAttachment), err +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go index 6f3f0c55e..5bb931f05 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 type StorageClassExpansion interface{} + +type VolumeAttachmentExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go index 4db3d137e..4ca05be6f 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( @@ -26,6 +28,7 @@ import ( type StorageV1beta1Interface interface { RESTClient() rest.Interface StorageClassesGetter + VolumeAttachmentsGetter } // StorageV1beta1Client is used to interact with features provided by the storage.k8s.io group. @@ -37,6 +40,10 @@ func (c *StorageV1beta1Client) StorageClasses() StorageClassInterface { return newStorageClasses(c) } +func (c *StorageV1beta1Client) VolumeAttachments() VolumeAttachmentInterface { + return newVolumeAttachments(c) +} + // NewForConfig creates a new StorageV1beta1Client for the given config. func NewForConfig(c *rest.Config) (*StorageV1beta1Client, error) { config := *c diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go index 7c900b3e3..63047a7fb 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Code generated by client-gen. DO NOT EDIT. + package v1beta1 import ( diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go new file mode 100644 index 000000000..fab0801b0 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go @@ -0,0 +1,163 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// VolumeAttachmentsGetter has a method to return a VolumeAttachmentInterface. +// A group's client should implement this interface. +type VolumeAttachmentsGetter interface { + VolumeAttachments() VolumeAttachmentInterface +} + +// VolumeAttachmentInterface has methods to work with VolumeAttachment resources. +type VolumeAttachmentInterface interface { + Create(*v1beta1.VolumeAttachment) (*v1beta1.VolumeAttachment, error) + Update(*v1beta1.VolumeAttachment) (*v1beta1.VolumeAttachment, error) + UpdateStatus(*v1beta1.VolumeAttachment) (*v1beta1.VolumeAttachment, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.VolumeAttachment, error) + List(opts v1.ListOptions) (*v1beta1.VolumeAttachmentList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.VolumeAttachment, err error) + VolumeAttachmentExpansion +} + +// volumeAttachments implements VolumeAttachmentInterface +type volumeAttachments struct { + client rest.Interface +} + +// newVolumeAttachments returns a VolumeAttachments +func newVolumeAttachments(c *StorageV1beta1Client) *volumeAttachments { + return &volumeAttachments{ + client: c.RESTClient(), + } +} + +// Get takes name of the volumeAttachment, and returns the corresponding volumeAttachment object, and an error if there is any. +func (c *volumeAttachments) Get(name string, options v1.GetOptions) (result *v1beta1.VolumeAttachment, err error) { + result = &v1beta1.VolumeAttachment{} + err = c.client.Get(). + Resource("volumeattachments"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of VolumeAttachments that match those selectors. +func (c *volumeAttachments) List(opts v1.ListOptions) (result *v1beta1.VolumeAttachmentList, err error) { + result = &v1beta1.VolumeAttachmentList{} + err = c.client.Get(). + Resource("volumeattachments"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested volumeAttachments. +func (c *volumeAttachments) Watch(opts v1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.client.Get(). + Resource("volumeattachments"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch() +} + +// Create takes the representation of a volumeAttachment and creates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *volumeAttachments) Create(volumeAttachment *v1beta1.VolumeAttachment) (result *v1beta1.VolumeAttachment, err error) { + result = &v1beta1.VolumeAttachment{} + err = c.client.Post(). + Resource("volumeattachments"). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// Update takes the representation of a volumeAttachment and updates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *volumeAttachments) Update(volumeAttachment *v1beta1.VolumeAttachment) (result *v1beta1.VolumeAttachment, err error) { + result = &v1beta1.VolumeAttachment{} + err = c.client.Put(). + Resource("volumeattachments"). + Name(volumeAttachment.Name). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *volumeAttachments) UpdateStatus(volumeAttachment *v1beta1.VolumeAttachment) (result *v1beta1.VolumeAttachment, err error) { + result = &v1beta1.VolumeAttachment{} + err = c.client.Put(). + Resource("volumeattachments"). + Name(volumeAttachment.Name). + SubResource("status"). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// Delete takes name of the volumeAttachment and deletes it. Returns an error if one occurs. +func (c *volumeAttachments) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("volumeattachments"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *volumeAttachments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + return c.client.Delete(). + Resource("volumeattachments"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched volumeAttachment. +func (c *volumeAttachments) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.VolumeAttachment, err error) { + result = &v1beta1.VolumeAttachment{} + err = c.client.Patch(pt). + Resource("volumeattachments"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go index fb3b00987..868ee66cf 100644 --- a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/initializerconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/initializerconfiguration.go index 60b004ef9..a2cc796dc 100644 --- a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/initializerconfiguration.go +++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/initializerconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go index c9bf0fa5d..93dddb5ff 100644 --- a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go index 753dd1856..015587e80 100644 --- a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go index 6cb6067a1..243589b2f 100644 --- a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go +++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go index c05d14c25..19f567e82 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go index 307f8bc7c..7fcd1e063 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1/deployment.go index 36af90094..2d2ecf0cf 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/deployment.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go index 48917c2c0..1e8bf6fec 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go index 7e316d6b4..99fb92ff4 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go index fe584038e..6ad54b71f 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go index f3c85bfa7..95aeb0236 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go index f59f3a962..4f6e883ba 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go index 441ceecdd..4f3813a94 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/scale.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/scale.go index ec9a419a0..85bf3a6f4 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta1/scale.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go index f10ef7318..a967e8492 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go index f9f1ef06a..3d5274dc3 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go index cbdb13ef5..0ea4dc83f 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go index 0778a9fdd..8855bb20c 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go index 6db63d4b0..48cbedb8f 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go index f76e2eeb5..0fd8dbaa4 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/scale.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/scale.go index 11cb3e195..f53e42ce8 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/scale.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go index 13ef28f85..2e095ace4 100644 --- a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go +++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta2 diff --git a/vendor/k8s.io/client-go/listers/authentication/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/authentication/v1/expansion_generated.go index 3dcc80289..77b284d8d 100644 --- a/vendor/k8s.io/client-go/listers/authentication/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/authentication/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authentication/v1/tokenreview.go b/vendor/k8s.io/client-go/listers/authentication/v1/tokenreview.go index cfae0476f..5f2c6c3e6 100644 --- a/vendor/k8s.io/client-go/listers/authentication/v1/tokenreview.go +++ b/vendor/k8s.io/client-go/listers/authentication/v1/tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authentication/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/authentication/v1beta1/expansion_generated.go index 2ce7f7f92..3b2b18860 100644 --- a/vendor/k8s.io/client-go/listers/authentication/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/authentication/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authentication/v1beta1/tokenreview.go b/vendor/k8s.io/client-go/listers/authentication/v1beta1/tokenreview.go index 035ad62da..9db014e9b 100644 --- a/vendor/k8s.io/client-go/listers/authentication/v1beta1/tokenreview.go +++ b/vendor/k8s.io/client-go/listers/authentication/v1beta1/tokenreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/authorization/v1/expansion_generated.go index 0c91dd0c1..9a0f2e212 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1/localsubjectaccessreview.go index d0729f112..99055b348 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1/localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1/localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectaccessreview.go index 64ff1744b..627e4dd74 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectrulesreview.go index 63ad0f1ff..6b2f06352 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1/selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1/subjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1/subjectaccessreview.go index f389e07b1..ca7b47b46 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1/subjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1/subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/authorization/v1beta1/expansion_generated.go index 771d77400..d140d6563 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1beta1/localsubjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1beta1/localsubjectaccessreview.go index b2478381b..534e39aa9 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1beta1/localsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1beta1/localsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectaccessreview.go index 4936b9b6c..c2e82dbb9 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectrulesreview.go b/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectrulesreview.go index 8eb7a21b5..5ce83f217 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectrulesreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1beta1/selfsubjectrulesreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/authorization/v1beta1/subjectaccessreview.go b/vendor/k8s.io/client-go/listers/authorization/v1beta1/subjectaccessreview.go index 4b155de15..b1853fc3c 100644 --- a/vendor/k8s.io/client-go/listers/authorization/v1beta1/subjectaccessreview.go +++ b/vendor/k8s.io/client-go/listers/authorization/v1beta1/subjectaccessreview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go index f7b00603f..a20ab75da 100644 --- a/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go index 48012203e..27ade7ddb 100644 --- a/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go index 9e84ef13e..c026b65d5 100644 --- a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v2beta1 diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go index c8fbdecd7..4c29df910 100644 --- a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go +++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v2beta1 diff --git a/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go index 38b7e2720..63091e84a 100644 --- a/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/batch/v1/job.go b/vendor/k8s.io/client-go/listers/batch/v1/job.go index 89280d9fa..e29e0271c 100644 --- a/vendor/k8s.io/client-go/listers/batch/v1/job.go +++ b/vendor/k8s.io/client-go/listers/batch/v1/job.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go index a8fa51ecf..93f197986 100644 --- a/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go +++ b/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go index 3d84d249a..1d6cc198a 100644 --- a/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go index 51f5eef55..6af5f1457 100644 --- a/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go +++ b/vendor/k8s.io/client-go/listers/batch/v2alpha1/cronjob.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v2alpha1 diff --git a/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go index 38ac70cdf..11f6c3471 100644 --- a/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/batch/v2alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v2alpha1 diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go index 425dc6b4d..a122c3660 100644 --- a/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go +++ b/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go index c240be44f..6815de7ad 100644 --- a/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go index 6ba67d0bd..82fbedac2 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go +++ b/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/configmap.go b/vendor/k8s.io/client-go/listers/core/v1/configmap.go index e976928d9..fc927ab2c 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/configmap.go +++ b/vendor/k8s.io/client-go/listers/core/v1/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/endpoints.go b/vendor/k8s.io/client-go/listers/core/v1/endpoints.go index 6f5a1133c..7799562d7 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/endpoints.go +++ b/vendor/k8s.io/client-go/listers/core/v1/endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/event.go b/vendor/k8s.io/client-go/listers/core/v1/event.go index b087cd8bd..738e333db 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/event.go +++ b/vendor/k8s.io/client-go/listers/core/v1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go index a96db8dc9..b8b985ce0 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/limitrange.go b/vendor/k8s.io/client-go/listers/core/v1/limitrange.go index f19943751..4ee02634d 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/limitrange.go +++ b/vendor/k8s.io/client-go/listers/core/v1/limitrange.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/namespace.go b/vendor/k8s.io/client-go/listers/core/v1/namespace.go index 21be6878a..b819d741e 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/namespace.go +++ b/vendor/k8s.io/client-go/listers/core/v1/namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/node.go b/vendor/k8s.io/client-go/listers/core/v1/node.go index d43a682c9..21a8a0675 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/node.go +++ b/vendor/k8s.io/client-go/listers/core/v1/node.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go index 593ba14ed..a88dbd0c0 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go +++ b/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go index 72ddac93e..8c3d5f566 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go +++ b/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/pod.go b/vendor/k8s.io/client-go/listers/core/v1/pod.go index 6cf4a8424..d3ce8ab32 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/pod.go +++ b/vendor/k8s.io/client-go/listers/core/v1/pod.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go index d825c7475..91c2a4661 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go +++ b/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go index 6670a9d92..ee00a465c 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go +++ b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go index 713a41511..fd3119d45 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go +++ b/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/secret.go b/vendor/k8s.io/client-go/listers/core/v1/secret.go index 26ef13d9e..f8c2b11e1 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/secret.go +++ b/vendor/k8s.io/client-go/listers/core/v1/secret.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/service.go b/vendor/k8s.io/client-go/listers/core/v1/service.go index 895a69223..d872540b3 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/service.go +++ b/vendor/k8s.io/client-go/listers/core/v1/service.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go index 2245d5d43..9973af66b 100644 --- a/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go +++ b/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/event.go b/vendor/k8s.io/client-go/listers/events/v1beta1/event.go index bca3c452a..c52afd091 100644 --- a/vendor/k8s.io/client-go/listers/events/v1beta1/event.go +++ b/vendor/k8s.io/client-go/listers/events/v1beta1/event.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go index 7e8fb62b1..9971dd5dd 100644 --- a/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/extensions/v1beta1/BUILD index 9bab4a64f..49b895c3e 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/BUILD @@ -35,8 +35,7 @@ go_library( go_test( name = "go_default_test", srcs = ["daemonset_expansion_test.go"], - importpath = "k8s.io/client-go/listers/extensions/v1beta1", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go index 4672a5cb9..b63c32b97 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go index 4c17085dd..ea5168fef 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go index 060c7a35a..87c3cbe3b 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go index 5615dfccc..1f9e34d17 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go index 3189ff7c9..fadd212f1 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go index 44de996e4..930db4480 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/scale.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/scale.go index a027af828..67d45e328 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/scale.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/expansion_generated.go index 6f635d704..1529fcf3f 100644 --- a/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/imagereview.go b/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/imagereview.go index 8ffd9d05f..cdb046cf9 100644 --- a/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/imagereview.go +++ b/vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/imagereview.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go index 91fe5e772..458a1d249 100644 --- a/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go index 59e17eecb..b70adedf1 100644 --- a/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go +++ b/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/policy/v1beta1/BUILD index c678177ae..2c5f33df4 100644 --- a/vendor/k8s.io/client-go/listers/policy/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/BUILD @@ -12,6 +12,7 @@ go_library( "expansion_generated.go", "poddisruptionbudget.go", "poddisruptionbudget_expansion.go", + "podsecuritypolicy.go", ], importpath = "k8s.io/client-go/listers/policy/v1beta1", deps = [ diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go index 742775f64..29c454e2a 100644 --- a/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go +++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go index 4785fbc06..3e63c2c9c 100644 --- a/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 @@ -25,3 +25,7 @@ type EvictionListerExpansion interface{} // EvictionNamespaceListerExpansion allows custom methods to be added to // EvictionNamespaceLister. type EvictionNamespaceListerExpansion interface{} + +// PodSecurityPolicyListerExpansion allows custom methods to be added to +// PodSecurityPolicyLister. +type PodSecurityPolicyListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go index 6512f29f1..7304f36b2 100644 --- a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go +++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go new file mode 100644 index 000000000..d80f5c56e --- /dev/null +++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go @@ -0,0 +1,65 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/policy/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// PodSecurityPolicyLister helps list PodSecurityPolicies. +type PodSecurityPolicyLister interface { + // List lists all PodSecurityPolicies in the indexer. + List(selector labels.Selector) (ret []*v1beta1.PodSecurityPolicy, err error) + // Get retrieves the PodSecurityPolicy from the index for a given name. + Get(name string) (*v1beta1.PodSecurityPolicy, error) + PodSecurityPolicyListerExpansion +} + +// podSecurityPolicyLister implements the PodSecurityPolicyLister interface. +type podSecurityPolicyLister struct { + indexer cache.Indexer +} + +// NewPodSecurityPolicyLister returns a new PodSecurityPolicyLister. +func NewPodSecurityPolicyLister(indexer cache.Indexer) PodSecurityPolicyLister { + return &podSecurityPolicyLister{indexer: indexer} +} + +// List lists all PodSecurityPolicies in the indexer. +func (s *podSecurityPolicyLister) List(selector labels.Selector) (ret []*v1beta1.PodSecurityPolicy, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.PodSecurityPolicy)) + }) + return ret, err +} + +// Get retrieves the PodSecurityPolicy from the index for a given name. +func (s *podSecurityPolicyLister) Get(name string) (*v1beta1.PodSecurityPolicy, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("podsecuritypolicy"), name) + } + return obj.(*v1beta1.PodSecurityPolicy), nil +} diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go index 5dc9a225e..eb1d87006 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go index bb3186a06..a22d6025e 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go index 4d9872d3e..967ebdd84 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1/role.go index 8d7625dbe..b4649c2c3 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1/role.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go index b8209d851..8dc0968bb 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go index 9e20a6d16..302ca29d8 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go index 155666aba..91ba54c23 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go index 0ab4fb991..737ba6637 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go index 72ab79c94..cf874f56c 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go index 7f9cfd458..5e76ab42f 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go index 65ec3eb97..be7f2df6a 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go index 146f2d7f2..09d65be76 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go index b6eeae833..8da573661 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go index b795e98b0..e12039dbf 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go index d27ea2eb5..10cb23cd3 100644 --- a/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go +++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go index 8a644c804..00b662888 100644 --- a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go index 9ed04fd2a..fb7f6007c 100644 --- a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go +++ b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/settings/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/settings/v1alpha1/expansion_generated.go index 7a5ce38e9..72558897b 100644 --- a/vendor/k8s.io/client-go/listers/settings/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/settings/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/settings/v1alpha1/podpreset.go b/vendor/k8s.io/client-go/listers/settings/v1alpha1/podpreset.go index 18f622493..d30036962 100644 --- a/vendor/k8s.io/client-go/listers/settings/v1alpha1/podpreset.go +++ b/vendor/k8s.io/client-go/listers/settings/v1alpha1/podpreset.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go index 2353b59d3..49e290f4c 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go index 7c37321fd..5b20f6ab5 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go +++ b/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go index 63abe94ab..2fc6add1d 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go index 02004629a..f8d1bdb2d 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go +++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1alpha1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD b/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD index d4b82cbc8..49d992e47 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD @@ -10,6 +10,7 @@ go_library( srcs = [ "expansion_generated.go", "storageclass.go", + "volumeattachment.go", ], importpath = "k8s.io/client-go/listers/storage/v1beta1", deps = [ diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go index 84e0f9c44..8c2dc9055 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,10 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 // StorageClassListerExpansion allows custom methods to be added to // StorageClassLister. type StorageClassListerExpansion interface{} + +// VolumeAttachmentListerExpansion allows custom methods to be added to +// VolumeAttachmentLister. +type VolumeAttachmentListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go index 9253319be..45afe0e77 100644 --- a/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was automatically generated by lister-gen +// Code generated by lister-gen. DO NOT EDIT. package v1beta1 diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go new file mode 100644 index 000000000..c9cc3984e --- /dev/null +++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go @@ -0,0 +1,65 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// VolumeAttachmentLister helps list VolumeAttachments. +type VolumeAttachmentLister interface { + // List lists all VolumeAttachments in the indexer. + List(selector labels.Selector) (ret []*v1beta1.VolumeAttachment, err error) + // Get retrieves the VolumeAttachment from the index for a given name. + Get(name string) (*v1beta1.VolumeAttachment, error) + VolumeAttachmentListerExpansion +} + +// volumeAttachmentLister implements the VolumeAttachmentLister interface. +type volumeAttachmentLister struct { + indexer cache.Indexer +} + +// NewVolumeAttachmentLister returns a new VolumeAttachmentLister. +func NewVolumeAttachmentLister(indexer cache.Indexer) VolumeAttachmentLister { + return &volumeAttachmentLister{indexer: indexer} +} + +// List lists all VolumeAttachments in the indexer. +func (s *volumeAttachmentLister) List(selector labels.Selector) (ret []*v1beta1.VolumeAttachment, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.VolumeAttachment)) + }) + return ret, err +} + +// Get retrieves the VolumeAttachment from the index for a given name. +func (s *volumeAttachmentLister) Get(name string) (*v1beta1.VolumeAttachment, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("volumeattachment"), name) + } + return obj.(*v1beta1.VolumeAttachment), nil +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/BUILD b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/BUILD new file mode 100644 index 000000000..64cdd678d --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "types.go", + "zz_generated.deepcopy.go", + ], + importpath = "k8s.io/client-go/pkg/apis/clientauthentication", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/client-go/pkg/apis/clientauthentication/install:all-srcs", + "//staging/src/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go new file mode 100644 index 000000000..d06482d55 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +groupName=client.authentication.k8s.io +package clientauthentication // import "k8s.io/client-go/pkg/apis/clientauthentication" diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/BUILD b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/BUILD new file mode 100644 index 000000000..de371ab22 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/BUILD @@ -0,0 +1,32 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["install.go"], + importpath = "k8s.io/client-go/pkg/apis/clientauthentication/install", + deps = [ + "//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication:go_default_library", + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/install.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/install.go new file mode 100644 index 000000000..40093e97f --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/install.go @@ -0,0 +1,43 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package install installs the experimental API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/apis/clientauthentication" + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1" +) + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { + if err := announced.NewGroupMetaFactory( + &announced.GroupMetaFactoryArgs{ + GroupName: clientauthentication.GroupName, + VersionPreferenceOrder: []string{v1alpha1.SchemeGroupVersion.Version}, + AddInternalObjectsToScheme: clientauthentication.AddToScheme, + }, + announced.VersionToSchemeFunc{ + v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, + }, + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { + panic(err) + } +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go new file mode 100644 index 000000000..e4fbc3ea9 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go @@ -0,0 +1,50 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package clientauthentication + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "client.authentication.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ExecCredential{}, + ) + return nil +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go new file mode 100644 index 000000000..5c05825f6 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go @@ -0,0 +1,70 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package clientauthentication + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ExecCredentials is used by exec-based plugins to communicate credentials to +// HTTP transports. +type ExecCredential struct { + metav1.TypeMeta + + // Spec holds information passed to the plugin by the transport. This contains + // request and runtime specific information, such as if the session is interactive. + Spec ExecCredentialSpec + + // Status is filled in by the plugin and holds the credentials that the transport + // should use to contact the API. + // +optional + Status *ExecCredentialStatus +} + +// ExecCredenitalSpec holds request and runtime specific information provided by +// the transport. +type ExecCredentialSpec struct { + // Response is populated when the transport encounters HTTP status codes, such as 401, + // suggesting previous credentials were invalid. + // +optional + Response *Response + + // Interactive is true when the transport detects the command is being called from an + // interactive prompt. + // +optional + Interactive bool +} + +// ExecCredentialStatus holds credentials for the transport to use. +type ExecCredentialStatus struct { + // ExpirationTimestamp indicates a time when the provided credentials expire. + // +optional + ExpirationTimestamp *metav1.Time + // Token is a bearer token used by the client for request authentication. + Token string +} + +// Response defines metadata about a failed request, including HTTP status code and +// response headers. +type Response struct { + // Headers holds HTTP headers returned by the server. + Header map[string][]string + // Code is the HTTP status code returned by the server. + Code int32 +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/BUILD b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/BUILD new file mode 100644 index 000000000..1a3bc15f6 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/BUILD @@ -0,0 +1,39 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "register.go", + "types.go", + "zz_generated.conversion.go", + "zz_generated.deepcopy.go", + "zz_generated.defaults.go", + ], + importpath = "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1", + deps = [ + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go new file mode 100644 index 000000000..016adb28a --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:conversion-gen=k8s.io/client-go/pkg/apis/clientauthentication +// +k8s:openapi-gen=true +// +k8s:defaulter-gen=TypeMeta + +// +groupName=client.authentication.k8s.io +package v1alpha1 // import "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1" diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go new file mode 100644 index 000000000..2acd13dea --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go @@ -0,0 +1,55 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "client.authentication.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder runtime.SchemeBuilder + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addKnownTypes) +} + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ExecCredential{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go new file mode 100644 index 000000000..8920d3187 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go @@ -0,0 +1,70 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ExecCredentials is used by exec-based plugins to communicate credentials to +// HTTP transports. +type ExecCredential struct { + metav1.TypeMeta `json:",inline"` + + // Spec holds information passed to the plugin by the transport. This contains + // request and runtime specific information, such as if the session is interactive. + Spec ExecCredentialSpec `json:"spec,omitempty"` + + // Status is filled in by the plugin and holds the credentials that the transport + // should use to contact the API. + // +optional + Status *ExecCredentialStatus `json:"status,omitempty"` +} + +// ExecCredenitalSpec holds request and runtime specific information provided by +// the transport. +type ExecCredentialSpec struct { + // Response is populated when the transport encounters HTTP status codes, such as 401, + // suggesting previous credentials were invalid. + // +optional + Response *Response `json:"response,omitempty"` + + // Interactive is true when the transport detects the command is being called from an + // interactive prompt. + // +optional + Interactive bool `json:"interactive,omitempty"` +} + +// ExecCredentialStatus holds credentials for the transport to use. +type ExecCredentialStatus struct { + // ExpirationTimestamp indicates a time when the provided credentials expire. + // +optional + ExpirationTimestamp *metav1.Time `json:"expirationTimestamp,omitempty"` + // Token is a bearer token used by the client for request authentication. + Token string `json:"token,omitempty"` +} + +// Response defines metadata about a failed request, including HTTP status code and +// response headers. +type Response struct { + // Header holds HTTP headers returned by the server. + Header map[string][]string `json:"header,omitempty"` + // Code is the HTTP status code returned by the server. + Code int32 `json:"code,omitempty"` +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go new file mode 100644 index 000000000..bf28baef2 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go @@ -0,0 +1,141 @@ +// +build !ignore_autogenerated + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + unsafe "unsafe" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + clientauthentication "k8s.io/client-go/pkg/apis/clientauthentication" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential, + Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential, + Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec, + Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec, + Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus, + Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus, + Convert_v1alpha1_Response_To_clientauthentication_Response, + Convert_clientauthentication_Response_To_v1alpha1_Response, + ) +} + +func autoConvert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error { + if err := Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + out.Status = (*clientauthentication.ExecCredentialStatus)(unsafe.Pointer(in.Status)) + return nil +} + +// Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential is an autogenerated conversion function. +func Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error { + return autoConvert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in, out, s) +} + +func autoConvert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in *clientauthentication.ExecCredential, out *ExecCredential, s conversion.Scope) error { + if err := Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + out.Status = (*ExecCredentialStatus)(unsafe.Pointer(in.Status)) + return nil +} + +// Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential is an autogenerated conversion function. +func Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in *clientauthentication.ExecCredential, out *ExecCredential, s conversion.Scope) error { + return autoConvert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in, out, s) +} + +func autoConvert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in *ExecCredentialSpec, out *clientauthentication.ExecCredentialSpec, s conversion.Scope) error { + out.Response = (*clientauthentication.Response)(unsafe.Pointer(in.Response)) + out.Interactive = in.Interactive + return nil +} + +// Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec is an autogenerated conversion function. +func Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in *ExecCredentialSpec, out *clientauthentication.ExecCredentialSpec, s conversion.Scope) error { + return autoConvert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in, out, s) +} + +func autoConvert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in *clientauthentication.ExecCredentialSpec, out *ExecCredentialSpec, s conversion.Scope) error { + out.Response = (*Response)(unsafe.Pointer(in.Response)) + out.Interactive = in.Interactive + return nil +} + +// Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec is an autogenerated conversion function. +func Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in *clientauthentication.ExecCredentialSpec, out *ExecCredentialSpec, s conversion.Scope) error { + return autoConvert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in, out, s) +} + +func autoConvert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in *ExecCredentialStatus, out *clientauthentication.ExecCredentialStatus, s conversion.Scope) error { + out.ExpirationTimestamp = (*v1.Time)(unsafe.Pointer(in.ExpirationTimestamp)) + out.Token = in.Token + return nil +} + +// Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus is an autogenerated conversion function. +func Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in *ExecCredentialStatus, out *clientauthentication.ExecCredentialStatus, s conversion.Scope) error { + return autoConvert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in, out, s) +} + +func autoConvert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in *clientauthentication.ExecCredentialStatus, out *ExecCredentialStatus, s conversion.Scope) error { + out.ExpirationTimestamp = (*v1.Time)(unsafe.Pointer(in.ExpirationTimestamp)) + out.Token = in.Token + return nil +} + +// Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus is an autogenerated conversion function. +func Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in *clientauthentication.ExecCredentialStatus, out *ExecCredentialStatus, s conversion.Scope) error { + return autoConvert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in, out, s) +} + +func autoConvert_v1alpha1_Response_To_clientauthentication_Response(in *Response, out *clientauthentication.Response, s conversion.Scope) error { + out.Header = *(*map[string][]string)(unsafe.Pointer(&in.Header)) + out.Code = in.Code + return nil +} + +// Convert_v1alpha1_Response_To_clientauthentication_Response is an autogenerated conversion function. +func Convert_v1alpha1_Response_To_clientauthentication_Response(in *Response, out *clientauthentication.Response, s conversion.Scope) error { + return autoConvert_v1alpha1_Response_To_clientauthentication_Response(in, out, s) +} + +func autoConvert_clientauthentication_Response_To_v1alpha1_Response(in *clientauthentication.Response, out *Response, s conversion.Scope) error { + out.Header = *(*map[string][]string)(unsafe.Pointer(&in.Header)) + out.Code = in.Code + return nil +} + +// Convert_clientauthentication_Response_To_v1alpha1_Response is an autogenerated conversion function. +func Convert_clientauthentication_Response_To_v1alpha1_Response(in *clientauthentication.Response, out *Response, s conversion.Scope) error { + return autoConvert_clientauthentication_Response_To_v1alpha1_Response(in, out, s) +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..c6dbbce4d --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,137 @@ +// +build !ignore_autogenerated + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredential) DeepCopyInto(out *ExecCredential) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + if in.Status != nil { + in, out := &in.Status, &out.Status + if *in == nil { + *out = nil + } else { + *out = new(ExecCredentialStatus) + (*in).DeepCopyInto(*out) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredential. +func (in *ExecCredential) DeepCopy() *ExecCredential { + if in == nil { + return nil + } + out := new(ExecCredential) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExecCredential) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredentialSpec) DeepCopyInto(out *ExecCredentialSpec) { + *out = *in + if in.Response != nil { + in, out := &in.Response, &out.Response + if *in == nil { + *out = nil + } else { + *out = new(Response) + (*in).DeepCopyInto(*out) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialSpec. +func (in *ExecCredentialSpec) DeepCopy() *ExecCredentialSpec { + if in == nil { + return nil + } + out := new(ExecCredentialSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredentialStatus) DeepCopyInto(out *ExecCredentialStatus) { + *out = *in + if in.ExpirationTimestamp != nil { + in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp + if *in == nil { + *out = nil + } else { + *out = (*in).DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialStatus. +func (in *ExecCredentialStatus) DeepCopy() *ExecCredentialStatus { + if in == nil { + return nil + } + out := new(ExecCredentialStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Response) DeepCopyInto(out *Response) { + *out = *in + if in.Header != nil { + in, out := &in.Header, &out.Header + *out = make(map[string][]string, len(*in)) + for key, val := range *in { + if val == nil { + (*out)[key] = nil + } else { + (*out)[key] = make([]string, len(val)) + copy((*out)[key], val) + } + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Response. +func (in *Response) DeepCopy() *Response { + if in == nil { + return nil + } + out := new(Response) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go new file mode 100644 index 000000000..2bd0078a3 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go @@ -0,0 +1,32 @@ +// +build !ignore_autogenerated + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by defaulter-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// RegisterDefaults adds defaulters functions to the given scheme. +// Public to allow building arbitrary schemes. +// All generated defaulters are covering - they call all nested defaulters. +func RegisterDefaults(scheme *runtime.Scheme) error { + return nil +} diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go new file mode 100644 index 000000000..f8b15d848 --- /dev/null +++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go @@ -0,0 +1,137 @@ +// +build !ignore_autogenerated + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package clientauthentication + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredential) DeepCopyInto(out *ExecCredential) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + if in.Status != nil { + in, out := &in.Status, &out.Status + if *in == nil { + *out = nil + } else { + *out = new(ExecCredentialStatus) + (*in).DeepCopyInto(*out) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredential. +func (in *ExecCredential) DeepCopy() *ExecCredential { + if in == nil { + return nil + } + out := new(ExecCredential) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExecCredential) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredentialSpec) DeepCopyInto(out *ExecCredentialSpec) { + *out = *in + if in.Response != nil { + in, out := &in.Response, &out.Response + if *in == nil { + *out = nil + } else { + *out = new(Response) + (*in).DeepCopyInto(*out) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialSpec. +func (in *ExecCredentialSpec) DeepCopy() *ExecCredentialSpec { + if in == nil { + return nil + } + out := new(ExecCredentialSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecCredentialStatus) DeepCopyInto(out *ExecCredentialStatus) { + *out = *in + if in.ExpirationTimestamp != nil { + in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp + if *in == nil { + *out = nil + } else { + *out = (*in).DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialStatus. +func (in *ExecCredentialStatus) DeepCopy() *ExecCredentialStatus { + if in == nil { + return nil + } + out := new(ExecCredentialStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Response) DeepCopyInto(out *Response) { + *out = *in + if in.Header != nil { + in, out := &in.Header, &out.Header + *out = make(map[string][]string, len(*in)) + for key, val := range *in { + if val == nil { + (*out)[key] = nil + } else { + (*out)[key] = make([]string, len(val)) + copy((*out)[key], val) + } + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Response. +func (in *Response) DeepCopy() *Response { + if in == nil { + return nil + } + out := new(Response) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/client-go/pkg/version/def.bzl b/vendor/k8s.io/client-go/pkg/version/def.bzl index bca85ab4b..9c018a4ef 100644 --- a/vendor/k8s.io/client-go/pkg/version/def.bzl +++ b/vendor/k8s.io/client-go/pkg/version/def.bzl @@ -1,3 +1,17 @@ +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Implements hack/lib/version.sh's kube::version::ldflags() for Bazel. def version_x_defs(): # This should match the list of packages in kube::version::ldflag diff --git a/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/BUILD b/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/BUILD deleted file mode 100644 index 4100f394e..000000000 --- a/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["provider.go"], - importpath = "k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing", - deps = [ - "//vendor/github.com/coreos/go-oidc/jose:go_default_library", - "//vendor/github.com/coreos/go-oidc/key:go_default_library", - "//vendor/github.com/coreos/go-oidc/oidc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/provider.go b/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/provider.go deleted file mode 100644 index ae7353ff2..000000000 --- a/vendor/k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing/provider.go +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package testing - -import ( - "bytes" - "crypto/rand" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "crypto/x509/pkix" - "encoding/json" - "encoding/pem" - "fmt" - "io/ioutil" - "math/big" - "net" - "net/http" - "net/http/httptest" - "net/url" - "os" - "path" - "path/filepath" - "testing" - "time" - - "github.com/coreos/go-oidc/jose" - "github.com/coreos/go-oidc/key" - "github.com/coreos/go-oidc/oidc" -) - -// NewOIDCProvider provides a bare minimum OIDC IdP Server useful for testing. -func NewOIDCProvider(t *testing.T, issuerPath string) *OIDCProvider { - privKey, err := key.GeneratePrivateKey() - if err != nil { - t.Fatalf("Cannot create OIDC Provider: %v", err) - return nil - } - - op := &OIDCProvider{ - Mux: http.NewServeMux(), - PrivKey: privKey, - issuerPath: issuerPath, - } - - op.Mux.HandleFunc(path.Join(issuerPath, "/.well-known/openid-configuration"), op.handleConfig) - op.Mux.HandleFunc(path.Join(issuerPath, "/keys"), op.handleKeys) - - return op -} - -type OIDCProvider struct { - Mux *http.ServeMux - PCFG oidc.ProviderConfig - PrivKey *key.PrivateKey - issuerPath string -} - -func (op *OIDCProvider) ServeTLSWithKeyPair(cert, key string) (*httptest.Server, error) { - srv := httptest.NewUnstartedServer(op.Mux) - - srv.TLS = &tls.Config{Certificates: make([]tls.Certificate, 1)} - var err error - srv.TLS.Certificates[0], err = tls.LoadX509KeyPair(cert, key) - if err != nil { - return nil, fmt.Errorf("Cannot load cert/key pair: %v", err) - } - srv.StartTLS() - - // The issuer's URL is extended by an optional path. This ensures that the plugin can - // handle issuers that use a non-root path for discovery (see kubernetes/kubernetes#29749). - srv.URL = srv.URL + op.issuerPath - - u, err := url.Parse(srv.URL) - if err != nil { - return nil, err - } - pathFor := func(p string) *url.URL { - u2 := *u // Shallow copy. - u2.Path = path.Join(u2.Path, p) - return &u2 - } - - op.PCFG = oidc.ProviderConfig{ - Issuer: u, - AuthEndpoint: pathFor("/auth"), - TokenEndpoint: pathFor("/token"), - KeysEndpoint: pathFor("/keys"), - ResponseTypesSupported: []string{"code"}, - SubjectTypesSupported: []string{"public"}, - IDTokenSigningAlgValues: []string{"RS256"}, - } - return srv, nil -} - -func (op *OIDCProvider) handleConfig(w http.ResponseWriter, req *http.Request) { - b, err := json.Marshal(&op.PCFG) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - w.Header().Set("Content-Type", "application/json") - w.Write(b) -} - -func (op *OIDCProvider) handleKeys(w http.ResponseWriter, req *http.Request) { - keys := struct { - Keys []jose.JWK `json:"keys"` - }{ - Keys: []jose.JWK{op.PrivKey.JWK()}, - } - - b, err := json.Marshal(keys) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - w.Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%d", int(time.Hour.Seconds()))) - w.Header().Set("Expires", time.Now().Add(time.Hour).Format(time.RFC1123)) - w.Header().Set("Content-Type", "application/json") - w.Write(b) -} - -// generateSelfSignedCert generates a self-signed cert/key pairs and writes to the certPath/keyPath. -// This method is mostly identical to crypto.GenerateSelfSignedCert except for the 'IsCA' and 'KeyUsage' -// in the certificate template. (Maybe we can merge these two methods). -func GenerateSelfSignedCert(t *testing.T, host, certPath, keyPath string) { - priv, err := rsa.GenerateKey(rand.Reader, 2048) - if err != nil { - t.Fatal(err) - } - - template := x509.Certificate{ - SerialNumber: big.NewInt(1), - Subject: pkix.Name{ - CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), - }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 365), - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - BasicConstraintsValid: true, - IsCA: true, - } - - if ip := net.ParseIP(host); ip != nil { - template.IPAddresses = append(template.IPAddresses, ip) - } else { - template.DNSNames = append(template.DNSNames, host) - } - - derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv) - if err != nil { - t.Fatal(err) - } - - // Generate cert - certBuffer := bytes.Buffer{} - if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { - t.Fatal(err) - } - - // Generate key - keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { - t.Fatal(err) - } - - // Write cert - if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { - t.Fatal(err) - } - if err := ioutil.WriteFile(certPath, certBuffer.Bytes(), os.FileMode(0644)); err != nil { - t.Fatal(err) - } - - // Write key - if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { - t.Fatal(err) - } - if err := ioutil.WriteFile(keyPath, keyBuffer.Bytes(), os.FileMode(0600)); err != nil { - t.Fatal(err) - } -} diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/BUILD index 8ab2d7452..367e897fd 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/BUILD +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/BUILD @@ -29,6 +29,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth/azure:all-srcs", + "//staging/src/k8s.io/client-go/plugin/pkg/client/auth/exec:all-srcs", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth/gcp:all-srcs", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth/oidc:all-srcs", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth/openstack:all-srcs", diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/BUILD index 135ba355f..682776db5 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/BUILD +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["azure_test.go"], - importpath = "k8s.io/client-go/plugin/pkg/client/auth/azure", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/BUILD new file mode 100644 index 000000000..38cf9bdc2 --- /dev/null +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/BUILD @@ -0,0 +1,44 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["exec.go"], + importpath = "k8s.io/client-go/plugin/pkg/client/auth/exec", + visibility = ["//visibility:public"], + deps = [ + "//vendor/github.com/golang/glog:go_default_library", + "//vendor/golang.org/x/crypto/ssh/terminal:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication:go_default_library", + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1:go_default_library", + "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["exec_test.go"], + data = glob(["testdata/**"]), + embed = [":go_default_library"], + deps = [ + "//vendor/k8s.io/client-go/pkg/apis/clientauthentication:go_default_library", + "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go new file mode 100644 index 000000000..dfd434d0c --- /dev/null +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go @@ -0,0 +1,280 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package exec + +import ( + "bytes" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "sync" + "time" + + "github.com/golang/glog" + "golang.org/x/crypto/ssh/terminal" + "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/pkg/apis/clientauthentication" + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1" + "k8s.io/client-go/tools/clientcmd/api" +) + +const execInfoEnv = "KUBERNETES_EXEC_INFO" + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + v1alpha1.AddToScheme(scheme) + clientauthentication.AddToScheme(scheme) +} + +var ( + // Since transports can be constantly re-initialized by programs like kubectl, + // keep a cache of initialized authenticators keyed by a hash of their config. + globalCache = newCache() + // The list of API versions we accept. + apiVersions = map[string]schema.GroupVersion{ + v1alpha1.SchemeGroupVersion.String(): v1alpha1.SchemeGroupVersion, + } +) + +func newCache() *cache { + return &cache{m: make(map[string]*Authenticator)} +} + +func cacheKey(c *api.ExecConfig) string { + return fmt.Sprintf("%#v", c) +} + +type cache struct { + mu sync.Mutex + m map[string]*Authenticator +} + +func (c *cache) get(s string) (*Authenticator, bool) { + c.mu.Lock() + defer c.mu.Unlock() + a, ok := c.m[s] + return a, ok +} + +// put inserts an authenticator into the cache. If an authenticator is already +// associated with the key, the first one is returned instead. +func (c *cache) put(s string, a *Authenticator) *Authenticator { + c.mu.Lock() + defer c.mu.Unlock() + existing, ok := c.m[s] + if ok { + return existing + } + c.m[s] = a + return a +} + +// GetAuthenticator returns an exec-based plugin for providing client credentials. +func GetAuthenticator(config *api.ExecConfig) (*Authenticator, error) { + return newAuthenticator(globalCache, config) +} + +func newAuthenticator(c *cache, config *api.ExecConfig) (*Authenticator, error) { + key := cacheKey(config) + if a, ok := c.get(key); ok { + return a, nil + } + + gv, ok := apiVersions[config.APIVersion] + if !ok { + return nil, fmt.Errorf("exec plugin: invalid apiVersion %q", config.APIVersion) + } + + a := &Authenticator{ + cmd: config.Command, + args: config.Args, + group: gv, + + stdin: os.Stdin, + stderr: os.Stderr, + interactive: terminal.IsTerminal(int(os.Stdout.Fd())), + now: time.Now, + environ: os.Environ, + } + + for _, env := range config.Env { + a.env = append(a.env, env.Name+"="+env.Value) + } + + return c.put(key, a), nil +} + +// Authenticator is a client credential provider that rotates credentials by executing a plugin. +// The plugin input and output are defined by the API group client.authentication.k8s.io. +type Authenticator struct { + // Set by the config + cmd string + args []string + group schema.GroupVersion + env []string + + // Stubbable for testing + stdin io.Reader + stderr io.Writer + interactive bool + now func() time.Time + environ func() []string + + // Cached results. + // + // The mutex also guards calling the plugin. Since the plugin could be + // interactive we want to make sure it's only called once. + mu sync.Mutex + cachedToken string + exp time.Time +} + +// WrapTransport instruments an existing http.RoundTripper with credentials returned +// by the plugin. +func (a *Authenticator) WrapTransport(rt http.RoundTripper) http.RoundTripper { + return &roundTripper{a, rt} +} + +type roundTripper struct { + a *Authenticator + base http.RoundTripper +} + +func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + // If a user has already set credentials, use that. This makes commands like + // "kubectl get --token (token) pods" work. + if req.Header.Get("Authorization") != "" { + return r.base.RoundTrip(req) + } + + token, err := r.a.token() + if err != nil { + return nil, fmt.Errorf("getting token: %v", err) + } + req.Header.Set("Authorization", "Bearer "+token) + + res, err := r.base.RoundTrip(req) + if err != nil { + return nil, err + } + if res.StatusCode == http.StatusUnauthorized { + resp := &clientauthentication.Response{ + Header: res.Header, + Code: int32(res.StatusCode), + } + if err := r.a.refresh(token, resp); err != nil { + glog.Errorf("refreshing token: %v", err) + } + } + return res, nil +} + +func (a *Authenticator) tokenExpired() bool { + if a.exp.IsZero() { + return false + } + return a.now().After(a.exp) +} + +func (a *Authenticator) token() (string, error) { + a.mu.Lock() + defer a.mu.Unlock() + if a.cachedToken != "" && !a.tokenExpired() { + return a.cachedToken, nil + } + + return a.getToken(nil) +} + +// refresh executes the plugin to force a rotation of the token. +func (a *Authenticator) refresh(token string, r *clientauthentication.Response) error { + a.mu.Lock() + defer a.mu.Unlock() + + if token != a.cachedToken { + // Token already rotated. + return nil + } + + _, err := a.getToken(r) + return err +} + +// getToken executes the plugin and reads the credentials from stdout. It must be +// called while holding the Authenticator's mutex. +func (a *Authenticator) getToken(r *clientauthentication.Response) (string, error) { + cred := &clientauthentication.ExecCredential{ + Spec: clientauthentication.ExecCredentialSpec{ + Response: r, + Interactive: a.interactive, + }, + } + + data, err := runtime.Encode(codecs.LegacyCodec(a.group), cred) + if err != nil { + return "", fmt.Errorf("encode ExecCredentials: %v", err) + } + + env := append(a.environ(), a.env...) + env = append(env, fmt.Sprintf("%s=%s", execInfoEnv, data)) + + stdout := &bytes.Buffer{} + cmd := exec.Command(a.cmd, a.args...) + cmd.Env = env + cmd.Stderr = a.stderr + cmd.Stdout = stdout + if a.interactive { + cmd.Stdin = a.stdin + } + + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("exec: %v", err) + } + + _, gvk, err := codecs.UniversalDecoder(a.group).Decode(stdout.Bytes(), nil, cred) + if err != nil { + return "", fmt.Errorf("decode stdout: %v", err) + } + if gvk.Group != a.group.Group || gvk.Version != a.group.Version { + return "", fmt.Errorf("exec plugin is configured to use API version %s, plugin returned version %s", + a.group, schema.GroupVersion{Group: gvk.Group, Version: gvk.Version}) + } + + if cred.Status == nil { + return "", fmt.Errorf("exec plugin didn't return a status field") + } + if cred.Status.Token == "" { + return "", fmt.Errorf("exec plugin didn't return a token") + } + + if cred.Status.ExpirationTimestamp != nil { + a.exp = cred.Status.ExpirationTimestamp.Time + } else { + a.exp = time.Time{} + } + a.cachedToken = cred.Status.Token + + return a.cachedToken, nil +} diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec_test.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec_test.go new file mode 100644 index 000000000..28137eb84 --- /dev/null +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec_test.go @@ -0,0 +1,413 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package exec + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "k8s.io/client-go/pkg/apis/clientauthentication" + "k8s.io/client-go/tools/clientcmd/api" +) + +func TestCacheKey(t *testing.T) { + c1 := &api.ExecConfig{ + Command: "foo-bar", + Args: []string{"1", "2"}, + Env: []api.ExecEnvVar{ + {Name: "3", Value: "4"}, + {Name: "5", Value: "6"}, + {Name: "7", Value: "8"}, + }, + APIVersion: "client.authentication.k8s.io/v1alpha1", + } + c2 := &api.ExecConfig{ + Command: "foo-bar", + Args: []string{"1", "2"}, + Env: []api.ExecEnvVar{ + {Name: "3", Value: "4"}, + {Name: "5", Value: "6"}, + {Name: "7", Value: "8"}, + }, + APIVersion: "client.authentication.k8s.io/v1alpha1", + } + c3 := &api.ExecConfig{ + Command: "foo-bar", + Args: []string{"1", "2"}, + Env: []api.ExecEnvVar{ + {Name: "3", Value: "4"}, + {Name: "5", Value: "6"}, + }, + APIVersion: "client.authentication.k8s.io/v1alpha1", + } + key1 := cacheKey(c1) + key2 := cacheKey(c2) + key3 := cacheKey(c3) + if key1 != key2 { + t.Error("key1 and key2 didn't match") + } + if key1 == key3 { + t.Error("key1 and key3 matched") + } + if key2 == key3 { + t.Error("key2 and key3 matched") + } +} + +func compJSON(t *testing.T, got, want []byte) { + t.Helper() + gotJSON := &bytes.Buffer{} + wantJSON := &bytes.Buffer{} + + if err := json.Indent(gotJSON, got, "", " "); err != nil { + t.Errorf("got invalid JSON: %v", err) + } + if err := json.Indent(wantJSON, want, "", " "); err != nil { + t.Errorf("want invalid JSON: %v", err) + } + g := strings.TrimSpace(gotJSON.String()) + w := strings.TrimSpace(wantJSON.String()) + if g != w { + t.Errorf("wanted %q, got %q", w, g) + } +} + +func TestGetToken(t *testing.T) { + tests := []struct { + name string + config api.ExecConfig + output string + interactive bool + response *clientauthentication.Response + wantInput string + wantToken string + wantExpiry time.Time + wantErr bool + }{ + { + name: "basic-request", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": {} + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "foo-bar" + } + }`, + wantToken: "foo-bar", + }, + { + name: "interactive", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + interactive: true, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": { + "interactive": true + } + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "foo-bar" + } + }`, + wantToken: "foo-bar", + }, + { + name: "response", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + response: &clientauthentication.Response{ + Header: map[string][]string{ + "WWW-Authenticate": {`Basic realm="Access to the staging site", charset="UTF-8"`}, + }, + Code: 401, + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": { + "response": { + "header": { + "WWW-Authenticate": [ + "Basic realm=\"Access to the staging site\", charset=\"UTF-8\"" + ] + }, + "code": 401 + } + } + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "foo-bar" + } + }`, + wantToken: "foo-bar", + }, + { + name: "expiry", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": {} + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "foo-bar", + "expirationTimestamp": "2006-01-02T15:04:05Z" + } + }`, + wantExpiry: time.Date(2006, 01, 02, 15, 04, 05, 0, time.UTC), + wantToken: "foo-bar", + }, + { + name: "no-group-version", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": {} + }`, + output: `{ + "kind": "ExecCredential", + "status": { + "token": "foo-bar" + } + }`, + wantErr: true, + }, + { + name: "no-status", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": {} + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1" + }`, + wantErr: true, + }, + { + name: "no-token", + config: api.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1alpha1", + }, + wantInput: `{ + "kind":"ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "spec": {} + }`, + output: `{ + "kind": "ExecCredential", + "apiVersion":"client.authentication.k8s.io/v1alpha1", + "status": {} + }`, + wantErr: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + c := test.config + + c.Command = "./testdata/test-plugin.sh" + c.Env = append(c.Env, api.ExecEnvVar{ + Name: "TEST_OUTPUT", + Value: test.output, + }) + + a, err := newAuthenticator(newCache(), &c) + if err != nil { + t.Fatal(err) + } + + stderr := &bytes.Buffer{} + a.stderr = stderr + a.interactive = test.interactive + a.environ = func() []string { return nil } + + token, err := a.getToken(test.response) + if err != nil { + if !test.wantErr { + t.Errorf("get token %v", err) + } + return + } + if test.wantErr { + t.Fatal("expected error getting token") + } + + if token != test.wantToken { + t.Errorf("expected token %q got %q", test.wantToken, token) + } + + if !a.exp.Equal(test.wantExpiry) { + t.Errorf("expected expiry %v got %v", test.wantExpiry, a.exp) + } + + compJSON(t, stderr.Bytes(), []byte(test.wantInput)) + }) + } +} + +func TestRoundTripper(t *testing.T) { + wantToken := "" + + n := time.Now() + now := func() time.Time { return n } + + env := []string{""} + environ := func() []string { + s := make([]string, len(env)) + copy(s, env) + return s + } + + setOutput := func(s string) { + env[0] = "TEST_OUTPUT=" + s + } + + handler := func(w http.ResponseWriter, r *http.Request) { + gotToken := "" + parts := strings.Split(r.Header.Get("Authorization"), " ") + if len(parts) > 1 && strings.EqualFold(parts[0], "bearer") { + gotToken = parts[1] + } + + if wantToken != gotToken { + http.Error(w, "Unauthorized", http.StatusUnauthorized) + return + } + fmt.Fprintln(w, "ok") + } + server := httptest.NewServer(http.HandlerFunc(handler)) + + c := api.ExecConfig{ + Command: "./testdata/test-plugin.sh", + APIVersion: "client.authentication.k8s.io/v1alpha1", + } + a, err := newAuthenticator(newCache(), &c) + if err != nil { + t.Fatal(err) + } + a.environ = environ + a.now = now + a.stderr = ioutil.Discard + + client := http.Client{ + Transport: a.WrapTransport(http.DefaultTransport), + } + + get := func(t *testing.T, statusCode int) { + t.Helper() + resp, err := client.Get(server.URL) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != statusCode { + t.Errorf("wanted status %d got %d", statusCode, resp.StatusCode) + } + } + + setOutput(`{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "token1" + } + }`) + wantToken = "token1" + get(t, http.StatusOK) + + setOutput(`{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "token2" + } + }`) + // Previous token should be cached + get(t, http.StatusOK) + + wantToken = "token2" + // Token is still cached, hits unauthorized but causes token to rotate. + get(t, http.StatusUnauthorized) + // Follow up request uses the rotated token. + get(t, http.StatusOK) + + setOutput(`{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "token3", + "expirationTimestamp": "` + now().Add(time.Hour).Format(time.RFC3339Nano) + `" + } + }`) + wantToken = "token3" + // Token is still cached, hit's unauthorized but causes rotation to token with an expiry. + get(t, http.StatusUnauthorized) + get(t, http.StatusOK) + + // Move time forward 2 hours, "token3" is now expired. + n = n.Add(time.Hour * 2) + setOutput(`{ + "kind": "ExecCredential", + "apiVersion": "client.authentication.k8s.io/v1alpha1", + "status": { + "token": "token4", + "expirationTimestamp": "` + now().Add(time.Hour).Format(time.RFC3339Nano) + `" + } + }`) + wantToken = "token4" + // Old token is expired, should refresh automatically without hitting a 401. + get(t, http.StatusOK) +} diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/testdata/test-plugin.sh b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/testdata/test-plugin.sh new file mode 100755 index 000000000..6b9bb100c --- /dev/null +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/testdata/test-plugin.sh @@ -0,0 +1,18 @@ +#!/bin/sh -e + +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +>&2 echo "$KUBERNETES_EXEC_INFO" +echo "$TEST_OUTPUT" diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/BUILD index d9ef7bded..e57e896ae 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/BUILD +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["gcp_test.go"], - importpath = "k8s.io/client-go/plugin/pkg/client/auth/gcp", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/golang.org/x/oauth2:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go index 5ed1203b2..3a4f86777 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go @@ -42,8 +42,18 @@ func init() { } } -// Stubbable for testing -var execCommand = exec.Command +var ( + // Stubbable for testing + execCommand = exec.Command + + // defaultScopes: + // - cloud-platform is the base scope to authenticate to GCP. + // - userinfo.email is used to authenticate to GKE APIs with gserviceaccount + // email instead of numeric uniqueID. + defaultScopes = []string{ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/userinfo.email"} +) // gcpAuthProvider is an auth provider plugin that uses GCP credentials to provide // tokens for kubectl to authenticate itself to the apiserver. A sample json config @@ -55,6 +65,14 @@ var execCommand = exec.Command // "name": "gcp", // // 'config': { +// # Authentication options +// # These options are used while getting a token. +// +// # comma-separated list of GCP API scopes. default value of this field +// # is "https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email". +// # to override the API scopes, specify this field explicitly. +// "scopes": "https://www.googleapis.com/auth/cloud-platform" +// // # Caching options // // # Raw string data representing cached access token. @@ -96,12 +114,32 @@ type gcpAuthProvider struct { } func newGCPAuthProvider(_ string, gcpConfig map[string]string, persister restclient.AuthProviderConfigPersister) (restclient.AuthProvider, error) { - var ts oauth2.TokenSource - var err error - if cmd, useCmd := gcpConfig["cmd-path"]; useCmd { + ts, err := tokenSource(isCmdTokenSource(gcpConfig), gcpConfig) + if err != nil { + return nil, err + } + cts, err := newCachedTokenSource(gcpConfig["access-token"], gcpConfig["expiry"], persister, ts, gcpConfig) + if err != nil { + return nil, err + } + return &gcpAuthProvider{cts, persister}, nil +} + +func isCmdTokenSource(gcpConfig map[string]string) bool { + _, ok := gcpConfig["cmd-path"] + return ok +} + +func tokenSource(isCmd bool, gcpConfig map[string]string) (oauth2.TokenSource, error) { + // Command-based token source + if isCmd { + cmd := gcpConfig["cmd-path"] if len(cmd) == 0 { return nil, fmt.Errorf("missing access token cmd") } + if gcpConfig["scopes"] != "" { + return nil, fmt.Errorf("scopes can only be used when kubectl is using a gcp service account key") + } var args []string if cmdArgs, ok := gcpConfig["cmd-args"]; ok { args = strings.Fields(cmdArgs) @@ -110,18 +148,29 @@ func newGCPAuthProvider(_ string, gcpConfig map[string]string, persister restcli cmd = fields[0] args = fields[1:] } - ts = newCmdTokenSource(cmd, args, gcpConfig["token-key"], gcpConfig["expiry-key"], gcpConfig["time-fmt"]) - } else { - ts, err = google.DefaultTokenSource(context.Background(), "https://www.googleapis.com/auth/cloud-platform") + return newCmdTokenSource(cmd, args, gcpConfig["token-key"], gcpConfig["expiry-key"], gcpConfig["time-fmt"]), nil } + + // Google Application Credentials-based token source + scopes := parseScopes(gcpConfig) + ts, err := google.DefaultTokenSource(context.Background(), scopes...) if err != nil { - return nil, err + return nil, fmt.Errorf("cannot construct google default token source: %v", err) } - cts, err := newCachedTokenSource(gcpConfig["access-token"], gcpConfig["expiry"], persister, ts, gcpConfig) - if err != nil { - return nil, err + return ts, nil +} + +// parseScopes constructs a list of scopes that should be included in token source +// from the config map. +func parseScopes(gcpConfig map[string]string) []string { + scopes, ok := gcpConfig["scopes"] + if !ok { + return defaultScopes } - return &gcpAuthProvider{cts, persister}, nil + if scopes == "" { + return []string{} + } + return strings.Split(gcpConfig["scopes"], ",") } func (g *gcpAuthProvider) WrapTransport(rt http.RoundTripper) http.RoundTripper { diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp_test.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp_test.go index 662d38b8f..32271b252 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp_test.go +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp_test.go @@ -18,6 +18,7 @@ package gcp import ( "fmt" + "io/ioutil" "net/http" "os" "os/exec" @@ -116,6 +117,114 @@ func TestHelperProcess(t *testing.T) { os.Exit(0) } +func Test_isCmdTokenSource(t *testing.T) { + c1 := map[string]string{"cmd-path": "foo"} + if v := isCmdTokenSource(c1); !v { + t.Fatalf("cmd-path present in config (%+v), but got %v", c1, v) + } + + c2 := map[string]string{"cmd-args": "foo bar"} + if v := isCmdTokenSource(c2); v { + t.Fatalf("cmd-path not present in config (%+v), but got %v", c2, v) + } +} + +func Test_tokenSource_cmd(t *testing.T) { + if _, err := tokenSource(true, map[string]string{}); err == nil { + t.Fatalf("expected error, cmd-args not present in config") + } + + c := map[string]string{ + "cmd-path": "foo", + "cmd-args": "bar"} + ts, err := tokenSource(true, c) + if err != nil { + t.Fatalf("failed to return cmd token source: %+v", err) + } + if ts == nil { + t.Fatal("returned nil token source") + } + if _, ok := ts.(*commandTokenSource); !ok { + t.Fatalf("returned token source type:(%T) expected:(*commandTokenSource)", ts) + } +} + +func Test_tokenSource_cmdCannotBeUsedWithScopes(t *testing.T) { + c := map[string]string{ + "cmd-path": "foo", + "scopes": "A,B"} + if _, err := tokenSource(true, c); err == nil { + t.Fatal("expected error when scopes is used with cmd-path") + } +} + +func Test_tokenSource_applicationDefaultCredentials_fails(t *testing.T) { + // try to use empty ADC file + fakeTokenFile, err := ioutil.TempFile("", "adctoken") + if err != nil { + t.Fatalf("failed to create fake token file: +%v", err) + } + fakeTokenFile.Close() + defer os.Remove(fakeTokenFile.Name()) + + os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", fakeTokenFile.Name()) + defer os.Unsetenv("GOOGLE_APPLICATION_CREDENTIALS") + if _, err := tokenSource(false, map[string]string{}); err == nil { + t.Fatalf("expected error because specified ADC token file is not a JSON") + } +} + +func Test_tokenSource_applicationDefaultCredentials(t *testing.T) { + fakeTokenFile, err := ioutil.TempFile("", "adctoken") + if err != nil { + t.Fatalf("failed to create fake token file: +%v", err) + } + fakeTokenFile.Close() + defer os.Remove(fakeTokenFile.Name()) + if err := ioutil.WriteFile(fakeTokenFile.Name(), []byte(`{"type":"service_account"}`), 0600); err != nil { + t.Fatalf("failed to write to fake token file: %+v", err) + } + + os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", fakeTokenFile.Name()) + defer os.Unsetenv("GOOGLE_APPLICATION_CREDENTIALS") + ts, err := tokenSource(false, map[string]string{}) + if err != nil { + t.Fatalf("failed to get a token source: %+v", err) + } + if ts == nil { + t.Fatal("returned nil token source") + } +} + +func Test_parseScopes(t *testing.T) { + cases := []struct { + in map[string]string + out []string + }{ + { + map[string]string{}, + []string{ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/userinfo.email"}, + }, + { + map[string]string{"scopes": ""}, + []string{}, + }, + { + map[string]string{"scopes": "A,B,C"}, + []string{"A", "B", "C"}, + }, + } + + for _, c := range cases { + got := parseScopes(c.in) + if !reflect.DeepEqual(got, c.out) { + t.Errorf("expected=%v, got=%v", c.out, got) + } + } +} + func errEquiv(got, want error) bool { if got == want { return true diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/BUILD index 03ccf499c..ee76fac0d 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/BUILD +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["oidc_test.go"], - importpath = "k8s.io/client-go/plugin/pkg/client/auth/oidc", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/BUILD b/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/BUILD index 6ebaf302d..750ffd6f5 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/BUILD +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["openstack_test.go"], - importpath = "k8s.io/client-go/plugin/pkg/client/auth/openstack", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/rest/BUILD b/vendor/k8s.io/client-go/rest/BUILD index 44958631d..0cb24bcff 100644 --- a/vendor/k8s.io/client-go/rest/BUILD +++ b/vendor/k8s.io/client-go/rest/BUILD @@ -16,8 +16,7 @@ go_test( "url_utils_test.go", "urlbackoff_test.go", ], - importpath = "k8s.io/client-go/rest", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/google/gofuzz:go_default_library", @@ -55,7 +54,6 @@ go_library( "transport.go", "url_utils.go", "urlbackoff.go", - "versions.go", "zz_generated.deepcopy.go", ], importpath = "k8s.io/client-go/rest", @@ -73,6 +71,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/pkg/version:go_default_library", + "//vendor/k8s.io/client-go/plugin/pkg/client/auth/exec:go_default_library", "//vendor/k8s.io/client-go/rest/watch:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//vendor/k8s.io/client-go/tools/metrics:go_default_library", diff --git a/vendor/k8s.io/client-go/rest/client.go b/vendor/k8s.io/client-go/rest/client.go index 524e0d8eb..927403cb2 100644 --- a/vendor/k8s.io/client-go/rest/client.go +++ b/vendor/k8s.io/client-go/rest/client.go @@ -222,9 +222,9 @@ func (c *RESTClient) Verb(verb string) *Request { backoff := c.createBackoffMgr() if c.Client == nil { - return NewRequest(nil, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle) + return NewRequest(nil, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle, 0) } - return NewRequest(c.Client, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle) + return NewRequest(c.Client, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle, c.Client.Timeout) } // Post begins a POST request. Short for c.Verb("POST"). diff --git a/vendor/k8s.io/client-go/rest/client_test.go b/vendor/k8s.io/client-go/rest/client_test.go index 3096cc13a..2eae9be2d 100644 --- a/vendor/k8s.io/client-go/rest/client_test.go +++ b/vendor/k8s.io/client-go/rest/client_test.go @@ -302,7 +302,7 @@ func TestCreateBackoffManager(t *testing.T) { backoff.UpdateBackoff(theUrl, nil, 500) backoff = readExpBackoffConfig() if backoff.CalculateBackoff(theUrl)/time.Second != 0 { - t.Errorf("Zero backoff duration, but backoff still occuring.") + t.Errorf("Zero backoff duration, but backoff still occurring.") } // No env -> No backoff. diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go index 038fee945..72a78bc0a 100644 --- a/vendor/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/client-go/rest/config.go @@ -54,9 +54,6 @@ type Config struct { Host string // APIPath is a sub-path that points to an API root. APIPath string - // Prefix is the sub path of the server. If not specified, the client will set - // a default value. Use "/" to indicate the server root should be used - Prefix string // ContentConfig contains settings that affect how objects are transformed when // sent to the server. @@ -71,10 +68,6 @@ type Config struct { // TODO: demonstrate an OAuth2 compatible client. BearerToken string - // CacheDir is the directory where we'll store HTTP cached responses. - // If set to empty string, no caching mechanism will be used. - CacheDir string - // Impersonate is the configuration that RESTClient will use for impersonation. Impersonate ImpersonationConfig @@ -84,6 +77,9 @@ type Config struct { // Callback to persist config for AuthProvider. AuthConfigPersister AuthProviderConfigPersister + // Exec-based authentication provider. + ExecProvider *clientcmdapi.ExecConfig + // TLSClientConfig contains settings to enable transport layer security TLSClientConfig @@ -405,7 +401,6 @@ func AnonymousClientConfig(config *Config) *Config { return &Config{ Host: config.Host, APIPath: config.APIPath, - Prefix: config.Prefix, ContentConfig: config.ContentConfig, TLSClientConfig: TLSClientConfig{ Insecure: config.Insecure, @@ -429,12 +424,10 @@ func CopyConfig(config *Config) *Config { return &Config{ Host: config.Host, APIPath: config.APIPath, - Prefix: config.Prefix, ContentConfig: config.ContentConfig, Username: config.Username, Password: config.Password, BearerToken: config.BearerToken, - CacheDir: config.CacheDir, Impersonate: ImpersonationConfig{ Groups: config.Impersonate.Groups, Extra: config.Impersonate.Extra, @@ -442,6 +435,7 @@ func CopyConfig(config *Config) *Config { }, AuthProvider: config.AuthProvider, AuthConfigPersister: config.AuthConfigPersister, + ExecProvider: config.ExecProvider, TLSClientConfig: TLSClientConfig{ Insecure: config.TLSClientConfig.Insecure, ServerName: config.TLSClientConfig.ServerName, diff --git a/vendor/k8s.io/client-go/rest/config_test.go b/vendor/k8s.io/client-go/rest/config_test.go index 0e86442db..a9495d792 100644 --- a/vendor/k8s.io/client-go/rest/config_test.go +++ b/vendor/k8s.io/client-go/rest/config_test.go @@ -267,9 +267,9 @@ func TestAnonymousConfig(t *testing.T) { expected.BearerToken = "" expected.Username = "" expected.Password = "" - expected.CacheDir = "" expected.AuthProvider = nil expected.AuthConfigPersister = nil + expected.ExecProvider = nil expected.TLSClientConfig.CertData = nil expected.TLSClientConfig.CertFile = "" expected.TLSClientConfig.KeyData = nil diff --git a/vendor/k8s.io/client-go/rest/fake/fake.go b/vendor/k8s.io/client-go/rest/fake/fake.go index db2c01c71..bc43a90ac 100644 --- a/vendor/k8s.io/client-go/rest/fake/fake.go +++ b/vendor/k8s.io/client-go/rest/fake/fake.go @@ -107,7 +107,7 @@ func (c *RESTClient) request(verb string) *restclient.Request { serializers.StreamingSerializer = info.StreamSerializer.Serializer serializers.Framer = info.StreamSerializer.Framer } - return restclient.NewRequest(c, verb, &url.URL{Host: "localhost"}, c.VersionedAPIPath, config, serializers, nil, nil) + return restclient.NewRequest(c, verb, &url.URL{Host: "localhost"}, c.VersionedAPIPath, config, serializers, nil, nil, 0) } func (c *RESTClient) Do(req *http.Request) (*http.Response, error) { diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go index aac126ccc..6ca9e0197 100644 --- a/vendor/k8s.io/client-go/rest/request.go +++ b/vendor/k8s.io/client-go/rest/request.go @@ -112,7 +112,7 @@ type Request struct { } // NewRequest creates a new request helper object for accessing runtime.Objects on a server. -func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, serializers Serializers, backoff BackoffManager, throttle flowcontrol.RateLimiter) *Request { +func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, serializers Serializers, backoff BackoffManager, throttle flowcontrol.RateLimiter, timeout time.Duration) *Request { if backoff == nil { glog.V(2).Infof("Not implementing request backoff strategy.") backoff = &NoBackoff{} @@ -131,6 +131,7 @@ func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPa serializers: serializers, backoffMgr: backoff, throttle: throttle, + timeout: timeout, } switch { case len(content.AcceptContentTypes) > 0: diff --git a/vendor/k8s.io/client-go/rest/request_test.go b/vendor/k8s.io/client-go/rest/request_test.go index f575350e3..fac690255 100755 --- a/vendor/k8s.io/client-go/rest/request_test.go +++ b/vendor/k8s.io/client-go/rest/request_test.go @@ -57,11 +57,11 @@ import ( ) func TestNewRequestSetsAccept(t *testing.T) { - r := NewRequest(nil, "get", &url.URL{Path: "/path/"}, "", ContentConfig{}, Serializers{}, nil, nil) + r := NewRequest(nil, "get", &url.URL{Path: "/path/"}, "", ContentConfig{}, Serializers{}, nil, nil, 0) if r.headers.Get("Accept") != "" { t.Errorf("unexpected headers: %#v", r.headers) } - r = NewRequest(nil, "get", &url.URL{Path: "/path/"}, "", ContentConfig{ContentType: "application/other"}, Serializers{}, nil, nil) + r = NewRequest(nil, "get", &url.URL{Path: "/path/"}, "", ContentConfig{ContentType: "application/other"}, Serializers{}, nil, nil, 0) if r.headers.Get("Accept") != "application/other, */*" { t.Errorf("unexpected headers: %#v", r.headers) } @@ -86,7 +86,7 @@ func TestRequestSetsHeaders(t *testing.T) { config := defaultContentConfig() config.ContentType = "application/other" serializers := defaultSerializers(t) - r := NewRequest(server, "get", &url.URL{Path: "/path"}, "", config, serializers, nil, nil) + r := NewRequest(server, "get", &url.URL{Path: "/path"}, "", config, serializers, nil, nil, 0) // Check if all "issue" methods are setting headers. _ = r.Do() @@ -341,7 +341,7 @@ func TestResultIntoWithNoBodyReturnsErr(t *testing.T) { func TestURLTemplate(t *testing.T) { uri, _ := url.Parse("http://localhost") - r := NewRequest(nil, "POST", uri, "", ContentConfig{GroupVersion: &schema.GroupVersion{Group: "test"}}, Serializers{}, nil, nil) + r := NewRequest(nil, "POST", uri, "", ContentConfig{GroupVersion: &schema.GroupVersion{Group: "test"}}, Serializers{}, nil, nil, 0) r.Prefix("pre1").Resource("r1").Namespace("ns").Name("nm").Param("p0", "v0") full := r.URL() if full.String() != "http://localhost/pre1/namespaces/ns/r1/nm?p0=v0" { @@ -403,7 +403,7 @@ func TestTransformResponse(t *testing.T) { {Response: &http.Response{StatusCode: 200, Body: ioutil.NopCloser(bytes.NewReader(invalid))}, Data: invalid}, } for i, test := range testCases { - r := NewRequest(nil, "", uri, "", defaultContentConfig(), defaultSerializers(t), nil, nil) + r := NewRequest(nil, "", uri, "", defaultContentConfig(), defaultSerializers(t), nil, nil, 0) if test.Response.Body == nil { test.Response.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) } @@ -554,7 +554,7 @@ func TestTransformResponseNegotiate(t *testing.T) { serializers.RenegotiatedDecoder = negotiator.invoke contentConfig := defaultContentConfig() contentConfig.ContentType = test.ContentType - r := NewRequest(nil, "", uri, "", contentConfig, serializers, nil, nil) + r := NewRequest(nil, "", uri, "", contentConfig, serializers, nil, nil, 0) if test.Response.Body == nil { test.Response.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) } @@ -1480,7 +1480,7 @@ func TestAbsPath(t *testing.T) { {"/p1/api/p2", "/api/r1", "/api/", "/p1/api/p2/api/"}, } { u, _ := url.Parse("http://localhost:123" + tc.configPrefix) - r := NewRequest(nil, "POST", u, "", ContentConfig{GroupVersion: &schema.GroupVersion{Group: "test"}}, Serializers{}, nil, nil).Prefix(tc.resourcePrefix).AbsPath(tc.absPath) + r := NewRequest(nil, "POST", u, "", ContentConfig{GroupVersion: &schema.GroupVersion{Group: "test"}}, Serializers{}, nil, nil, 0).Prefix(tc.resourcePrefix).AbsPath(tc.absPath) if r.pathPrefix != tc.wantsAbsPath { t.Errorf("test case %d failed, unexpected path: %q, expected %q", i, r.pathPrefix, tc.wantsAbsPath) } diff --git a/vendor/k8s.io/client-go/rest/transport.go b/vendor/k8s.io/client-go/rest/transport.go index f59f8dbe2..b6a067632 100644 --- a/vendor/k8s.io/client-go/rest/transport.go +++ b/vendor/k8s.io/client-go/rest/transport.go @@ -20,6 +20,7 @@ import ( "crypto/tls" "net/http" + "k8s.io/client-go/plugin/pkg/client/auth/exec" "k8s.io/client-go/transport" ) @@ -59,6 +60,20 @@ func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTrip // TransportConfig converts a client config to an appropriate transport config. func (c *Config) TransportConfig() (*transport.Config, error) { wt := c.WrapTransport + if c.ExecProvider != nil { + provider, err := exec.GetAuthenticator(c.ExecProvider) + if err != nil { + return nil, err + } + if wt != nil { + previousWT := wt + wt = func(rt http.RoundTripper) http.RoundTripper { + return provider.WrapTransport(previousWT(rt)) + } + } else { + wt = provider.WrapTransport + } + } if c.AuthProvider != nil { provider, err := GetAuthProvider(c.Host, c.AuthProvider, c.AuthConfigPersister) if err != nil { @@ -89,7 +104,6 @@ func (c *Config) TransportConfig() (*transport.Config, error) { }, Username: c.Username, Password: c.Password, - CacheDir: c.CacheDir, BearerToken: c.BearerToken, Impersonate: transport.ImpersonationConfig{ UserName: c.Impersonate.UserName, diff --git a/vendor/k8s.io/client-go/rest/versions.go b/vendor/k8s.io/client-go/rest/versions.go deleted file mode 100644 index 9d41812f2..000000000 --- a/vendor/k8s.io/client-go/rest/versions.go +++ /dev/null @@ -1,88 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rest - -import ( - "encoding/json" - "fmt" - "net/http" - "path" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - legacyAPIPath = "/api" - defaultAPIPath = "/apis" -) - -// TODO: Is this obsoleted by the discovery client? - -// ServerAPIVersions returns the GroupVersions supported by the API server. -// It creates a RESTClient based on the passed in config, but it doesn't rely -// on the Version and Codec of the config, because it uses AbsPath and -// takes the raw response. -func ServerAPIVersions(c *Config) (groupVersions []string, err error) { - transport, err := TransportFor(c) - if err != nil { - return nil, err - } - client := http.Client{Transport: transport} - - configCopy := *c - configCopy.GroupVersion = nil - configCopy.APIPath = "" - baseURL, _, err := defaultServerUrlFor(&configCopy) - if err != nil { - return nil, err - } - // Get the groupVersions exposed at /api - originalPath := baseURL.Path - baseURL.Path = path.Join(originalPath, legacyAPIPath) - resp, err := client.Get(baseURL.String()) - if err != nil { - return nil, err - } - var v metav1.APIVersions - defer resp.Body.Close() - err = json.NewDecoder(resp.Body).Decode(&v) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - - groupVersions = append(groupVersions, v.Versions...) - // Get the groupVersions exposed at /apis - baseURL.Path = path.Join(originalPath, defaultAPIPath) - resp2, err := client.Get(baseURL.String()) - if err != nil { - return nil, err - } - var apiGroupList metav1.APIGroupList - defer resp2.Body.Close() - err = json.NewDecoder(resp2.Body).Decode(&apiGroupList) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - - for _, g := range apiGroupList.Groups { - for _, gv := range g.Versions { - groupVersions = append(groupVersions, gv.GroupVersion) - } - } - - return groupVersions, nil -} diff --git a/vendor/k8s.io/client-go/rest/watch/BUILD b/vendor/k8s.io/client-go/rest/watch/BUILD index 271832863..30dfadd1f 100644 --- a/vendor/k8s.io/client-go/rest/watch/BUILD +++ b/vendor/k8s.io/client-go/rest/watch/BUILD @@ -27,7 +27,6 @@ go_test( "decoder_test.go", "encoder_test.go", ], - importpath = "k8s.io/client-go/rest/watch_test", deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go index 59050fc49..67568bf0b 100644 --- a/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go +++ b/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by deepcopy-gen. Do not edit it manually! +// Code generated by deepcopy-gen. DO NOT EDIT. package rest diff --git a/vendor/k8s.io/client-go/scale/BUILD b/vendor/k8s.io/client-go/scale/BUILD index 4fb0a949e..b82984243 100644 --- a/vendor/k8s.io/client-go/scale/BUILD +++ b/vendor/k8s.io/client-go/scale/BUILD @@ -35,8 +35,7 @@ go_test( "client_test.go", "roundtrip_test.go", ], - importpath = "k8s.io/client-go/scale", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/api/apps/v1beta1:go_default_library", diff --git a/vendor/k8s.io/client-go/scale/client.go b/vendor/k8s.io/client-go/scale/client.go index 3f85197a0..782aca394 100644 --- a/vendor/k8s.io/client-go/scale/client.go +++ b/vendor/k8s.io/client-go/scale/client.go @@ -21,6 +21,7 @@ import ( autoscaling "k8s.io/api/autoscaling/v1" "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/dynamic" @@ -129,21 +130,29 @@ func (c *namespacedScaleClient) Get(resource schema.GroupResource, name string) return nil, fmt.Errorf("unable to get client for %s: %v", resource.String(), err) } - rawObj, err := c.client.clientBase.Get(). + result := c.client.clientBase.Get(). AbsPath(path). Namespace(c.namespace). Resource(gvr.Resource). Name(name). SubResource("scale"). - Do(). - Get() + Do() + if err := result.Error(); err != nil { + return nil, fmt.Errorf("could not fetch the scale for %s %s: %v", resource.String(), name, err) + } + scaleBytes, err := result.Raw() + if err != nil { + return nil, err + } + decoder := scaleConverter.codecs.UniversalDecoder(scaleConverter.ScaleVersions()...) + rawScaleObj, err := runtime.Decode(decoder, scaleBytes) if err != nil { return nil, err } // convert whatever this is to autoscaling/v1.Scale - scaleObj, err := scaleConverter.ConvertToVersion(rawObj, autoscaling.SchemeGroupVersion) + scaleObj, err := scaleConverter.ConvertToVersion(rawScaleObj, autoscaling.SchemeGroupVersion) if err != nil { return nil, fmt.Errorf("received an object from a /scale endpoint which was not convertible to autoscaling Scale: %v", err) } @@ -158,8 +167,8 @@ func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *aut } // Currently, a /scale endpoint can receive and return different scale types. - // Until we hvae support for the alternative API representations proposal, - // we need to deal with sending and accepting differnet API versions. + // Until we have support for the alternative API representations proposal, + // we need to deal with sending and accepting different API versions. // figure out what scale we actually need here desiredGVK, err := c.client.scaleKindResolver.ScaleForResource(gvr) @@ -170,25 +179,38 @@ func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *aut // convert this to whatever this endpoint wants scaleUpdate, err := scaleConverter.ConvertToVersion(scale, desiredGVK.GroupVersion()) if err != nil { - return nil, fmt.Errorf("could not convert scale update to internal Scale: %v", err) + return nil, fmt.Errorf("could not convert scale update to external Scale: %v", err) + } + encoder := scaleConverter.codecs.LegacyCodec(desiredGVK.GroupVersion()) + scaleUpdateBytes, err := runtime.Encode(encoder, scaleUpdate) + if err != nil { + return nil, fmt.Errorf("could not encode scale update to external Scale: %v", err) } - rawObj, err := c.client.clientBase.Put(). + result := c.client.clientBase.Put(). AbsPath(path). Namespace(c.namespace). Resource(gvr.Resource). Name(scale.Name). SubResource("scale"). - Body(scaleUpdate). - Do(). - Get() + Body(scaleUpdateBytes). + Do() + if err := result.Error(); err != nil { + return nil, fmt.Errorf("could not update the scale for %s %s: %v", resource.String(), scale.Name, err) + } + scaleBytes, err := result.Raw() if err != nil { - return nil, fmt.Errorf("could not fetch the scale for %s %s: %v", resource.String(), scale.Name, err) + return nil, err + } + decoder := scaleConverter.codecs.UniversalDecoder(scaleConverter.ScaleVersions()...) + rawScaleObj, err := runtime.Decode(decoder, scaleBytes) + if err != nil { + return nil, err } // convert whatever this is back to autoscaling/v1.Scale - scaleObj, err := scaleConverter.ConvertToVersion(rawObj, autoscaling.SchemeGroupVersion) + scaleObj, err := scaleConverter.ConvertToVersion(rawScaleObj, autoscaling.SchemeGroupVersion) if err != nil { return nil, fmt.Errorf("received an object from a /scale endpoint which was not convertible to autoscaling Scale: %v", err) } diff --git a/vendor/k8s.io/client-go/scale/client_test.go b/vendor/k8s.io/client-go/scale/client_test.go index f4f2af3d6..6301320f3 100644 --- a/vendor/k8s.io/client-go/scale/client_test.go +++ b/vendor/k8s.io/client-go/scale/client_test.go @@ -99,7 +99,7 @@ func fakeScaleClient(t *testing.T) (ScalesGetter, []schema.GroupResource) { restMapperRes, err := discovery.GetAPIGroupResources(fakeDiscoveryClient) if err != nil { - t.Fatalf("unexpected error while constructing resource list from fake discovery client: %v") + t.Fatalf("unexpected error while constructing resource list from fake discovery client: %v", err) } restMapper := discovery.NewRESTMapper(restMapperRes, apimeta.InterfacesForUnstructured) diff --git a/vendor/k8s.io/client-go/scale/roundtrip_test.go b/vendor/k8s.io/client-go/scale/roundtrip_test.go index 2ea288757..2d3b28bf6 100644 --- a/vendor/k8s.io/client-go/scale/roundtrip_test.go +++ b/vendor/k8s.io/client-go/scale/roundtrip_test.go @@ -23,7 +23,7 @@ import ( ) // NB: this can't be in the scheme package, because importing' -// scheme/autoscalingv1 from scheme causes a depedency loop from +// scheme/autoscalingv1 from scheme causes a dependency loop from // conversions func TestRoundTrip(t *testing.T) { diff --git a/vendor/k8s.io/client-go/scale/scheme/appsint/doc.go b/vendor/k8s.io/client-go/scale/scheme/appsint/doc.go index 5b1d6841c..16f29e2af 100644 --- a/vendor/k8s.io/client-go/scale/scheme/appsint/doc.go +++ b/vendor/k8s.io/client-go/scale/scheme/appsint/doc.go @@ -17,6 +17,6 @@ limitations under the License. // Package appsint contains the necessary scaffolding of the // internal version of extensions as required by conversion logic. // It doesn't have any of its own types -- it's just necessary to -// get the expected behavoir out of runtime.Scheme.ConvertToVersion +// get the expected behavior out of runtime.Scheme.ConvertToVersion // and associated methods. package appsint diff --git a/vendor/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go b/vendor/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go index 93e0e6164..bd42e7add 100644 --- a/vendor/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/client-go/scale/scheme/appsv1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by conversion-gen. Do not edit it manually! +// Code generated by conversion-gen. DO NOT EDIT. package appsv1beta1 diff --git a/vendor/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go b/vendor/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go index 410a0d90c..d6afedb0d 100644 --- a/vendor/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go +++ b/vendor/k8s.io/client-go/scale/scheme/appsv1beta2/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by conversion-gen. Do not edit it manually! +// Code generated by conversion-gen. DO NOT EDIT. package appsv1beta2 diff --git a/vendor/k8s.io/client-go/scale/scheme/autoscalingv1/zz_generated.conversion.go b/vendor/k8s.io/client-go/scale/scheme/autoscalingv1/zz_generated.conversion.go index 1eaa0d180..2a7a45a47 100644 --- a/vendor/k8s.io/client-go/scale/scheme/autoscalingv1/zz_generated.conversion.go +++ b/vendor/k8s.io/client-go/scale/scheme/autoscalingv1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by conversion-gen. Do not edit it manually! +// Code generated by conversion-gen. DO NOT EDIT. package autoscalingv1 diff --git a/vendor/k8s.io/client-go/scale/scheme/extensionsint/doc.go b/vendor/k8s.io/client-go/scale/scheme/extensionsint/doc.go index cc92bf188..9aaac6086 100644 --- a/vendor/k8s.io/client-go/scale/scheme/extensionsint/doc.go +++ b/vendor/k8s.io/client-go/scale/scheme/extensionsint/doc.go @@ -17,6 +17,6 @@ limitations under the License. // Package extensionsint contains the necessary scaffolding of the // internal version of extensions as required by conversion logic. // It doesn't have any of its own types -- it's just necessary to -// get the expected behavoir out of runtime.Scheme.ConvertToVersion +// get the expected behavior out of runtime.Scheme.ConvertToVersion // and associated methods. package extensionsint diff --git a/vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1/zz_generated.conversion.go b/vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1/zz_generated.conversion.go index 848cb8d2a..6d0ed7a29 100644 --- a/vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1/zz_generated.conversion.go +++ b/vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by conversion-gen. Do not edit it manually! +// Code generated by conversion-gen. DO NOT EDIT. package extensionsv1beta1 diff --git a/vendor/k8s.io/client-go/scale/scheme/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/scale/scheme/zz_generated.deepcopy.go index 19b679583..d34399667 100644 --- a/vendor/k8s.io/client-go/scale/scheme/zz_generated.deepcopy.go +++ b/vendor/k8s.io/client-go/scale/scheme/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by deepcopy-gen. Do not edit it manually! +// Code generated by deepcopy-gen. DO NOT EDIT. package scheme @@ -49,9 +49,8 @@ func (in *Scale) DeepCopy() *Scale { func (in *Scale) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c - } else { - return nil } + return nil } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. diff --git a/vendor/k8s.io/client-go/scale/util.go b/vendor/k8s.io/client-go/scale/util.go index 9eb108536..46b5c4d1e 100644 --- a/vendor/k8s.io/client-go/scale/util.go +++ b/vendor/k8s.io/client-go/scale/util.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/discovery" scalescheme "k8s.io/client-go/scale/scheme" scaleappsint "k8s.io/client-go/scale/scheme/appsint" @@ -124,6 +125,7 @@ func NewDiscoveryScaleKindResolver(client discovery.ServerResourcesInterface) Sc // ScaleConverter knows how to convert between external scale versions. type ScaleConverter struct { scheme *runtime.Scheme + codecs serializer.CodecFactory internalVersioner runtime.GroupVersioner } @@ -141,6 +143,7 @@ func NewScaleConverter() *ScaleConverter { return &ScaleConverter{ scheme: scheme, + codecs: serializer.NewCodecFactory(scheme), internalVersioner: runtime.NewMultiGroupVersioner( scalescheme.SchemeGroupVersion, schema.GroupKind{Group: scaleext.GroupName, Kind: "Scale"}, @@ -156,6 +159,22 @@ func (c *ScaleConverter) Scheme() *runtime.Scheme { return c.scheme } +func (c *ScaleConverter) Codecs() serializer.CodecFactory { + return c.codecs +} + +func (c *ScaleConverter) ScaleVersions() []schema.GroupVersion { + return []schema.GroupVersion{ + scaleautoscaling.SchemeGroupVersion, + scalescheme.SchemeGroupVersion, + scaleext.SchemeGroupVersion, + scaleextint.SchemeGroupVersion, + scaleappsint.SchemeGroupVersion, + scaleappsv1beta1.SchemeGroupVersion, + scaleappsv1beta2.SchemeGroupVersion, + } +} + // ConvertToVersion converts the given *external* input object to the given output *external* output group-version. func (c *ScaleConverter) ConvertToVersion(in runtime.Object, outVersion schema.GroupVersion) (runtime.Object, error) { scaleInt, err := c.scheme.ConvertToVersion(in, c.internalVersioner) diff --git a/vendor/k8s.io/client-go/testing/BUILD b/vendor/k8s.io/client-go/testing/BUILD index b26e66287..dd8d13397 100644 --- a/vendor/k8s.io/client-go/testing/BUILD +++ b/vendor/k8s.io/client-go/testing/BUILD @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", + "go_test", ) go_library( @@ -28,6 +29,23 @@ go_library( ], ) +go_test( + name = "go_default_test", + srcs = [ + "fixture_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", + ], +) + filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/vendor/k8s.io/client-go/testing/fixture.go b/vendor/k8s.io/client-go/testing/fixture.go index 08379fb08..ba8ee508f 100644 --- a/vendor/k8s.io/client-go/testing/fixture.go +++ b/vendor/k8s.io/client-go/testing/fixture.go @@ -29,6 +29,11 @@ import ( restclient "k8s.io/client-go/rest" ) +// FakeWatchBufferSize is the max num of watch event can be buffered in the +// watch channel. Note that when watch event overflows or exceed this buffer +// size, manipulations via fake client may be blocked. +const FakeWatchBufferSize = 128 + // ObjectTracker keeps track of objects. It is intended to be used to // fake calls to a server by returning objects based on their kind, // namespace and name. @@ -54,6 +59,10 @@ type ObjectTracker interface { // didn't exist in the tracker prior to deletion, Delete returns // no error. Delete(gvr schema.GroupVersionResource, ns, name string) error + + // Watch watches objects from the tracker. Watch returns a channel + // which will push added / modified / deleted object. + Watch(gvr schema.GroupVersionResource, ns string) (watch.Interface, error) } // ObjectScheme abstracts the implementation of common operations on objects. @@ -132,6 +141,13 @@ type tracker struct { decoder runtime.Decoder lock sync.RWMutex objects map[schema.GroupVersionResource][]runtime.Object + // The value type of watchers is a map of which the key is either a namespace or + // all/non namespace aka "" and its value is list of fake watchers. Each of + // fake watcher holds a buffered channel of size "FakeWatchBufferSize" which + // is default to 128. Manipulations on resources will broadcast the notification + // events into the watchers' channel and note that too many unhandled event may + // potentially block the tracker. + watchers map[schema.GroupVersionResource]map[string][]*watch.FakeWatcher } var _ ObjectTracker = &tracker{} @@ -140,9 +156,10 @@ var _ ObjectTracker = &tracker{} // of objects for the fake clientset. Mostly useful for unit tests. func NewObjectTracker(scheme ObjectScheme, decoder runtime.Decoder) ObjectTracker { return &tracker{ - scheme: scheme, - decoder: decoder, - objects: make(map[schema.GroupVersionResource][]runtime.Object), + scheme: scheme, + decoder: decoder, + objects: make(map[schema.GroupVersionResource][]runtime.Object), + watchers: make(map[schema.GroupVersionResource]map[string][]*watch.FakeWatcher), } } @@ -185,6 +202,19 @@ func (t *tracker) List(gvr schema.GroupVersionResource, gvk schema.GroupVersionK return list.DeepCopyObject(), nil } +func (t *tracker) Watch(gvr schema.GroupVersionResource, ns string) (watch.Interface, error) { + t.lock.Lock() + defer t.lock.Unlock() + + fakewatcher := watch.NewFakeWithChanSize(FakeWatchBufferSize, true) + + if _, exists := t.watchers[gvr]; !exists { + t.watchers[gvr] = make(map[string][]*watch.FakeWatcher) + } + t.watchers[gvr][ns] = append(t.watchers[gvr][ns], fakewatcher) + return fakewatcher, nil +} + func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime.Object, error) { errNotFound := errors.NewNotFound(gvr.GroupResource(), name) @@ -263,6 +293,19 @@ func (t *tracker) Update(gvr schema.GroupVersionResource, obj runtime.Object, ns return t.add(gvr, obj, ns, true) } +func (t *tracker) getWatches(gvr schema.GroupVersionResource, ns string) []*watch.FakeWatcher { + watches := []*watch.FakeWatcher{} + if t.watchers[gvr] != nil { + if w := t.watchers[gvr][ns]; w != nil { + watches = append(watches, w...) + } + if w := t.watchers[gvr][""]; w != nil { + watches = append(watches, w...) + } + } + return watches +} + func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns string, replaceExisting bool) error { t.lock.Lock() defer t.lock.Unlock() @@ -296,6 +339,9 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st } if oldMeta.GetNamespace() == newMeta.GetNamespace() && oldMeta.GetName() == newMeta.GetName() { if replaceExisting { + for _, w := range t.getWatches(gvr, ns) { + w.Modify(obj) + } t.objects[gvr][i] = obj return nil } @@ -310,6 +356,10 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st t.objects[gvr] = append(t.objects[gvr], obj) + for _, w := range t.getWatches(gvr, ns) { + w.Add(obj) + } + return nil } @@ -342,7 +392,11 @@ func (t *tracker) Delete(gvr schema.GroupVersionResource, ns, name string) error return err } if objMeta.GetNamespace() == ns && objMeta.GetName() == name { + obj := t.objects[gvr][i] t.objects[gvr] = append(t.objects[gvr][:i], t.objects[gvr][i+1:]...) + for _, w := range t.getWatches(gvr, ns) { + w.Delete(obj) + } found = true break } diff --git a/vendor/k8s.io/client-go/testing/fixture_test.go b/vendor/k8s.io/client-go/testing/fixture_test.go new file mode 100644 index 000000000..967e0aefa --- /dev/null +++ b/vendor/k8s.io/client-go/testing/fixture_test.go @@ -0,0 +1,192 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package testing + +import ( + "fmt" + "math/rand" + "strconv" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/watch" +) + +func getArbitraryResource(s schema.GroupVersionResource, name, namespace string) *unstructured.Unstructured { + return &unstructured.Unstructured{ + Object: map[string]interface{}{ + "kind": s.Resource, + "apiVersion": s.Version, + "metadata": map[string]interface{}{ + "name": name, + "namespace": namespace, + "generateName": "test_generateName", + "uid": "test_uid", + "resourceVersion": "test_resourceVersion", + "selfLink": "test_selfLink", + }, + "data": strconv.Itoa(rand.Int()), + }, + } +} + +func TestWatchCallNonNamespace(t *testing.T) { + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + testObj := getArbitraryResource(testResource, "test_name", "test_namespace") + accessor, err := meta.Accessor(testObj) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + ns := accessor.GetNamespace() + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + watch, err := o.Watch(testResource, ns) + go func() { + err := o.Create(testResource, testObj, ns) + if err != nil { + t.Errorf("test resource creation failed: %v", err) + } + }() + out := <-watch.ResultChan() + assert.Equal(t, testObj, out.Object, "watched object mismatch") +} + +func TestWatchCallAllNamespace(t *testing.T) { + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + testObj := getArbitraryResource(testResource, "test_name", "test_namespace") + accessor, err := meta.Accessor(testObj) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + ns := accessor.GetNamespace() + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + w, err := o.Watch(testResource, "test_namespace") + wAll, err := o.Watch(testResource, "") + go func() { + err := o.Create(testResource, testObj, ns) + assert.NoError(t, err, "test resource creation failed") + }() + out := <-w.ResultChan() + outAll := <-wAll.ResultChan() + assert.Equal(t, watch.Added, out.Type, "watch event mismatch") + assert.Equal(t, watch.Added, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched created object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched created object mismatch") + go func() { + err := o.Update(testResource, testObj, ns) + assert.NoError(t, err, "test resource updating failed") + }() + out = <-w.ResultChan() + outAll = <-wAll.ResultChan() + assert.Equal(t, watch.Modified, out.Type, "watch event mismatch") + assert.Equal(t, watch.Modified, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched updated object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched updated object mismatch") + go func() { + err := o.Delete(testResource, "test_namespace", "test_name") + assert.NoError(t, err, "test resource deletion failed") + }() + out = <-w.ResultChan() + outAll = <-wAll.ResultChan() + assert.Equal(t, watch.Deleted, out.Type, "watch event mismatch") + assert.Equal(t, watch.Deleted, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched deleted object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched deleted object mismatch") +} + +func TestWatchCallMultipleInvocation(t *testing.T) { + cases := []struct { + name string + op watch.EventType + }{ + { + "foo", + watch.Added, + }, + { + "bar", + watch.Added, + }, + { + "bar", + watch.Modified, + }, + { + "foo", + watch.Deleted, + }, + { + "bar", + watch.Deleted, + }, + } + + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + watchNamespaces := []string{ + "", + "", + "test_namespace", + "test_namespace", + } + var wg sync.WaitGroup + wg.Add(len(watchNamespaces)) + for idx, watchNamespace := range watchNamespaces { + i := idx + w, err := o.Watch(testResource, watchNamespace) + go func() { + assert.NoError(t, err, "watch invocation failed") + for _, c := range cases { + fmt.Printf("%#v %#v\n", c, i) + event := <-w.ResultChan() + accessor, err := meta.Accessor(event.Object) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + assert.Equal(t, c.op, event.Type, "watch event mismatched") + assert.Equal(t, c.name, accessor.GetName(), "watched object mismatch") + } + wg.Done() + }() + } + for _, c := range cases { + switch c.op { + case watch.Added: + obj := getArbitraryResource(testResource, c.name, "test_namespace") + o.Create(testResource, obj, "test_namespace") + case watch.Modified: + obj := getArbitraryResource(testResource, c.name, "test_namespace") + o.Update(testResource, obj, "test_namespace") + case watch.Deleted: + o.Delete(testResource, "test_namespace", c.name) + } + } + wg.Wait() +} diff --git a/vendor/k8s.io/client-go/tools/auth/BUILD b/vendor/k8s.io/client-go/tools/auth/BUILD index b418469ef..5c7718a77 100644 --- a/vendor/k8s.io/client-go/tools/auth/BUILD +++ b/vendor/k8s.io/client-go/tools/auth/BUILD @@ -16,7 +16,6 @@ go_library( go_test( name = "go_default_xtest", srcs = ["clientauth_test.go"], - importpath = "k8s.io/client-go/tools/auth_test", deps = ["//vendor/k8s.io/client-go/tools/auth:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/tools/auth/clientauth.go b/vendor/k8s.io/client-go/tools/auth/clientauth.go index 2213b9878..20339ab9d 100644 --- a/vendor/k8s.io/client-go/tools/auth/clientauth.go +++ b/vendor/k8s.io/client-go/tools/auth/clientauth.go @@ -23,7 +23,7 @@ location within a Container's file tree for Containers that need access to the Kubernetes API. Having a defined format allows: - - clients to be implmented in multiple languages + - clients to be implemented in multiple languages - applications which link clients to be portable across clusters with different authentication styles (e.g. some may use SSL Client certs, others may not, etc) diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/api/BUILD b/vendor/k8s.io/client-go/tools/bootstrap/token/api/BUILD new file mode 100644 index 000000000..7416adc01 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/api/BUILD @@ -0,0 +1,26 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "types.go", + ], + importpath = "k8s.io/client-go/tools/bootstrap/token/api", + visibility = ["//visibility:public"], + deps = ["//vendor/k8s.io/api/core/v1:go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/api/OWNERS b/vendor/k8s.io/client-go/tools/bootstrap/token/api/OWNERS new file mode 100644 index 000000000..8a2f5b591 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/api/OWNERS @@ -0,0 +1,5 @@ +approvers: +- jbeda +- luxas +reviewers: +- mattmoyer diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/api/doc.go b/vendor/k8s.io/client-go/tools/bootstrap/token/api/doc.go new file mode 100644 index 000000000..b9910c35a --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/api/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package api (pkg/bootstrap/token/api) contains constants and types needed for +// bootstrap tokens as maintained by the BootstrapSigner and TokenCleaner +// controllers (in pkg/controller/bootstrap) +package api // import "k8s.io/client-go/tools/bootstrap/token/api" diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/api/types.go b/vendor/k8s.io/client-go/tools/bootstrap/token/api/types.go new file mode 100644 index 000000000..c30814c0e --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/api/types.go @@ -0,0 +1,100 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/api/core/v1" +) + +const ( + // BootstrapTokenSecretPrefix is the prefix for bootstrap token names. + // Bootstrap tokens secrets must be named in the form + // `bootstrap-token-`. This is the prefix to be used before the + // token ID. + BootstrapTokenSecretPrefix = "bootstrap-token-" + + // SecretTypeBootstrapToken is used during the automated bootstrap process (first + // implemented by kubeadm). It stores tokens that are used to sign well known + // ConfigMaps. They may also eventually be used for authentication. + SecretTypeBootstrapToken v1.SecretType = "bootstrap.kubernetes.io/token" + + // BootstrapTokenIDKey is the id of this token. This can be transmitted in the + // clear and encoded in the name of the secret. It must be a random 6 character + // string that matches the regexp `^([a-z0-9]{6})$`. Required. + BootstrapTokenIDKey = "token-id" + + // BootstrapTokenSecretKey is the actual secret. It must be a random 16 character + // string that matches the regexp `^([a-z0-9]{16})$`. Required. + BootstrapTokenSecretKey = "token-secret" + + // BootstrapTokenExpirationKey is when this token should be expired and no + // longer used. A controller will delete this resource after this time. This + // is an absolute UTC time using RFC3339. If this cannot be parsed, the token + // should be considered invalid. Optional. + BootstrapTokenExpirationKey = "expiration" + + // BootstrapTokenDescriptionKey is a description in human-readable format that + // describes what the bootstrap token is used for. Optional. + BootstrapTokenDescriptionKey = "description" + + // BootstrapTokenExtraGroupsKey is a comma-separated list of group names. + // The bootstrap token will authenticate as these groups in addition to the + // "system:bootstrappers" group. + BootstrapTokenExtraGroupsKey = "auth-extra-groups" + + // BootstrapTokenUsagePrefix is the prefix for the other usage constants that specifies different + // functions of a bootstrap token + BootstrapTokenUsagePrefix = "usage-bootstrap-" + + // BootstrapTokenUsageSigningKey signals that this token should be used to + // sign configs as part of the bootstrap process. Value must be "true". Any + // other value is assumed to be false. Optional. + BootstrapTokenUsageSigningKey = "usage-bootstrap-signing" + + // BootstrapTokenUsageAuthentication signals that this token should be used + // as a bearer token to authenticate against the Kubernetes API. The bearer + // token takes the form "." and authenticates as the + // user "system:bootstrap:" in the "system:bootstrappers" group + // as well as any groups specified using BootstrapTokenExtraGroupsKey. + // Value must be "true". Any other value is assumed to be false. Optional. + BootstrapTokenUsageAuthentication = "usage-bootstrap-authentication" + + // ConfigMapClusterInfo defines the name for the ConfigMap where the information how to connect and trust the cluster exist + ConfigMapClusterInfo = "cluster-info" + + // KubeConfigKey defines at which key in the Data object of the ConfigMap the KubeConfig object is stored + KubeConfigKey = "kubeconfig" + + // JWSSignatureKeyPrefix defines what key prefix the JWS-signed tokens have + JWSSignatureKeyPrefix = "jws-kubeconfig-" + + // BootstrapUserPrefix is the username prefix bootstrapping bearer tokens + // authenticate as. The full username given is "system:bootstrap:". + BootstrapUserPrefix = "system:bootstrap:" + + // BootstrapGroupPattern is the valid regex pattern that all groups + // assigned to a bootstrap token by BootstrapTokenExtraGroupsKey must match. + // See also ValidateBootstrapGroupName(). + BootstrapGroupPattern = "system:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]" + + // BootstrapDefaultGroup is the default group for bootstrapping bearer + // tokens (in addition to any groups from BootstrapTokenExtraGroupsKey). + BootstrapDefaultGroup = "system:bootstrappers" +) + +// KnownTokenUsages specifies the known functions a token will get. +var KnownTokenUsages = []string{"signing", "authentication"} diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/util/BUILD b/vendor/k8s.io/client-go/tools/bootstrap/token/util/BUILD new file mode 100644 index 000000000..1d4d10e99 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/util/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["helpers.go"], + importpath = "k8s.io/client-go/tools/bootstrap/token/util", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//vendor/k8s.io/client-go/tools/bootstrap/token/api:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["helpers_test.go"], + embed = [":go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers.go b/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers.go new file mode 100644 index 000000000..d28fd28f2 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers.go @@ -0,0 +1,52 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "fmt" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/bootstrap/token/api" + "regexp" + "strings" +) + +var bootstrapGroupRegexp = regexp.MustCompile(`\A` + api.BootstrapGroupPattern + `\z`) + +// ValidateBootstrapGroupName checks if the provided group name is a valid +// bootstrap group name. Returns nil if valid or a validation error if invalid. +// TODO(mattmoyer): this validation should migrate out to client-go (see https://github.com/kubernetes/client-go/issues/114) +func ValidateBootstrapGroupName(name string) error { + if bootstrapGroupRegexp.Match([]byte(name)) { + return nil + } + return fmt.Errorf("bootstrap group %q is invalid (must match %s)", name, api.BootstrapGroupPattern) +} + +// ValidateUsages validates that the passed in string are valid usage strings for bootstrap tokens. +func ValidateUsages(usages []string) error { + validUsages := sets.NewString(api.KnownTokenUsages...) + invalidUsages := sets.NewString() + for _, usage := range usages { + if !validUsages.Has(usage) { + invalidUsages.Insert(usage) + } + } + if len(invalidUsages) > 0 { + return fmt.Errorf("invalide bootstrap token usage string: %s, valid usage options: %s", strings.Join(invalidUsages.List(), ","), strings.Join(api.KnownTokenUsages, ",")) + } + return nil +} diff --git a/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers_test.go b/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers_test.go new file mode 100644 index 000000000..915bf7540 --- /dev/null +++ b/vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers_test.go @@ -0,0 +1,76 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "strings" + "testing" +) + +func TestValidateBootstrapGroupName(t *testing.T) { + tests := []struct { + name string + input string + valid bool + }{ + {"valid", "system:bootstrappers:foo", true}, + {"valid nested", "system:bootstrappers:foo:bar:baz", true}, + {"valid with dashes and number", "system:bootstrappers:foo-bar-42", true}, + {"invalid uppercase", "system:bootstrappers:Foo", false}, + {"missing prefix", "foo", false}, + {"prefix with no body", "system:bootstrappers:", false}, + {"invalid spaces", "system:bootstrappers: ", false}, + {"invalid asterisk", "system:bootstrappers:*", false}, + {"trailing colon", "system:bootstrappers:foo:", false}, + {"trailing dash", "system:bootstrappers:foo-", false}, + {"script tags", "system:bootstrappers:", false}, + {"too long", "system:bootstrappers:" + strings.Repeat("x", 300), false}, + } + for _, test := range tests { + err := ValidateBootstrapGroupName(test.input) + if err != nil && test.valid { + t.Errorf("test %q: ValidateBootstrapGroupName(%q) returned unexpected error: %v", test.name, test.input, err) + } + if err == nil && !test.valid { + t.Errorf("test %q: ValidateBootstrapGroupName(%q) was supposed to return an error but didn't", test.name, test.input) + } + } +} + +func TestValidateUsages(t *testing.T) { + tests := []struct { + name string + input []string + valid bool + }{ + {"valid of signing", []string{"signing"}, true}, + {"valid of authentication", []string{"authentication"}, true}, + {"all valid", []string{"authentication", "signing"}, true}, + {"single invalid", []string{"authentication", "foo"}, false}, + {"all invalid", []string{"foo", "bar"}, false}, + } + + for _, test := range tests { + err := ValidateUsages(test.input) + if err != nil && test.valid { + t.Errorf("test %q: ValidateUsages(%v) returned unexpected error: %v", test.name, test.input, err) + } + if err == nil && !test.valid { + t.Errorf("test %q: ValidateUsages(%v) was supposed to return an error but didn't", test.name, test.input) + } + } +} diff --git a/vendor/k8s.io/client-go/tools/cache/BUILD b/vendor/k8s.io/client-go/tools/cache/BUILD index 79e21e1ea..524354e87 100644 --- a/vendor/k8s.io/client-go/tools/cache/BUILD +++ b/vendor/k8s.io/client-go/tools/cache/BUILD @@ -22,9 +22,8 @@ go_test( "store_test.go", "undelta_store_test.go", ], - features = ["-race"], - importpath = "k8s.io/client-go/tools/cache", - library = ":go_default_library", + embed = [":go_default_library"], + race = "off", deps = [ "//vendor/github.com/google/gofuzz:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", @@ -83,6 +82,7 @@ go_library( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/pager:go_default_library", "//vendor/k8s.io/client-go/util/buffer:go_default_library", + "//vendor/k8s.io/client-go/util/retry:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/tools/cache/controller.go b/vendor/k8s.io/client-go/tools/cache/controller.go index e7b98befa..028c75e8e 100644 --- a/vendor/k8s.io/client-go/tools/cache/controller.go +++ b/vendor/k8s.io/client-go/tools/cache/controller.go @@ -288,7 +288,7 @@ func NewInformer( // This will hold incoming changes. Note how we pass clientState in as a // KeyLister, that way resync operations will result in the correct set // of update/delete deltas. - fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, nil, clientState) + fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, clientState) cfg := &Config{ Queue: fifo, @@ -355,7 +355,7 @@ func NewIndexerInformer( // This will hold incoming changes. Note how we pass clientState in as a // KeyLister, that way resync operations will result in the correct set // of update/delete deltas. - fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, nil, clientState) + fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, clientState) cfg := &Config{ Queue: fifo, diff --git a/vendor/k8s.io/client-go/tools/cache/controller_test.go b/vendor/k8s.io/client-go/tools/cache/controller_test.go index a7a70533f..64aca8d7d 100644 --- a/vendor/k8s.io/client-go/tools/cache/controller_test.go +++ b/vendor/k8s.io/client-go/tools/cache/controller_test.go @@ -44,7 +44,7 @@ func Example() { // This will hold incoming changes. Note how we pass downstream in as a // KeyLister, that way resync operations will result in the correct set // of update/delete deltas. - fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, nil, downstream) + fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, downstream) // Let's do threadsafe output to get predictable test results. deletionCounter := make(chan string, 1000) diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go index f06d1c5b1..45c3b500d 100644 --- a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go @@ -31,11 +31,6 @@ import ( // keyFunc is used to figure out what key an object should have. (It's // exposed in the returned DeltaFIFO's KeyOf() method, with bonus features.) // -// 'compressor' may compress as many or as few items as it wants -// (including returning an empty slice), but it should do what it -// does quickly since it is called while the queue is locked. -// 'compressor' may be nil if you don't want any delta compression. -// // 'keyLister' is expected to return a list of keys that the consumer of // this queue "knows about". It is used to decide which items are missing // when Replace() is called; 'Deleted' deltas are produced for these items. @@ -43,18 +38,30 @@ import ( // TODO: consider merging keyLister with this object, tracking a list of // "known" keys when Pop() is called. Have to think about how that // affects error retrying. -// TODO(lavalamp): I believe there is a possible race only when using an -// external known object source that the above TODO would -// fix. +// NOTE: It is possible to misuse this and cause a race when using an +// external known object source. +// Whether there is a potential race depends on how the comsumer +// modifies knownObjects. In Pop(), process function is called under +// lock, so it is safe to update data structures in it that need to be +// in sync with the queue (e.g. knownObjects). +// +// Example: +// In case of sharedIndexInformer being a consumer +// (https://github.com/kubernetes/kubernetes/blob/0cdd940f/staging/ +// src/k8s.io/client-go/tools/cache/shared_informer.go#L192), +// there is no race as knownObjects (s.indexer) is modified safely +// under DeltaFIFO's lock. The only exceptions are GetStore() and +// GetIndexer() methods, which expose ways to modify the underlying +// storage. Currently these two methods are used for creating Lister +// and internal tests. // // Also see the comment on DeltaFIFO. -func NewDeltaFIFO(keyFunc KeyFunc, compressor DeltaCompressor, knownObjects KeyListerGetter) *DeltaFIFO { +func NewDeltaFIFO(keyFunc KeyFunc, knownObjects KeyListerGetter) *DeltaFIFO { f := &DeltaFIFO{ - items: map[string]Deltas{}, - queue: []string{}, - keyFunc: keyFunc, - deltaCompressor: compressor, - knownObjects: knownObjects, + items: map[string]Deltas{}, + queue: []string{}, + keyFunc: keyFunc, + knownObjects: knownObjects, } f.cond.L = &f.lock return f @@ -86,9 +93,6 @@ func NewDeltaFIFO(keyFunc KeyFunc, compressor DeltaCompressor, knownObjects KeyL // items have been deleted when Replace() or Delete() are called. The deleted // object will be included in the DeleteFinalStateUnknown markers. These objects // could be stale. -// -// You may provide a function to compress deltas (e.g., represent a -// series of Updates as a single Update). type DeltaFIFO struct { // lock/cond protects access to 'items' and 'queue'. lock sync.RWMutex @@ -110,10 +114,6 @@ type DeltaFIFO struct { // insertion and retrieval, and should be deterministic. keyFunc KeyFunc - // deltaCompressor tells us how to combine two or more - // deltas. It may be nil. - deltaCompressor DeltaCompressor - // knownObjects list keys that are "known", for the // purpose of figuring out which items have been deleted // when Replace() or Delete() is called. @@ -133,7 +133,6 @@ var ( var ( // ErrZeroLengthDeltasObject is returned in a KeyError if a Deltas // object with zero length is encountered (should be impossible, - // even if such an object is accidentally produced by a DeltaCompressor-- // but included for completeness). ErrZeroLengthDeltasObject = errors.New("0 length Deltas object; can't get key") ) @@ -213,8 +212,6 @@ func (f *DeltaFIFO) Delete(obj interface{}) error { if err == nil && !exists && !itemsExist { // Presumably, this was deleted when a relist happened. // Don't provide a second report of the same deletion. - // TODO(lavalamp): This may be racy-- we aren't properly locked - // with knownObjects. return nil } } @@ -305,8 +302,8 @@ func (f *DeltaFIFO) willObjectBeDeletedLocked(id string) bool { return len(deltas) > 0 && deltas[len(deltas)-1].Type == Deleted } -// queueActionLocked appends to the delta list for the object, calling -// f.deltaCompressor if needed. Caller must lock first. +// queueActionLocked appends to the delta list for the object. +// Caller must lock first. func (f *DeltaFIFO) queueActionLocked(actionType DeltaType, obj interface{}) error { id, err := f.KeyOf(obj) if err != nil { @@ -322,9 +319,6 @@ func (f *DeltaFIFO) queueActionLocked(actionType DeltaType, obj interface{}) err newDeltas := append(f.items[id], Delta{actionType, obj}) newDeltas = dedupDeltas(newDeltas) - if f.deltaCompressor != nil { - newDeltas = f.deltaCompressor.Compress(newDeltas) - } _, exists := f.items[id] if len(newDeltas) > 0 { @@ -334,8 +328,7 @@ func (f *DeltaFIFO) queueActionLocked(actionType DeltaType, obj interface{}) err f.items[id] = newDeltas f.cond.Broadcast() } else if exists { - // The compression step removed all deltas, so - // we need to remove this from our map (extra items + // We need to remove this from our map (extra items // in the queue are ignored if they are not in the // map). delete(f.items, id) @@ -355,8 +348,8 @@ func (f *DeltaFIFO) List() []interface{} { func (f *DeltaFIFO) listLocked() []interface{} { list := make([]interface{}, 0, len(f.items)) for _, item := range f.items { - // Copy item's slice so operations on this slice (delta - // compression) won't interfere with the object we return. + // Copy item's slice so operations on this slice + // won't interfere with the object we return. item = copyDeltas(item) list = append(list, item.Newest().Object) } @@ -394,8 +387,8 @@ func (f *DeltaFIFO) GetByKey(key string) (item interface{}, exists bool, err err defer f.lock.RUnlock() d, exists := f.items[key] if exists { - // Copy item's slice so operations on this slice (delta - // compression) won't interfere with the object we return. + // Copy item's slice so operations on this slice + // won't interfere with the object we return. d = copyDeltas(d) } return d, exists, nil @@ -503,8 +496,6 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error { } // Detect deletions not already in the queue. - // TODO(lavalamp): This may be racy-- we aren't properly locked - // with knownObjects. Unproven. knownKeys := f.knownObjects.ListKeys() queuedDeletions := 0 for _, k := range knownKeys { @@ -603,23 +594,6 @@ type KeyGetter interface { GetByKey(key string) (interface{}, bool, error) } -// DeltaCompressor is an algorithm that removes redundant changes. -type DeltaCompressor interface { - Compress(Deltas) Deltas -} - -// DeltaCompressorFunc should remove redundant changes; but changes that -// are redundant depend on one's desired semantics, so this is an -// injectable function. -// -// DeltaCompressorFunc adapts a raw function to be a DeltaCompressor. -type DeltaCompressorFunc func(Deltas) Deltas - -// Compress just calls dc. -func (dc DeltaCompressorFunc) Compress(d Deltas) Deltas { - return dc(d) -} - // DeltaType is the type of a change (addition, deletion, etc) type DeltaType string @@ -668,7 +642,7 @@ func (d Deltas) Newest() *Delta { // copyDeltas returns a shallow copy of d; that is, it copies the slice but not // the objects in the slice. This allows Get/List to return an object that we -// know won't be clobbered by a subsequent call to a delta compressor. +// know won't be clobbered by a subsequent modifications. func copyDeltas(d Deltas) Deltas { d2 := make(Deltas, len(d)) copy(d2, d) diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo_test.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo_test.go index 87bbdaeab..9f8e57580 100644 --- a/vendor/k8s.io/client-go/tools/cache/delta_fifo_test.go +++ b/vendor/k8s.io/client-go/tools/cache/delta_fifo_test.go @@ -51,7 +51,7 @@ func (kl keyLookupFunc) GetByKey(key string) (interface{}, bool, error) { } func TestDeltaFIFO_basic(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) const amount = 500 go func() { for i := 0; i < amount; i++ { @@ -86,7 +86,7 @@ func TestDeltaFIFO_basic(t *testing.T) { } func TestDeltaFIFO_requeueOnPop(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("foo", 10)) _, err := f.Pop(func(obj interface{}) error { @@ -129,43 +129,8 @@ func TestDeltaFIFO_requeueOnPop(t *testing.T) { } } -func TestDeltaFIFO_compressorWorks(t *testing.T) { - oldestTypes := []DeltaType{} - f := NewDeltaFIFO( - testFifoObjectKeyFunc, - // This function just keeps the most recent delta - // and puts deleted ones in the list. - DeltaCompressorFunc(func(d Deltas) Deltas { - if n := len(d); n > 1 { - oldestTypes = append(oldestTypes, d[0].Type) - d = d[1:] - } - return d - }), - nil, - ) - if f.HasSynced() { - t.Errorf("Expected HasSynced to be false before completion of initial population") - } - f.Add(mkFifoObj("foo", 10)) - f.Update(mkFifoObj("foo", 12)) - f.Replace([]interface{}{mkFifoObj("foo", 20)}, "0") - f.Delete(mkFifoObj("foo", 22)) - f.Add(mkFifoObj("foo", 25)) // flush the last one out - expect := []DeltaType{Added, Updated, Sync, Deleted} - if e, a := expect, oldestTypes; !reflect.DeepEqual(e, a) { - t.Errorf("Expected %#v, got %#v", e, a) - } - if e, a := (Deltas{{Added, mkFifoObj("foo", 25)}}), Pop(f).(Deltas); !reflect.DeepEqual(e, a) { - t.Fatalf("Expected %#v, got %#v", e, a) - } - if !f.HasSynced() { - t.Errorf("Expected HasSynced to be true after completion of initial population") - } -} - func TestDeltaFIFO_addUpdate(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("foo", 10)) f.Update(mkFifoObj("foo", 12)) f.Delete(mkFifoObj("foo", 15)) @@ -203,7 +168,7 @@ func TestDeltaFIFO_addUpdate(t *testing.T) { } func TestDeltaFIFO_enqueueingNoLister(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("foo", 10)) f.Update(mkFifoObj("bar", 15)) f.Add(mkFifoObj("qux", 17)) @@ -226,7 +191,6 @@ func TestDeltaFIFO_enqueueingNoLister(t *testing.T) { func TestDeltaFIFO_enqueueingWithLister(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{mkFifoObj("foo", 5), mkFifoObj("bar", 6), mkFifoObj("baz", 7)} }), @@ -249,7 +213,7 @@ func TestDeltaFIFO_enqueueingWithLister(t *testing.T) { } func TestDeltaFIFO_addReplace(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("foo", 10)) f.Replace([]interface{}{mkFifoObj("foo", 15)}, "0") got := make(chan testFifoObject, 2) @@ -277,7 +241,6 @@ func TestDeltaFIFO_addReplace(t *testing.T) { func TestDeltaFIFO_ResyncNonExisting(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{mkFifoObj("foo", 5)} }), @@ -297,7 +260,6 @@ func TestDeltaFIFO_ResyncNonExisting(t *testing.T) { func TestDeltaFIFO_DeleteExistingNonPropagated(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{} }), @@ -317,7 +279,6 @@ func TestDeltaFIFO_DeleteExistingNonPropagated(t *testing.T) { func TestDeltaFIFO_ReplaceMakesDeletions(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{mkFifoObj("foo", 5), mkFifoObj("bar", 6), mkFifoObj("baz", 7)} }), @@ -344,7 +305,6 @@ func TestDeltaFIFO_ReplaceMakesDeletions(t *testing.T) { func TestDeltaFIFO_UpdateResyncRace(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{mkFifoObj("foo", 5)} }), @@ -367,7 +327,6 @@ func TestDeltaFIFO_UpdateResyncRace(t *testing.T) { func TestDeltaFIFO_HasSyncedCorrectOnDeletion(t *testing.T) { f := NewDeltaFIFO( testFifoObjectKeyFunc, - nil, keyLookupFunc(func() []testFifoObject { return []testFifoObject{mkFifoObj("foo", 5), mkFifoObj("bar", 6), mkFifoObj("baz", 7)} }), @@ -396,7 +355,7 @@ func TestDeltaFIFO_HasSyncedCorrectOnDeletion(t *testing.T) { } func TestDeltaFIFO_detectLineJumpers(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("foo", 10)) f.Add(mkFifoObj("bar", 1)) @@ -424,7 +383,7 @@ func TestDeltaFIFO_detectLineJumpers(t *testing.T) { } func TestDeltaFIFO_addIfNotPresent(t *testing.T) { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) f.Add(mkFifoObj("b", 3)) b3 := Pop(f) @@ -521,7 +480,7 @@ func TestDeltaFIFO_HasSynced(t *testing.T) { } for i, test := range tests { - f := NewDeltaFIFO(testFifoObjectKeyFunc, nil, nil) + f := NewDeltaFIFO(testFifoObjectKeyFunc, nil) for _, action := range test.actions { action(f) diff --git a/vendor/k8s.io/client-go/tools/cache/fifo.go b/vendor/k8s.io/client-go/tools/cache/fifo.go index ef70b7aca..e05c01ee2 100644 --- a/vendor/k8s.io/client-go/tools/cache/fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/fifo.go @@ -59,7 +59,7 @@ type Queue interface { // has since been added. AddIfNotPresent(interface{}) error - // Return true if the first batch of items has been popped + // HasSynced returns true if the first batch of items has been popped HasSynced() bool // Close queue diff --git a/vendor/k8s.io/client-go/tools/cache/listwatch.go b/vendor/k8s.io/client-go/tools/cache/listwatch.go index db2329c55..06657a3b0 100644 --- a/vendor/k8s.io/client-go/tools/cache/listwatch.go +++ b/vendor/k8s.io/client-go/tools/cache/listwatch.go @@ -63,8 +63,18 @@ type Getter interface { // NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector. func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSelector fields.Selector) *ListWatch { - listFunc := func(options metav1.ListOptions) (runtime.Object, error) { + optionsModifier := func(options *metav1.ListOptions) { options.FieldSelector = fieldSelector.String() + } + return NewFilteredListWatchFromClient(c, resource, namespace, optionsModifier) +} + +// NewFilteredListWatchFromClient creates a new ListWatch from the specified client, resource, namespace, and option modifier. +// Option modifier is a function takes a ListOptions and modifies the consumed ListOptions. Provide customized modifier function +// to apply modification to ListOptions with a field selector, a label selector, or any other desired options. +func NewFilteredListWatchFromClient(c Getter, resource string, namespace string, optionsModifier func(options *metav1.ListOptions)) *ListWatch { + listFunc := func(options metav1.ListOptions) (runtime.Object, error) { + optionsModifier(&options) return c.Get(). Namespace(namespace). Resource(resource). @@ -74,7 +84,7 @@ func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSe } watchFunc := func(options metav1.ListOptions) (watch.Interface, error) { options.Watch = true - options.FieldSelector = fieldSelector.String() + optionsModifier(&options) return c.Get(). Namespace(namespace). Resource(resource). diff --git a/vendor/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/client-go/tools/cache/reflector.go index a97b5f98a..054a7373c 100644 --- a/vendor/k8s.io/client-go/tools/cache/reflector.go +++ b/vendor/k8s.io/client-go/tools/cache/reflector.go @@ -108,8 +108,8 @@ func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, reflectorSuffix := atomic.AddInt64(&reflectorDisambiguator, 1) r := &Reflector{ name: name, - // we need this to be unique per process (some names are still the same)but obvious who it belongs to - metrics: newReflectorMetrics(makeValidPromethusMetricLabel(fmt.Sprintf("reflector_"+name+"_%d", reflectorSuffix))), + // we need this to be unique per process (some names are still the same) but obvious who it belongs to + metrics: newReflectorMetrics(makeValidPrometheusMetricLabel(fmt.Sprintf("reflector_"+name+"_%d", reflectorSuffix))), listerWatcher: lw, store: store, expectedType: reflect.TypeOf(expectedType), @@ -120,7 +120,7 @@ func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, return r } -func makeValidPromethusMetricLabel(in string) string { +func makeValidPrometheusMetricLabel(in string) string { // this isn't perfect, but it removes our common characters return strings.NewReplacer("/", "_", ".", "_", "-", "_", ":", "_").Replace(in) } @@ -302,12 +302,12 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { default: } - timemoutseconds := int64(minWatchTimeout.Seconds() * (rand.Float64() + 1.0)) + timeoutSeconds := int64(minWatchTimeout.Seconds() * (rand.Float64() + 1.0)) options = metav1.ListOptions{ ResourceVersion: resourceVersion, // We want to avoid situations of hanging watchers. Stop any wachers that do not // receive any events within the timeout window. - TimeoutSeconds: &timemoutseconds, + TimeoutSeconds: &timeoutSeconds, } r.metrics.numberOfWatches.Inc() diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/vendor/k8s.io/client-go/tools/cache/shared_informer.go index b11f0ebdd..5f8c507f9 100644 --- a/vendor/k8s.io/client-go/tools/cache/shared_informer.go +++ b/vendor/k8s.io/client-go/tools/cache/shared_informer.go @@ -26,6 +26,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/util/buffer" + "k8s.io/client-go/util/retry" "github.com/golang/glog" ) @@ -188,7 +189,7 @@ type deleteNotification struct { func (s *sharedIndexInformer) Run(stopCh <-chan struct{}) { defer utilruntime.HandleCrash() - fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, nil, s.indexer) + fifo := NewDeltaFIFO(MetaNamespaceKeyFunc, s.indexer) cfg := &Config{ Queue: fifo, @@ -334,7 +335,7 @@ func (s *sharedIndexInformer) AddEventHandlerWithResyncPeriod(handler ResourceEv s.blockDeltas.Lock() defer s.blockDeltas.Unlock() - s.processor.addAndStartListener(listener) + s.processor.addListener(listener) for _, item := range s.indexer.List() { listener.add(addNotification{newObj: item}) } @@ -372,6 +373,7 @@ func (s *sharedIndexInformer) HandleDeltas(obj interface{}) error { } type sharedProcessor struct { + listenersStarted bool listenersLock sync.RWMutex listeners []*processorListener syncingListeners []*processorListener @@ -379,20 +381,15 @@ type sharedProcessor struct { wg wait.Group } -func (p *sharedProcessor) addAndStartListener(listener *processorListener) { - p.listenersLock.Lock() - defer p.listenersLock.Unlock() - - p.addListenerLocked(listener) - p.wg.Start(listener.run) - p.wg.Start(listener.pop) -} - func (p *sharedProcessor) addListener(listener *processorListener) { p.listenersLock.Lock() defer p.listenersLock.Unlock() p.addListenerLocked(listener) + if p.listenersStarted { + p.wg.Start(listener.run) + p.wg.Start(listener.pop) + } } func (p *sharedProcessor) addListenerLocked(listener *processorListener) { @@ -423,6 +420,7 @@ func (p *sharedProcessor) run(stopCh <-chan struct{}) { p.wg.Start(listener.run) p.wg.Start(listener.pop) } + p.listenersStarted = true }() <-stopCh p.listenersLock.RLock() @@ -540,20 +538,35 @@ func (p *processorListener) pop() { } func (p *processorListener) run() { - defer utilruntime.HandleCrash() + // this call blocks until the channel is closed. When a panic happens during the notification + // we will catch it, **the offending item will be skipped!**, and after a short delay (one second) + // the next notification will be attempted. This is usually better than the alternative of never + // delivering again. + stopCh := make(chan struct{}) + wait.Until(func() { + // this gives us a few quick retries before a long pause and then a few more quick retries + err := wait.ExponentialBackoff(retry.DefaultRetry, func() (bool, error) { + for next := range p.nextCh { + switch notification := next.(type) { + case updateNotification: + p.handler.OnUpdate(notification.oldObj, notification.newObj) + case addNotification: + p.handler.OnAdd(notification.newObj) + case deleteNotification: + p.handler.OnDelete(notification.oldObj) + default: + utilruntime.HandleError(fmt.Errorf("unrecognized notification: %#v", next)) + } + } + // the only way to get here is if the p.nextCh is empty and closed + return true, nil + }) - for next := range p.nextCh { - switch notification := next.(type) { - case updateNotification: - p.handler.OnUpdate(notification.oldObj, notification.newObj) - case addNotification: - p.handler.OnAdd(notification.newObj) - case deleteNotification: - p.handler.OnDelete(notification.oldObj) - default: - utilruntime.HandleError(fmt.Errorf("unrecognized notification: %#v", next)) + // the only way to get here is if the p.nextCh is empty and closed + if err == nil { + close(stopCh) } - } + }, 1*time.Minute, stopCh) } // shouldResync deterimines if the listener needs a resync. If the listener's resyncPeriod is 0, diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer_test.go b/vendor/k8s.io/client-go/tools/cache/shared_informer_test.go index 6f49d167a..22e4a90dd 100644 --- a/vendor/k8s.io/client-go/tools/cache/shared_informer_test.go +++ b/vendor/k8s.io/client-go/tools/cache/shared_informer_test.go @@ -251,3 +251,15 @@ func TestResyncCheckPeriod(t *testing.T) { t.Errorf("expected %d, got %d", e, a) } } + +// verify that https://github.com/kubernetes/kubernetes/issues/59822 is fixed +func TestSharedInformerInitializationRace(t *testing.T) { + source := fcache.NewFakeControllerSource() + informer := NewSharedInformer(source, &v1.Pod{}, 1*time.Second).(*sharedIndexInformer) + listener := newTestListener("raceListener", 0) + + stop := make(chan struct{}) + go informer.AddEventHandlerWithResyncPeriod(listener, listener.resyncPeriod) + go informer.Run(stop) + close(stop) +} diff --git a/vendor/k8s.io/client-go/tools/cache/testing/BUILD b/vendor/k8s.io/client-go/tools/cache/testing/BUILD index f19cb7f3c..d1658af4d 100644 --- a/vendor/k8s.io/client-go/tools/cache/testing/BUILD +++ b/vendor/k8s.io/client-go/tools/cache/testing/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["fake_controller_source_test.go"], - importpath = "k8s.io/client-go/tools/cache/testing", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/client-go/tools/clientcmd/BUILD b/vendor/k8s.io/client-go/tools/clientcmd/BUILD index 77a8d2229..c46c76d5d 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/BUILD +++ b/vendor/k8s.io/client-go/tools/clientcmd/BUILD @@ -15,8 +15,7 @@ go_test( "overrides_test.go", "validation_test.go", ], - importpath = "k8s.io/client-go/tools/clientcmd", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/github.com/imdario/mergo:go_default_library", diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/BUILD b/vendor/k8s.io/client-go/tools/clientcmd/api/BUILD index d46f4e28f..b2fd13824 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/BUILD +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/BUILD @@ -12,8 +12,7 @@ go_test( "helpers_test.go", "types_test.go", ], - importpath = "k8s.io/client-go/tools/clientcmd/api", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/github.com/ghodss/yaml:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go index 407dec83a..1391df702 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go @@ -119,6 +119,9 @@ type AuthInfo struct { // AuthProvider specifies a custom authentication plugin for the kubernetes cluster. // +optional AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"` + // Exec specifies a custom exec-based authentication plugin for the kubernetes cluster. + // +optional + Exec *ExecConfig `json:"exec,omitempty"` // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields // +optional Extensions map[string]runtime.Object `json:"extensions,omitempty"` @@ -147,6 +150,35 @@ type AuthProviderConfig struct { Config map[string]string `json:"config,omitempty"` } +// ExecConfig specifies a command to provide client credentials. The command is exec'd +// and outputs structured stdout holding credentials. +// +// See the client.authentiction.k8s.io API group for specifications of the exact input +// and output format +type ExecConfig struct { + // Command to execute. + Command string `json:"command"` + // Arguments to pass to the command when executing it. + // +optional + Args []string `json:"args"` + // Env defines additional environment variables to expose to the process. These + // are unioned with the host's environment, as well as variables client-go uses + // to pass argument to the plugin. + // +optional + Env []ExecEnvVar `json:"env"` + + // Preferred input version of the ExecInfo. The returned ExecCredentials MUST use + // the same encoding version as the input. + APIVersion string `json:"apiVersion,omitempty"` +} + +// ExecEnvVar is used for setting environment variables when executing an exec-based +// credential plugin. +type ExecEnvVar struct { + Name string `json:"name"` + Value string `json:"value"` +} + // NewConfig is a convenience function that returns a new Config object with non-nil maps func NewConfig() *Config { return &Config{ diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/v1/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/v1/types.go index 53568135e..56afb608a 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/v1/types.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/v1/types.go @@ -113,6 +113,9 @@ type AuthInfo struct { // AuthProvider specifies a custom authentication plugin for the kubernetes cluster. // +optional AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"` + // Exec specifies a custom exec-based authentication plugin for the kubernetes cluster. + // +optional + Exec *ExecConfig `json:"exec,omitempty"` // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields // +optional Extensions []NamedExtension `json:"extensions,omitempty"` @@ -169,3 +172,32 @@ type AuthProviderConfig struct { Name string `json:"name"` Config map[string]string `json:"config"` } + +// ExecConfig specifies a command to provide client credentials. The command is exec'd +// and outputs structured stdout holding credentials. +// +// See the client.authentiction.k8s.io API group for specifications of the exact input +// and output format +type ExecConfig struct { + // Command to execute. + Command string `json:"command"` + // Arguments to pass to the command when executing it. + // +optional + Args []string `json:"args"` + // Env defines additional environment variables to expose to the process. These + // are unioned with the host's environment, as well as variables client-go uses + // to pass argument to the plugin. + // +optional + Env []ExecEnvVar `json:"env"` + + // Preferred input version of the ExecInfo. The returned ExecCredentials MUST use + // the same encoding version as the input. + APIVersion string `json:"apiVersion,omitempty"` +} + +// ExecEnvVar is used for setting environment variables when executing an exec-based +// credential plugin. +type ExecEnvVar struct { + Name string `json:"name"` + Value string `json:"value"` +} diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go index 8d634671b..83d05b7c6 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by deepcopy-gen. Do not edit it manually! +// Code generated by deepcopy-gen. DO NOT EDIT. package v1 @@ -63,6 +63,15 @@ func (in *AuthInfo) DeepCopyInto(out *AuthInfo) { (*in).DeepCopyInto(*out) } } + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + if *in == nil { + *out = nil + } else { + *out = new(ExecConfig) + (*in).DeepCopyInto(*out) + } + } if in.Extensions != nil { in, out := &in.Extensions, &out.Extensions *out = make([]NamedExtension, len(*in)) @@ -183,9 +192,8 @@ func (in *Config) DeepCopy() *Config { func (in *Config) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c - } else { - return nil } + return nil } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -211,6 +219,48 @@ func (in *Context) DeepCopy() *Context { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecConfig) DeepCopyInto(out *ExecConfig) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]ExecEnvVar, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecConfig. +func (in *ExecConfig) DeepCopy() *ExecConfig { + if in == nil { + return nil + } + out := new(ExecConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecEnvVar) DeepCopyInto(out *ExecEnvVar) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecEnvVar. +func (in *ExecEnvVar) DeepCopy() *ExecEnvVar { + if in == nil { + return nil + } + out := new(ExecEnvVar) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NamedAuthInfo) DeepCopyInto(out *NamedAuthInfo) { *out = *in diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go index 51668f05b..085c088ee 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by deepcopy-gen. Do not edit it manually! +// Code generated by deepcopy-gen. DO NOT EDIT. package api @@ -63,6 +63,15 @@ func (in *AuthInfo) DeepCopyInto(out *AuthInfo) { (*in).DeepCopyInto(*out) } } + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + if *in == nil { + *out = nil + } else { + *out = new(ExecConfig) + (*in).DeepCopyInto(*out) + } + } if in.Extensions != nil { in, out := &in.Extensions, &out.Extensions *out = make(map[string]runtime.Object, len(*in)) @@ -210,9 +219,8 @@ func (in *Config) DeepCopy() *Config { func (in *Config) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c - } else { - return nil } + return nil } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -242,6 +250,48 @@ func (in *Context) DeepCopy() *Context { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecConfig) DeepCopyInto(out *ExecConfig) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]ExecEnvVar, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecConfig. +func (in *ExecConfig) DeepCopy() *ExecConfig { + if in == nil { + return nil + } + out := new(ExecConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecEnvVar) DeepCopyInto(out *ExecEnvVar) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecEnvVar. +func (in *ExecEnvVar) DeepCopy() *ExecEnvVar { + if in == nil { + return nil + } + out := new(ExecEnvVar) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Preferences) DeepCopyInto(out *Preferences) { *out = *in diff --git a/vendor/k8s.io/client-go/tools/clientcmd/client_config.go b/vendor/k8s.io/client-go/tools/clientcmd/client_config.go index a8698af24..c202e6b25 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/client_config.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/client_config.go @@ -107,7 +107,7 @@ func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) { // ClientConfig implements ClientConfig func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { // check that getAuthInfo, getContext, and getCluster do not return an error. - // Do this before checking if the curent config is usable in the event that an + // Do this before checking if the current config is usable in the event that an // AuthInfo, Context, or Cluster config with user-defined names are not found. // This provides a user with the immediate cause for error if one is found configAuthInfo, err := config.getAuthInfo() @@ -202,7 +202,7 @@ func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, // clientauth.Info object contain both user identification and server identification. We want different precedence orders for // both, so we have to split the objects and merge them separately -// we want this order of precedence for user identifcation +// we want this order of precedence for user identification // 1. configAuthInfo minus auth-path (the final result of command line flags and merged .kubeconfig files) // 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority) // 3. if there is not enough information to identify the user, load try the ~/.kubernetes_auth file @@ -241,6 +241,9 @@ func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthI mergedConfig.AuthProvider = configAuthInfo.AuthProvider mergedConfig.AuthConfigPersister = persistAuthConfig } + if configAuthInfo.Exec != nil { + mergedConfig.ExecProvider = configAuthInfo.Exec + } // if there still isn't enough information to authenticate the user, try prompting if !canIdentifyUser(*mergedConfig) && (fallbackReader != nil) { @@ -291,7 +294,8 @@ func canIdentifyUser(config restclient.Config) bool { return len(config.Username) > 0 || (len(config.CertFile) > 0 || len(config.CertData) > 0) || len(config.BearerToken) > 0 || - config.AuthProvider != nil + config.AuthProvider != nil || + config.ExecProvider != nil } // Namespace implements ClientConfig @@ -474,7 +478,7 @@ func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error) } // in-cluster configs only takes a host, token, or CA file - // if any of them were individually provided, ovewrite anything else + // if any of them were individually provided, overwrite anything else if config.overrides != nil { if server := config.overrides.ClusterInfo.Server; len(server) > 0 { icc.Host = server diff --git a/vendor/k8s.io/client-go/tools/clientcmd/client_config_test.go b/vendor/k8s.io/client-go/tools/clientcmd/client_config_test.go index 9c08ff89d..0a9288bcf 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/client_config_test.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/client_config_test.go @@ -94,7 +94,7 @@ func TestInsecureOverridesCA(t *testing.T) { } func TestMergeContext(t *testing.T) { - const namespace = "overriden-namespace" + const namespace = "overridden-namespace" config := createValidTestConfig() clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) diff --git a/vendor/k8s.io/client-go/tools/clientcmd/loader.go b/vendor/k8s.io/client-go/tools/clientcmd/loader.go index 6ac83b5c8..95e7b1540 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/loader.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/loader.go @@ -111,7 +111,7 @@ func (g *ClientConfigGetter) IsDefaultConfig(config *restclient.Config) bool { // ClientConfigLoadingRules is an ExplicitPath and string slice of specific locations that are used for merging together a Config // Callers can put the chain together however they want, but we'd recommend: // EnvVarPathFiles if set (a list of files if set) OR the HomeDirectoryPath -// ExplicitPath is special, because if a user specifically requests a certain file be used and error is reported if thie file is not present +// ExplicitPath is special, because if a user specifically requests a certain file be used and error is reported if this file is not present type ClientConfigLoadingRules struct { ExplicitPath string Precedence []string @@ -420,7 +420,7 @@ func WriteToFile(config clientcmdapi.Config, filename string) error { func lockFile(filename string) error { // TODO: find a way to do this with actual file locks. Will - // probably need seperate solution for windows and linux. + // probably need separate solution for windows and Linux. // Make sure the dir exists before we try to create a lock file. dir := filepath.Dir(filename) @@ -557,7 +557,12 @@ func GetClusterFileReferences(cluster *clientcmdapi.Cluster) []*string { } func GetAuthInfoFileReferences(authInfo *clientcmdapi.AuthInfo) []*string { - return []*string{&authInfo.ClientCertificate, &authInfo.ClientKey, &authInfo.TokenFile} + s := []*string{&authInfo.ClientCertificate, &authInfo.ClientKey, &authInfo.TokenFile} + // Only resolve exec command if it isn't PATH based. + if authInfo.Exec != nil && strings.ContainsRune(authInfo.Exec.Command, filepath.Separator) { + s = append(s, &authInfo.Exec.Command) + } + return s } // ResolvePaths updates the given refs to be absolute paths, relative to the given base directory diff --git a/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go b/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go index 74319788a..c2dbd019d 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go @@ -206,6 +206,9 @@ func TestResolveRelativePaths(t *testing.T) { AuthInfos: map[string]*clientcmdapi.AuthInfo{ "relative-user-1": {ClientCertificate: "relative/client/cert", ClientKey: "../relative/client/key"}, "absolute-user-1": {ClientCertificate: "/absolute/client/cert", ClientKey: "/absolute/client/key"}, + "relative-cmd-1": {Exec: &clientcmdapi.ExecConfig{Command: "../relative/client/cmd"}}, + "absolute-cmd-1": {Exec: &clientcmdapi.ExecConfig{Command: "/absolute/client/cmd"}}, + "PATH-cmd-1": {Exec: &clientcmdapi.ExecConfig{Command: "cmd"}}, }, Clusters: map[string]*clientcmdapi.Cluster{ "relative-server-1": {CertificateAuthority: "../relative/ca"}, @@ -291,9 +294,21 @@ func TestResolveRelativePaths(t *testing.T) { matchStringArg(pathResolutionConfig2.AuthInfos["absolute-user-2"].ClientCertificate, authInfo.ClientCertificate, t) matchStringArg(pathResolutionConfig2.AuthInfos["absolute-user-2"].ClientKey, authInfo.ClientKey, t) } + if key == "relative-cmd-1" { + foundAuthInfoCount++ + matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos[key].Exec.Command), authInfo.Exec.Command, t) + } + if key == "absolute-cmd-1" { + foundAuthInfoCount++ + matchStringArg(pathResolutionConfig1.AuthInfos[key].Exec.Command, authInfo.Exec.Command, t) + } + if key == "PATH-cmd-1" { + foundAuthInfoCount++ + matchStringArg(pathResolutionConfig1.AuthInfos[key].Exec.Command, authInfo.Exec.Command, t) + } } - if foundAuthInfoCount != 4 { - t.Errorf("Expected 4 users, found %v: %v", foundAuthInfoCount, mergedConfig.AuthInfos) + if foundAuthInfoCount != 7 { + t.Errorf("Expected 7 users, found %v: %v", foundAuthInfoCount, mergedConfig.AuthInfos) } } diff --git a/vendor/k8s.io/client-go/tools/clientcmd/validation.go b/vendor/k8s.io/client-go/tools/clientcmd/validation.go index 2bae0c395..629c0b30a 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/validation.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/validation.go @@ -237,6 +237,25 @@ func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []err } } + if authInfo.Exec != nil { + if authInfo.AuthProvider != nil { + validationErrors = append(validationErrors, fmt.Errorf("authProvider cannot be provided in combination with an exec plugin for %s", authInfoName)) + } + if len(authInfo.Exec.Command) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("command must be specified for %v to use exec authentication plugin", authInfoName)) + } + if len(authInfo.Exec.APIVersion) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("apiVersion must be specified for %v to use exec authentication plugin", authInfoName)) + } + for _, v := range authInfo.Exec.Env { + if len(v.Name) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("env variable name must be specified for %v to use exec authentication plugin", authInfoName)) + } else if len(v.Value) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("env variable %s value must be specified for %v to use exec authentication plugin", v.Name, authInfoName)) + } + } + } + // authPath also provides information for the client to identify the server, so allow multiple auth methods in that case if (len(methods) > 1) && (!usingAuthPath) { validationErrors = append(validationErrors, fmt.Errorf("more than one authentication method found for %v; found %v, only one is allowed", authInfoName, methods)) @@ -253,6 +272,10 @@ func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []err func validateContext(contextName string, context clientcmdapi.Context, config clientcmdapi.Config) []error { validationErrors := make([]error, 0) + if len(contextName) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("empty context name for %#v is not allowed", context)) + } + if len(context.AuthInfo) == 0 { validationErrors = append(validationErrors, fmt.Errorf("user was not specified for context %q", contextName)) } else if _, exists := config.AuthInfos[context.AuthInfo]; !exists { diff --git a/vendor/k8s.io/client-go/tools/clientcmd/validation_test.go b/vendor/k8s.io/client-go/tools/clientcmd/validation_test.go index 6441f1483..4742b1a14 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/validation_test.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/validation_test.go @@ -62,6 +62,7 @@ func TestConfirmUsableBadInfoButOkConfig(t *testing.T) { okTest.testConfirmUsable("clean", t) badValidation.testConfig(t) } + func TestConfirmUsableBadInfoConfig(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["missing ca"] = &clientcmdapi.Cluster{ @@ -83,6 +84,7 @@ func TestConfirmUsableBadInfoConfig(t *testing.T) { test.testConfirmUsable("first", t) } + func TestConfirmUsableEmptyConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -92,6 +94,7 @@ func TestConfirmUsableEmptyConfig(t *testing.T) { test.testConfirmUsable("", t) } + func TestConfirmUsableMissingConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -101,6 +104,7 @@ func TestConfirmUsableMissingConfig(t *testing.T) { test.testConfirmUsable("not-here", t) } + func TestValidateEmptyConfig(t *testing.T) { config := clientcmdapi.NewConfig() test := configValidationTest{ @@ -110,6 +114,7 @@ func TestValidateEmptyConfig(t *testing.T) { test.testConfig(t) } + func TestValidateMissingCurrentContextConfig(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -120,6 +125,7 @@ func TestValidateMissingCurrentContextConfig(t *testing.T) { test.testConfig(t) } + func TestIsContextNotFound(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -172,6 +178,7 @@ func TestValidateMissingReferencesConfig(t *testing.T) { test.testContext("anything", t) test.testConfig(t) } + func TestValidateEmptyContext(t *testing.T) { config := clientcmdapi.NewConfig() config.CurrentContext = "anything" @@ -185,6 +192,19 @@ func TestValidateEmptyContext(t *testing.T) { test.testConfig(t) } +func TestValidateEmptyContextName(t *testing.T) { + config := clientcmdapi.NewConfig() + config.CurrentContext = "anything" + config.Contexts[""] = &clientcmdapi.Context{Cluster: "missing", AuthInfo: "missing"} + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{"empty context name", "is not allowed"}, + } + + test.testContext("", t) + test.testConfig(t) +} + func TestValidateEmptyClusterInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["empty"] = clientcmdapi.NewCluster() @@ -223,6 +243,7 @@ func TestValidateMissingCAFileClusterInfo(t *testing.T) { test.testCluster("missing ca", t) test.testConfig(t) } + func TestValidateCleanClusterInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.Clusters["clean"] = &clientcmdapi.Cluster{ @@ -235,6 +256,7 @@ func TestValidateCleanClusterInfo(t *testing.T) { test.testCluster("clean", t) test.testConfig(t) } + func TestValidateCleanWithCAClusterInfo(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -262,6 +284,7 @@ func TestValidateEmptyAuthInfo(t *testing.T) { test.testAuthInfo("error", t) test.testConfig(t) } + func TestValidateCertFilesNotFoundAuthInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ @@ -276,6 +299,7 @@ func TestValidateCertFilesNotFoundAuthInfo(t *testing.T) { test.testAuthInfo("error", t) test.testConfig(t) } + func TestValidateCertDataOverridesFiles(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -295,6 +319,7 @@ func TestValidateCertDataOverridesFiles(t *testing.T) { test.testAuthInfo("clean", t) test.testConfig(t) } + func TestValidateCleanCertFilesAuthInfo(t *testing.T) { tempFile, _ := ioutil.TempFile("", "") defer os.Remove(tempFile.Name()) @@ -311,6 +336,7 @@ func TestValidateCleanCertFilesAuthInfo(t *testing.T) { test.testAuthInfo("clean", t) test.testConfig(t) } + func TestValidateCleanTokenAuthInfo(t *testing.T) { config := clientcmdapi.NewConfig() config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ @@ -339,6 +365,106 @@ func TestValidateMultipleMethodsAuthInfo(t *testing.T) { test.testConfig(t) } +func TestValidateAuthInfoExec(t *testing.T) { + config := clientcmdapi.NewConfig() + config.AuthInfos["user"] = &clientcmdapi.AuthInfo{ + Exec: &clientcmdapi.ExecConfig{ + Command: "/bin/example", + APIVersion: "clientauthentication.k8s.io/v1alpha1", + Args: []string{"hello", "world"}, + Env: []clientcmdapi.ExecEnvVar{ + {Name: "foo", Value: "bar"}, + }, + }, + } + test := configValidationTest{ + config: config, + } + + test.testAuthInfo("user", t) + test.testConfig(t) +} + +func TestValidateAuthInfoExecNoVersion(t *testing.T) { + config := clientcmdapi.NewConfig() + config.AuthInfos["user"] = &clientcmdapi.AuthInfo{ + Exec: &clientcmdapi.ExecConfig{ + Command: "/bin/example", + }, + } + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{ + "apiVersion must be specified for user to use exec authentication plugin", + }, + } + + test.testAuthInfo("user", t) + test.testConfig(t) +} + +func TestValidateAuthInfoExecNoCommand(t *testing.T) { + config := clientcmdapi.NewConfig() + config.AuthInfos["user"] = &clientcmdapi.AuthInfo{ + Exec: &clientcmdapi.ExecConfig{ + APIVersion: "clientauthentication.k8s.io/v1alpha1", + }, + } + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{ + "command must be specified for user to use exec authentication plugin", + }, + } + + test.testAuthInfo("user", t) + test.testConfig(t) +} + +func TestValidateAuthInfoExecWithAuthProvider(t *testing.T) { + config := clientcmdapi.NewConfig() + config.AuthInfos["user"] = &clientcmdapi.AuthInfo{ + AuthProvider: &clientcmdapi.AuthProviderConfig{ + Name: "oidc", + }, + Exec: &clientcmdapi.ExecConfig{ + Command: "/bin/example", + APIVersion: "clientauthentication.k8s.io/v1alpha1", + }, + } + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{ + "authProvider cannot be provided in combination with an exec plugin for user", + }, + } + + test.testAuthInfo("user", t) + test.testConfig(t) +} + +func TestValidateAuthInfoExecInvalidEnv(t *testing.T) { + config := clientcmdapi.NewConfig() + config.AuthInfos["user"] = &clientcmdapi.AuthInfo{ + Exec: &clientcmdapi.ExecConfig{ + Command: "/bin/example", + APIVersion: "clientauthentication.k8s.io/v1alpha1", + Env: []clientcmdapi.ExecEnvVar{ + {Name: "foo"}, // No value + }, + }, + } + test := configValidationTest{ + config: config, + expectedErrorSubstring: []string{ + "env variable foo value must be specified for user to use exec authentication plugin", + }, + } + + test.testAuthInfo("user", t) + test.testConfig(t) +} + type configValidationTest struct { config *clientcmdapi.Config expectedErrorSubstring []string @@ -363,6 +489,7 @@ func (c configValidationTest) testContext(contextName string, t *testing.T) { } } } + func (c configValidationTest) testConfirmUsable(contextName string, t *testing.T) { err := ConfirmUsable(*c.config, contextName) @@ -382,6 +509,7 @@ func (c configValidationTest) testConfirmUsable(contextName string, t *testing.T } } } + func (c configValidationTest) testConfig(t *testing.T) { err := Validate(*c.config) @@ -404,6 +532,7 @@ func (c configValidationTest) testConfig(t *testing.T) { } } } + func (c configValidationTest) testCluster(clusterName string, t *testing.T) { errs := validateClusterInfo(clusterName, *c.config.Clusters[clusterName]) diff --git a/vendor/k8s.io/client-go/tools/leaderelection/BUILD b/vendor/k8s.io/client-go/tools/leaderelection/BUILD index 5ea32efde..22e020d8c 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/BUILD +++ b/vendor/k8s.io/client-go/tools/leaderelection/BUILD @@ -23,8 +23,7 @@ go_library( go_test( name = "go_default_test", srcs = ["leaderelection_test.go"], - importpath = "k8s.io/client-go/tools/leaderelection", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go index 2ce546bc4..e41b420c9 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go @@ -171,11 +171,11 @@ func (le *LeaderElector) IsLeader() bool { // acquire loops calling tryAcquireOrRenew and returns immediately when tryAcquireOrRenew succeeds. func (le *LeaderElector) acquire() { stop := make(chan struct{}) - glog.Infof("attempting to acquire leader lease...") + desc := le.config.Lock.Describe() + glog.Infof("attempting to acquire leader lease %v...", desc) wait.JitterUntil(func() { succeeded := le.tryAcquireOrRenew() le.maybeReportTransition() - desc := le.config.Lock.Describe() if !succeeded { glog.V(4).Infof("failed to acquire lease %v", desc) return diff --git a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection_test.go b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection_test.go index 5e5864631..e99cf57af 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection_test.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection_test.go @@ -260,7 +260,7 @@ func testTryAcquireOrRenew(t *testing.T, objectType string) { } if test.expectSuccess != le.tryAcquireOrRenew() { - t.Errorf("[%v]unexpected result of tryAcquireOrRenew: [succeded=%v]", i, !test.expectSuccess) + t.Errorf("[%v]unexpected result of tryAcquireOrRenew: [succeeded=%v]", i, !test.expectSuccess) } le.observedRecord.AcquireTime = metav1.Time{} diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go index 69e8c5a7a..4ff595603 100644 --- a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go +++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go @@ -32,15 +32,15 @@ import ( // data we will likely move to deprecate the Endpoints lock. type ConfigMapLock struct { - // ConfigMapMeta should contain a Name and a Namespace of an - // ConfigMapMeta object that the Leadercmlector will attempt to lead. + // ConfigMapMeta should contain a Name and a Namespace of a + // ConfigMapMeta object that the LeaderElector will attempt to lead. ConfigMapMeta metav1.ObjectMeta Client corev1client.ConfigMapsGetter LockConfig ResourceLockConfig cm *v1.ConfigMap } -// Get returns the cmlection record from a ConfigMap Annotation +// Get returns the election record from a ConfigMap Annotation func (cml *ConfigMapLock) Get() (*LeaderElectionRecord, error) { var record LeaderElectionRecord var err error @@ -59,7 +59,7 @@ func (cml *ConfigMapLock) Get() (*LeaderElectionRecord, error) { return &record, nil } -// Create attempts to create a LeadercmlectionRecord annotation +// Create attempts to create a LeaderElectionRecord annotation func (cml *ConfigMapLock) Create(ler LeaderElectionRecord) error { recordBytes, err := json.Marshal(ler) if err != nil { @@ -77,7 +77,7 @@ func (cml *ConfigMapLock) Create(ler LeaderElectionRecord) error { return err } -// Update will update and existing annotation on a given resource. +// Update will update an existing annotation on a given resource. func (cml *ConfigMapLock) Update(ler LeaderElectionRecord) error { if cml.cm == nil { return errors.New("endpoint not initialized, call get or create first") @@ -91,7 +91,7 @@ func (cml *ConfigMapLock) Update(ler LeaderElectionRecord) error { return err } -// RecordEvent in leader cmlection while adding meta-data +// RecordEvent in leader election while adding meta-data func (cml *ConfigMapLock) RecordEvent(s string) { events := fmt.Sprintf("%v %v", cml.LockConfig.Identity, s) cml.LockConfig.EventRecorder.Eventf(&v1.ConfigMap{ObjectMeta: cml.cm.ObjectMeta}, v1.EventTypeNormal, "LeaderElection", events) diff --git a/vendor/k8s.io/client-go/tools/pager/BUILD b/vendor/k8s.io/client-go/tools/pager/BUILD index c4a2d4d1c..4d07429af 100644 --- a/vendor/k8s.io/client-go/tools/pager/BUILD +++ b/vendor/k8s.io/client-go/tools/pager/BUILD @@ -37,14 +37,13 @@ filegroup( go_test( name = "go_default_test", srcs = ["pager_test.go"], - importpath = "k8s.io/client-go/tools/pager", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/golang.org/x/net/context:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/tools/pager/pager_test.go b/vendor/k8s.io/client-go/tools/pager/pager_test.go index 6e3e9444a..b905fc1fb 100644 --- a/vendor/k8s.io/client-go/tools/pager/pager_test.go +++ b/vendor/k8s.io/client-go/tools/pager/pager_test.go @@ -25,14 +25,14 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - metav1alpha1 "k8s.io/apimachinery/pkg/apis/meta/v1alpha1" + metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" "k8s.io/apimachinery/pkg/runtime" ) func list(count int, rv string) *metainternalversion.List { var list metainternalversion.List for i := 0; i < count; i++ { - list.Items = append(list.Items, &metav1alpha1.PartialObjectMetadata{ + list.Items = append(list.Items, &metav1beta1.PartialObjectMetadata{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%d", i), }, @@ -80,7 +80,7 @@ func (p *testPager) PagedList(ctx context.Context, options metav1.ListOptions) ( if p.remaining <= 0 { break } - list.Items = append(list.Items, &metav1alpha1.PartialObjectMetadata{ + list.Items = append(list.Items, &metav1beta1.PartialObjectMetadata{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%d", p.index), }, diff --git a/vendor/k8s.io/client-go/tools/portforward/BUILD b/vendor/k8s.io/client-go/tools/portforward/BUILD index 1232b7ebb..e2fb01e73 100644 --- a/vendor/k8s.io/client-go/tools/portforward/BUILD +++ b/vendor/k8s.io/client-go/tools/portforward/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["portforward_test.go"], - importpath = "k8s.io/client-go/tools/portforward", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/tools/portforward/portforward.go b/vendor/k8s.io/client-go/tools/portforward/portforward.go index 24737b9a7..9d7936e7c 100644 --- a/vendor/k8s.io/client-go/tools/portforward/portforward.go +++ b/vendor/k8s.io/client-go/tools/portforward/portforward.go @@ -185,7 +185,7 @@ func (pf *PortForwarder) forward() error { // If both listener creation fail, an error is raised. func (pf *PortForwarder) listenOnPort(port *ForwardedPort) error { errTcp4 := pf.listenOnPortAndAddress(port, "tcp4", "127.0.0.1") - errTcp6 := pf.listenOnPortAndAddress(port, "tcp6", "[::1]") + errTcp6 := pf.listenOnPortAndAddress(port, "tcp6", "::1") if errTcp4 != nil && errTcp6 != nil { return fmt.Errorf("All listeners failed to create with the following errors: %s, %s", errTcp4, errTcp6) } @@ -220,7 +220,7 @@ func (pf *PortForwarder) getListener(protocol string, hostname string, port *For } port.Local = uint16(localPortUInt) if pf.out != nil { - fmt.Fprintf(pf.out, "Forwarding from %s:%d -> %d\n", hostname, localPortUInt, port.Remote) + fmt.Fprintf(pf.out, "Forwarding from %s -> %d\n", net.JoinHostPort(hostname, strconv.Itoa(int(localPortUInt))), port.Remote) } return listener, nil diff --git a/vendor/k8s.io/client-go/tools/portforward/portforward_test.go b/vendor/k8s.io/client-go/tools/portforward/portforward_test.go index ab705849c..2abbf16f2 100644 --- a/vendor/k8s.io/client-go/tools/portforward/portforward_test.go +++ b/vendor/k8s.io/client-go/tools/portforward/portforward_test.go @@ -179,7 +179,7 @@ func TestGetListener(t *testing.T) { t.Errorf("Test case #%d failed: Listener does not listen on expected address: asked '%v' got '%v'", i, testCase.ExpectedListenerAddress, host) } if port != expectedListenerPort { - t.Errorf("Test case #%d failed: Listener does not listen on exepected port: asked %v got %v", i, expectedListenerPort, port) + t.Errorf("Test case #%d failed: Listener does not listen on expected port: asked %v got %v", i, expectedListenerPort, port) } listener.Close() diff --git a/vendor/k8s.io/client-go/tools/record/BUILD b/vendor/k8s.io/client-go/tools/record/BUILD index f89aa3e28..0799afe7e 100644 --- a/vendor/k8s.io/client-go/tools/record/BUILD +++ b/vendor/k8s.io/client-go/tools/record/BUILD @@ -12,8 +12,7 @@ go_test( "event_test.go", "events_cache_test.go", ], - importpath = "k8s.io/client-go/tools/record", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/vendor/k8s.io/client-go/tools/remotecommand/BUILD b/vendor/k8s.io/client-go/tools/remotecommand/BUILD index e665af3f4..b30c122c3 100644 --- a/vendor/k8s.io/client-go/tools/remotecommand/BUILD +++ b/vendor/k8s.io/client-go/tools/remotecommand/BUILD @@ -12,8 +12,7 @@ go_test( "v2_test.go", "v4_test.go", ], - importpath = "k8s.io/client-go/tools/remotecommand", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", diff --git a/vendor/k8s.io/client-go/transport/BUILD b/vendor/k8s.io/client-go/transport/BUILD index 91c3831b2..71494544a 100644 --- a/vendor/k8s.io/client-go/transport/BUILD +++ b/vendor/k8s.io/client-go/transport/BUILD @@ -13,8 +13,7 @@ go_test( "round_trippers_test.go", "transport_test.go", ], - importpath = "k8s.io/client-go/transport", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( @@ -28,9 +27,6 @@ go_library( importpath = "k8s.io/client-go/transport", deps = [ "//vendor/github.com/golang/glog:go_default_library", - "//vendor/github.com/gregjones/httpcache:go_default_library", - "//vendor/github.com/gregjones/httpcache/diskcache:go_default_library", - "//vendor/github.com/peterbourgon/diskv:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", ], ) diff --git a/vendor/k8s.io/client-go/transport/cache.go b/vendor/k8s.io/client-go/transport/cache.go index da22cdee5..7c40848c7 100644 --- a/vendor/k8s.io/client-go/transport/cache.go +++ b/vendor/k8s.io/client-go/transport/cache.go @@ -31,12 +31,28 @@ import ( // the config has no custom TLS options, http.DefaultTransport is returned. type tlsTransportCache struct { mu sync.Mutex - transports map[string]*http.Transport + transports map[tlsCacheKey]*http.Transport } const idleConnsPerHost = 25 -var tlsCache = &tlsTransportCache{transports: make(map[string]*http.Transport)} +var tlsCache = &tlsTransportCache{transports: make(map[tlsCacheKey]*http.Transport)} + +type tlsCacheKey struct { + insecure bool + caData string + certData string + keyData string + serverName string +} + +func (t tlsCacheKey) String() string { + keyText := "" + if len(t.keyData) > 0 { + keyText = "" + } + return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, serverName:%s", t.insecure, t.caData, t.certData, keyText, t.serverName) +} func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { key, err := tlsConfigKey(config) @@ -82,11 +98,16 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { } // tlsConfigKey returns a unique key for tls.Config objects returned from TLSConfigFor -func tlsConfigKey(c *Config) (string, error) { +func tlsConfigKey(c *Config) (tlsCacheKey, error) { // Make sure ca/key/cert content is loaded if err := loadTLSFiles(c); err != nil { - return "", err + return tlsCacheKey{}, err } - // Only include the things that actually affect the tls.Config - return fmt.Sprintf("%v/%x/%x/%x/%v", c.TLS.Insecure, c.TLS.CAData, c.TLS.CertData, c.TLS.KeyData, c.TLS.ServerName), nil + return tlsCacheKey{ + insecure: c.TLS.Insecure, + caData: string(c.TLS.CAData), + certData: string(c.TLS.CertData), + keyData: string(c.TLS.KeyData), + serverName: c.TLS.ServerName, + }, nil } diff --git a/vendor/k8s.io/client-go/transport/config.go b/vendor/k8s.io/client-go/transport/config.go index 425f8f87a..af347dafe 100644 --- a/vendor/k8s.io/client-go/transport/config.go +++ b/vendor/k8s.io/client-go/transport/config.go @@ -37,10 +37,6 @@ type Config struct { // Bearer token for authentication BearerToken string - // CacheDir is the directory where we'll store HTTP cached responses. - // If set to empty string, no caching mechanism will be used. - CacheDir string - // Impersonate is the config that this Config will impersonate using Impersonate ImpersonationConfig diff --git a/vendor/k8s.io/client-go/transport/round_trippers.go b/vendor/k8s.io/client-go/transport/round_trippers.go index 2ee605d7b..c728b1877 100644 --- a/vendor/k8s.io/client-go/transport/round_trippers.go +++ b/vendor/k8s.io/client-go/transport/round_trippers.go @@ -19,14 +19,10 @@ package transport import ( "fmt" "net/http" - "path/filepath" "strings" "time" "github.com/golang/glog" - "github.com/gregjones/httpcache" - "github.com/gregjones/httpcache/diskcache" - "github.com/peterbourgon/diskv" utilnet "k8s.io/apimachinery/pkg/util/net" ) @@ -60,9 +56,6 @@ func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTrip len(config.Impersonate.Extra) > 0 { rt = NewImpersonatingRoundTripper(config.Impersonate, rt) } - if len(config.CacheDir) > 0 { - rt = NewCacheRoundTripper(config.CacheDir, rt) - } return rt, nil } @@ -86,30 +79,6 @@ type requestCanceler interface { CancelRequest(*http.Request) } -type cacheRoundTripper struct { - rt *httpcache.Transport -} - -// NewCacheRoundTripper creates a roundtripper that reads the ETag on -// response headers and send the If-None-Match header on subsequent -// corresponding requests. -func NewCacheRoundTripper(cacheDir string, rt http.RoundTripper) http.RoundTripper { - d := diskv.New(diskv.Options{ - BasePath: cacheDir, - TempDir: filepath.Join(cacheDir, ".diskv-temp"), - }) - t := httpcache.NewTransport(diskcache.NewWithDiskv(d)) - t.Transport = rt - - return &cacheRoundTripper{rt: t} -} - -func (rt *cacheRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { - return rt.rt.RoundTrip(req) -} - -func (rt *cacheRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt.Transport } - type authProxyRoundTripper struct { username string groups []string diff --git a/vendor/k8s.io/client-go/transport/round_trippers_test.go b/vendor/k8s.io/client-go/transport/round_trippers_test.go index c1e30c3f2..d5ffc6bde 100644 --- a/vendor/k8s.io/client-go/transport/round_trippers_test.go +++ b/vendor/k8s.io/client-go/transport/round_trippers_test.go @@ -17,11 +17,7 @@ limitations under the License. package transport import ( - "bytes" - "io/ioutil" "net/http" - "net/url" - "os" "reflect" "strings" "testing" @@ -220,60 +216,3 @@ func TestAuthProxyRoundTripper(t *testing.T) { } } } - -func TestCacheRoundTripper(t *testing.T) { - rt := &testRoundTripper{} - cacheDir, err := ioutil.TempDir("", "cache-rt") - defer os.RemoveAll(cacheDir) - if err != nil { - t.Fatal(err) - } - cache := NewCacheRoundTripper(cacheDir, rt) - - // First call, caches the response - req := &http.Request{ - Method: http.MethodGet, - URL: &url.URL{Host: "localhost"}, - } - rt.Response = &http.Response{ - Header: http.Header{"ETag": []string{`"123456"`}}, - Body: ioutil.NopCloser(bytes.NewReader([]byte("Content"))), - StatusCode: http.StatusOK, - } - resp, err := cache.RoundTrip(req) - if err != nil { - t.Fatal(err) - } - content, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - if string(content) != "Content" { - t.Errorf(`Expected Body to be "Content", got %q`, string(content)) - } - - // Second call, returns cached response - req = &http.Request{ - Method: http.MethodGet, - URL: &url.URL{Host: "localhost"}, - } - rt.Response = &http.Response{ - StatusCode: http.StatusNotModified, - Body: ioutil.NopCloser(bytes.NewReader([]byte("Other Content"))), - } - - resp, err = cache.RoundTrip(req) - if err != nil { - t.Fatal(err) - } - - // Read body and make sure we have the initial content - content, err = ioutil.ReadAll(resp.Body) - resp.Body.Close() - if err != nil { - t.Fatal(err) - } - if string(content) != "Content" { - t.Errorf("Invalid content read from cache %q", string(content)) - } -} diff --git a/vendor/k8s.io/client-go/util/buffer/BUILD b/vendor/k8s.io/client-go/util/buffer/BUILD index b5629d5cb..d3b2652ce 100644 --- a/vendor/k8s.io/client-go/util/buffer/BUILD +++ b/vendor/k8s.io/client-go/util/buffer/BUILD @@ -10,8 +10,7 @@ go_library( go_test( name = "go_default_test", srcs = ["ring_growing_test.go"], - importpath = "k8s.io/client-go/util/buffer", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/util/cert/BUILD b/vendor/k8s.io/client-go/util/cert/BUILD index 93ca7c9c6..799979d46 100644 --- a/vendor/k8s.io/client-go/util/cert/BUILD +++ b/vendor/k8s.io/client-go/util/cert/BUILD @@ -13,8 +13,7 @@ go_test( "pem_test.go", ], data = glob(["testdata/**"]), - importpath = "k8s.io/client-go/util/cert", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go index 6854d4152..fb7f5facc 100644 --- a/vendor/k8s.io/client-go/util/cert/cert.go +++ b/vendor/k8s.io/client-go/util/cert/cert.go @@ -38,7 +38,7 @@ const ( duration365d = time.Hour * 24 * 365 ) -// Config containes the basic fields required for creating a certificate +// Config contains the basic fields required for creating a certificate type Config struct { CommonName string Organization []string @@ -138,23 +138,50 @@ func MakeEllipticPrivateKeyPEM() ([]byte, error) { // Host may be an IP or a DNS name // You may also specify additional subject alt names (either ip or dns names) for the certificate func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { + caKey, err := rsa.GenerateKey(cryptorand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + caTemplate := x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s-ca@%d", host, time.Now().Unix()), + }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(time.Hour * 24 * 365), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + BasicConstraintsValid: true, + IsCA: true, + } + + caDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey) + if err != nil { + return nil, nil, err + } + + caCertificate, err := x509.ParseCertificate(caDERBytes) + if err != nil { + return nil, nil, err + } + priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) if err != nil { return nil, nil, err } template := x509.Certificate{ - SerialNumber: big.NewInt(1), + SerialNumber: big.NewInt(2), Subject: pkix.Name{ CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), }, NotBefore: time.Now(), NotAfter: time.Now().Add(time.Hour * 24 * 365), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, BasicConstraintsValid: true, - IsCA: true, } if ip := net.ParseIP(host); ip != nil { @@ -166,16 +193,19 @@ func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS template.IPAddresses = append(template.IPAddresses, alternateIPs...) template.DNSNames = append(template.DNSNames, alternateDNS...) - derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv) + derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, caCertificate, &priv.PublicKey, caKey) if err != nil { return nil, nil, err } - // Generate cert + // Generate cert, followed by ca certBuffer := bytes.Buffer{} if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: derBytes}); err != nil { return nil, nil, err } + if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: caDERBytes}); err != nil { + return nil, nil, err + } // Generate key keyBuffer := bytes.Buffer{} diff --git a/vendor/k8s.io/client-go/util/certificate/BUILD b/vendor/k8s.io/client-go/util/certificate/BUILD index f10a2d9e2..dfc5c3933 100644 --- a/vendor/k8s.io/client-go/util/certificate/BUILD +++ b/vendor/k8s.io/client-go/util/certificate/BUILD @@ -14,8 +14,7 @@ go_test( "certificate_manager_test.go", "certificate_store_test.go", ], - importpath = "k8s.io/client-go/util/certificate", - library = ":go_default_library", + embed = [":go_default_library"], tags = ["automanaged"], deps = [ "//vendor/k8s.io/api/certificates/v1beta1:go_default_library", diff --git a/vendor/k8s.io/client-go/util/certificate/certificate_manager.go b/vendor/k8s.io/client-go/util/certificate/certificate_manager.go index 7ea05ba79..e189c8479 100644 --- a/vendor/k8s.io/client-go/util/certificate/certificate_manager.go +++ b/vendor/k8s.io/client-go/util/certificate/certificate_manager.go @@ -141,7 +141,6 @@ type manager struct { certStore Store certAccessLock sync.RWMutex cert *tls.Certificate - rotationDeadline time.Time forceRotation bool certificateExpiration Gauge serverHealth bool @@ -208,8 +207,7 @@ func (m *manager) SetCertificateSigningRequestClient(certSigningRequestClient ce func (m *manager) Start() { // Certificate rotation depends on access to the API server certificate // signing API, so don't start the certificate manager if we don't have a - // client. This will happen on the cluster master, where the kubelet is - // responsible for bootstrapping the pods of the master components. + // client. if m.certSigningRequestClient == nil { glog.V(2).Infof("Certificate rotation is not enabled, no connection to the apiserver.") return @@ -217,27 +215,18 @@ func (m *manager) Start() { glog.V(2).Infof("Certificate rotation is enabled.") - m.setRotationDeadline() - - // Synchronously request a certificate before entering the background - // loop to allow bootstrap scenarios, where the certificate manager - // doesn't have a certificate at all yet. - if m.shouldRotate() { - glog.V(1).Infof("shouldRotate() is true, forcing immediate rotation") - if _, err := m.rotateCerts(); err != nil { - utilruntime.HandleError(fmt.Errorf("Could not rotate certificates: %v", err)) - } - } - backoff := wait.Backoff{ - Duration: 2 * time.Second, - Factor: 2, - Jitter: 0.1, - Steps: 5, - } go wait.Forever(func() { - sleepInterval := m.rotationDeadline.Sub(time.Now()) - glog.V(2).Infof("Waiting %v for next certificate rotation", sleepInterval) - time.Sleep(sleepInterval) + deadline := m.nextRotationDeadline() + if sleepInterval := deadline.Sub(time.Now()); sleepInterval > 0 { + glog.V(2).Infof("Waiting %v for next certificate rotation", sleepInterval) + time.Sleep(sleepInterval) + } + backoff := wait.Backoff{ + Duration: 2 * time.Second, + Factor: 2, + Jitter: 0.1, + Steps: 5, + } if err := wait.ExponentialBackoff(backoff, m.rotateCerts); err != nil { utilruntime.HandleError(fmt.Errorf("Reached backoff limit, still unable to rotate certs: %v", err)) wait.PollInfinite(32*time.Second, m.rotateCerts) @@ -252,11 +241,14 @@ func getCurrentCertificateOrBootstrap( currentCert, err := store.Current() if err == nil { - return currentCert, false, nil - } - - if _, ok := err.(*NoCertKeyError); !ok { - return nil, false, err + // if the current cert is expired, fall back to the bootstrap cert + if currentCert.Leaf != nil && time.Now().Before(currentCert.Leaf.NotAfter) { + return currentCert, false, nil + } + } else { + if _, ok := err.(*NoCertKeyError); !ok { + return nil, false, err + } } if bootstrapCertificatePEM == nil || bootstrapKeyPEM == nil { @@ -276,21 +268,14 @@ func getCurrentCertificateOrBootstrap( return nil, false, fmt.Errorf("unable to parse certificate data: %v", err) } bootstrapCert.Leaf = certs[0] - return &bootstrapCert, true, nil -} -// shouldRotate looks at how close the current certificate is to expiring and -// decides if it is time to rotate or not. -func (m *manager) shouldRotate() bool { - m.certAccessLock.RLock() - defer m.certAccessLock.RUnlock() - if m.cert == nil { - return true + if _, err := store.Update(bootstrapCertificatePEM, bootstrapKeyPEM); err != nil { + utilruntime.HandleError(fmt.Errorf("Unable to set the cert/key pair to the bootstrap certificate: %v", err)) + } else { + glog.V(4).Infof("Updated the store to contain the initial bootstrap certificate") } - if m.forceRotation { - return true - } - return time.Now().After(m.rotationDeadline) + + return &bootstrapCert, true, nil } // rotateCerts attempts to request a client cert from the server, wait a reasonable @@ -315,7 +300,7 @@ func (m *manager) rotateCerts() (bool, error) { return false, m.updateServerError(err) } - // Wait for the certificate to be signed. Instead of one long watch, we retry with slighly longer + // Wait for the certificate to be signed. Instead of one long watch, we retry with slightly longer // intervals each time in order to tolerate failures from the server AND to preserve the liveliness // of the cert manager loop. This creates slightly more traffic against the API server in return // for bounding the amount of time we wait when a certificate expires. @@ -349,30 +334,34 @@ func (m *manager) rotateCerts() (bool, error) { } m.updateCached(cert) - m.setRotationDeadline() - m.forceRotation = false return true, nil } -// setRotationDeadline sets a cached value for the threshold at which the +// nextRotationDeadline returns a value for the threshold at which the // current certificate should be rotated, 80%+/-10% of the expiration of the // certificate. -func (m *manager) setRotationDeadline() { +func (m *manager) nextRotationDeadline() time.Time { + // forceRotation is not protected by locks + if m.forceRotation { + m.forceRotation = false + return time.Now() + } + m.certAccessLock.RLock() defer m.certAccessLock.RUnlock() if m.cert == nil { - m.rotationDeadline = time.Now() - return + return time.Now() } notAfter := m.cert.Leaf.NotAfter totalDuration := float64(notAfter.Sub(m.cert.Leaf.NotBefore)) + deadline := m.cert.Leaf.NotBefore.Add(jitteryDuration(totalDuration)) - m.rotationDeadline = m.cert.Leaf.NotBefore.Add(jitteryDuration(totalDuration)) - glog.V(2).Infof("Certificate expiration is %v, rotation deadline is %v", notAfter, m.rotationDeadline) + glog.V(2).Infof("Certificate expiration is %v, rotation deadline is %v", notAfter, deadline) if m.certificateExpiration != nil { m.certificateExpiration.Set(float64(notAfter.Unix())) } + return deadline } // jitteryDuration uses some jitter to set the rotation threshold so each node diff --git a/vendor/k8s.io/client-go/util/certificate/certificate_manager_test.go b/vendor/k8s.io/client-go/util/certificate/certificate_manager_test.go index ab19e37b1..6a23f0426 100644 --- a/vendor/k8s.io/client-go/util/certificate/certificate_manager_test.go +++ b/vendor/k8s.io/client-go/util/certificate/certificate_manager_test.go @@ -146,46 +146,6 @@ func TestNewManagerNoRotation(t *testing.T) { } } -func TestShouldRotate(t *testing.T) { - now := time.Now() - tests := []struct { - name string - notBefore time.Time - notAfter time.Time - shouldRotate bool - }{ - {"just issued, still good", now.Add(-1 * time.Hour), now.Add(99 * time.Hour), false}, - {"half way expired, still good", now.Add(-24 * time.Hour), now.Add(24 * time.Hour), false}, - {"mostly expired, still good", now.Add(-69 * time.Hour), now.Add(31 * time.Hour), false}, - {"just about expired, should rotate", now.Add(-91 * time.Hour), now.Add(9 * time.Hour), true}, - {"nearly expired, should rotate", now.Add(-99 * time.Hour), now.Add(1 * time.Hour), true}, - {"already expired, should rotate", now.Add(-10 * time.Hour), now.Add(-1 * time.Hour), true}, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - m := manager{ - cert: &tls.Certificate{ - Leaf: &x509.Certificate{ - NotBefore: test.notBefore, - NotAfter: test.notAfter, - }, - }, - template: &x509.CertificateRequest{}, - usages: []certificates.KeyUsage{}, - } - m.setRotationDeadline() - if m.shouldRotate() != test.shouldRotate { - t.Errorf("Time %v, a certificate issued for (%v, %v) should rotate should be %t.", - now, - m.cert.Leaf.NotBefore, - m.cert.Leaf.NotAfter, - test.shouldRotate) - } - }) - } -} - type gaugeMock struct { calls int lastValue float64 @@ -233,20 +193,20 @@ func TestSetRotationDeadline(t *testing.T) { jitteryDuration = func(float64) time.Duration { return time.Duration(float64(tc.notAfter.Sub(tc.notBefore)) * 0.7) } lowerBound := tc.notBefore.Add(time.Duration(float64(tc.notAfter.Sub(tc.notBefore)) * 0.7)) - m.setRotationDeadline() + deadline := m.nextRotationDeadline() - if !m.rotationDeadline.Equal(lowerBound) { + if !deadline.Equal(lowerBound) { t.Errorf("For notBefore %v, notAfter %v, the rotationDeadline %v should be %v.", tc.notBefore, tc.notAfter, - m.rotationDeadline, + deadline, lowerBound) } if g.calls != 1 { t.Errorf("%d metrics were recorded, wanted %d", g.calls, 1) } if g.lastValue != float64(tc.notAfter.Unix()) { - t.Errorf("%d value for metric was recorded, wanted %d", g.lastValue, tc.notAfter.Unix()) + t.Errorf("%f value for metric was recorded, wanted %d", g.lastValue, tc.notAfter.Unix()) } }) } @@ -321,7 +281,7 @@ func TestNewManagerBootstrap(t *testing.T) { } if m, ok := cm.(*manager); !ok { t.Errorf("Expected a '*manager' from 'NewManager'") - } else if !m.shouldRotate() { + } else if !m.forceRotation { t.Errorf("Expected rotation should happen during bootstrap, but it won't.") } } @@ -360,9 +320,8 @@ func TestNewManagerNoBootstrap(t *testing.T) { if m, ok := cm.(*manager); !ok { t.Errorf("Expected a '*manager' from 'NewManager'") } else { - m.setRotationDeadline() - if m.shouldRotate() { - t.Errorf("Expected rotation should happen during bootstrap, but it won't.") + if m.forceRotation { + t.Errorf("Expected rotation should not happen during bootstrap, but it won't.") } } } @@ -515,8 +474,7 @@ func TestInitializeCertificateSigningRequestClient(t *testing.T) { if m, ok := certificateManager.(*manager); !ok { t.Errorf("Expected a '*manager' from 'NewManager'") } else { - m.setRotationDeadline() - if m.shouldRotate() { + if m.forceRotation { if success, err := m.rotateCerts(); !success { t.Errorf("Got failure from 'rotateCerts', wanted success.") } else if err != nil { @@ -614,8 +572,7 @@ func TestInitializeOtherRESTClients(t *testing.T) { if m, ok := certificateManager.(*manager); !ok { t.Errorf("Expected a '*manager' from 'NewManager'") } else { - m.setRotationDeadline() - if m.shouldRotate() { + if m.forceRotation { success, err := certificateManager.(*manager).rotateCerts() if err != nil { t.Errorf("Got error %v, expected none.", err) diff --git a/vendor/k8s.io/client-go/util/certificate/csr/BUILD b/vendor/k8s.io/client-go/util/certificate/csr/BUILD index c6def5bbf..c1bcd9578 100644 --- a/vendor/k8s.io/client-go/util/certificate/csr/BUILD +++ b/vendor/k8s.io/client-go/util/certificate/csr/BUILD @@ -42,8 +42,7 @@ filegroup( go_test( name = "go_default_test", srcs = ["csr_test.go"], - importpath = "k8s.io/client-go/util/certificate/csr", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/api/certificates/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/client-go/util/flowcontrol/BUILD b/vendor/k8s.io/client-go/util/flowcontrol/BUILD index d74b3f554..819bb7ef3 100644 --- a/vendor/k8s.io/client-go/util/flowcontrol/BUILD +++ b/vendor/k8s.io/client-go/util/flowcontrol/BUILD @@ -12,8 +12,7 @@ go_test( "backoff_test.go", "throttle_test.go", ], - importpath = "k8s.io/client-go/util/flowcontrol", - library = ":go_default_library", + embed = [":go_default_library"], deps = ["//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library"], ) @@ -25,7 +24,7 @@ go_library( ], importpath = "k8s.io/client-go/util/flowcontrol", deps = [ - "//vendor/github.com/juju/ratelimit:go_default_library", + "//vendor/golang.org/x/time/rate:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/integer:go_default_library", ], diff --git a/vendor/k8s.io/client-go/util/flowcontrol/throttle.go b/vendor/k8s.io/client-go/util/flowcontrol/throttle.go index c45169c40..e671c044d 100644 --- a/vendor/k8s.io/client-go/util/flowcontrol/throttle.go +++ b/vendor/k8s.io/client-go/util/flowcontrol/throttle.go @@ -18,8 +18,9 @@ package flowcontrol import ( "sync" + "time" - "github.com/juju/ratelimit" + "golang.org/x/time/rate" ) type RateLimiter interface { @@ -30,17 +31,13 @@ type RateLimiter interface { Accept() // Stop stops the rate limiter, subsequent calls to CanAccept will return false Stop() - // Saturation returns a percentage number which describes how saturated - // this rate limiter is. - // Usually we use token bucket rate limiter. In that case, - // 1.0 means no tokens are available; 0.0 means we have a full bucket of tokens to use. - Saturation() float64 // QPS returns QPS of this rate limiter QPS() float32 } type tokenBucketRateLimiter struct { - limiter *ratelimit.Bucket + limiter *rate.Limiter + clock Clock qps float32 } @@ -50,42 +47,48 @@ type tokenBucketRateLimiter struct { // The bucket is initially filled with 'burst' tokens, and refills at a rate of 'qps'. // The maximum number of tokens in the bucket is capped at 'burst'. func NewTokenBucketRateLimiter(qps float32, burst int) RateLimiter { - limiter := ratelimit.NewBucketWithRate(float64(qps), int64(burst)) - return newTokenBucketRateLimiter(limiter, qps) + limiter := rate.NewLimiter(rate.Limit(qps), burst) + return newTokenBucketRateLimiter(limiter, realClock{}, qps) } // An injectable, mockable clock interface. type Clock interface { - ratelimit.Clock + Now() time.Time + Sleep(time.Duration) +} + +type realClock struct{} + +func (realClock) Now() time.Time { + return time.Now() +} +func (realClock) Sleep(d time.Duration) { + time.Sleep(d) } // NewTokenBucketRateLimiterWithClock is identical to NewTokenBucketRateLimiter // but allows an injectable clock, for testing. -func NewTokenBucketRateLimiterWithClock(qps float32, burst int, clock Clock) RateLimiter { - limiter := ratelimit.NewBucketWithRateAndClock(float64(qps), int64(burst), clock) - return newTokenBucketRateLimiter(limiter, qps) +func NewTokenBucketRateLimiterWithClock(qps float32, burst int, c Clock) RateLimiter { + limiter := rate.NewLimiter(rate.Limit(qps), burst) + return newTokenBucketRateLimiter(limiter, c, qps) } -func newTokenBucketRateLimiter(limiter *ratelimit.Bucket, qps float32) RateLimiter { +func newTokenBucketRateLimiter(limiter *rate.Limiter, c Clock, qps float32) RateLimiter { return &tokenBucketRateLimiter{ limiter: limiter, + clock: c, qps: qps, } } func (t *tokenBucketRateLimiter) TryAccept() bool { - return t.limiter.TakeAvailable(1) == 1 -} - -func (t *tokenBucketRateLimiter) Saturation() float64 { - capacity := t.limiter.Capacity() - avail := t.limiter.Available() - return float64(capacity-avail) / float64(capacity) + return t.limiter.AllowN(t.clock.Now(), 1) } // Accept will block until a token becomes available func (t *tokenBucketRateLimiter) Accept() { - t.limiter.Wait(1) + now := t.clock.Now() + t.clock.Sleep(t.limiter.ReserveN(now, 1).DelayFrom(now)) } func (t *tokenBucketRateLimiter) Stop() { @@ -105,10 +108,6 @@ func (t *fakeAlwaysRateLimiter) TryAccept() bool { return true } -func (t *fakeAlwaysRateLimiter) Saturation() float64 { - return 0 -} - func (t *fakeAlwaysRateLimiter) Stop() {} func (t *fakeAlwaysRateLimiter) Accept() {} @@ -131,10 +130,6 @@ func (t *fakeNeverRateLimiter) TryAccept() bool { return false } -func (t *fakeNeverRateLimiter) Saturation() float64 { - return 1 -} - func (t *fakeNeverRateLimiter) Stop() { t.wg.Done() } diff --git a/vendor/k8s.io/client-go/util/flowcontrol/throttle_test.go b/vendor/k8s.io/client-go/util/flowcontrol/throttle_test.go index 642020fe4..99cf64d64 100644 --- a/vendor/k8s.io/client-go/util/flowcontrol/throttle_test.go +++ b/vendor/k8s.io/client-go/util/flowcontrol/throttle_test.go @@ -17,7 +17,6 @@ limitations under the License. package flowcontrol import ( - "math" "sync" "testing" "time" @@ -116,29 +115,6 @@ func TestThrottle(t *testing.T) { } } -func TestRateLimiterSaturation(t *testing.T) { - const e = 0.000001 - tests := []struct { - capacity int - take int - - expectedSaturation float64 - }{ - {1, 1, 1}, - {10, 3, 0.3}, - } - for i, tt := range tests { - rl := NewTokenBucketRateLimiter(1, tt.capacity) - for i := 0; i < tt.take; i++ { - rl.Accept() - } - if math.Abs(rl.Saturation()-tt.expectedSaturation) > e { - t.Fatalf("#%d: Saturation rate difference isn't within tolerable range\n want=%f, get=%f", - i, tt.expectedSaturation, rl.Saturation()) - } - } -} - func TestAlwaysFake(t *testing.T) { rl := NewFakeAlwaysRateLimiter() if !rl.TryAccept() { diff --git a/vendor/k8s.io/client-go/util/integer/BUILD b/vendor/k8s.io/client-go/util/integer/BUILD index 67f050e42..8a2105e46 100644 --- a/vendor/k8s.io/client-go/util/integer/BUILD +++ b/vendor/k8s.io/client-go/util/integer/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["integer_test.go"], - importpath = "k8s.io/client-go/util/integer", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/util/jsonpath/BUILD b/vendor/k8s.io/client-go/util/jsonpath/BUILD index 0856e29ca..ab43accd6 100644 --- a/vendor/k8s.io/client-go/util/jsonpath/BUILD +++ b/vendor/k8s.io/client-go/util/jsonpath/BUILD @@ -12,8 +12,7 @@ go_test( "jsonpath_test.go", "parser_test.go", ], - importpath = "k8s.io/client-go/util/jsonpath", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/util/jsonpath/jsonpath_test.go b/vendor/k8s.io/client-go/util/jsonpath/jsonpath_test.go index c65905322..6c7277d10 100644 --- a/vendor/k8s.io/client-go/util/jsonpath/jsonpath_test.go +++ b/vendor/k8s.io/client-go/util/jsonpath/jsonpath_test.go @@ -190,7 +190,7 @@ func TestStructInput(t *testing.T) { {"nonexistent field", "{.hello}", storeData, "hello is not found", false}, {"invalid array", "{.Labels[0]}", storeData, "map[string]int is not array or slice", false}, {"invalid filter operator", "{.Book[?(@.Price<>10)]}", storeData, "unrecognized filter operator <>", false}, - {"redundent end", "{range .Labels.*}{@}{end}{end}", storeData, "not in range, nothing to end", false}, + {"redundant end", "{range .Labels.*}{@}{end}{end}", storeData, "not in range, nothing to end", false}, } testFailJSONPath(failStoreTests, t) } diff --git a/vendor/k8s.io/client-go/util/retry/BUILD b/vendor/k8s.io/client-go/util/retry/BUILD index 9f6f4b848..d74581310 100644 --- a/vendor/k8s.io/client-go/util/retry/BUILD +++ b/vendor/k8s.io/client-go/util/retry/BUILD @@ -19,8 +19,7 @@ go_library( go_test( name = "go_default_test", srcs = ["util_test.go"], - importpath = "k8s.io/client-go/util/retry", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/vendor/k8s.io/client-go/util/testing/BUILD b/vendor/k8s.io/client-go/util/testing/BUILD index 1280a1ed1..726a30f92 100644 --- a/vendor/k8s.io/client-go/util/testing/BUILD +++ b/vendor/k8s.io/client-go/util/testing/BUILD @@ -9,8 +9,7 @@ load( go_test( name = "go_default_test", srcs = ["fake_handler_test.go"], - importpath = "k8s.io/client-go/util/testing", - library = ":go_default_library", + embed = [":go_default_library"], ) go_library( diff --git a/vendor/k8s.io/client-go/util/workqueue/BUILD b/vendor/k8s.io/client-go/util/workqueue/BUILD index 2abd2f82d..7fb9fba48 100644 --- a/vendor/k8s.io/client-go/util/workqueue/BUILD +++ b/vendor/k8s.io/client-go/util/workqueue/BUILD @@ -13,8 +13,7 @@ go_test( "delaying_queue_test.go", "rate_limitting_queue_test.go", ], - importpath = "k8s.io/client-go/util/workqueue", - library = ":go_default_library", + embed = [":go_default_library"], deps = [ "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", @@ -34,7 +33,7 @@ go_library( ], importpath = "k8s.io/client-go/util/workqueue", deps = [ - "//vendor/github.com/juju/ratelimit:go_default_library", + "//vendor/golang.org/x/time/rate:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", ], @@ -43,7 +42,6 @@ go_library( go_test( name = "go_default_xtest", srcs = ["queue_test.go"], - importpath = "k8s.io/client-go/util/workqueue_test", deps = ["//vendor/k8s.io/client-go/util/workqueue:go_default_library"], ) diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go index 35caed4fa..a5bed29e0 100644 --- a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go +++ b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go @@ -21,7 +21,7 @@ import ( "sync" "time" - "github.com/juju/ratelimit" + "golang.org/x/time/rate" ) type RateLimiter interface { @@ -40,19 +40,19 @@ func DefaultControllerRateLimiter() RateLimiter { return NewMaxOfRateLimiter( NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) - &BucketRateLimiter{Bucket: ratelimit.NewBucketWithRate(float64(10), int64(100))}, + &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)}, ) } // BucketRateLimiter adapts a standard bucket to the workqueue ratelimiter API type BucketRateLimiter struct { - *ratelimit.Bucket + *rate.Limiter } var _ RateLimiter = &BucketRateLimiter{} func (r *BucketRateLimiter) When(item interface{}) time.Duration { - return r.Bucket.Take(1) + return r.Limiter.Reserve().Delay() } func (r *BucketRateLimiter) NumRequeues(item interface{}) int { diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go index 74fefd38b..c62ed32ef 100644 --- a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -89,7 +89,7 @@ type waitFor struct { // waitForPriorityQueue implements a priority queue for waitFor items. // -// waitForPriorityQueue implements heap.Interface. The item occuring next in +// waitForPriorityQueue implements heap.Interface. The item occurring next in // time (i.e., the item with the smallest readyAt) is at the root (index 0). // Peek returns this minimum item at index 0. Pop returns the minimum item after // it has been removed from the queue and placed at index Len()-1 by